Comenzando con PHP

Salida HTML del servidor web

PHP se puede usar para agregar contenido a archivos HTML. Mientras que HTML es procesado directamente por un navegador web, los scripts PHP son ejecutados por un servidor web y el HTML resultante se envía al navegador.

El siguiente marcado HTML contiene una instrucción PHP que agregará Hello World! a la salida:

<!DOCTYPE html>
<html>
    <head>
        <title>PHP!</title>
    </head>
    <body>
        <p><?php echo "Hello world!"; ?></p>
    </body>
</html>

Cuando esto se guarda como un script PHP y lo ejecuta un servidor web, se enviará el siguiente código HTML al navegador del usuario:

<!DOCTYPE html>
<html>
    <head>
        <title>PHP!</title>
    </head>
    <body>
        <p>Hello world!</p>
    </body>
</html>

echo también tiene una sintaxis abreviada, que le permite imprimir inmediatamente un valor. Antes de PHP 5.4.0, esta sintaxis corta solo funciona con la opción de configuración short_open_tag habilitada.

Por ejemplo, considere el siguiente código:

<p><?= "Hello world!" ?></p>

Su salida es idéntica a la salida de lo siguiente:

<p><?php echo "Hello world!"; ?></p>

En las aplicaciones del mundo real, toda la salida de datos de PHP a una página HTML debe tener escapado correctamente para evitar ataques XSS (Cross-site scripting) o daños en el texto.

Ver también: Strings y PSR-1, que describe las mejores prácticas, incluido el uso adecuado de etiquetas cortas (<?= ... ?>).

2: https://www.wikiod.com/es/php/seguridad#Secuencias de comandos entre sitios (XSS) 3: https://www.wikiod.com/es/php/tipos#Instrumentos de cuerda 4: http://www.php-fig.org/psr/psr-1/

¡Hola Mundo!

La construcción de lenguaje más utilizada para imprimir resultados en PHP es echo:

echo "Hello, World!\n";

Alternativamente, también puede usar imprimir:

print "Hello, World!\n";

Ambas declaraciones realizan la misma función, con pequeñas diferencias:

  • echo tiene un retorno void, mientras que print devuelve un int con un valor de 1
  • echo puede tomar múltiples argumentos (solo sin paréntesis), mientras que print solo toma un argumento
  • echo es ligeramente más rápido que print

Tanto echo como print son construcciones del lenguaje, no funciones. Eso significa que no requieren paréntesis alrededor de sus argumentos. Para lograr una coherencia cosmética con las funciones, se pueden incluir paréntesis. Hay muchos ejemplos del uso de echo e print disponibles en otros lugares.

También están disponibles printf de estilo C y funciones relacionadas, como en el siguiente ejemplo:

printf("%s\n", "Hello, World!");

Consulte Salida del valor de una variable para obtener una introducción completa sobre la salida de variables en PHP.

3: https://www.wikiod.com/es/php/salida-del-valor-de-una-variable#eco e impresión 4: https://www.wikiod.com/es/php/salida-del-valor-de-una-variable

Salida no HTML del servidor web

En algunos casos, cuando se trabaja con un servidor web, puede ser necesario anular el tipo de contenido predeterminado del servidor web. Puede haber casos en los que necesite enviar datos como texto sin formato, JSON o XML, por ejemplo.

La función [header()][header] puede enviar un encabezado HTTP sin formato. Puede agregar el encabezado Content-Type para notificar al navegador sobre el contenido que estamos enviando.

Considere el siguiente código, donde configuramos Content-Type como text/plain:

header("Content-Type: text/plain");
echo "Hello World";

Esto producirá un documento de texto sin formato con el siguiente contenido:

Hola Mundo

Para producir contenido JSON, utilice el tipo de contenido application/json en su lugar:

header("Content-Type: application/json");

// Create a PHP data array.
$data = ["response" => "Hello World"];

// json_encode will convert it to a valid JSON string.
echo json_encode($data);

Esto producirá un documento de tipo application/json con el siguiente contenido:

{“respuesta”:“Hola mundo”}

Tenga en cuenta que se debe llamar a la función header() antes de que PHP produzca algún resultado, o el servidor web ya habrá enviado encabezados para la respuesta. Entonces, considere el siguiente código:

// Error: We cannot send any output before the headers
echo "Hello";

// All headers must be sent before ANY PHP output
header("Content-Type: text/plain");
echo "World";

Esto producirá una advertencia:

Advertencia: No se puede modificar la información del encabezado: encabezados ya enviados por (salida iniciada en /dir/example.php:2) en /dir/example.php en la línea 3

Al usar header(), su salida debe ser el primer byte que se envía desde el servidor. Por esta razón, es importante no tener líneas o espacios vacíos al comienzo del archivo antes de la etiqueta de apertura de PHP <?php. Por la misma razón, se considera una buena práctica (ver PSR-2) omitir la etiqueta de cierre de PHP ?> de archivos que contienen solo PHP y de bloques de código PHP al final de un archivo. .

Vea la sección de almacenamiento en búfer de salida para aprender cómo ‘atrapar’ su contenido en una variable para generar más tarde, por ejemplo, después de generar encabezados.

Servidor integrado de PHP

PHP 5.4+ viene con un servidor de desarrollo integrado. Se puede usar para ejecutar aplicaciones sin tener que instalar un servidor HTTP de producción como nginx o Apache. El servidor incorporado solo está diseñado para usarse con fines de desarrollo y prueba.

Se puede iniciar usando el indicador -S:

php -S <host/ip>:<port>

Ejemplo de uso

  1. Cree un archivo index.php que contenga:

  2. Ejecute el comando php -S localhost:8080 desde la línea de comandos. No incluya http://. Esto iniciará un servidor web escuchando en el puerto 8080 utilizando el directorio actual en el que se encuentra como la raíz del documento.

  3. Abra el navegador y vaya a http://localhost:8080. Deberías ver tu página “Hello World”.

Configuración

Para anular la raíz del documento predeterminado (es decir, el directorio actual), use el indicador -t:

php -S <host/ip>:<port> -t <directory>

P.ej. si tiene un directorio public/ en su proyecto, puede servir su proyecto desde ese directorio usando php -S localhost:8080 -t public/.

Registros

Cada vez que se realiza una solicitud desde el servidor de desarrollo, se escribe una entrada de registro como la siguiente en la línea de comando.

[Mon Aug 15 18:20:19 2016] ::1:52455 [200]: /

CLI de PHP

PHP también se puede ejecutar desde la línea de comandos directamente usando la CLI (interfaz de línea de comandos).

CLI es básicamente lo mismo que PHP de servidores web, excepto algunas diferencias en términos de entrada y salida estándar.

Activación

La CLI de PHP permite cuatro formas de ejecutar código PHP:

  1. Entrada estándar. Ejecute el comando php sin ningún argumento, pero canalice el código PHP:
    echo ‘<?php echo “¡Hola mundo!”;’ | php
  2. Nombre de archivo como argumento. Ejecute el comando php con el nombre de un archivo fuente PHP como primer argumento:
    php hello_world.php
  3. Código como argumento. Use la opción -r en el comando php, seguido del código para ejecutar. Las etiquetas abiertas <?php no son necesarias, ya que todo en el argumento se considera como código PHP:
    php -r ’echo “¡Hola mundo!”;’
  4. Concha interactiva. Use la opción -a en el comando php para iniciar un shell interactivo. Luego, escriba (o pegue) el código PHP y presione return:
    $ php -a
    Modo interactivo habilitado
    php > echo “¡Hola mundo!”;
    ¡Hola mundo!

Producción

Todas las funciones o controles que producen una salida HTML en el servidor web PHP se pueden usar para producir una salida en la secuencia estándar (descriptor de archivo 1), y todas las acciones que producen una salida en los registros de errores en el servidor web PHP producirán una salida en la secuencia estándar (archivo descriptor 2).

Ejemplo.php

<?php
echo "Stdout 1\n";
trigger_error("Stderr 2\n");
print_r("Stdout 3\n");
fwrite(STDERR, "Stderr 4\n");
throw new RuntimeException("Stderr 5\n");
?>
Stdout 6

Línea de comando de shell

$ php Example.php 2>stderr.log >stdout.log;\
> echo STDOUT; cat stdout.log; echo;\
> echo STDERR; cat stderr.log\

STDOUT
Stdout 1
Stdout 3

STDERR
Stderr 4
PHP Notice:  Stderr 2
 in /Example.php on line 3
PHP Fatal error:  Uncaught RuntimeException: Stderr 5
 in /Example.php:6
Stack trace:
#0 {main}
  thrown in /Example.php on line 6

Aporte

Consulte: Interfaz de línea de comandos (CLI)

Separación de instrucciones

Al igual que la mayoría de los otros lenguajes de estilo C, cada declaración termina con un punto y coma. Además, se usa una etiqueta de cierre para terminar la última línea de código del bloque PHP.

Si la última línea de código PHP termina con un punto y coma, la etiqueta de cierre es opcional si no hay ningún código después de esa última línea de código. Por ejemplo, podemos omitir la etiqueta de cierre después de echo "Sin error"; en el siguiente ejemplo:

<?php echo "No error"; // no closing tag is needed as long as there is no code below

Sin embargo, si hay algún otro código después de su bloque de código PHP, la etiqueta de cierre ya no es opcional:

<?php echo "This will cause an error if you leave out the closing tag"; ?>
<html>
    <body>
    </body>
</html>

También podemos omitir el punto y coma de la última declaración en un bloque de código PHP si ese bloque de código tiene una etiqueta de cierre:

<?php echo "I hope this helps! :D";
echo "No error" ?>      

En general, se recomienda usar siempre un punto y coma y una etiqueta de cierre para cada bloque de código PHP, excepto el último bloque de código PHP, si no hay más código después de ese bloque de código PHP.

Entonces, su código básicamente debería verse así:

<?php
    echo "Here we use a semicolon!";
    echo "Here as well!";
    echo "Here as well!";
    echo "Here we use a semicolon and a closing tag because more code follows";
?>
<p>Some HTML code goes here</p>
<?php
    echo "Here we use a semicolon!";
    echo "Here as well!";
    echo "Here as well!";
    echo "Here we use a semicolon and a closing tag because more code follows";
?>
<p>Some HTML code goes here</p>
<?php
    echo "Here we use a semicolon!";
    echo "Here as well!";
    echo "Here as well!";
    echo "Here we use a semicolon but leave out the closing tag";

Etiquetas PHP

Hay tres tipos de etiquetas para indicar bloques PHP en un archivo. El analizador de PHP busca las etiquetas de apertura y (si las hay) de cierre para delimitar el código a interpretar.

Etiquetas estándar

Estas etiquetas son el método estándar para incrustar código PHP en un archivo.

<?php
    echo "Hello World";
?>

Etiquetas de eco

Estas etiquetas están disponibles en todas las versiones de PHP y, desde PHP 5.4, siempre están habilitadas. En versiones anteriores, las etiquetas de eco solo se podían habilitar junto con etiquetas cortas.

<?= "Hello World" ?>

Etiquetas cortas

Puede deshabilitar o habilitar estas etiquetas con la opción short_open_tag.

<?
    echo "Hello World";
?>

Etiquetas cortas:

  • no están permitidos en los principales [estándares de codificación] de PHP1
  • se desaconsejan en la documentación oficial
  • están deshabilitados por defecto en la mayoría de las distribuciones
  • interfiere con las instrucciones de procesamiento de XML en línea
  • no son aceptados en envíos de código por la mayoría de los proyectos de código abierto

Etiquetas ASP

Al habilitar la opción asp_tags, se pueden usar etiquetas de estilo ASP.

<%
    echo "Hello World";
%>

Estas son una peculiaridad histórica y nunca deben usarse. Fueron eliminados en PHP 7.0.