MANUAL DE PHP

(y algo mas)windsurf pozo izquierdo
Google
search for in the  
ELMARRAJO.COM mysql bulma desarrollo web linux fedora html ayuda

windsurf mercedes camper

Capítulo 55. Uso de PHP

Esta sección reúne varios errores comunes que usted puede enfrentar cuando escribe scripts PHP.

1. Quisiera escribir un script PHP genérico que pudiera manejar datos que lleguen desde cualquier formulario. ¿Cómo averiguo qué variables del método POST se encuentran disponibles?
2. Necesito convertir todas las comillas sencillas (') en una barra invertida seguida de una comilla sencilla (\'). ¿Cómo puedo hacer esto con una expresión regular? También me gustaría convertir " en \" y \ en \\.
3. Todos mis caracteres " se convierten en \" y mis ' se convierten en \', ¿cómo me deshago de todas esas barras invertidas indeseadas? ¿Cómo y porqué llegaron allí?
4. Cuando hago lo siguiente, la salida se imprime en el orden equivocado:
<?php
function mi_funcion($argumento)
{
   echo
$argumento + 10;
}
$variable = 10;
echo
"mi_funcion($variable) = " . mi_funcion($variable);
?>
¿qué sucede?
5. ¿Hey, qué ha sucedido con mis saltos de línea?
<pre>
<?php echo "Esta debe ser la primera l&iacute;nea."; ?>
<?php
echo "Esto debe aparecer despu&eacute;s de la nueva l&iacute;nea anterior."; ?>
</pre>
6. Recibo el mensaje 'Warning: Cannot send session cookie - headers already sent...' o 'Cannot add header information - headers already sent...'.
7. Necesito acceder a información directamente de las cabeceras de la petición. ¿Cómo puedo hacer esto?
8. Cuando intento usar autenticación con IIS, recibo el mensaje 'No Input file specified'.
9. Windows: No puedo acceder a archivos compartidos en otra computadora usando IIS
10. Mi script PHP funciona en IE y Lynx, pero en Netscape parte de mi salida está faltando. Cuando acciono "Ver código fuente" veo el contenido en IE pero no en Netscape.
11. ¿Cómo se supone que mezcle XML y PHP? ¡Se queja sobre mis etiquetas <?xml!
12. ¿Cómo puedo usar PHP con FrontPage u otro editor HTML que insiste en mover mi código por todas partes?
13. ¿En dónde puedo encontrar una lista completa de variables disponibles en PHP?
14. ¿Cómo puedo generar archivos PDF sin usar las bibliotecas no-libres y comerciales ClibPDF y PDFLib? Quisiera algo que fuera gratuito y no requiera de bibliotecas PDF externas.
15. Estoy tratando de acceder a una de las variables CGI estándar (como $DOCUMENT_ROOT o $HTTP_REFERER) en una función definida por el usuario, y parece que no la encuentra. ¿Qué está fallando?
16. Algunas directivas de PHP pueden recibir también atajos de valores de bytes, en lugar de recibir sólamente valores de bytes tipo integer. ¿Cuáles son todas las opciones de atajos de valores de byte disponibles? ¿Y puedo usarlos por fuera de php.ini?

1. Quisiera escribir un script PHP genérico que pudiera manejar datos que lleguen desde cualquier formulario. ¿Cómo averiguo qué variables del método POST se encuentran disponibles?

PHP ofrece numerosas variables predefinidas, como la super-global $_POST. Usted podría recorrer $_POST con un ciclo ya que se trata de una matriz asociativa con todos los valores POST. Por ejemplo, puede recorrer la matriz simplemente con foreach, realizar un chequeo por valores empty(), e imprimirlos.
<?php
$vacio
= $post = array();
foreach (
$_POST as $nombre_var => $valor_var) {
   if (empty(
$valor_var)) {
      
$vacio[$nombre_var] = $valor_var;
   } else {
      
$post[$nombre_var] = $valor_var;
   }
}

print
"<pre>";
if (empty(
$vacio)) {
   print
"Ninguno de los valores POST est&aacute;n vac&iacute;os, se envi&oacute;:\n";
  
var_dump($post);
} else {
   print
"Tenemos " . count($vacio) . " valores vac&iacute;os\n";
   print
"Se envi&oacute;:\n"; var_dump($post);
   print
"Vac&iacute;os:\n"var_dump($vacio);
   exit;
}
?>

Superglobals: Nota de disponibilidad: Desde 4.1.0, están disponibles algunas matrices superglobales tales como $_GET, $_POST, y $_SERVER, etc. Para más información puede consultar la sección superglobals

2. Necesito convertir todas las comillas sencillas (') en una barra invertida seguida de una comilla sencilla (\'). ¿Cómo puedo hacer esto con una expresión regular? También me gustaría convertir " en \" y \ en \\.

La función addslashes() hace esto. Vea también mysql_escape_string(). También puede remover las barras invertidas con stripslashes().

Nota de directiva: magic_quotes_gpc: La directiva PHP magic_quotes_gpc tiene por defecto el valor on. Básicamente ejecuta addslashes() en los datos obtenidos por GET, POST, y COOKIE. Se puede usar stripslashes() para quitarlos.

3. Todos mis caracteres " se convierten en \" y mis ' se convierten en \', ¿cómo me deshago de todas esas barras invertidas indeseadas? ¿Cómo y porqué llegaron allí?

La función de PHP stripslashes() eliminará todas esas barras invertidas de su variable string. Lo más posible es que esas barras invertidas existen mágicamente por que la directiva de PHP magic_quotes_gpc está activa.

Nota de directiva: magic_quotes_gpc: La directiva PHP magic_quotes_gpc tiene por defecto el valor on. Básicamente ejecuta addslashes() en los datos obtenidos por GET, POST, y COOKIE. Se puede usar stripslashes() para quitarlos.

4. Cuando hago lo siguiente, la salida se imprime en el orden equivocado:
<?php
function mi_funcion($argumento)
{
   echo
$argumento + 10;
}
$variable = 10;
echo
"mi_funcion($variable) = " . mi_funcion($variable);
?>
¿qué sucede?

Para poder usar los resultados de su función en una expresión (como ocurre al concatenar con otras cadenas, como en el ejemplo anterior), necesita devolver el valor mediante return(), no imprimirlo con echo().

5. ¿Hey, qué ha sucedido con mis saltos de línea?
<pre>
<?php echo "Esta debe ser la primera l&iacute;nea."; ?>
<?php
echo "Esto debe aparecer despu&eacute;s de la nueva l&iacute;nea anterior."; ?>
</pre>

En PHP, el final de un bloque de código es, o bien "?>" o "?>\n" (en donde \n quiere decir una nueva línea). De modo que en el ejemplo anterior, las sentencias impresas con echo estarán en una línea, puesto que PHP omite los saltos de línea después del final del bloque. Esto quiere decir que usted necesita insertar un salto de línea extra después de cada bloque de código PHP para hacer que imprima una nueva línea.

¿Porqué hace esto PHP? Por que al dar formato a un documento HTML normal, este comportamiento por lo general hace su vida más simple, ya que no desea ese salto de línea, pero tendría que crear líneas extremadamente largas o de otra forma hacer ilegible el código fuente base para lograr ese efecto.

6. Recibo el mensaje 'Warning: Cannot send session cookie - headers already sent...' o 'Cannot add header information - headers already sent...'.

Las funciones header(), setcookie(), y las funciones de sesión necesitan agregar cabeceras a la secuencia de salida, pero las cabeceras sólo pueden ser enviadas antes del resto del contenido. No puede haber salida antes de usar éstas funciones, salida como HTML. La función headers_sent() revisa si su script ya ha enviado las cabeceras, y asimismo consulte las funciones de Control de Salida.

7. Necesito acceder a información directamente de las cabeceras de la petición. ¿Cómo puedo hacer esto?

La función getallheaders() hará esto si está ejecutando PHP como módulo de Apache. Así que, el siguiente segmento de código le mostrará todas las cabeceras de petición:
<?php
$cabeceras
= getallheaders();
foreach (
$cabeceras as $nombre => $contenido) {
   echo
"cabeceras[$nombre] = $contenido<br />\n";
}
?>

Vea también apache_lookup_uri(), apache_response_headers(), y fsockopen()

8. Cuando intento usar autenticación con IIS, recibo el mensaje 'No Input file specified'.

El modelo de seguridad de IIS es la causa del problema aquí. Este es un inconveniente común a todos los programas CGI que corren bajo IIS. Una forma de evitar el problema es crear un archivo HTML plano (no interpretado por PHP) como página de entrada en un directorio autenticado. Luego usar una etiqueta META para redirigir a la página PHP, o tener un enlace hacia la página PHP. PHP reconocerá entonces la autenticación correctamente. Con el módulo ISAPI, esto no es un problema. Este inconveniente no debe afectar otros servidores web NT. Para más información, vea: http://support.microsoft.com/kb/q160422/ y la sección del manual sobre Autenticación HTTP.

9. Windows: No puedo acceder a archivos compartidos en otra computadora usando IIS

Necesita modificar el valor Go to Internet Information Services. Ubique su archivo PHP y diríjase a sus propiedades. Vaya a la pestaña Seguridad de Archivo, Editar -< Acceso anónimo y control de autenticación.

Puede solucionar el problema ya sea deshabilitando Acceso Anónimo y dejando habilitado Autenticación Integrada, o habilitando Acceso Anónimo y editando el usuario ya que éste puede no tener el acceso bien definido.

10. Mi script PHP funciona en IE y Lynx, pero en Netscape parte de mi salida está faltando. Cuando acciono "Ver código fuente" veo el contenido en IE pero no en Netscape.

Netscape es más estricto que IE en cuanto a etiquetas HTML (como tablas) se refiere. Pasar su salida HTML a través de un validador de HTML, como validator.w3.org, puede ser de ayuda. Por ejemplo, una etiqueta </table> faltante puede ser la causa de éste problema.

Asimismo, tanto IE como Lynx ignoran los caracteres NUL (\0) en la secuencia HTML, mientras que Netscape no. La mejor manera de chequear esto es compilar la versión de línea de comandos de PHP (también conocida como la versión CGI) y ejecutar su script desde la línea de comandos. En *nix, envíe la salida a través de un pipe a od -c y busque caracteres \0. Si se encuentra en Windows necesita un editor o algún otro programa que le permita ver archivos binarios. Cuando Netscape ve un NUL en un archivo, típicamente no imprimirá nada más en aquella línea, mientras que tanto IE como Lynx si lo hacen.

11. ¿Cómo se supone que mezcle XML y PHP? ¡Se queja sobre mis etiquetas <?xml!

Para poder embeber etiquetas <?xml directamente en su código PHP, tendrá que deshabilitar las etiquetas cortas, definiendo la directiva PHP short_open_tags como 0. No puede definir esta directiva con ini_set(). Independientemente del valor de short_open_tags, usted puede hacer algo como: <?php echo '<?xml'; ?>. El valor predeterminado para esta directiva es on.

12. ¿Cómo puedo usar PHP con FrontPage u otro editor HTML que insiste en mover mi código por todas partes?

Una de las cosas más fáciles es habilitar el uso de etiquetas ASP en su código PHP. Esto le permite usar el estilo de delimitadores de código ASP <% y %>. Algunos de los editores HTML populares gestionan éstas etiquetas de forma más inteligente (por ahora). Para habilitar las etiquetas estilo-ASP, necesita definir la variable php.ini asp_tags, o usar la directiva de Apache apropiada.

13. ¿En dónde puedo encontrar una lista completa de variables disponibles en PHP?

Consulte la página del manual sobre variables predefinidas, ya que allí se incluye una lista parcial de variables predefinidas disponibles para su script. Una lista completa de variables disponibles (y mucha más información) puede ser consultada al llamar la función phpinfo(). Asegúrese de leer la sección del manual sobre variables externas a PHP ya que allí se describen escenarios comunes para variables externas, como las provenientes de formularios HTML, Cookies y URLs.

register_globals: Nota importante: Desde PHP 4.2.0 el valor por defecto de la directiva register_globals es off. La comunidad PHP anima a todos a no confiar en esta directiva y usar en su lugar superglobals.

14. ¿Cómo puedo generar archivos PDF sin usar las bibliotecas no-libres y comerciales ClibPDF y PDFLib? Quisiera algo que fuera gratuito y no requiera de bibliotecas PDF externas.

Existen algunas pocas alternativas escritas en PHP, como http://www.ros.co.nz/pdf/, http://www.fpdf.org/, http://www.gnuvox.com/pdf4php/, y http://www.potentialtech.com/ppl.php. También existe el módulo Panda.

15. Estoy tratando de acceder a una de las variables CGI estándar (como $DOCUMENT_ROOT o $HTTP_REFERER) en una función definida por el usuario, y parece que no la encuentra. ¿Qué está fallando?

Es importante darse cuenta de que la directiva PHP register_globals también afecta a variables de servidor y de entorno. Cuando register_globals = off (el valor predeterminado es off a partir de PHP 4.2.0), $DOCUMENT_ROOT no existirá. En su lugar, use $_SERVER['DOCUMENT_ROOT']. Si register_globals = on entonces las variables $DOCUMENT_ROOT y $GLOBALS['DOCUMENT_ROOT'] existirán también.

Si está seguro de que register_globals = on y se pregunta porqué $DOCUMENT_ROOT no se encuentra disponible al interior de funciones, es porque éste tipo de variables es como cualquier otra, y requeriría de una sentencia global $DOCUMENT_ROOT al interior de la función. Vea también la página del manual sobre los contextos de variables. Es recomendable escribir código bajo el modelo register_globals = off.

Superglobals: Nota de disponibilidad: Desde 4.1.0, están disponibles algunas matrices superglobales tales como $_GET, $_POST, y $_SERVER, etc. Para más información puede consultar la sección superglobals

16. Algunas directivas de PHP pueden recibir también atajos de valores de bytes, en lugar de recibir sólamente valores de bytes tipo integer. ¿Cuáles son todas las opciones de atajos de valores de byte disponibles? ¿Y puedo usarlos por fuera de php.ini?

Las opciones disponibles son K (para Kilobytes), M (para Megabytes) y G (para Gigabytes; disponible desde PHP 5.1.0), las cuales son insensibles a mayúsculas y minúsculas. Cualquier otro valor asume bytes. 1M es igual a un Megabyte o 1048576 bytes. 1K es igual a un Kilobyte o 1024 bytes. No debería usar éstas notaciones cortas por fuera de php.ini, en su lugar use un valor integer de bytes. Vea la documentación de ini_get() para un ejemplo sobre cómo convertir tales valores.



add a note add a note User Contributed Notes
Uso de PHP
oldcheesemonkey at yahoo dot com
19-Jan-2006 12:54
In reference to faq.using:
6.  I get the message 'Warning: Cannot send session cookie - headers already sent...' or 'Cannot add header information - headers already sent...'.

This can be caused by starting a session and then calling a class function in a php file that has any whitespace either before the very first or after the very last php tags <?php  and ?>.
Make sure there is NO whitespace before the initial tag and after the closing tag.

Citas célebres

Qué inapropiado llamar Tierra a este planeta, cuando es evidente que debería llamarse Océano.

Arthur Clarke
Escritor británico
(n. 1914)
Citas en tu mail
©Contenidos Gratis

Ilusiones Opticas
ilusion_optica_027.jpg
Contenidos Web

Chiste de... Parejas
Hablar de matrimonio

Dos amigas están hablando:

- Pues ya he conseguido que mi novio me hable de matrimonio después de haber estado saliendo seis años.

- ¿Si? ¿Y qué te ha dicho?

- Que tiene esposa y tres niños.
Chistes en tu mail
©ContenidosGratis

Humor Gráfico
humor_grafico_057.jpg
Contenidos Web

Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos
Cake ManiaCake Mania
Jugadores: 6835
Categoría del juego: Acción
Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero.
Rainbow WebRainbow Web
Jugadores: 2199
Categoría del juego: Puzzles
Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente.
Mahjongg FortunaMahjongg Fortuna
Jugadores: 12462
Categoría del juego: Solitarios
Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta.
Chainz 2Chainz 2
Jugadores: 6955
Categoría del juego: Puzzles
Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más.
DeliciousDelicious
Jugadores: 4405
Categoría del juego: Acción
Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues!
BookwormBookworm
Jugadores: 4568
Categoría del juego: Palabras
Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos!
ZumaZuma
Jugadores: 4976
Categoría del juego: Acción
Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás!
Jewel of AtlantisJewel of Atlantis
Jugadores: 3798
Categoría del juego: Puzzles
Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis.
Jewel QuestJewel Quest
Jugadores: 3727
Categoría del juego: Puzzles
Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos!
Bejeweled 2Bejeweled 2
Jugadores: 3659
Categoría del juego: Puzzles
Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca.
Contenidos gratis en tu webSiguiente >>

Fotos divertidas
fotos_increibles_0044.jpg
Contenidos Web
microrobots avion deportes riesgo recetas cocina canaria juegos online gratis moto motociclismo horoscopos naranjas valencianas surf canarias montañismo ciudades turismo postales gratis library Horoscopos Diarios Windsurf Canarias
fregadero microondas placa electrica bañopreparar camper pantalla plananevera compresor electricacamper fiat ducato camper baño quimicomampara enrollable bañocamper aire climatizadofurgoneta surf windsurffurgoneta surf windsurftelevisor furgonetas camperfurgonetas camper cama

Sudoku del día
Nivel de dificultad: Fácil



Cómo jugar:
El juego consiste en colocar los números del 1 al nueve de tal forma que no se repita el mismo número en la columna, fila y caja (bloques 3x3 enmarcados).

©Contenidos Gratis | Sudoku en tu mail
Sucedió el...

30 de agosto de 1617

Fallece Santa Rosa de Lima, por la que se celebra el "Día de la Patrona de América".
Efemérides en tu mail
©Contenidos Gratis
windsurf canarias youtube porno canarias baleares valencia madrid fallera mayor campus party alcacer feria valencia fernando alonso loterias dinero inversiones violencia de genero makro empresas cartera soledad tolerancia metro valencia gobierno de españa violencia de genero UIMP navidad