Esta sección reúne varios errores que puede encontrar al escribir sus scripts PHP.
PHP reúne cientos de bibliotecas externas y a veces puede parecer desconcertante. Sin embargo, una regla simple para recordar:
Los parámetros relacionados con las funciones de arrays están en el orden "needle, haystack" mientras que los parámetros de las funciones que manejan cadenas son exactamente al revés, "haystack, needle".
PHP proporciona varias variables predefinidas, como la superglobal $_POST. Puede iterar sobre $_POST ya que es un array asociativo de todos los valores enviados por el método POST. Por ejemplo, podemos iterar sobre él simplemente con foreach, verificar los valores vacíos y mostrarlos.
<?php
$empty = $post = array();
foreach ($_POST as $nomvar => $valeurvar) {
if (empty($varvalue)) {
$empty[$nomvar] = $valeurvar;
} else {
$post[$nomvar] = $valeurvar;
}
}
echo '<pre>';
if (empty($empty)) {
print "Ningún valor POST está vacío, valores posteados:\n";
var_dump($post);
} else {
print "Tenemos " . count($empty) . " valores vacíos\n";
print "Posteados :\n"; var_dump($post);
print "Vacíos :\n"; var_dump($empty);
exit;
}
echo '</pre>';
?>
Si asumimos que es para una base de datos, use el mecanismo de escape proporcionado con la base de datos. Por ejemplo, use la función mysql_real_escape_string() con MySQL y pg_escape_string() con PostgreSQL. También hay funciones genéricas como addslashes() y stripslashes(), que son más comunes con el antiguo código PHP.
<?php
function mafonction($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "mafonction($variable) = " . mafonction($variable);
?>
Para poder usar el resultado de su función en una expresión (como concatenarlo con una cadena como en este ejemplo), debe devolver el valor con return, y no imprimirlo con echo.
<pre>
<?php echo "Esta es mi primera línea."; ?>
<?php echo "Esta debería mostrarse debajo de la primera."; ?>
</pre>
En PHP, el final de un bloque de código es "?>" o "?>\n" (donde \n significa una nueva línea). Entonces, en el ejemplo anterior, las frases se mostrarán en una sola línea, porque PHP omite las nuevas líneas después del final del bloque. Esto significa que debe insertar una nueva línea adicional después de cada bloque de código PHP para que se muestre.
¿Por qué PHP hace esto? Porque al formatear HTML, esto le facilita la vida, ya que no desea esa nueva línea, pero debe crear líneas muy largas o hacer que el código fuente de la página sea ilegible para lograr este efecto.
Las funciones header(), setcookie(), y las funciones de sesión deben agregar encabezados al flujo de salida, pero estos solo pueden enviarse antes que el resto del contenido. No debe haber ninguna salida antes de usar estas funciones, como HTML, por ejemplo. La función headers_sent() verificará si su script ya ha enviado encabezados. Vea también las funciones de almacenamiento en búfer de salida.
La función getallheaders() lo hará si está ejecutando PHP como un módulo de Apache. El siguiente código le mostrará todos los encabezados de solicitud:
<?php
$headers = getallheaders();
foreach ($headers as $nom => $contenu) {
echo "headers[$nom] = $contenu<br />\n";
}
?>
Vea también apache_lookup_uri(), apache_response_headers() y fsockopen().
'No Input file specified'
.
El modelo de seguridad de IIS es el culpable. Es un problema común para todos los programas CGI que se ejecutan con IIS. Una alternativa es crear un archivo HTML (no ejecutado por PHP) como página de entrada en el directorio donde se requiere la autenticación. Luego, use una etiqueta META para redirigir a la página PHP, o proporcione un enlace a ella. PHP reconocerá entonces la autenticación correctamente. Esto no debería afectar a otros servidores NT. Para más información, vea: » http://support.microsoft.com/kb/q160422/ y la sección del manual sobre la autenticación HTTP.
Debe modificar el servicio Ir a Servicios de Internet
Information
. Localice su archivo PHP y edite sus propiedades.
Vaya a la pestaña Seguridad del archivo
, Editar -<
Control de acceso anónimo y autenticación
.
Puede resolver este problema desmarcando la casilla Acceso anónimo
y dejando la casilla Autenticación integrada de Windows
marcada, o marcando la casilla Acceso anónimo
y editando el usuario que no debe tener los derechos de acceso.
Para incluir <?xml en su código PHP, deberá desactivar las
etiquetas cortas configurando la directiva PHP
short_open_tags a
0
. No puede cambiar esta directiva con
ini_set(). Ya sea que
short_open_tags esté activado o desactivado, siempre puede hacer esto:
<?php echo '<?xml'; ?>
. El valor predeterminado para esta directiva es On
.
Lea la página del manual que trata sobre las variables predefinidas ya que presenta una lista parcial de las variables predefinidas disponibles en su script. Una lista completa de las variables disponibles (y mucha información) puede verse llamando a la función phpinfo(). Lea la sección del manual que trata sobre las variables no provenientes de PHP, que describe escenarios comunes para las variables externas, como las provenientes de un formulario HTML, una cookie y la URL.
Hay algunas alternativas escritas en PHP como » FPDF y » TCPDF.
Las opciones disponibles son K (para kilobytes) y M (para megabyte) y
G (para gigabyte), y no distinguen entre mayúsculas y minúsculas. Cualquier otra sintaxis se supone que representa bytes.
1M
equivale a un megabyte o 1048576
bytes. 1K
equivale a un kilobyte o
1024
bytes. Estas notaciones abreviadas pueden usarse en el archivo php.ini y en la función ini_set().
Tenga en cuenta que el valor numérico se convierte en int ;
por ejemplo, 0.5M
se interpreta como 0
.
Nota: kilobyte versus kibibyte
La notación PHP describe un kilobyte como igual a 1024 bytes, mientras que el estándar IEC lo considera un kibibyte (kibibyte). En resumen: k y K = 1024 bytes.