Manual de PHP

por:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
2012-05-18
Editado por: Philip Olson
por:
¿Quieres ayudarnos a traducir? ponte en contacto con: yago[arroba]php.net
Traduciendo desde Dic-2009. Estado: 82% completo y al día.
Lista de encargados del mantenimiento y traducción por número de ficheros:
1.Pedro Antonio Gil Rodríguez
2.Yago Ferrer
3.Jesús Ruiz-Ayúcar Vázquez
4.Andrés García
5.Jesús Rafael Cova Huerta
6.Alexander Garzón
y muchos más...

Copyright

Copyright © 1997 - 2012 por el PHP Documentation Group. Este material puede ser distribuido solamente sujeto a los términos y condiciones establecidos por la licencia de Creative Commons Attribution 3.0 o superior. Una copia de la Licencia de Commons Attribution 3.0 está distribuida con este manual. La versión más reciente está disponible en » http://creativecommons.org/licenses/by/3.0/.

Si está interesado en su redistribución o republicación de este documento completa o parcialmente, con o sin modificaciones, y si tiene alguna pregunta, por favor contacte con los propietarios del Copyright en » doc-license@lists.php.net. Observe que esta dirección está ligada a una lista de correo pública.



Manual de PHP


Prefacio

PHP, acrónimo de "PHP: Hypertext Preprocessor", es un lenguaje "Open Source" interpretado de alto nivel, especialmente pensado para desarrollos web y el cual puede ser incrustado en páginas HTML. La mayoría de su sintaxis es similar a C, Java y Perl y es fácil de aprender. La meta de este lenguaje es permitir escribir a los creadores de páginas web, páginas dinámicas de una manera rápida y fácil, aunque se pueda hacer mucho más con PHP.

Este manual contiene principalmente una referencia de funciones PHP, también contiene una referencia del lenguaje, explicaciones de algunas de las características importantes de PHP otra información suplementaria.

Este manual se puede conseguir en diferentes formatos en » http://www.php.net/download-docs.php. Más información sobre como este manual es desarrollado puede encontrarse en el apéndice 'Sobre este manual'. Si está interesado en la Historia de PHP, visite el capítulo correspondiente.

Autores y Contribuyentes

Nosotros destacamos a las personas actualmente más activas al frente del manual, pero hay muchos más contribuyentes que nos ayudan en nuestro trabajo o han brindado una gran cantidad de ayuda al proyecto en el pasado. Hay muchísima gente anónima que ayudó con notas de usuarios en las páginas del manual, que continuamente son incluidos en las referencias, labor de la que también estamos muy agradecidos. Todas las listas a continuación están en orden alfabético.

Autores y Editores

Los siguientes contribuyentes deberían ser reconocidos por el impacto de lo que han hecho y/o continúan haciendo añadiendo contenido al manual: Bill Abt, Jouni Ahto, Alexander Aulbach, Daniel Beckham, Stig Bakken, Nilgün Belma Bugüner, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Peter Cowburn, Daniel Egeberg, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Justin Martin, Rafael Martinez, Rick McGuire, Moacir de Oliveira Miranda Júnior, Kalle Sommer Nielsen, Yasuo Ohgaki, Richard Quadling, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Yannick Torres, Michael Wallner, Lars Torben Wilson, Jim Winstead, Jeroen van Wolffelaar y Andrei Zmievski.

Los siguientes contribuyentes han hecho un importante trabajo editando el manual: Stig Bakken, Gabor Hojtsy, Hartmut Holzgraefe y Egon Schmid.

Mantenedores de las Notas de Usuarios

Los mantenedores actualmente más activos son: Daniel Brown, Nuno Lopes, Felipe Pena, Thiago Pojda y Maciek Sokolewicz.

Estas personas también pusieron mucho esfuerzo en la administración de las notas de usuarios: Mehdi Achour, Daniel Beckham, Friedhelm Betz, Victor Boivie, Jesus M. Castagnetto, Nicolas Chaillan, Ron Chmara, Sean Coates, James Cox, Vincent Gevers, Sara Golemon, Zak Greant, Szabolcs Heilig, Oliver Hinckel, Hartmut Holzgraefe, Etienne Kneuss, Rasmus Lerdorf, Matthew Li, Andrew Lindeman, Aidan Lister, Hannes Magnusson, Maxim Maletsky, Bobby Matthis, James Moore, Philip Olson, Sebastian Picklum, Derick Rethans, Sander Roobol, Damien Seguy, Jason Sheets, Tom Sommer, Jani Taskinen, Yasuo Ohgaki, Jakub Vrana, Lars Torben Wilson, Jim Winstead, Jared Wyles y Jeroen van Wolffelaar.




Conceptos básicos


Introducción

Tabla de contenidos


¿Qué es PHP?

PHP (acrónimo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para desarrollo web y que puede ser incrustado en HTML.

Una respuesta corta y concisa, pero, ¿qué significa realmente? Un ejemplo nos aclarará las cosas:

Ejemplo #1 Un ejemplo introductorio

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php
            
echo "Hola, ¡soy un script PHP!";
        
?>

    </body>
</html>

En lugar de usar muchos comandos para mostar HTML (como en C o Perl), páginas PHP contienen HTML con código incluido en el mismo que hace "algo" (en este caso, mostrar "Hola ¡soy un script PHP!). El código PHP está entre medio de etiquetas de comienzo y final especiales<?php y ?> que nos permitirán entrar y salir del "modo PHP".

Lo que distingue a PHP de algo lado-cliente como Javascript, es que el código es ejecutado en el servidor, generando HTML y enviándolo al cliente. El cliente recibirá los resultados de ejecutar el script, sin ninguna posibilidad de determinar qué código ha producido el resultado recibido. El servidor web puede ser incluso configurado para que procese todos los archivos HTML con PHP y entonces no hay manera que los usuarios puedan saber que tienes debajo de la manga.

Lo mejor de usar PHP es que es extremadamente simple para el principiante, pero a su vez, ofrece muchas características avanzadas para los programadores profesionales. No sienta miedo de leer la larga lista de características de PHP, en poco tiempo podrá empezar a escribir sus primeros scripts.

Aunque el desarrollo de PHP está centrado en programación de scripts en lado-servidor, se puede utilizar para muchas otras cosas. Siga leyendo y descubra más sobre PHP en la sección ¿Qué se puede hacer con PHP? o vaya directo al tutorial de introducción si solamente está interesado en programación web.



¿Qué se puede hacer con PHP?

PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la información de formularios, generar páginas con contenidos dinámicos, o enviar y recibir cookies. Y esto no es todo, se puede hacer mucho más.

Existen principalmente tres campos en los que se usan scripts en PHP.

  • Scripts del lado-servidor. Este es el campo más tradicional y el principal foco de trabajo. Se necesitan tres cosas para que esto funcione. El intérprete PHP (CGI módulo), un servidor web y un navegador. Es necesario hacer funcionar el servidor, con PHP instalado. El resultado del programa PHP se puede obtener a través del navegador, conectándose con el servidor web. Consultar la sección Instrucciones de instalación para más información.
  • Scripts en la línea de comandos. Puede crear un script PHP y correrlo sin necesidad de un servidor web o navegador. Solamente necesita el intérprete PHP para usarlo de esta manera. Este tipo de uso es ideal para scripts ejecutados regularmente desde cron (en *nix o Linux) o el Planificador de tareas (en Windows). Estos scripts también pueden ser usados para tareas simples de procesamiento de texto. Consultar la sección Usos de PHP en la línea de comandos para más información.
  • Escribir aplicaciones de interfaz gráfica. Probablemente PHP no sea el lenguaje más apropiado para escribir aplicaciones gráficas, pero si conoce bien PHP, y quisiera utilizar algunas características avanzadas en programas clientes, puede utilizar PHP-GTK para escribir dichos programas. También es posible escribir aplicaciones independientes de una plataforma. PHP-GTK es una extensión de PHP, no disponible en la distribución principal. Si está interesado en PHP-GTK, puedes visitar las » páginas web del proyecto.

PHP puede ser utilizado en cualquiera de los principales sistemas operativos del mercado, incluyendo Linux, muchas variantes Unix (incluyendo HP-UX, Solaris y OpenBSD), Microsoft Windows, Mac OS X, RISC OS y probablemente alguno más. PHP soporta la mayoría de servidores web de hoy en día, incluyendo Apache, IIS, y muchos otros. Esto incluye cualquier servidor web que pueda utilizar el binario PHP de FastCGI, como lighttpd y nginx. PHP funciona ya sea como un módulo, o como un procesador de CGI.

De modo que, con PHP tiene la libertad de elegir el sistema operativo y el servidor web de su gusto. Además, tiene la posibilidad de utilizar programación por procedimientos, programación orientada a objetos (POO), o una mezcla de ambas.

Con PHP no se encuentra limitado a resultados en HTML. Entre las habilidades de PHP se incluyen: creación de imágenes, archivos PDF e incluso películas Flash (usando libswf y Ming) sobre la marcha. También puede presentar otros resultados, como XHTML y cualquier otro tipo de ficheros XML. PHP puede autogenerar éstos archivos y almacenarlos en el sistema de archivos en vez de presentarlos en la pantalla, creando un caché en el lado-servidor para contenido dinámico.

Una de las características más potentes y destacables de PHP es su soporte para una gran cantidad de bases de datos. Escribir una página web con acceso habilitado a una base de datos es increiblemente simple utilizando una de las extensiones específicas (por ejemplo, para mysql), o utilizar una capa de abstracción como PDO, o conectarse a cualquier base de datos que soporte el estándar de Conexión Abierta a Bases de Datos por medio de la extensión ODBC. Otras bases de datos podrían utilizar cURL o sockets, como lo hace CouchDB.

PHP también cuenta con soporte para comunicarse con otros servicios usando protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros. También se pueden crear sockets puros e interactuar usando cualquier otro protocolo. PHP soporta WDDX para el intercambio de datos entre lenguajes de programación en web. Y hablando de interconexión, PHP puede utilizar objetos Java de forma transparente como objetos de PHP.

PHP tiene útiles características de procesamiento de texto, las cuales incluyen las Expresiones Regulares Compatibles de Perl (PCRE), muchas extensiones, y herramientas para el acceso y análisis de documentos XML. PHP estandardiza todas las extensiones XML sobre el fundamento sólido de libxml2, y extiende este conjunto de características añadiendo soporte para SimpleXML, XMLReader y XMLWriter.

Existen otras extensiones interesantes, las cuales están categorizadas alfabéticamente y por categoría. Hay extensiones adicionales PECL que podrían estar documentadas o no dentro del manual de PHP, tal como » XDebug.

Como puede apreciar, esta página no es suficiente para enumerar todas las características y beneficios que PHP ofrece. Consulte las secciones Instalación de PHP y Referencia de las funciones para una explicación de las extensiones mencionadas aquí.




A continuación, nos gustaría mostrate las bases de PHP en un corto y sencillo tutorial. Este documento explica cómo crear páginas web dinámicas con PHP, aunque PHP no solamente es capaz de crear páginas web. Consulte la sección titulada ¿Qué se puede hacer con PHP? para más información.

Las páginas web que usan PHP se tratan igual que páginas HTML comunes y corrientes, y se pueden crear o editar de la misma manera que normalmente crea páginas HTML.


¿Qué necesito?

En este manual asumimos que cuenta con un servidor que soporta PHP y que todos los archivos con la extensión .php son usados por PHP. En la mayoría de servidores, ésta es la extensión que toman los archivos PHP por defecto, pero pregunte al administrador de su servidor para estar seguro. Si su servidor soporta PHP, entonces no necesita hacer nada, solamente crear sus archivos .php y guardarlos en su directorio web y el servidor los analizará por usted. No hay necesidad de compilar nada o instalar otras herramientas. Mírelo de esta manera, los archivos PHP son tan simples como archivos de HTML con el añadido de una nueva familia de etiquetas que permiten todo tipo de cosas. La mayoría de las compañías de hospedaje de páginas web ofrecen el soporte que necesita para usar PHP, pero si por alguna razón ellos no lo hacen, considere leer la sección titulada » Recursos PHP para más información acerca de compañías de hospedaje que soportan PHP.

Digamos que quiere ahorrar preciado ancho de banda y programar en local. En este caso, querrá instalar un servidor web, como » Apache, y por supuesto » PHP. Lo más seguro es que también quiera instalar una base de datos como » MySQL.

Instálelos de forma independientemente o bien puede elegir una manera más sencilla. Nuestro manual contiene Instrucciones de instalación de PHP (asumiendo que tiene algún tipo de servidor web ya configurado). Si tuviera problemas con la instalación, sugerimos que haga sus preguntas en nuestra »  lista de correo de instalación. Si elige la manera más sencilla, entonces » localice paquete pre-configurado para su sistema operativo, incluyendo MacOSX, Linux y Windows. En Linux, quizá encuentra que » rpmfind y » PBone le son de ayuda para encontrar los RPMs. Para encontrar paquetes para Debian quizá quiera visitar » apt-get.



Su primera página con PHP

Comienze por crear un archivo llamado hola.php y póngalo en el "directorio raíz" (DOCUMENT_ROOT) con el siguiente contenido:

Ejemplo #1 Nuestro primer script PHP: hola.php

<html>
 <head>
  <title>Ejemplo PHP</title>
 </head>
 <body>
 <?php echo '<p>Hola Mundo</p>'?> 
 </body>
</html>

Utilice su navegador web para acceder al archivo en su servidor, con la URL terminando en /hola.php. Si está programando localmente este URL será algo como http://localhost/hola.php o http://127.0.0.1/hola.php pero esto depende de la configuración de su servidor web. Si todo está configurado correctamente, el fichero será analizado por PHP y el siguiente contenido aparecerá en su navegador:

<html>
 <head>
  <title>Ejemplo PHP</title>
 </head>
 <body>
 <p>Hola mundo</p>
 </body>
</html>

Este script es extremadamente simple y no es necesario usar PHP para crear una página como esta. Lo único que muestra es: Hola mundo usando la sentencia de PHP echo. El fichero no debe ser ejecutable o especial de ninguna forma. El servidor reconoce que este fichero debe ser interpretado por PHP porque estamos usando la extensión ".php", el cuál está configurado para enviarlo a PHP. Piensa como si fuera un fichero HTML normal el cual tiene una serie de etiquetas especiales disponibles con las que puedes hacer muchas cosas interesantes.

Si ha intentado usar este ejemplo y no produjo ningún resultado, preguntando si deseaba descargar el archivo, o mostró todo el archivo como texto, lo más seguro es que PHP no se encuentra habilitado en su servidor. Pídale a su administrador que active esta función usando el capítulo titulado Instalación en el manual. Si está trabajando localmente, lea también el capítulo dedicado a la instalación para asegurarse de que todo esté configurado apropiadamente. Asegúrese que está accediendo al fichero vía http a través del servidor para mostrar el resultado. Si está abriendo el archivo desde el sistema de archivos, entonces probablemente no estará siendo analizado por PHP. Si el problema persiste no dude en usar alguna de las múltiples opciones de » Soporte de PHP.

El objetivo de este ejemplo es demostrar cómo puede usar el formato especial de las etiquetas PHP. En este ejemplo usamos <?php para indicar el inicio de la etiqueta PHP. Después indicamos la sentencia y abandonamos el modo PHP usando ?>. Puede salir de PHP y regresar cuantas veces lo desee usando este método. Para más información, puede leer la sección en el manual titulada Sintaxis básica de PHP.

Nota: sobre los avances de línea

Los avances de línia tienen poco sentido en HTML, igualmente sigue siendo buena idea hacer que el código HTML se vea limpio y bien, poniendo avances de línea. PHP automáticamente eliminará los avances de línea puestos inmediatamente después de cerrar ?>. Esto puede ser muy útil si pone muchos bloques de PHP o incluye ficheros que contienen PHP que no se supone que deban mostarar nada. Al mismo tiempo, puede resultar un poco confuso. Se puede poner un espacio después de cerrar ?> para forzar el mostrar un espacio y un avance de línea , o se puede poner un avance de línea explícitamente en el último echo o print dentro de tu bloque en PHP.

Nota: acerca de editores de texto

Hay muchos editores de texto y Entornos Integrados de Desarrollo (IDE por sus siglas en Inglés) que puede usar para crear, editar, y organizar archivos PHP. Puede encontrar una lista parcial de éstos en » Lista de editores de PHP. Si desea recomendar un editor, por favor visite la página mencionada anteriormente, y comunique su recomendación a las personas encargadas del mantenimiento para que lo incluyan en la lista. Contar con un editor que resalte la sintaxis de PHP puede ser de mucha ayuda.

Nota: acerca de los procesadores de texto

Los procesadores de texto como StarOffice Writer, Microsoft word y Abiword no son buenas opciones para editar archivos de PHP. Si desea usar uno de éstos programas para probar sus scripts, primero debe asegurarse de guardar el documento en texto sin formato o PHP no será capaz de leer y ejecutar el script.

Nota: acerca del "Bloc de Notas de Windows"

Si escribe sus archivos PHP usando el "Bloc de Notas de Windows", debe asegurarse de que sus archivos sean guardados con la extensión .php (El Bloc de Notas automáticamente añade la extensión .txt a los archivos a menos que tome los siguientes pasos para prevenirlo). Cuando guarde sus archivos y el programa le pregunte qué nombre le desea dar al archivo, use comillas para indicar el nombre (es decir, "hola.php"). Una alternativa es, en la lista de opciones "Archivos de Texto *.txt", seleccionar la opción "Todos los archivos *.*". Aquí puede escribir el nombre del archivo sin las comillas.

Ahora que ha creado un pequeño script de PHP que funciona correctamente, es hora de trabajar con el script de PHP más famoso; vamos a hacer una llamada a la función phpinfo() para obtener información acerca de su sistema y configuración como las variables predefinidas disponibles, los módulos utilizados por PHP, y las diferentes opciones de configuración. Tomemos algo de tiempo para revisar esta información.

Ejemplo #2 Obtener la información del sistema desde PHP

<?php phpinfo(); ?>



Algo útil

Hagamos ahora algo que puede ser más útil. Vamos a comprobar qué clase de navegador está utilizando el usuario. Para hacerlo, vamos a consultar la información que el navegador nos envía como parte de su petición HTTP. Esta información es guardada en una variable. Las variables siempre comienzan con un signo de dólar ("$") en PHP. La variable que vamos a utilizar en esta situación es $_SERVER['HTTP_USER_AGENT'].

Nota:

$_SERVER es una variable especial reservada por PHP que contiene toda la información del servidor web. Es conocida como Superglobal. Consulte el manual en su sección titulada Superglobales para más información. Éstas variables especiales fueron introducidas en la versión » 4.1.0 de PHP. Antes podíamos usar las arrays $HTTP_*_VARS, tales como $HTTP_SERVER_VARS. Aunque éstas han sido marcadas como obsoletas, tales arrays todavía existen. (También puede echar un vistazo a las notas relacionadas con el código antiguo.)

Para mostrar esta variable, se puede simplemente hacer:

Ejemplo #1 Imprimir una variable (Elemento array)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

Un ejemplo del resultado de esta secuencia de comandos sería:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Hay muchos tipos de variables en PHP. En el ejemplo anterior imprimimos un array. Los arrays pueden ser muy útiles.

$_SERVER es simplemente una variable que se encuentra disponible automáticamente en PHP. Puede encontrar una lista en la sección titulada Variables Reservadas del manual, o puede generar una lista completa creando un archivo como el ejemplo de la sección anterior.

Puede usar más de un declaración PHP dentro de una etiqueta PHP, y crear pequeños segmentos de código que pueden hacer más que un único echo. Por ejemplo, si quisiéramos detectar el uso de Internet Explorer, haríamos algo así:

Ejemplo #2 Ejemplo usando estructuras de control y functiones

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Está usando Internet Explorer.<br />';
}
?>

Un ejemplo del resultado de esta secuencia de comandos sería:

Está usando Internet Explorer.<br />

A continuación introduciremos un par de conceptos nuevos. Tenemos una declaración if. Si está familiarizado con la sintaxis básica del lenguaje C, esto se vera lógico, Pero si no entiende C, u otros lenguajes de programación donde encuentra la sintaxis usada anteriormente, probablemente debería conseguir un libro que le introduzca mejor a PHP, y lea los primeros capítulos, o también puede ver la parte del manual titulada Referencia del lenguaje parte del manual.

El segundo concepto que introducimos fue la función llamada strstr(). strstr() es una función integrada de PHP que busca un cadena dentro de otra cadena. En este caso anterior estamos buscando 'MSIE' (llamado aguja) dentro de $_SERVER['HTTP_USER_AGENT'] (llamado pajar). Si la cadena fue encontrada, la función devolverá la posición de la aguja relativa al inicio del pajar. De lo contrario devolverá FALSE. Si no devuelve FALSE, la declaración if se evalúa a TRUE y el código adentro de las llaves {} es ejecutado. De lo contrario, el código no será ejecutado. Tómese la libertad de crear ejemplos similares usando if, else, y otras funciones como strtoupper() y strlen(). Cada página del manual contiene ejemplos que puede usar. Si no está seguro sobre el modo de uso éstas funciones, es recomendable que lea las páginas del manual tituladas Cómo leer una definición de función y la sección relacionada a Funciones en PHP.

Podemos continuar y demostrar cómo puede saltar adentro y afuera del modo PHP en el medio de un bloque de código:

Ejemplo #3 Mezcla de los modos HTML y PHP

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() debe haber devuelto no falso</h3>
<p>Está usando Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() debió devolver algo diferente de falso</h3>
<p>No está usando Internet Explorer</p>
<?php
}
?>

Un ejemplo del resultado de la secuencia de comandos podría ser:

<h3>strpos() debe haber devuelto falso</h3>
<p>Está usando Internet Explorer</p>

En vez de usar una sentencia PHP echo para demostrar algo, saltamos fuera del código PHP y escribimos solamente HTML. Este es un punto muy importante y potente que debemos observar aquí, y es que la fluidez lógica de la secuencia de comandos permanece intacta. Sólamente las partes donde hay bloques HTML serán enviadas al visor dependiendo del resultado que strstr() devuelva. En otras palabras, si la cadena MSIE fue encontrada o no.



Uso de Formularios

Otra de las características más importantes de PHP es que gestiona formularios HTML. El concepto básico que es importante entender es que cualquier elemento de los formularios estará disponible automáticamente en su código PHP. Por favor lea la sección del manual titulada Variables fuera de PHP para más información y ejemplos sobre cómo usar formularios HTML con PHP. Observemos un ejemplo:

Ejemplo #1 Un formulario HTML simple

<form action="accion.php" method="post">
 <p>Su nombre: <input type="text" name="nombre" /></p>
 <p>Su edad: <input type="text" name="edad" /></p>
 <p><input type="submit" /></p>
</form>

No hay nada especial en este formularo, es solamente HTML sin ninguna clase de etiquetas especiales de ningún tipo. Cuando el usuario rellena éste formulario y oprime el botón Submit, una página titulada accion.php es llamada. En este archivo encontrará algo así:

Ejemplo #2 Imprimir información desde nuestro formulario

Hola <?php echo htmlspecialchars($_POST['nombre']); ?>.
Usted tiene <?php echo (int)$_POST['edad']; ?> años de edad.

Un ejemplo del resultado de esta secuencia de comandos puede ser:

Hola José. Usted tiene 22 años de edad.

Aparte de las funciones htmlspecialchars() y (int), debería ser obvio lo que hace el código. htmlspecialchars() se asegura que todos los caracteres que son especiales en html sean codificados adecuadamente de manera que nadie pueda inyectar etiquetas HTML o Javascript en tu página web. El campo edad, como sabemos que es un número, podemos convertirlo en un integer que automáticamente se deshará de cualquier carácter no numérico. También puede hacer lo mismo con PHP con la extensión filter Las variables $_POST['nombre'] y $_POST['edad'] son establecidas automáticamente por PHP. Anteriormente hemos usado la superglobal $_SERVER y ahora estamos apunto de introducirte la superglobal $_POST que contiene todos los datos del POST. Dese cuenta que el método de nuestro formulario es POST. Si usa el método fuera GET entoces los datos del formulario estarían en la superglobal $_GET. en lugar de POST. En su lugar también puedes usar la superglobal $_REQUEST, si no le importa el tipo de datos enviados desde el formulario. Contiene toda la información de GET, POST y COOKIE. Vea también la función import_request_variables().

En PHP, también puede tratar entradas desde formularios XForms; aunque probablemente en un comienzo se sienta a gusto con los formularios de HTML, que están ampliamente respaldados. A pesar de que los XForms no son trabajo de principiantes, es posible que tenga interés en ellos. Si es el caso, en la sección características de la documentación puede encontrarse una pequeña introducción a la manipulación de datos recibidos desde XForms.



Usando código antiguo en nuevas versiones de PHP

Ahora que PHP ha crecido y se ha convertido en un lenguaje popular, hay muchos más repositorios y librerias que contienen código que puede reusar. Los desarrolladores de PHP han tratado en toda medida que sea compatible con versiones anteriores, es decir, si una secuencia de comandos fue escrita para una versión antigua en principio funcionaría (idealmente) sin ningún cambio en una versión reciente de PHP. A la práctica, usualmente algunos cambios son necesarios.

Dos de los cambios mas importantes que afectan el código viejo son:

  • La desaparición de las antiguas arrays $HTTP_*_VARS (que usualmente son usadas como globales al interior de una función o método). Las siguientes variables superglobales que fueron introducidas en la versión » 4.1.0 de PHP. Son: $_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST, y $_SESSION. Las antiguas $HTTP_*_VARS, como $HTTP_POST_VARS, todavía existen. A partir de PHP 5.0.0, las arrays de tipo long variables predefinidas se pueden desactivar con la directiva register_long_arrays .
  • Las variables externas ya no son registradas globalmente de forma automática, por defecto. En otras palabras, a partir de PHP » 4.2.0, la directiva PHP register_globals está off por defecto en php.ini. El método preferido para obtener acceso a éstos valores es por medio de las variables superglobales mencionadas anteriormente. Antiguas secuencias de comandos, libros y tutoriales antiguos puede que asuman que ésta directiva está definida como on. Si es así, puede usar, por ejemplo, $id desde la URL http://www.example.com/foo.php?id=42. Por otra parte, no importa si el valor de la directiva es on u off, $_GET['id'] está siempre disponible.
Para más información relacionada con estos cambios, puede ver la sección sobre variables predefinidas y los enlaces que hay dentro.



¿Y ahora qué?

Con sus nuevos conocimientos debería ser capaz de entender la mayoría del manual y de los diversos scripts de ejemplo disponibles en los archivos. Puede encontrar otros ejemplos en la sección de enlaces de php.net: » http://www.php.net/links.php.

Para ver varias presentaciones que muestra más acerca de lo que puede hacer PHP, visite los diferentes sitios con material relacionado a las conferencias realizadas: » http://talks.php.net/





Instalación y configuración


Consideraciones generales de instalación

Antes de empezar con la instalación, primero necesita saber para qué quiere utilizar PHP. Existen tres campos principales donde se puede utilizar PHP tal y como se describe en la sección: ¿Qué se puede hacer con PHP?

  • Aplicaciones web y sitios web (scripting del lado del servidor)
  • Scripting en la línea de comandos
  • Aplicaciones de escritorio (GUI)

Para la primera forma mencionada, que es la más común, se necesitan tres cosas: PHP, un servidor web y un navegador web. Seguramente ya disponga del navegador web y, dependiendo de la configuración del sistema operativo, quizá ya tenga un servidor web (p.ej. Apache en Linux y MacOS X; IIS en Windows). También puede alquilar espacio web en una empresa. De esta forma, no se necesita instalar nada, solo tiene que escribir los scripts de PHP, subirlos al servidor que alquile y ver los resultados en su navegador.

En caso de configurar el servidor y PHP por su cuenta, existen dos opciones para el modo de conectar PHP con el servidor. Para muchos servidores, PHP tiene un módulo de interfaz directo (también llamado SAPI). Entre estos servidores se incluyen Apache, Microsoft Internet Information Server, Netscape y iPlanet. Muchos otros servidores tienen soporte para ISAPI, el módulo de interfaz de Microsoft (OmniHTTPd por ejemplo). Si PHP no tiene soporte para el módulo de su servidor web, siempre puede usarlo como procesador CGI o FastCGI. Esto significa configurar el servidor para usar el CGI ejecutable de PHP para procesar cada una de las peticiones a ficheros PHP en el servidor.

Si también está interesado en usar PHP bajo la línea de comandos (p.ej. escribir scripts que autogeneran imágenes de forma offline, o procesar ficheros de texto dependiendo de los argumentos que se les pasen), siempre necesitará el ejecutable de línea de comandos. Para más información, lea la sección sobre escribir aplicaciones PHP desde la línea de comandos. En este caso, no se necesita ningún servidor o navegador.

Con PHP también se pueden escribir aplicaciones GUI de escritorio usando la extensión PHP-GTK. Este enfoque no tiene nada que ver con escribir páginas web, ya que no se muestra nada de HTML, pero gestiona ventanas y objetos dentro de ellas. Para más información acerca de PHP-GTK, por favor » visite el sitio dedicado a esta extensión. PHP-GTK no está incluido en la distribución oficial de PHP.

De aquí en adelante, esta sección trata de la configuración de PHP para servidores web sobre Unix y Windows con interfaces de módulo de servidor y ejecutables CGI. También se puede encontrar información sobre ejecutables de línea de comandos en las siguientes secciones.

El código fuente de PHP y las distribuciones binarias para Windows pueden encontrarse en » http://www.php.net/downloads.php. Recomendamos elegir un » sitio alternativo cercano para descargar las distribuciones.



Instalación sobre sistemas Unix

Tabla de contenidos

Esta sección le guiará a través de la configuración general e instalación de PHP sobre sistemas Unix. Asegúrese de investigar cualquier sección específica a su plataforma o servidor web antes de comenzar el proceso.

Tal como el manual lo esboza en la sección Consideraciones generales de instalación, se está tratando principalmente con configuraciones de PHP centradas en web en esta sección, aunque también se cubrirá el preparar PHP para usarse en línea de comando.

Existen varias maneras de instalar PHP para la plataforma Unix, ya sea con un proceso de compilar y configurar, o a través de varios métodos pre-empaquetados. Esta documentación está enfocada principalmente alrededor del proceso de compilar y configurar PHP. Muchos sistemas estilo Unix tienen algún tipo de sistema de instalación de paquetes. Esto puede ayudar en preparar una configuración standard, pero si se requiere tener un conjunto diferente de características (tales como un servidor seguro, o un manejador diferente de base de datos), podría ser necesario construir PHP y/o el servidor web. Si no se está familiarizado con la construcción y el compilado de su propio software, vale la pena revisar para ver si alguien ya ha construido una versión empaquetada de PHP con las características que se necesitan.

Conocimientos y software necesarios para compilar:

  • Habilidades básicas en Unix (ser capaz de operar "make" y un compilador de C)
  • Un compilador ANSI C
  • Un servidor web
  • Cualquier componente específico para módulos (tales como GD, PDF libs, etc.)

Cuando compile directamente de una fuente SVN sources o después de realizar modificaciones usted necesita también:

  • autoconf: 2.13+ (para PHP < 5.4.0), 2.59+ (para PHP >= 5.4.0)
  • automake: 1.4+
  • libtool: 1.4.x+ (excepto 1.4.2)
  • re2c: Versión 0.13.4 o superior
  • flex: Versión 2.5.4 (para PHP <= 5.2)
  • bison: Versión 1.28 (preferido), 1.35, o 1.75

El proceso inicial de preparación y configuración de PHP es controlado por el uso de las opciones de línea de comando del script configure. Es posible obtener una lista de todas las opciones disponibles junto con una descripción corta ejecutando ./configure --help. El manual documenta las diferentes opciones por separado. Se encontrarán las opciones principales en el apéndice, mientras que las diferentes opciones específicas de las extensiones se describen en las páginas de referencia.

Cuando PHP está configurado, se está listo para compilar el módulo y/o ejecutables. El comando make debería hacerse cargo de esto. Si falla y no se puede encontrar el porque, véase la sección de problemas.


Apache 1.3.x sobre sistemas Unix

Esta sección contiene notas y consejos específicos a instalaciones Apache de PHP sobre plataformas Unix. También se tienen instrucciones y notas para Apache 2 en una página por separado.

Se pueden seleccionar argumentos para agregar a configure en la línea 10 debajo de la lista de opciones principales de configure y de opciones específicas a extensiones descritas en sus respectivos lugares en el manual. Los números de versión han sido omitidos aquí, para asegurar que las instrucciones no sean incorrectas. Se necesita reemplazar las 'xxx' aquí con los valores correctos de los ficheros.

Ejemplo #1 Instrucciones de instalación (Versión de módulo compartido de Apache) para PHP

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/www --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx

10. Ahora, se configura PHP.  Aquí es donde se personaliza PHP
    con varias opciones, como cuales extensiones se habilitarán.  Realizar un
    ./configure --help para obtener una lista de opciones disponibles.  En el ejemplo
    se realiza un configure simple con soporte para Apache 1 y MySQL.  La
    ruta de acceso a apxs puede diferir del ejemplo.

      ./configure --with-mysql --with-apxs=/www/bin/apxs

11. make
12. make install

    Si se decide cambiar las opciones de configure después de la instalación,
    solamente se necesita repetir los últimos tres pasos. Sólo hace falta
    reiniciar apache para que el nuevo módulo tenga efecto. Una recompilación de 
    Apache no es necesaria.
  
    Nótese que a menos que se mencione lo contrario, 'make install' también instalará PEAR,
    varias herramientas de PHP tales como phpize, instalará la línea de comando (CLI) de PHP, y más.

13. Preparar el fichero php.ini:

      cp php.ini-development /usr/local/lib/php.ini

    Se puede editar el fichero .ini para fijar las opciones de PHP.  Si se prefiere
    php.ini en otra ubicación, utilice --with-config-file-path=/some/path en
    el paso 10. 
    
    Si en vez de ello se elige php.ini-production, asegurarse de leer la lista
    de cambios en el interior, ya que éstos afectan como se comporta PHP.

14. Editar httpd.conf para cargar el módulo de PHP.  La ruta de acceso al lado derecho
    de el enunciado LoadModule debe apuntar a la ruta del módulo de PHP
    en su sistema.  El make install anterior podría haber agregado esto ya
    por usted, pero asegúrese de revisarlo.

      LoadModule php5_module libexec/libphp5.so

15. Y en la sección AddModule de httpd.conf, en algún lugar por debajo de
    ClearModuleList, agregar esto:
    
      AddModule mod_php5.c

16. Indicar a Apache que procese ciertas extensiones como PHP.  Por ejemplo,
    hacer que Apache procese la extensión .php como PHP.  Se podría
    hacer que cualquier extensión o extensiones sean procesadas como PHP simplemente añadiendo más, con
    cada una separada por un espacio.  Se agregará .phtml para demostrarlo.

      AddType application/x-httpd-php .php .phtml

    También es común configurar la extensión .phps para mostrar fuentes resaltadas de PHP,
    ésto puede hacerse con:
    
      AddType application/x-httpd-php-source .phps

17. Utilice el procedimiento normal para iniciar el servidor Apache. (Se debe
    detener y reiniciar el servidor, no sólo causar que el servidor recargue utilizando
    una señal HUP o USR1.)

Alternativamente, para instalar PHP como un objeto estático:

Ejemplo #2 Instrucciones de instalación (Instalación de módulo estático para Apache) para PHP

1.  gunzip -c apache_1.3.x.tar.gz | tar xf -
2.  cd apache_1.3.x
3.  ./configure
4.  cd ..

5.  gunzip -c php-5.x.y.tar.gz | tar xf -
6.  cd php-5.x.y
7.  ./configure --with-mysql --with-apache=../apache_1.3.x
8.  make
9.  make install

10. cd ../apache_1.3.x

11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a
    (¡La línea anterior es correcta! Sí, ya se sabe que libphp5.a aún no existe en esta
    etapa. No se supone que deba. Será creado.)

12. make
    (ahora se debe tener un binario httpd que puede ser copiado al directorio bin de Apache si
    esta es la primera instalación entonces se necesita dar "make install" también)

13. cd ../php-5.x.y
14. cp php.ini-development /usr/local/lib/php.ini

15. Se puede editar el fichero /usr/local/lib/php.ini para fijar las opciones de PHP.
    Editar el fichero httpd.conf o srm.conf y añadir:
    AddType application/x-httpd-php .php

Dependiendo de la instalación de Apache y la variante de Unix, hay muchas maneras posibles de detener y reiniciar el servidor. Abajo hay algunas líneas típicas utilizadas para reiniciar el servidor, para diferentes instalaciones apache/unix. Se debe reemplazar /path/to/ con la trayectoria a estas aplicaciones en el sistema.

Ejemplo #3 Comandos de ejemplo para reiniciar Apache

1. Diferentes variantes de Linux y SysV:
/etc/rc.d/init.d/httpd restart

2. Utilizando scripts apachectl:
/path/to/apachectl stop
/path/to/apachectl start

3. httpdctl y httpsdctl (Utilizando OpenSSL), similar a apachectl:
/path/to/httpsdctl stop
/path/to/httpsdctl start

4. Usando mod_ssl, u otro servidor SSL, que se quiera detener e iniciar
manualmente:
/path/to/apachectl stop
/path/to/apachectl startssl

Las ubicaciones de los binarios apachectl y http(s)dctl varían frecuentemente. Si el sistema tiene los comandos locate o whereis o which, éstos pueden ayudar en encontrar los programas de control del servidor.

Distintos ejemplos de compilaciones de PHP para apache son como sigue:

./configure --with-apxs --with-pgsql

Esto creará una librería compartida libphp5.so que se carga en Apache utilizando una línea LoadModule en el fichero de Apache httpd.conf. El soporte para PostgreSQL está incluido dentro de esta librería.

./configure --with-apxs --with-pgsql=shared

Esto creará una librería compartida libphp5.so para Apache, pero también creará una librería compartida pgsql.so que se carga en PHP ya sea usando la directiva de extensión en el fichero php.ini o cargándola explícitamente en un script utilizando la función dl().

./configure --with-apache=/path/to/apache_source --with-pgsql

Esto creará una librería libmodphp5.a, un mod_php5.c y algunos ficheros acompañantes y cópiese estos dentro del directorio src/modules/php5 en el árbol de fuentes de Apache. Entonces se compila Apache utilizando --activate-module=src/modules/php5/libphp5.a y el sistema de compilación de Apache creará libphp5.a y lo enlazará estáticamente dentro del binario httpd. El soporte para PostgreSQL se incluye directamente dentro de este binario httpd, así que el resultado final aquí es un binario httpd sencillo que incluye todo Apache y todo PHP.

./configure --with-apache=/path/to/apache_source --with-pgsql=shared

Igual que en el anterior, excepto que en vez de incluir soporte para PostgreSQL directamente en el httpd final se obtiene una librería compartida pgsql.so que puede cargarse dentro de PHP desde ya sea el fichero php.ini o directamente utilizando dl().

Cuando se elige compilar PHP de diferentes maneras, se deben considerar las ventajas y desventajas de cada método. Compilar como objeto compartido significará que se puede compilar apache por separado, y no se tiene que recompilar todo cuando se agrega o se cambia algo en PHP. Compilar PHP dentro de apache (método estático) significa que PHP cargará y ejecutará más rápido. Para más información, ver la » página web de Apache sobre soporte DSO.

Nota:

El httpd.conf por omisión de Apache actualmente se distribuye con una sección que se parece a esto:

User nobody
Group "#-1"
A menos que se cambie esto a "Group nogroup" o algo como esto ("Group daemon" es también muy común) PHP no será capaz de abrir ficheros.

Nota:

Asegúrese de que se especifica la versión instalada de apxs cuando se utiliza --with-apxs=/path/to/apxs . NO se debe utilizar la versión de apxs que está en las fuentes de apache, si no la que en realidad está instalada en el sistema.



Apache 2.x sobre sistemas Unix

Esta sección contiene notas y consejos específicos a las instalaciones de Apache 2.x de PHP sobre sistemas Unix.

Advertencia

No se recomienda utilizar un MPM threaded en producción con Apache 2. Use MPM prefork, que es el MPM por defecto en Apache 2.0 y 2.2. Para información sobre cómo, lea la correspondiente entrada de la FAQ sobre utilizar Apache2 con un MPM threaded

La » Documentación de Apache es la fuente de información más autorizada acerca del servidor Apache 2.x. Ahí se puede encontrar más información acerca de las opciones de instalación.

La versión más reciente de Apache HTTP Server puede obtenerse del » Sitio de descargas de Apache, y una versión apropiada de PHP de los lugares anteriormente mencionados. Esta guía rápida solamente cubre lo básico para comenzar con Apache 2.x y PHP. Para obtener más información lea la » Documentación de Apache. Los números de versión han sido omitidos aquí, para asegurar que las instrucciones no sean incorrectas. En los ejemplos siguientes, 'NN' deberá ser reemplazado con la versión específica de Apache que se está utilizando.

Existen actualmente dos versiones de Apache 2.x - está la 2.0 y la 2.2. Mientras que existen varias razones para elegir cada una, la 2.2 es actualmente la versión más reciente, y la que se recomienda, si es que esa opción está disponible. Sin embargo, las instrucciones aquí funcionarán ya sea para 2.0 ó 2.2.

  1. Obténgase el servidor HTTP Apache de la ubicación listada con anterioridad, y desempáquese:

    gzip -d httpd-2_x_NN.tar.gz
    tar -xf httpd-2_x_NN.tar
    
  2. De la misma manera, obtener y desempacar las fuentes de PHP:

    gunzip php-NN.tar.gz
    tar -xf php-NN.tar
    
  3. Compilar e instalar Apache. Consúltese la documentación de instalación de Apache para mayores detalles sobre la compilación de Apache.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Ahora se tiene Apache 2.x.NN disponible debajo de /usr/local/apache2, configurado con soporte para módulos cargables y con el MPM (Módulo de multiproceso) prefork estándar. Para probar la instalación úsese el procedimiento para iniciar el servidor Apache, por ej.:

    /usr/local/apache2/bin/apachectl start
    
    y deténgase el servidor para proceder con la configuración para PHP:
    /usr/local/apache2/bin/apachectl stop
    

  5. Ahora, configure y compile PHP. Aquí es donde se personaliza PHP con varias opciones, como qué extensiones se han de habilitar. Ejecute ./configure --help para obtener una lista de opciones disponibles. En el ejemplo se realiza un simple configure con soporte para Apache 2 y MySQL.

    Si se compila Apache a partir de los fuentes, tal como se describe anteriormente, el siguiente ejemplo coincidirá con la trayectoria para apxs, pero si se ha instalado Apache de alguna otra manera, será necesario ajustar la trayectoria a apxs apropiadamente. Nótese que algunas distribuciones pueden renombrar apxs cómo apxs2.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
    make
    make install
    

    Si se decide a cambiar las opciones de configuración después de la instalación, se deben volver a ejecutar los pasos configure, make, y make install. Solamente se necesita reiniciar apache para que el nuevo módulo tenga efecto. Una recompilación de Apache no es necesaria.

    Nótese que a menos que se indique lo contrario, 'make install' también instalará PEAR, varias herramientas de PHP tales como phpize, instalará la interfaz de línea de comando (CLI) de PHP, y más.

  6. Configurar php.ini

    cp php.ini-development /usr/local/lib/php.ini
    

    Se puede editar el fichero .ini para fijar las opciones de PHP. Si se prefiere tener php.ini en otra ubicación, utilice --with-config-file-path=/alguna/trayectoria en el paso 5.

    Si en vez de eso se elige php.ini-production, asegúrese de leer la lista de cambios al interior, ya que afectan como se comporta PHP.

  7. Edítese httpd.conf para cargar el módulo PHP. La trayectoria a la derecha de la sentencia LoadModule debe apuntar a la trayectoria del módulo PHP en el sistema. El make install anterior podría ya haber agregado esto automáticamente, pero asegúrese de revisar.

    LoadModule php5_module modules/libphp5.so
  8. Indicar a Apache que procese ciertas extensiones como PHP. Por ejemplo, hágase que Apache procese ficheros .php como PHP. En vez de solamente utilizar la directiva de Apache AddType, se desea evitar subidas de ficheros potencialmente peligrosas y que ficheros creados tal como exploit.php.jpg sean ejecutados como PHP. Utilizando este ejemplo, se puede hacer que cualquier extensión o extensiones sean procesadas como PHP simplemente añadiéndolas. Se agregará .php para demostrarlo.

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    O, si se deseara permitir que ficheros .php, .php2, .php3, .php4, .php5, .php6, y .phtml fuesen ejecutados como PHP, pero nada más, se utilizaría esto:

    <FilesMatch "\.ph(p[2-6]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>

    Y para permitir que ficheros .phps sean manejados por el filtro de fuentes de php, y desplegado como código fuente con sintaxis resaltada, se utiliza esto:

    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>

    mod_rewrite puede ser utilizado para permitir que cualquier fichero .php arbitrario sea desplegado como código fuente con sintaxis resaltada, sin tener que renombrarlo o copiarlo a un fichero .phps:

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    El filtro de código fuente php no debe habilitarse en sistemas de producción, donde podría exponer información confidencial o de alguna otra manera sensible incluida en código fuente.

  9. Utilícese el procedimiento normal para iniciar el servidor Apache, por ej.:

    /usr/local/apache2/bin/apachectl start
    

    O

    service httpd restart
    

Siguiendo los pasos anteriores se tendrá corriendo un servidor web Apache2 con soporte para PHP como un módulo SAPI. Por supuesto existen muchas opciones más de configuración disponibles para Apache y PHP. Para más información teclee ./configure --help en el árbol de fuentes correspondiente.

Apache se puede compilar con soporte multihilos seleccionando el worker MPM, en vez del prefork MPM standard, cuando Apache se compila. Esto se realiza agregando la siguiente opción al argumento pasado a ./configure, en el paso 3 anterior:


--with-mpm=worker

Esto no debe llevarse a cabo sin ser consciente de las consecuencias de esta decisión, y tener al menos un ligero entendimiento acerca de las implicaciones. La documentación de Apache al respecto de » MPM-Modules discute los MPM en forma mucho más detallada.

Nota:

Las Preguntas frecuentes de Apache MultiViews discute acerca del uso de multiviews con PHP.

Nota:

Para compilar una versión multihilo de Apache, el sistema destino debe soportar hilos. En este caso, PHP también debe compilarse con la opción Zend Thread Safety (ZTS) experimental. Bajo esta configuración, no todas las extensiones se encontrarán disponibles. La configuración recomendada es compilar Apache con el MPM-module prefork por omisión.



Lighttpd 1.4 en sistemas Unix

Esta sección contiene anotaciones y consejos específicos para la instalación de PHP en Lighttpd 1.4 para sistemas Unix.

Por favor, antes de continuar consulte el »  sistema de seguimiento de Lighttpd para saber cómo instalar Lighttpd apropiadamente.

La SAPI recomendada para conectar PHP a Lighttpd es Fastcig. Esta SAPI viene habilitada por omisión en php-cgi PHP 5.3. En versiones anteriores debe configurarse PHP con --enable-fastcgi. Para verificar que PHP tiene fastcgi habilitado, php -v debe contener PHP 5.2.5 (cgi-fcgi) En versiones anteriores a PHP 5.2.3, fastcgi estaba habilitado en el binario de php (no había php-cgi).

Permitiendo que Lighttpd lance procesos de php

Para configurar Lighttpd para que se conecte a php y lance procesos fastcgi, debe editar lighttpd.conf. Se recomienda utilizar sockets para conectar fastcgi a los procesos del sistema local.

Ejemplo #1 Extracto de lighttpd.conf

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

La directiva bin-path permite a lighttpd lanzar procesos fastcgi dinámicamente. PHP creará nuevos procesos hijos según se especifique en la variable de entorno PHP_FCGI_CHILDREN. La directiva "bin-environment" establece el entorno de los nuevos procesos. Cada vez que se alcance un determinado número de peticiones, determinado por PHP_FCGI_MAX_REQUEST, se matará un proceso. Las directivas "min-procs" y "max-procs" deben, por norma general, evitarse con PHP. PHP gestiona sus propios hijos, de forma que cachés como APC sólo estarán disponibles para los procesos gestionados por PHP. Si se establece "min-procs" a un número superior a 1, el número total de procesos oyentes en php se multiplicará por PHP_FCGI_CHILDREN (2 min-procs * 16 hijos produce 32 oyentes).

Lanzando procesos con spawn-fcgi

Lighttpd contiene el programa spawn-fcgi que facilita lanzar procesos fastcgi.

Lanzando procesos php-cgi

Pese a que es más laborioso, es posible lanzar procesos sin spawn-fcgi. La variable de entorno PHP_FCGI_CHILDREN controla cuántos procesos hijo de PHP se lanzarán para manejar las peticiones entrantes. PHP_FCGI_MAX_REQUESTS determinará el tiempo de vida (en peticiones) de cada proceso hijo. Aquí se muestra un script en bash que asiste en la creación de procesos php.

Ejemplo #2 Lanzando oyentes FastCGI

#!/bin/sh

# Ubicación del binario php-cgi
PHP=/usr/local/bin/php-cgi

# Ubicación del fichero PID
PHP_PID=/tmp/php.pid

# Enlazando a una dirección
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Enlazando a un socket de dominio
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

Conexión a instancias FCGI remotas

Para poder tener aplicaciones escalables, pueden lanzarse instancias de fastcgi en múltiples equipos remotos.

Ejemplo #3 Conexión a instancias de php-fastcgi remotas

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)


Servidores Sun, iPlanet y Netscape sobre Sun Solaris

Esta sección contiene notas y consejos específicos al servidor web Sun Java System, servidor web Sun ONE, instalaciones de servidores iPlanet y Netscape de PHP sobre Sun Solaris.

A partir de PHP 4.3.3 en adelante se pueden utilizar scripts PHP con el módulo NSAPI para generar listados de directorio y páginas de errores personalizados. Funciones adicionales para compatibilidad con Apache también se encuentran disponibles. Para soporte en servidores web actuales, léase la nota sobre subpeticiones.

Se puede encontrar más información acerca de configurar PHP para Netscape Enterprise Server (NES) aquí: » http://benoit.noss.free.fr/php/install-php4.html

Para construir PHP con los servidores web Sun JSWS/Sun ONE WS/iPlanet/Netscape, introduzca el directorio de instalación apropiado para la opción --with-nsapi=[DIR]. El directorio por omisión es comúnmente /opt/netscape/suitespot/. Por favor también léase /php-xxx-version/sapi/nsapi/nsapi-readme.txt.

  1. Instalar los siguientes paquetes de »  http://www.sunfreeware.com/ o algún otro sitio de descargas:

    • autoconf-2.13
    • automake-1.4
    • bison-1_25-sol26-sparc-local
    • flex-2_5_4a-sol26-sparc-local
    • gcc-2_95_2-sol26-sparc-local
    • gzip-1.2.4-sol26-sparc-local
    • m4-1_4-sol26-sparc-local
    • make-3_76_1-sol26-sparc-local
    • mysql-3.23.24-beta (si se desea soporte para mysql)
    • perl-5_005_03-sol26-sparc-local
    • tar-1.13 (GNU tar)

  2. Asegurar que la ruta de acceso incluye los directorios apropiados PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin y hacer que esté disponible al sistema export PATH.
  3. gunzip php-x.x.x.tar.gz (si se tiene una distribución .gz, de lo contrario ir a 4).
  4. tar xvf php-x.x.x.tar
  5. Cambiarse al directorio de PHP ya extraído: cd ../php-x.x.x
  6. Para el siguiente paso, asegurar que /opt/netscape/suitespot/ sea donde el servidor netscape está instalado. De no ser así, cambiar a la ruta de acceso correcta y ejecutar:

    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. Ejecutar make seguido por make install.

Después de realizar la instalación base y de leer el fichero readme apropiado, es posible que sea necesario realizar algunos pasos adicionales de configuración.

Instrucciones de configuración para Sun/iPlanet/Netscape

Primeramente quizás sea necesario agregar algunas rutas de acceso al entorno LD_LIBRARY_PATH para que el servidor encuentre todas las librerías compartidas. Esto puede hacerse de mejor manera en el script de arranque del servidor web. El script de arranque se encuentra comúnmente localizado en: /ruta/al/servidor/https-servername/start. Quizás también sea necesario editar los ficheros de configuración que están ubicados en: /ruta/al/servidor/https-servername/config/.

  1. Agregar la siguiente línea a mime.types (se puede hacer esto por medio del servidor de administración):

    type=magnus-internal/x-httpd-php exts=php
    

  2. Editar magnus.conf (para servidores >= 6) u obj.conf (para servidores < 6) y agregar lo siguiente, shlib variará dependiendo del sistema, será algo así como /opt/netscape/suitespot/bin/libphp4.so. Se deben colocar las siguientes líneas después de mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    
    (PHP >= 4.3.3) El parámetro php_ini es opcional pero con él se puede colocar php.ini en el directorio de configuración del servidor web.

  3. Configurar el objeto por omisión en obj.conf (para clases de servidor virtual [versión 6.0+] en su vserver.obj.conf):

    <Object name="default">
    .
    .
    .
    .#NOTA esta siguiente línea debería ocurrir después de todos las líneas 'ObjectType' y antes de todas las líneas 'AddLog'
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    
    (PHP >= 4.3.3) Como parámetros adicionales se pueden agregar algunos valores especiales de php.ini, por ejemplo se puede fijar una docroot="/ruta/a/raíz_de_documentos" específica al contexto php4_execute es llamado. Para llaves ini boleanas favor de utilizar 0/1 como valor, no "On","Off",... (esto no funcionará correctamente), por ejemplo. zlib.output_compression=1 en vez de zlib.output_compression="On"

  4. Esto es sólo necesario si se quiere configurar un directorio que solamente consiste de scripts de PHP (igual que un directorio cgi-bin):

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    
    Después de configurar un directorio en el servidor de administración y asignarle el estilo x-httpd-php. Todos los ficheros en éste se ejecutarán como PHP. Esto está bien para esconder el uso de PHP renombrando los ficheros a .html.

  5. Configuración de la autenticación: La autenticación PHP no puede ser utilizada con ninguna otra autenticación. TODA AUTENTICACION LE ES PASADA AL SCRIPT DE PHP. Para configurar la autenticación de PHP para el servidor entero, agregar la línea siguiente al objeto por omisión:

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. Para utilizar autenticación de PHP en sólo un directorio, agregar lo siguiente:

    <Object ppath="d:\ruta\al\directorio\auntenticado\*">
    AuthTrans fn=php4_auth_trans
    </Object>
    

Nota:

El tamaño de la pila que utiliza PHP depende de la configuración del servidor web. Si se tienen fallas generales con scripts de PHP muy grandes, se recomienda elevarlo con el servidor de administración (en la sección "MAGNUS EDITOR").

Ambiente CGI y modificaciones recomendadas en php.ini

Importante cuando se escriben scripts de PHP, es el hecho de que Sun JSWS/Sun ONE WS/iPlanet/Netscape es un servidor web multihilos. Por ello todas las peticiones se corren en el mismo espacio de proceso (el espacio del servidor web mismo) y este espacio tiene solamente un ambiente. Si se quiere tener variables CGI como PATH_INFO, HTTP_HOST etc. la manera correcta no es intentar esto al viejo estilo de PHP con getenv() o una manera similar (registrar globales al ambiente, $_ENV). Solamente se obtendrá el ambiente del servidor web que se está ejecutando. ¡Sin ninguna variable CGI válida!

Nota:

¿Por qué hay variables CGI (inválidas) en el ambiente?

Respuesta: Esto es por que se inició el proceso del servidor web desde el servidor de administración que ejecuta el script de arranque del servidor web, que se quería iniciar, como un script de CGI (¡Un script de CGI dentro del servidor de administración!). Esto es el porque el ambiente de el servidor web iniciado tiene algunas variables de CGI en él. Se puede probar esto iniciando el servidor web, no desde el servidor de administración. Utilizar la línea de comando como usuario root e iniciarlo manualmente - se verá que no hay variables de ambiente a la CGI.

Simplemente cámbiense los scripts para obtener las variables CGI de la manera correcta para PHP 4.x utilizando la superglobal $_SERVER. Si se tienen scripts más antiguos que usan $HTTP_HOST, etc., se debe activar register_globals en php.ini y cambiar el orden de las variables también (importante: quitar "E" de ésta, porque no se necesita el entorno aquí):

variables_order = "GPCS"
register_globals = On

Uso especial para páginas de error o listados personalizados de directorios (PHP >= 4.3.3)

Se puede utilizar PHP para generar páginas de errores para "404 Not Found" o similares. Agregar la siguiente línea al objeto en obj.conf por cada página de error que se quiera sobreescribir:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
donde XXX es el código de error HTTP. Favor de borrar cualquier otra directiva Error que pudiese interferir con la propia. Si se desea colocar una página para todos los errores que puedan existir, dejar fuera el parámetro code. El script puede obtener el código de estado HTTP con $_SERVER['ERROR_TYPE'].

Otra posibilidad es generar listados de directorio personalizados. Solamente creando un script PHP que despliegue un listado de directorio y reemplazando la línea por omisión correspondiente Service por type="magnus-internal/directory" en obj.conf con lo siguiente:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
Para ambas páginas, de error y listados de directorio la URI original y la URI traducida están en las variables $_SERVER['PATH_INFO'] y $_SERVER['PATH_TRANSLATED'].

Nota acerca de nsapi_virtual() y subpeticiones (PHP >= 4.3.3)

El módulo NSAPI ahora soporta la función nsapi_virtual() (alias: virtual()) para realizar subpeticiones en el servidor web e insertar el resultado en la página web. Esta función utiliza algunas características no documentadas de la librería NSAPI. En Unix el módulo automáticamente busca las funciones necesarias y las utiliza si están disponibles. Si no, se deshabilita nsapi_virtual().

Nota:

Pero se advierte: El soporte para nsapi_virtual() es ¡¡¡EXPERIMENTAL!!!



CGI y configuraciones de línea de comandos

Por defecto, PHP se construye como un programa CLI y CGI, que puede ser utilizado para el procesamiento de CGI. Si está ejecutando un servidor web PHP tiene soporte para los módulos, por lo general debe irse por esta solución por razones de rendimiento. Sin embargo, la versión CGI permite a los usuarios ejecutar diferentes páginas con PHP bajo diferentes identificadores de usuarios.

Advertencia

Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor, leer la sección Seguridad con CGI para aprender como defenderse de estos ataques.

Pruebas

Si has construido PHP como un programa CGI, puede probar su construcción escribiendo make test. Siempre es una buena idea probar su construcción. De esta manera usted puede encontrar un problema al principio con PHP en la plataforma, en lugar de tener que luchar con él más adelante.

Utilización de variables

Algunos servidores suministrando variables de entorno no se definen en las actuales » CGI/1.1 specification. Sólo las siguientes variables no se definen: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, and SERVER_SOFTWARE. Todo lo demás debe ser tratado como "extensiones de proveedor".



Notas de instalación específicas para HP-UX

Esta sección contiene notas y consejos específicos para instalar PHP sobre sistemas HP-UX.

Existen dos opciones principales para instalar PHP sobre sistemas HP-UX. Ya sea compilarlo, o instalar un binario precompilado.

Los paquetes oficiales precompilados se localizan aquí: » http://software.hp.com/

Hasta que esta sección del manual sea reescrita, la documentación acerca de compilar PHP (y las extensiones relacionadas) sobre sistemas HP-UX ha sido removida. Por ahora, favor de considerar la lectura de los siguientes recursos externos: » Building Apache and PHP on HP-UX 11.11



Notas de instalación para OpenBSD

Esta sección contiene notas y consejos específicos a la instalación de PHP sobre » OpenBSD 3.6.

Utilizando paquetes binarios

Utilizar paquetes binarios para instalar PHP sobre OpenBSD es el método más simple y recomendado. El paquete principal ha sido separado de los distintos módulos, y cada uno puede ser instalado removido independientemente de los otros. Los ficheros que se necesitan pueden ser encontrados en el CD de OpenBSD o en el sitio FTP.

El paquete principal que se necesita instalar es php4-core-4.3.8.tgz, que contiene el motor básico (además de gettext e iconv). Seguido, tómese un vistazo a los paquetes de módulos, tales como php4-mysql-4.3.8.tgz o php4-imap-4.3.8.tgz. Se necesita emplear el comando phpxs para activar y desactivar estos módulos en el fichero php.ini.

Ejemplo #1 Ejemplo de instalación de paquete de OpenBSD

# pkg_add php4-core-4.3.8.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (agregar mysql)
# pkg_add php4-mysql-4.3.8.tgz
# /usr/local/sbin/phpxs -a mysql
  (agregar imap)
# pkg_add php4-imap-4.3.8.tgz
# /usr/local/sbin/phpxs -a imap
  (quitar mysql a manera de prueba)
# pkg_delete php4-mysql-4.3.8
# /usr/local/sbin/phpxs -r mysql
  (instalar las librerías de PEAR)
# pkg_add php4-pear-4.3.8.tgz

Leer la página del manual » packages(7) para mas información sobre paquetes binarios en OpenBSD.

Utilizando portes

También se puede compilar PHP a partir de fuentes utilizando el » árbol de portes. Sin embargo, esto sólo se recomienda para usuarios familiarizados con OpenBSD. El porte de PHP 4 está dividido en dos subdirectorios: core y extensions. El directorio extensions genera subpaquetes para todos los módulos soportados de PHP. Si se encuentra que no se desea crear alguno de estos módulos, utilice el sabor o FLAVOR no_*. Por ejemplo, para evitar compilar el módulo imap, fijar el sabor o FLAVOR a no_imap.

Problemas comunes

  • La instalación por omisión de Apache se ejecuta dentro de una » jaula chroot(2), que habrá de restringir a los script PHP el acceso a ficheros debajo de /var/www. Por lo tanto se requiere crear un directorio /var/www/tmp para que los ficheros de sesión de PHP sean almacenados, o utilizar un medio alternativo de almacenamiento de sesiones. Además, los sockets de base de datos necesitan colocarse dentro de la jaula o escuchar en la interfaz de localhost. Se se hace uso de funciones de red, algunos ficheros de /etc tales como /etc/resolv.conf y /etc/services tendrán que ser movidos a /var/www/etc. El paquete PEAR de OpenBSD automáticamente se instala dentro de los directorios correctos del chroot, así que no hace falta ninguna modificación especial ahí. Más información sobre el Apache de OpenBSD está disponible en las » preguntas frecuentes OpenBSD.
  • El paquete de OpenBSD 3.6 para la extensión » gd requiere que XFree86 sea instalado. Si no se desea utilizar algunas de las características de fuentes tipográficas que requieren de X11, es mejor instalar el paquete php4-gd-4.3.8-no_x11.tgz.

Ediciones antiguas

Ediciones antiguas de OpenBSD utilizaban el sistema FLAVORS para compilar un PHP enlazado estáticamente. Dado que es difícil generar paquetes binarios utilizando este método, ahora es depreciado. Aún es posible utilizar los viejos árboles estables de ports si así se desea, pero carecen de soporte por parte del equipo de OpenBSD. Si se tiene algún comentario al respecto, el responsable actual del port es Anil Madhavapeddy (avsm arroba openbsd punto org).



Solaris sugerencias específicas de instalación

Esta sección contiene notas y sugerencias específicas para la instalación de PHP en sistemas Solaris.

Software necesario

La instalacion Solaris carece con frecuencia de los compiladores de C y sus herramientas relacionadas. Lea las preguntas frecuentes para obtener información sobre porqué usar versiones GNU de algunas de estas herramientas.

Para descomprimir la distribución PHP se necesita

  • tar
  • gzip ó
  • bzip2

Para compilar PHP se necesita

  • gcc (recomendado, aunque puede que sirvan otros compiladores de C)
  • make
  • GNU sed

Para compilar extensiones adicionales o hackear el código PHP puede que se necesite también

  • flex (versión PHP 5.2 o posterior)
  • re2c
  • bison
  • m4
  • autoconf
  • automake
Además, usted tendrá que instalar (y posiblemente compilar) cualquier software adicional específico para la configuración, tales como Oracle o MySQL.

Empleo de paquetes

Se puede simplificar el procesao de intalación de Solaris mediante el uso de pkgadd para instalar la mayoría de sus componentes necesarios. El Sistema de Empaquetado de Imagen (IPS) para Solaris 11 Express contiene también la mayoría de los componentes requeridos para la instalación usando el comando pkg.



Notas de instalación en Debian GNU/Linux

Esta sección contiene notas y consejos específicos para instalar PHP sobre » Debian GNU/Linux.

Advertencia

No se ofrece soporte de builds no oficiales de terceros. Cualquier bug debe ser informado al equipo de Debian a no ser que puedan reproducirse usando los últimos builds de nuestra » zona de descargas.

Mientras que las instrucciones para construir PHP sobre Unix se aplican a Debian también, esta página del manual contiene información específica para otras opciones, tales como utilizar ya sea los comandos apt-get o aptitude. En esta página del manual estos dos comandos se pueden utilizar indistintamente.

Utilizando APT

Primero, nótese que otros paquetes relacionados podrían ser deseables como libapache2-mod-php5 para integración con Apache 2, y php-pear para PEAR.

Segundo, antes de instalar un paquete, es sensato asegurarse de que la lista de paquetes está al día. Típicamente, esto se realiza ejecutando el comando apt-get update.

Ejemplo #1 Ejemplo de Instalación en Debian con Apache 2

# apt-get install php5-common libapache2-mod-php5 php5-cli

APT instalará automáticamente el módulo PHP 5 para Apache 2 junto con todas sus dependencias, y luego lo activará. Apache debería reiniciarse para que los cambios tengan efecto. Por ejemplo:

Ejemplo #2 Deteniendo e iniciando Apache una vez que PHP está instalado

# /etc/init.d/apache2 stop
# /etc/init.d/apache2 start

Un mejor control de la configuración

En la sección anterior, PHP se instaló únicamente con los módulos principales. Es muy probable que se deseen módulos adicionales, tales como MySQL, cURL, GD, etc. Estos también pueden ser instalados vía el comando apt-get.

Ejemplo #3 Métodos para listar paquetes relacionados con PHP 5

# apt-cache search php5
# aptitude search php5
# aptitude search php5 |grep -i mysql

Los ejemplos mostrarán una gran cantidad de paquetes incluyendo varios específicos a PHP como php5-cgi, php5-cli y php5-dev. Determine cuales son necesarios e instálelos como cualquier otro ya sea con apt-get o aptitude. Y ya que Debian realiza revisión de dependencias, preguntará por ellos, así que por ejemplo para instalar MySQL y cURL:

Ejemplo #4 Instalar PHP con MySQL, cURL

# apt-get install php5-mysql php5-curl

APT agregará automáticamente las líneas apropiadas a los diferentes ficheros relacionados con php.ini como /etc/php5/apache2/php.ini, /etc/php5/conf.d/pdo.ini, etc. y dependiendo de la extensión, le agregará registros similares a extension=foo.so. De cualquier manera, reiniciar el servidor web (como es Apache) es requerido antes de que estos cambios tengan efecto.

Problemas Frecuentes

  • Si los scripts de PHP no se están interpretando por el servidor web, entonces es probable que PHP no haya sido agregado al fichero de configuración del servidor web, que en Debian puede ser /etc/apache2/apache2.conf o algo semejante. Véase el manual de Debian para mayores detalles.
  • Si una extensión fue aparentemente instalada y aún así las funciones no aparecen definidas, asegurar de que el fichero ini apropiado está siendo cargado y/o que el servidor web fue reiniciado después de la instalación.
  • Hay dos comandos básicos para instalar paquetes en Debian (y otras variantes de linux): apt-get y aptitude. Pero, explicar las sutiles diferencias entre estos comandos va más allá del alcance de este manual.



Instalación en Mac OS X

Tabla de contenidos

Esta sección contiene notas y sugerencias específicas para la instalación de PHP en Mac OS X. PHP se incluye con Mac, y la compilación es similar a la guía de instalación Unix .


Empleo de paquetes

Hay algunas versiones pre-empaquetados y pre-compilados de PHP para Mac OS X. Esto puede ayudar en la creación de una configuración estándar, pero si usted necesita tener un conjunto diferente de características (como un servidor seguro, o un controlador de base de datos diferente), es posible que necesite construir PHP y/o un servidor web. Si no está familiarizado con la construcción y compilación de el software, vale la pena revisar si alguien ya ha construido una versión de PHP con las características que necesita.

Los siguientes recursos ofrecen paquetes facil de instalar y binarios precompilados para PHP en Mac OS:



Usando el paquete PHP

PHP está incluido en los Macs desde la versión OS X 10.0.0. Habilitar PHP con el servidor web por defecto requiere descomentar unas cuantas líneas en el fichero de configuración de Apache httpd.conf donde CGI y/o CLI están activados por defecto (son fácilmente accesibles a través del programa Terminal).

Siguiendo las instrucciones que se ofrecen a continuación se podrá habilitar PHP de una forma rápida para un entorno de desarrollo local. Es muy recomendable tener siempre actualizado PHP a la última versión. Como casi todo el software vivo, y PHP no es una excepción, se crean nuevas versiones para resolver errores y añadir nuevas funcionalidades. Consulte la documentación de instalación de Mac OS X adecuada para más detalles. Las siguientes instrucciones para obtener una configuración están orientadas a los principiantes que deseen obtener una configuración totalmente operativa. Se anima a todos los usuarios a compilar o instalar una nueva versión ya empaquetada.

La instalación típica es mediante mod_php. Para habilitar el paquete mod_php que viene en el Mac OS X para el servidor web Apache (el servidor web por defecto, al que se puede acceder mediante las Preferencias del Sistema) se requiere efectuar los siguientes pasos:

  1. Localizar y abrir el archivo de configuración de Apache. Por defecto, la localización de dicho fichero es: /private/etc/apache2/httpd.conf Mediante el Finder o el Spotlight puede ser algo complicado encontrar dicho fichero ya que por defecto es privado y pertenece al usuario root.

    Nota: Una forma de abrir el fichero es usando un editor de texto basado en UNIX en el Terminal, como por ejemplo nano. Debido a que el fichero pertenece al usuario root se debe emplear el comando sudo para abrirlo (como si fueramos el usuario root). Por ejemplo, teclée lo siguiente en el Terminal (tras lo cual le preguntará por la contraseña): sudo nano /private/etc/apache2/httpd.conf Comandos de nano a tener en cuenta: ^w (buscar), ^o (guardar), and ^x (salir) donde ^ representa la tecla Ctrl.

    Nota: Las versiones de Mac OS X anteriores a 10.5 tienen incorporadas versiones antiguas de PHP y Apache. Por ello, es posible que el fichero de configuracion de Apache se encuentre en dichos equipos en /etc/httpd/httpd.conf.

  2. En el editor de texto, descomente las líneas (eliminando el símbolo #) que sean similares a las que se muestran a continuación (a menudo estas líneas se encuentran separadas, asi que tendrá que localizar ambas en el fichero):

    # LoadModule php5_module libexec/httpd/libphp5.so
    
    # AddModule mod_php5.c
    
    Fíjese en la localización/ruta de acceso. Cuando compile PHP en el futuro, las lineas arriba indicadas deberán ser reemplazadas o comentadas.

  3. Asegúrese que las extensiones que desee puedan ser interpretadas como PHP (por ejemplo: .php .html y .inc)

    Como las siguientes sentencias ya existían en el httpd.conf (desde el Max Panther), una vez se habilite PHP los ficheros .php automáticamente seran interpretados como PHP.

    <IfModule mod_php5.c>
        # If php is turned on, we respect .php and .phps files.
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        # Since most users will want index.php to work we
        # also automatically enable index.php
        <IfModule mod_dir.c>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>
    

    Nota:

    Con anterioridad a OS X 10.5 (Leopard) se empaquetaba PHP 4 en lugar de PHP 5, en cuyo caso las instrucciones anteriores pueden ser ligeramente diferentes cambiando los 5 por los 4.

  4. Asegúrese que DirectoryIndex carga el fichero por defecto index deseado Esto tambien se configura en httpd.conf. Normalmente se usan index.php y index.html. Por defecto index.php está habilitado porque está incluido en la comprobación de PHP mostrada arriba. Ajuste a conveniencia.
  5. Configure la localizacion de php.ini o use el valor por defecto. Por defecto se localiza en los Mac OS X en /usr/local/php/php.ini y empleando phpinfo() se puede obtener esta información. Si no se está usando php.ini, PHP usará los valores por defecto. Véase también las preguntas frecuentes relacionadas en finding php.ini.
  6. Localize o configure el DocumentRoot Éste es el directorio raíz de todos los ficheros web. Los ficheros en este directorio son obtenidos del servidor web a fin de que los ficheros PHP sean ejecutados como PHP antes de ser enviados al navegador. Una ruta de acceso típica es /Library/WebServer/Documents pero puede ser configurada en httpd.conf. Como alternativa, el DocumentRoot por defecto para usuarios individuales es /Users/yourusername/Sites
  7. Cree un fichero phpinfo()

    La función phpinfo() muestra información sobre PHP. Considere la creación de un fichero en el DocumentRoot que contenga el siguiente código PHP:

    <?php phpinfo(); ?>

  8. Reinicie Apache, y cargue el fichero PHP creado arriba Para reiniciar, ejecute sudo apachectl graceful en el shell o desactive/active la opción "Compartir Web" en las Preferencias del Sistema. Por defecto, cargar ficheros locales en el navegador tiene una URL parecida a: http://localhost/info.php. Usar DocumentRoot en el directorio del usuario es otra opción, y la URL sería parecida a: http://localhost/~yourusername/info.php

CLI (o CGI en versiones antiguas) también es llamado de forma correcta php y posiblemente existe como /usr/bin/php. Abra el Terminal, lea la sección de línea de comando del manual de PHP, y ejecute php -v para comprobar la versión de PHP del binario PHP. Una llamada a phpinfo() también le mostrará esta información.



Compilar PHP en Mac OS X

Utilice la guía de instalación en Unix para compilar PHP en Mac OS X.




Instalación en sistemas Windows

Tabla de contenidos

Esta sección se aplica a Windows 98/Me y Windows NT/2000/XP/2003. PHP no funciona en plataformas de 16 bits, como Windows 3.1 y, a veces nos referimos a las plataformas soportadas por Windows como Win32.

Nota:

Windows 98/Me/NT4 ya no se admite a partir de PHP 5.3.0.

Nota:

Windows 95 ya no se admite a partir de PHP 4.3.0.

Hay dos maneras principales de instalar PHP para Windows: de forma manual o mediante el instalador.

Si tiene un entorno de desarrollo como Microsoft Visual Studio, también puede construir PHP desde el código fuente original.

Una vez que haya instalado PHP en su sistema Windows, también puede querer cargar varias extensiones para mayor funcionalidad.

Advertencia

Hay varios instaladores todo-en-uno a través de Internet, pero ninguno de esos son avalados por la PHP.net, ya que creemos que usando uno de los paquetes oficiales de Windows de » http://www.php.net/downloads.php es la mejor opción para que el sistema este seguro y optimizado.


Windows Installer (PHP 5.1.0 y anteriores)

El instalador de Windows de PHP está disponible en la página de descargas en » http://www.php.net/downloads.php. Esta instala la CGI version de PHP y para IIS, PWS, y Xitami, se configura el servidor web también. El instalador no incluye ninguna extensión externas de PHP adicionales (php_*.dll) ya que sólo se encontrará los del paquetes de Windows Zip y descarga de PECL

Nota:

Si bien el instalador de Windows es una manera fácil de trabajar con PHP, es restringido en muchos aspectos como, por ejemplo, la configuración automática de extensiones no es soportada. El uso de la instalación no es un método preferido para la instalación de PHP.

En primer lugar, hay que instalar el servidor web seleccionado HTTP en el sistema, y asegurarse de que funcione.

Ejecute el ejecutable instalador y siga las instrucciones proporcionadas por el asistente de instalación. Dos tipos de instalación son soportadas - estándar, que proporciona los parámetros por defecto para todos las configuraciones que puede, y avanzado, que hace preguntas a medida que avanza.

El asistente de instalación recopila información suficiente para configurar el fichero php.ini y configurar ciertos servidores web para utilizar PHP. Uno de los servidores web que el programa de instalación de PHP no configura es Apache, por lo que tendrás que configurarlo manualmente.

Una vez que haya terminado la instalación, el instalador le informará si se es necesario reiniciar el sistema, reiniciar el servidor, o simplemente empezar a usar PHP.

Advertencia

Tenga en cuenta que esta configuración de PHP no es segura. Si a usted le gustaría tener una segura instalación de PHP, es mejor que vayas en el modo manual, y establecer todos los opción con cuidado. Esta configuración automática disminuiye el trabajo de instalación de PHP, pero no es destinado a ser usado en los servidores en línea.



Windows Installer (PHP 5.2 y posterior)

Para crear el instalador de las últimas versiones de PHP en Windows se ha usado la tecnología MSI en conjunto con Wix Toolkit (» http://wix.sourceforge.net/). Esta aplicación se encarga de instalar y configurar tanto PHP, como las extensiones base y PECL. Además, también permite configurar muchos de los servidores web más extendidos, como IIS, Apache, o Xitami.

En primer lugar, se debe instalar el servidor HTTP (web) deseado, y asegurarse de que funciona. Una vez realizado, puede optarse por alguno de los siguientes métodos de instalación.

Instalación Normal

Ejecute el instalador MSI y siga las instrucciones que le indica el asistente de instalación. En primer lugar, se le solicitará que seleccione el Servidor Web que desea configurar, junto con algunos detalles de configuración adicionales.

Posteriormente, se le pedirá que indique qué funcionalidades y extensiones desea instalar y habilitar. Podrá indicar si desea instalar o no cada element seleccionando "Instalar en el disco local" ("Will be installed on local hard drive") en el menú desplegable que acompaña a cada uno de ellos. Al marcar "Instalar todas las funcionalidades en el disco local" ("Entire feature will be installed on local hard drive"), podrá instalar todas las subcategorías del elemento seleccionado (por ejemplo, al marcar esta opción en "PDO", se instalarán todos los Drivers PDO).

Advertencia

Se recomienda no instalar todas las extensiones de forma predeterminada, ya que muchas de ellas tienen dependencias con bibliotecas externas a PHP. En lugar de eso, utilize el Modo de Reparación de Instalación (Installation Repair Mode) desde el panel de control de "Agregar o quitar programas". Desde aquí podrá habilitar o deshabilitar a posteriori cualquier extensiones o componente.

Finalmente, el instalador inicializa tanto el fichero php.ini como al propio PHP para funcionar en Windows. También podrá configura algunos servidores web para que utilicen PHP. Actualmente es capaz de configurar IIS, Apache, Xitami y Sambar; si utiliza otro servidor web, deberá configurarlo a mano.

Instalación Silenciosa

El instalador también permite ser ejecutado en modo silencioso, muy útil para Administradores de Sistemas que desean implantar PHP fácilmente. Para usar el modo silencioso:

       
msiexec.exe /i php-VERSION-win32-install.msi /q

Puede especificar el directorio de instalación como parámetro al instalador. Por ejemplo, para instalarlo en e:\php:

       
msiexec.exe /i php-VERSION-win32-install.msi /q INSTALLDIR=e:\php
Puede usar la misma sintaxis para especificar el Directorio de Configuración de Apache (APACHEDIR), el directorio del Servidor Sambar (SAMBARDIR), o el directorio del Servidor Xitami (XITAMIDIR).

Puede, del mismo modo, especificar qué componentes instalar. Por ejemplo, para instalar la extensión mysqli y el ejecutable CGI:

       
msiexec.exe /i php-VERSION-win32-install.msi /q ADDLOCAL=cgi,ext_php_mysqli

La lista actual de componentes para instalar es la siguiente:

 
MainExecutable - ejecutable php.exe executable ( desde PHP 5.2.10/5.3.0 no está disponible; se incluye por omisión)
ScriptExecutable - ejecutable php-win.exe
ext_php_* - varias extensiones ( por ejemplo: ext_php_mysql para MySQL )
apache13 - módulo de Apache 1.3
apache20 - módulo de Apache 2.0
apache22 - módulo de Apache 2.2
apacheCGI - Ejecutable CGI de Apache
iis4ISAPI - módulo ISAPI de IIS
iis4CGI - ejecutable CGI de IIS
iis4FastCGI - ejecutable CGI de IIS
NSAPI - módulo de servidores Sun/iPlanet/Netscape
netserve - ejecutable CGI de Servidores Web NetServe
Xitami - ejecutable CGI de Xitami
Sambar - módulo ISAPI del Servidor Sambar
CGI - ejecutable php-cgi.exe
PEAR - instalador PEAR
Manual - manual de PHP en formato CHM

Si desea más información sobre instalaciones MSI desde la línea de comandos, consulte » http://msdn.microsoft.com/en-us/library/aa367988.aspx

Actualizando PHP con el instalador

Para actualizar, debe ejecutar el instalador indistintamente desde la línea de comandos o del entorno gráfico. El instalador comprobará sus opciones de instalación actuales, eliminará la instalación antigua, y reinstalará PHP con las mismas opciones que ya tenía. Se recomienda utilizar este método para mantener PHP actualizado, en lugar de sobrescribir a mano cada fichero del directorio de instalación.



Manual de Instalación

Esta sección contiene instrucciones para instalar y configurar manualmente PHP en Windows de Microsoft. Para las instrucciones sobre cómo utilizar el instalador de PHP para instalar y configurar PHP y un servidor web en Windows, consulte Windows Installer (PHP 5.2 y posteriores).

Selección y descarga de el paquete de distribución PHP

Descarga la distribución binaria de PHP zip »  PHP para Windows: Binarios y Fuentes . Hay varias versiones diferentes del paquete zip - Seleccione por la versión que sea adecuado para el servidor web utilizado:

  • Si se utiliza PHP con IIS a continuación elija PHP 5.3 VC9 Non Thread Safe o PHP 5.2 VC6 Non Thread Safe;

  • Si PHP se utiliza con IIS7 o superior y PHP 5.3+, a continuación los archivos binarios VC9 de PHP que se deben utilizar.

  • Si se utiliza PHP con Apache 1 o Apache 2 a continuación elija PHP 5.3 VC6 o PHP 5.2 VC6.

Nota:

Versiones VC9 se compilan con el compilador de Visual Studio 2008 y tiene mejoras en el rendimiento y estabilidad. Las versiones VC9 requieren que tenga la » Microsoft 2008 C++ Runtime (x86) o la » Microsoft 2008 C++ Runtime (x64) instalado.

La estructura del paquete PHP y el contenido

Descomprimir el contenido del archivo zip en un directorio de su elección, por ejemplo C:\PHP\. La estructura de directorios y archivos extraídos de del zip se verá de la siguiente manera:

Ejemplo #1 PHP 5 paquete de estructura


c:\php
   |
   +--dev
   |  |
   |  |-php5ts.lib                 -- php5.lib in non thread safe version
   |
   +--ext                          -- extension DLLs for PHP
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-...
   |
   +--extras                       -- empty 
   |
   +--pear                         -- initial copy of PEAR
   |
   |
   |-go-pear.bat                   -- PEAR setup script
   |
   |-...
   |
   |-php-cgi.exe                   -- CGI executable
   |
   |-php-win.exe                   -- executes scripts without an opened command prompt
   |
   |-php.exe                       -- Command line PHP executable (CLI)
   |
   |-...
   |
   |-php.ini-development           -- default php.ini settings
   |
   |-php.ini-production            -- recommended php.ini settings
   |
   |-php5apache2_2.dll             -- does not exist in non thread safe version
   |
   |-php5apache2_2_filter.dll      -- does not exist in non thread safe version
   |
   |-...
   |
   |-php5ts.dll                    -- core PHP DLL ( php5.dll in non thread safe version)
   | 
   |-...

A continuación se muestra la lista de los módulos y archivos ejecutables incluidos en la distribución del archivo zip de PHP:

  • go-pear.bat - el script de configuración de PEAR. Consulte » Instalación (PEAR) para más detalles.

  • php-cgi.exe - ejecutable CGI que se puede utilizar cuando se ejecuta PHP en IIS a través de CGI o FastCGI.

  • php-win.exe - el ejecutable para la ejecución de scripts en PHP sin necesidad de utilizar una ventana de línea de comandos de PHP (Por ejemplo, las aplicaciones PHP que utilizan Windows GUI).

  • php.exe - el ejecutable para la ejecución de scripts PHP dentro de una interfaz de línea de comandos (CLI) de PHP.

  • php5apache2_2.dll - Apache 2.2.X module.

  • php5apache2_2_filter.dll - Apache 2.2.X filter.

Cambio el fichero php.ini

Después de que el contenido del paquete de PHP se ha extraído, copie el php.ini-production en php.ini en la misma carpeta. Si es necesario, también es posible colocar el php.ini en cualquier otro lugar. Pero se requieren pasos adicionales de configuración como se describe en Configuración de PHP.

El fichero php.ini le dice a PHP cómo se configura, y cómo trabajar con el ambiente que se ejecuta. Aquí hay una serie de ajustes para el fichero php.ini PHP que ayudan a trabajar mejor con Windows. Algunos de estos son opcionales. Hay muchas otras directivas que puedan ser relevantes para su ambiente - dirijase lista de directivas php.ini para más información.

Las directivas:

  • extension_dir = <path to extension directory> - La extension_dir necesidades para indicar el directorio donde las extensiones de PHP se almacenan los ficheros. La ruta puede ser absoluta (i.e. "C:\PHP\ext") o (i.e. ".\ext"). Extensiones que se enumeran más baja en el php.ini ficheros que se encuentra en el extension_dir .

  • extension = xxxxx.dll - Para cada extensión que desee habilitar, necesita un correspondiente "extension=" directiva que le dice a PHP que las extensiones en el extension_dir para cargar en tiempo de inicio.

  • log_errors = On - PHP tiene un error de registro de instalación que se puede utilizar para enviar los errores a un fichero, o de un servicio (i.e. syslog) y trabaja en conjunto con el error_log Directiva a continuación. Cuando se ejecuta bajo IIS, la log_errors debe estar habilitado, con una validez error_log .

  • error_log = <path to the error log file> - El error_log tiene que especificar la ruta de acceso absoluta, o en relación con el archivo donde los errores de PHP debe estar registrado. Este archivo debe tener permisos de escritura para el servidor web. Los lugares más comunes para este archivo en varios directorios TEMP, por ejemplo "C:\inetpub\temp\php-errors.log".

  • cgi.force_redirect = 0 - La presente Directiva se requiere para ejecutar en IIS. Se trata de una protección de la instalación de la guía necesaria por muchos otros servidores web. Sin embargo, lo que permite que en IIS hacer que el motor de PHP a un error en Windows.

  • cgi.fix_pathinfo = 1 - Esto le permite acceder a PHP al real path después de la especificación CGI. IIS FastCGI implementa las necesidades de este conjunto.

  • fastcgi.impersonate = 1 - FastCGI bajo IIS admite la posibilidad de hacerse pasar por tokens de seguridad del cliente que llama. Esto permite que IIS defina el contexto de seguridad que solicita ejecutar.

  • fastcgi.logging = 0 - FastCGI debe estar deshabilitado en IIS. Si se deja habilitada, los mensajes de cualquier clase son tratados por FastCGI como las condiciones de error que hará que IIS genere una excepción HTTP 500.

Directivas opcionales

  • max_execution_time = ## - Esta directiva le dice a PHP, el importe máximo de tiempo que puede ejecutar cualquier script determinado. El defecto es 30 segundos. Aumentar el valor de esta directiva, si la aplicación PHP tomar mucho tiempo para ejecutarse.

  • memory_limit = ###M - La cantidad de memoria disponible para el proceso de PHP, en Megabytes. El valor por defecto es 128, lo cual está bien para la mayoría de las aplicaciones PHP. Algunos de los más complejos puede ser que necesite más.

  • display_errors = Off - Esta directiva le dice a PHP si se incluyen los mensajes de error en el corriente que devuelve al servidor web. Si se establece en "On", entonces PHP enviará lo que las clases de errores que se define con la error_reporting directiva de nuevo al servidor web como parte de la secuencia de error. Por razones de seguridad, se recomienda "Off" en los servidores de producción con el fin de no revelar ninguna información sensible de la seguridad que a menudo se incluyen en los mensajes de error.

  • open_basedir = <paths a directorios, separados por semicolon>, por ejemplo, openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp". Esta directiva especifica las rutas de directorio en donde PHP se le permite realizar las operaciones del sistema de archivos. Cualquier operación de fichero fuera de las rutas especificadas se producirá un error. Esta directiva es especialmente útil para bloquear la instalación de PHP en entornos de alojamiento compartido para evitar que scripts PHP de acceso a los archivos fuera del directorio raíz del sitio web.

  • upload_max_filesize = ###M and post_max_size = ###M - El tamaño máximo permitido de un archivo subido y los datos posteriores, respectivamente. Los valores de estas directivas serán aumenta si las aplicaciones PHP necesita realizar grandes cargas, como por ejemplo fotos o archivos de vídeo.

PHP esta ahora configurado en el sistema. El siguiente paso es elegir un servidor web, a fin de que pueda ejecutar PHP. Elegir un servidor web de la tabla de contenido.

Además de ejecutar PHP a través de un servidor web, PHP puede ejecutar desde la línea de comandos como un script .BAT. Ver PHP línea de comandos de Microsoft Windows para más detalles.



Microsoft IIS

Esta sección contiene instrucciones específicas de la instalación de PHP en Microsoft Internet Information Services (IIS).



Microsoft IIS 5.1 y IIS 6.0

Esta sección contiene instrucciones para configurar en forma manual Internet Information Services (IIS) 5.1 y IIS 6.0 para trabajar con PHP en Microsoft Windows XP y Windows Server 2003. Para obtener instrucciones sobre la configuración de IIS 7.0 y versiones posteriores de Windows Vista , Windows Server 2008, Windows 7 y Windows Server 2008 R2 referirse a Microsoft IIS 7.0 y posteriores.

Configurar IIS para procesar solicitudes de PHP

Descarga e instala PHP de acuerdo a las instrucciones descritas en manual detallado de instalación

Nota:

Non-thread-safe build de PHP se recomienda cuando se utiliza IIS. Non-thread-safe builds están disponibles en »  PHP para Windows: Binarios y Fuentes.

Configure el CGI- y configure FastCGI-specific en el archivo php.ini como se muestra a continuación:

Ejemplo #1 Configuración CGI y FastCGI en php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Descargue e instale » Microsoft FastCGI extensión para IIS 5.1 y 6.0. La extensión está disponible para 32-bit y plataformas de 64-bit - seleccionar el paquete de descarga adecuada para la plataforma.

Configure la extensión FastCGI para manejar las solicitudes específicas de PHP ejecutando el comando que se muestra a continuación. Vuelva a colocar el valor de el parámetro "-path" con la ruta absoluta del fichero en el fichero php-cgi.exe.

Ejemplo #2 Configuración de la extensión FastCGI para manejar las solicitudes de PHP

cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^
-extension:php -path:"C:\PHP\php-cgi.exe"

Este comando creará un script de mapeo IIS para el fichero de extensión *.php , lo que resultará en todas las URLs que terminan con .php siendo manejado por la extensión FastCGI. Asimismo, se configurará la extensión FastCGI a usar en el ejecutable php-cgi.exe para procesar las solicitudes de PHP.

Nota:

En este punto la necesidad de instalación y configuración de los pasos se han completado. El resto de instrucciones a continuación son opcionales, pero altamente recomendable para lograr una funcionalidad óptima y el rendimiento de PHP en IIS.

Suplantación y acceso a ficheros del sistema

Se recomienda habilitar la suplantación FastCGI en PHP cuando este utilizando IIS. Esto es controlado por la directiva fastcgi.impersonate en el fichero php.ini. Cuando suplantación está activado, PHP realizará todas las operaciones de ficheros de sistema en favor de la cuenta de usuario que se ha determinado por la autentificación de IIS. Esta asegura que, incluso si el mismo proceso PHP se comparte entre diferentes sitios web IIS, los scripts PHP en estos sitios web no podrá acceder a los otros fichero ' siempre y cuando use cuentas de usuario diferentes utilizado para la autenticación IIS en cada sitio web.

Por ejemplo IIS 5.1 and IIS 6.0, en su configuración predeterminada, se ha habilitado la autenticación anónima con una función de cuenta de usuario IUSR_<MACHINE_NAME> utilizado como una identidad por defecto. Esto significa que para que IIS puede ejecutar scripts PHP, es necesario concedera la cuenta IIUSR_<MACHINE_NAME> permiso de lectura en estos scripts. Si las aplicaciones PHP necesitan realizar operaciones de escritura sobre determinados ficheros o escribir ficheros en algunas carpetas a continuación la cuenta IUSR_<MACHINE_NAME> debe tener permiso para escribir en ellos.

Para determinar qué cuenta de usuario es utilizado por IIS autenticación anónima, siga estos pasos:

  1. En el menú Inicio de Windows seleccione "Run:", type "inetmgr" y haga clic en "Ok";

  2. Expanda la lista de sitios web en el nodo "Web Sites" en la vista de árbol, haga clic derecho en el sitio web que se está utilizando y seleccionar "Properties";

  3. Haga clic en "Directory Security" tab;

  4. Tome nota de un "User name:" campo en el cuadro de dialogo "Authentication Methods"

Autenticación anonima para IIS 5.1 y IIS 6.0

Para modificar la configuración de permisos en ficheros y carpetas, utilice la interfaz de usuario de el Explorador de Windows o el comando icacls.

Ejemplo #3 Configuración del fichero de los permisos de acceso

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Establecerindex.php como un documento predeterminado en IIS

Los documentos por defecto de IIS se utilizan para las solicitudes HTTP que no especifican un nombre de documento. Con las aplicaciones PHP, index.php suele actuar como un documento predeterminado. Para añadir index.php a la lista de documentos predeterminados IIS, siga estos pasos:

  1. En el menú Inicio de Windows seleccione "Run:", teclee "inetmgr" y haga clic en "Ok";

  2. Haga clic derecho en el nodo ""Web Sites" de la vista de árbol y seleccione "Properties";

  3. Haga clic en "Documents" tab;

  4. Haga clic en el botón "Add..." y enter en "index.php" para el " Contenido de la página por defecto :".

Configuración index.php como documento predeterminado para IIS

FastCGI y Reciclaje de configuración de PHP

Configurar la extensión IIS FastCGI para el reciclaje de procesos PHP utilizando los comandos de abajo. Los controles de configuración de FastCGI instanceMaxRequests número de solicitudes que serán procesadas por un solo proceso php-cgi.exe antes de el cierre de la extensión FastCGI. La variable PHP de entorno PHP_FCGI_MAX_REQUESTS controla cuántas peticiones de un único proceso php-cgi.exe se encargará antes de que se recicle así mismo. Asegúrese de que el valor especificado por la configuración FastCGI InstanceMaxRequests es menor o igual al valor especificado para PHP_FCGI_MAX_REQUESTS.

Ejemplo #4 Configuración FastCGI y reciclaje PHP

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-InstanceMaxRequests:10000

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

Configuración de los ajustes de tiempo de espera FastCGI

Aumentar la configuración de tiempo de espera para la extensión FastCGI si hay aplicaciones que llevan mucho tiempo ejecutar scripts PHP. Los dos valores a ajsutar de los controles de tiempos de espera son ActivityTimeout y RequestTimeout. Véase » Configuración de Extensión FastCGI para IIS 6.0 para más información sobre los ajustes.

Ejemplo #5 Configuración de los ajustes de tiempo de espera FastCGI

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-ActivityTimeout:90

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-RequestTimeout:90

Cambiar la ubicación del fichero php.ini

PHP busca para el fichero php.ini en varios lugares y es posible cambiar las ubicaciones predeterminadas de el fichero php.ini utilizando la variable de entorno PHPRC. Las instrucciones PHP para cargar el fichero de configuración desde una ubicación personalizada, ejecute el comando que se muestra a continuación. La ruta de acceso absoluta al directorio con el fichero php.ini debe ser especifica con un valor de variable de entorno PHPRC.

Ejemplo #6 Cambiar la ubicación del fichero php.ini

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHPRC:"C:\Some\Directory\"



Microsoft IIS 7.0 y posteriores

Esta sección contiene instrucciones para configurar en forma manual Internet Information Services (IIS) 7.0 y posteriores para trabajar con PHP en Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 and Windows Server 2008 R2. Para obtener instrucciones sobre la configuración de IIS 5.1 and IIS 6.0 on Windows XP and Windows Server 2003 refiérase a Microsoft IIS 5.1 and IIS 6.0.

Habilitación de apoyo FastCGI en IIS

Módulo FastCGI está deshabilitado en la instalación por defecto de IIS. Los pasos para que pueda variar según la versión de Windows se está utilizando.

Para activar el soporte FastCGI en Windows Vista SP1 y Windows 7:

  1. En el menu de inicio de Windows seleccione "Run:", teclee "optionalfeatures.exe" y click "Ok";

  2. En el "Windows Features" cuadro de diálogo "Internet Information Services", "World Wide Web Services", " Caracteristicas Desarrollo de aplicaciones " y luego permitir que el "CGI" checkbox;

  3. Haga clic en Aceptar y espere hasta que se complete la instalación

Habilitar soporte para FastCGI IIS7 en Windows Vista SP1 y Windows 7

Para activar el soporte FastCGI en Windows Server 2008 y Windows Server 2008 R2:

  1. En el menú Inicio de Windows elegir "Run:", teclee "CompMgmtLauncher" y click "Ok";

  2. En el "Web Server (IIS)" El rol no está presente en el marco del "Roles" nodo, a continuación, añadir haciendo clic en "Adicionar Roles";

  3. Si la "Web Server (IIS)" role esta presente, entonces haga click "Add Role Services" y luego permitir que el "CGI" casilla de verificación en grupo "Desarrollo de Aplicaciones" ;

  4. Click "Next" y luego "Install" ay espere a que la instalación se complete.

Habilitación FastCGI apoyo en Windows Server 2008 y Windows Server 2008 R2

Configurar IIS para procesar las solicitudes de PHP

Descargue e instale PHP de acuerdo a las instrucciones descritas en manual installation steps

Nota:

No construir thread-safe de PHP se recomienda cuando IIS utilizando. El no-thread-safe crea están disponibles en » PHP para Windows: binarios y fuentes.

Configure el CGI y la configuración específica de FastCGI php.ini fichero como se muestra a continuación:

Ejemplo #1 CGI y FastCGI en la configuración php.ini

fastcgi.impersonate = 1
    fastcgi.logging = 0
    cgi.fix_pathinfo=1
    cgi.force_redirect = 0

Configurar la asignación de IIS controlador para PHP utilizando la interfaz de usuario Administrador de IIS o una herramienta de línea de comandos.

El uso de IIS interfaz de usuario de Manager para crear una asignación de controlador para PHP

Siga estos pasos para crear una asignación de controlador de IIS para PHP en la interfaz de usuario Administrador de IIS:

  1. En el menú Inicio de Windows elegir "Run:", escriba "inetmgr" y click "Ok";

  2. En la interfaz de usuario de IIS Manager, seleccione el nodo de servidor en el "Connections" vista de árbol;

  3. En el "Características" Página de abrir el "Handler Mappings" feature;

    Crear la asignación de IIS controlador para PHP: Localizar Handler Mappings

  4. En el "Actions" haga click en panel "Add Module Mapping...";

  5. En el "Add Module Mapping" diálogo entre lo siguiente:

    • Solicitud de ruta: *.php
    • Modulo: FastCgiModule
    • Ejecutable: C:\[Path to PHP installation]\php-cgi.exe
    • Nombre: PHP_via_FastCGI

  6. Haga Click en "Solicitar Restricciones" botón y luego configurar la asignación de invocar controlador sólo si la solicitud se asigna a un archivo o una carpeta;

  7. Haga clic en Aceptar en todos los cuadros de diálogo para guardar la configuración.

Crear mapas controlador de IIS para PHP: Agregar controlador de Cartografía

Utilizando la herramienta de línea de comandos para crear una asignación de controlador para PHP

Utilice el comando mostrado a continuación para crear un grupo de IIS FastCGI proceso que utilizará php-cgi.exe ejecutable para la tramitación de solicitudes de PHP. Vuelva a colocar el valor del parámetro fullPath con la ruta absoluta al fichero php-cgi.exe.

Ejemplo #2 >Creación del proceso del grupo IIS FastCGI

     %windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
     /+[fullPath='c:\PHP\php-cgi.exe']
     

Configurar IIS PHP para manejar las peticiones concretas de la ejecución del comando que se muestra a continuación. Vuelva a colocar el valor del parámetro scriptProcessor con la ruta de acceso absoluta al fichero php-cgi.exe.

Ejemplo #3 Creación de mapas manejador de peticiones PHP

     %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
     /+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
     scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']
     

Este comando crea una asignación de controlador de IIS para la extensión de archivo *.php, lo que resultará en todas las direcciones URL que terminan con. Php siendo manejado por el módulo FastCGI.

Nota:

En este punto la necesidad de instalación y configuración de los pasos se han completado. Las instrucciones a continuación son opcionales, pero altamente recomendable para lograr una funcionalidad óptima y el rendimiento de PHP en IIS.

Suplantación de identidad y acceso a archivos del sistema

Se recomienda habilitar la suplantación en PHP FastCGI cuando IIS utilizando. Esta está controlado por la directiva fastcgi.impersonate en el fichero php.ini. Cuando está habilitada la suplantación, PHP realizará todas las operaciones del sistema de ficheros en nombre de la cuenta de usuario que ha sido determinado por la autentificación de IIS. Esto asegura que, aunque el proceso mismo PHP es compartido a través de diferentes sitios web IIS, los scripts PHP en los sitios web no será capaz de acceder a los demás ficheros, siempre y cuando las cuentas de usuario se utilizan para la autenticación de IIS en cada sitio web.

Por ejemplo IIS 7, en su configuración por defecto, se ha habilitado la autenticación anónima con incorporada IUSR cuenta de usuario utilizada como una identidad por defecto. Esto significa que para que IIS ejecutar scripts PHP, es necesario conceder a la cuenta IUSR permiso de lectura en estos scripts. Si las aplicaciones PHP necesidad de realizar operaciones de escritura de ciertos ficheros o escribir ficheros en una carpetas entonces cuenta IUSR debe tener permiso para escribir en ellos.

Para determinar qué cuenta de usuario se utiliza como una identidad anónima en IIS 7 utilice el siguiente comando. Vuelva a colocar el "Sitio Web predeterminado" con el nombre del sitio Web de IIS que utiliza. En la producción configuración XML aspecto de elemento para el atributo userName.

Ejemplo #4 La determinación de la cuenta utilizada como IIS identidad anónima

    %windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
    /section:anonymousAuthentication
    <system.webServer>
    <security>
    <authentication>
    <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
    </security>
    </system.webServer>
    

Nota:

Si el atributo userName no está presente en el elemento anonymousAuthentication, o si se establece una cadena vacía, entonces significa que la identidad del grupo de aplicaciones se utiliza como un identidad anónima para ese sitio web.

Para modificar la configuración de permisos de archivos y carpetas, utilice la interfaz de usuario del Explorador de Windows o comando icacls.

Ejemplo #5 Configuración de archivo de los permisos de acceso

    icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)
    

Establecer index.php como un documento predeterminado en IIS

Los documentos por defecto de IIS se utilizan para las solicitudes HTTP que no se especifica un nombre de documento. Con las aplicaciones PHP,index.php por lo general actúa como un documento predeterminado. Para añadir index.php a la lista de los documentos por defecto de IIS, utilice este comando:

Ejemplo #6 Establecer index.php como un documento predeterminado en IIS

    %windir%\system32\inetsrv\appcmd.exe set config ^
    -section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
    /commit:apphost
    

FastCGI y configuración de PHP Reciclaje

Configurar la configuración de IIS FastCGI PHP para el reciclaje de los procesos mediante los comandos de abajo. La configuración FastCGI instanceMaxRequests controla cuántas peticiones se procesado por un solo peoceso php-cgi.exe antes de IIS se cierra. La variable de entorno PHP PHP_FCGI_MAX_REQUESTS controla el número pide una sola proceso php-cgi.exe se encargará antes de que se recicla sí misma. Asegúrese de que el valor especificado para la configuración FastCGI InstanceMaxRequests es menor o igual al valor especificado para PHP_FCGI_MAX_REQUESTS.

Ejemplo #7 Configuración de PHP FastCGI y el reciclaje

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000
    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
    [name='PHP_FCGI_MAX_REQUESTS',value='10000']"
    

FastCGI ajustes de tiempo de espera

Aumentar el tiempo de espera para la configuración de FastCGI si se espera tener a largo ejecutar scripts PHP. Los dos valores que los tiempos de espera de control activityTimeout y requestTimeout. Utilice los comandos siguientes para cambiar la configuración de tiempo de espera. Asegúrese de sustituir el valor en el parámetro a fullPath contendrá la ruta absoluta a el fichero php-cgi.exe.

Ejemplo #8 Configuración de los ajustes de tiempo de espera FastCGI

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost
    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost
    

Cambiar la ubicación del fichero php.ini

PHP busca el fichero php.ini en varios lugares y es posible cambiar las ubicaciones predeterminadas del fichero php.ini utilizando variable de entorno PHPRC. Encomendar a PHP para cargar el archivo de configuración desde una ubicación personalizada, ejecute el comando se muestra a continuación. La ruta de acceso absoluta al directorio con el fichero php.ini debe ser especifica como un valor de variable de entorno PHPRC.

Ejemplo #9 Cambiar la ubicación del fichero php.ini

    appcmd.exe set config  -section:system.webServer/fastCgi ^
    /+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
    [name='PHPRC',value='C:\Some\Directory\']" /commit:apphost
    



Apache 1.3.x en Microsoft Windows

Esta sección contiene notas y sugerencias específicas para Apache 1.3.x instaladas con PHP en sistemas Microsoft Windows. También hay instrucciones y notas para Apache 2 en una nueva página.

Nota:

Por favor lea primero el manual de instalación

Hay dos formas de configurar PHP para trabajar con Apache 1.3.x en Windows. La primera es usar CGI binary (php.exe para PHP 4 y php-cgi.exe para PHP 5), la otra es utilizar el módulo DLL de Apache. En ambos casos se necesita editar httpd.conf para configurar Apache para trabajar con PHP, y después reiniciar el servidor.

Vale la pena resaltar, que el módulo SAPI ha sido desarrollado mas estable bajo Windows. Se recomienda su uso más que el binario CGI, ya que es más trasparente y seguro.

Aunque pueden haber algunas variaciones en la configuración de PHP bajo Apache, estas son sencillas para ser utilizados por el principiante. Por favor consulte la documentación de Apache para seguir directivas de configuración.

Después de modificar el archivo de configuración, recuerde que debe reiniciar el servidor, por ejemplo NET STOP APACHE seguido de NET START APACHE, si ejecuta Apache como un servicio de Windows, o si usa los atajos

Nota: Recuerde que cuando agrega rutas como valores en los archivos de configuración de Apache en Windows, todas las barras invertidas tal como c:\directory\file.ext deberían ser convertidas en barras comunes: c:/directory/file.ext. Una barra común al final será necesaria para directorios.

Instalación como módulo de Apache

Se deben agregar las siguientes líneas a su archivo de configuración Apache httpd.conf

Ejemplo #1 PHP como módulo de Apache 1.3.x

Se asume que PHP está instalado en c:\php. Ajuste la ruta de acceso si este no es el caso.

Para PHP 4:

# Adicionar al final de la sección LoadModule 
# No olvidar copiar este ficrero desde el directorio sapi! 
LoadModule php4_module "C:/php/php4apache.dll" 
 
# Adicionar al final de la sección AddModule 
AddModule mod_php4.c

Para PHP 5:

# Adicionar al final de la sección LoadModule 
LoadModule php5_module "C:/php/php5apache.dll" 
 
# Adicionar al final de la sección AddModule 
AddModule mod_php5.c

Para ambos :

# Adicionar esta línea dentro de la <IfModule Mod_mime.c> condicional brace 
AddType application/x-httpd-php .php 
 
# Para la sintaxis highlighted .phps files, tambien adicionar 
AddType application/x-httpd-php-source .phps

Instalación como un binario CGI

Si se ha descomprimido el paquete PHP C:\php\ como se describe en la sección Manual de instalación paso a paso, es necesario insertar estas líneas a su archivo de configuración de Apache para configurar el binario CGI:

Ejemplo #2 PHP y Apache 1.3.x como CGI

ScriptAlias /php/ "c:/php/" 
AddType application/x-httpd-php .php 
 
# Para PHP 4 
Action application/x-httpd-php "/php/php.exe" 
 
# Para PHP 5 
Action application/x-httpd-php "/php/php-cgi.exe" 
 
# Especifica el directorio donde php.ini esta 
SetEnv PHPRC C:/php
Tenga en cuenta que la segunda línea en la lista anterior se puede encontrar en las versiones actuales de httpd.conf, pero se comenta. Recordar también sustituir el c:\php\ para su ruta de acceso real a PHP.

Advertencia

Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor, leer la sección Seguridad con CGI para aprender como defenderse de estos ataques.

Si desea presentar archivos de código fuente PHP sintaxis highlighted, no existe la opción más conveniente con la versión de PHP como módulo. Si ha elegido configurar Apache para usar PHP como un binario CGI, tendrá que usar la función highlight_file(). Para ello se necesita crear un script PHP y agregarle el código <?php highlight_file('some_php_script.php'); ?>.



Apache 2.x en Microsoft Windows

Esta sección contiene notas y sugerencias específicas de Apache 2.x instaladas con PHP en sistemas Microsoft Windows. También hay instrucciones y notas para usuarios de Apache 1.3.x en una nueva página..

Nota:

Por favor lea primero el manual de instalación

Nota: Soporte Apache 2.2

Los usuarios de Apache 2.2 deben tener en cuenta que el archivo DLL para Apache 2.2 es llamado php5apache2_2.dll a cambio de php5apache2.dll y sólo está disponible para PHP 5.2.0 y posteriores. Ver también » http://snaps.php.net/

Se le recomienda consultar la » Documentación de Apache Para obtener un conocimiento básico del servidor Apache 2.x. Tambien considere leer las » notas especificas de Windows para Apache 2.x antes de seguir leyendo aquí.

Apache 2.x está diseñado para ejecutarse en las versiones de Windows designado como servidor de plataforma, tales como Windows NT 4.0, Windows 2000, Windows XP o Windows 7. Aunque Apache 2.x funciona bastante bien en Windows 9x, el soporte en estas plataformas es incompleta, y algunas cosas no funcionan correctamente. No existe un plan para remediar esta situación.

Descargue la versión más reciente de »  Apache 2.x y un accesorio de la versión de PHP. Siga los pasos del Manual de Instalación y regrese a continuar con la integración de PHP y Apache.

Hay tres formas de configurar PHP para trabajar con Apache 2.x en Windows. Puede ejecutar PHP como un controlador, como CGI o bajo FastCGI.

Nota: Recuerde que cuando agrega rutas como valores en los archivos de configuración de Apache en Windows, todas las barras invertidas tal como c:\directory\file.ext deberían ser convertidas en barras comunes: c:/directory/file.ext. Una barra común al final será necesaria para directorios.

Instalación como un controlador de Apache

Es necesario insertar las siguientes líneas en Apache httpd.conf archivo de configuración para cargar el módulo PHP para Apache 2.x:

Ejemplo #1 PHP and Apache 2.x como controlador

# 
LoadModule php5_module "c:/php/php5apache2.dll"
AddHandler application/x-httpd-php .php

# Configurar la ruta de php.ini
PHPIniDir "C:/php"

Nota: Recuerda sustituir la ruta de acceso actual a PHP para el C:/php/ en los ejemplos anteriores. Tenga cuidado en utilizar ya sea php5apache2.dll o php5apache2_2.dll en la directiva LoadModule y verificar que el fichero de referencia se encuentra localizado en la ruta de fichero que se señala en la presente directiva.

La configuración anterior permite habilitar PHP como controlador de cualquier fichero que tiene una extensión .php, aunque existen otras extensiones de fichero. Por ejemplo, un fichero llamadoexample.php.txt será ejecutado por el controlador de PHP. Para garantizar que sólo los ficheros queterminen en .php son ejecutados, se utiliza la siguiente configuración en su lugar:

<FilesMatch \.php$>
      SetHandler application/x-httpd-php
 </FilesMatch>

Ejecutar PHP como CGI

Se debe consultar la» Documentación de Apache CGI para una comprensión más completa de ejecutar CGI en Apache

Para ejecutar PHP como CGI, tendrás que colocar los ficheros php-cgi en un directorio designado como directorio CGI usando la directiva ScriptAlias.

A continuación, se nesesita insertar una #! línea en los ficheros PHP, apuntando a la ubicación del binario de PHP:

Ejemplo #2 PHP y Apache 2.x como CGI

#!C:/php/php.exe
<?php
  phpinfo();
?>

Advertencia

Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor, leer la sección Seguridad con CGI para aprender como defenderse de estos ataques.

Ejecutar PHP bajo FastCGI

Ejecutar PHP bajo FastCGI tiene una serie de ventajas con respecto a ejecutarlo como un CGI. Si lo establece de esta manera es bastante sencillo:

Obtener mod_fcgid de » http://httpd.apache.org/mod_fcgid/. Los binarios de Win32 están disponibles para la descargar en ese sitio. Instalar el módulo de acuerdo con las instrucciones que vienen con él.

Configurar el servidor web como se muestra abajo, teniendo cuidado de ajustar cualquier ruta que refleje como se tiene instalado las cosas en el sistema:

Ejemplo #3 Configurar Apache para ejecutar PHP como FastCGI

LoadModule fcgid_module modules/mod_fcgid.so  

# Donde está el fichero php.ini?
FcgidInitialEnv PHPRC        "c:/php" 

AddHandler fcgid-script .php  
FcgidWrapper "c:/php/php-cgi.exe" .php  
Los ficheros con extensión .php ahora serán ejecutados por PHP FastCGI



Servidores Sun, iPlanet y Netscape en Microsoft Windows

Esta sección contiene anotaciones y consejos específicos de servidores Sun Java System Web Server, Sun ONE Web Server, iPlanet y Netscape en sistemas Windows.

Desde PHP 4.3.3 pueden usarse scripts PHP con el módulo NSAPI para generar listados de directorios y páginas de error personalizadas. También hay funciones adicionales para la compatibilidad con Apache. Para tener soporte con los servidores web actuales consulte las anotaciones sobre subpeticiones.

Instalación CGI en servidores Sun, iPlanet y Netscape

Para instalar PHP como un manejador CGI, haga lo siguiente:

  • Copie php4ts.dll al raíz del sistema (directorio en el que instaló Windows)
  • Realice la asociación de ficheros en la línea de comandos. Introduzca las siguientes líneas:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • En Netscape Enterprise Administration Server cree un directorio shellcgi temporal y bórrelo después (este paso añadirá 5 líneas importantes a obj.conf y permitirá que el servidor web maneje scripts shellcgi).
  • En Netscape Enterprise Administration Server cree un nuevo tipo mime (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php).
  • Realícelo para cada instancia de servidor web en que desee ejecutar PHP

Se pueden encontrar más detalles sobre cómo configurar PHP como ejecutable CGI en » http://benoit.noss.free.fr/php/install-php.html

Configuración de NSAPI en servidores Sun, iPlanet y Netscape

Para instalar PHP con NSAPI, haga lo siguiente:

  • Copie php4ts.dll al raíz de su sistema (directorio en que instaló Windows)
  • Haga la asociación de ficheros en la línea de comandos. Introduzca las siguientes líneas:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • En Netscape Enterprise Administration Server cree un nuevo tipo mime (Category: type, Content-Type: magnus-internal/x-httpd-php, File Suffix: php).
  • Edite magnus.conf (para servidores >= 6) o obj.conf (para servidores < 6) e introduzca lo siguiente: Debe ubicar estas líneas tras mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
    
    (PHP >= 4.3.3) El parámetro php_ini es opcional, pero usándolo se puede reubicar el fichero php.ini al directorio de configuración del servidor web.

  • Configure el objeto por omisión en obj.conf (para clases de servidores virtuales [Sun Web Server 6.0+] en su fichero vserver.obj.conf): En la sección <Object name="default">, añada esta línea tras los 'ObjectType' y antes de las líneas 'AddLog':

    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    
    (PHP >= 4.3.3) Se pueden añadir parámetros adicionales del tipo php.ini-values, por ejemplo, se puede especificar el docroot="/path/to/docroot" específico para el contexto en que se invoca a php4_execute. En las claves ini booleanas, debe usarse 0 o 1 como valor, y nunca "On","Off",... (no funcionará correctamente), p.ej. zlib.output_compression=1 en lugar de zlib.output_compression="On"

  • Esto sólo es necesario si se desea configurar un directorio que consista únicamente en scripts PHP (como en los directorios cgi-bin):

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    
    Tras eso, se puede configurar un directorio en la administración del servidor para asignarle el estilo x-httpd-php. Todos los ficheros que contenga se ejecutarán con PHP. Es útil para ocultar el uso de PHP, renombrando los ficheros a .html.

  • Reinicie el servidor web y aplique los cambios
  • Realícelo para cada instancia del servidor web en que desee ejecutar PHP

Nota:

Puede consultar más detalles sobre cómo configurar PHP como filtro NSAPI aquí: » http://benoit.noss.free.fr/php/install-php4.html

Nota:

El tamaño de pila de PHP depende de la configuración del servidor web. Si la ejecución de scripts extensos de PHP se detiene, se recomienda que lo propague con Admin Server (en la sección "MAGNUS EDITOR").

entornos CGI y modificaciones recomendadas en php.ini

Al escribir scripts PHP es importante tener en cuenta que Sun JSWS/Sun ONE WS/iPlanet/Netscape es un servidor web multihebra, ya que todas las peticiones se ejecutan en el espacio del mismo proceso (el espacio del propio servidor web) y este espacio sólo contiene un entorno de ejecución. Si se desea conocer variables CGI como PATH_INFO, HTTP_HOST, etc. no se debe hacer de la forma convencional con getenv() o similares (register globals del entorno, $_ENV). Sólo se obtendrá el entorno del servidor web en ejecución sin ninguna variable CGI válida.

Nota:

¿Pero por qué hay variables CGI (inválidas) en el entorno?

Respuesta: Se debe a que se inició el proceso del servidor web desde el servidor de administración que lanza el script de inicio del servidor web como un script CGI (¡un script CGI dentro del servidor de administración!). Ésta es la razón por la que el entorno del servidor web contiene algunas variables de entorno CGI. Puede comprobarlo iniciando el servidor web de otra forma. Acceda al terminal como administrador y arránquelo a mano - verá que ya no hay variables de entorno CGI.

Deben actualizarse los scripts, para que consulten variables CGI de la forma correcta para PHP 4.X, usando la superglobal $_SERVER. Si se tuvieran scripts antiguos que usaran $HTTP_HOST, etc., debería habilitarse register_globals en php.ini, así como cambiar la variable de orden (importante: elimine la "E", ya que aquí no se necesitan variables de entorno):

variables_order = "GPCS"
register_globals = On

Uso especial de páginas de error y listados de directorios personalizados (PHP >= 4.3.3)

Se puede utilizar PHP para generar páginas de error para "404 Not Found" o similar. Debe añadirse la siguiente línea al objeto en obj.conf para cada página de error que se desee redefinir:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
donde XXX es el código de error HTTP. Debe eliminarse todas las directivas Error que puedan colisionar con las nuevas. Si se desea crear una página genérica para todos los errores, debe omitirse el parámetro code. El script podrá consultar el código de estado HTTP en $_SERVER['ERROR_TYPE'].

Otra posibilidad es generar listados de directorios personalizados. Debe crearse un script PHP que liste el contenido de un directorio y reemplace la línea del servicio correspondiente para type="magnus-internal/directory" en obj.conf por lo siguiente:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
Tanto para la página de error como de listado de directorios, la URI original y la traducida están disponibles en las variables $_SERVER['PATH_INFO'] y $_SERVER['PATH_TRANSLATED'].

Anotaciones sobre nsapi_virtual() y subpeticioness (PHP >= 4.3.3)

El módulo NSAPI ahora soporta la función nsapi_virtual() (alias: virtual()) para hacer subpeticiones al sevidor web e insertar el resultado en la página web. El problema es que esta función utiliza algunas funcionalidades no documentadas de la biblioteca NSAPI.

En Unix esto no es un problema, porque el módulo automáticamente busca las funciones necesarias y las usa si estuvieran disponibles. Si no, nsapi_virtual() queda deshabilitado.

En Windows, las limitaciones del manejo de DLL necesitan emplear detección automática del fichero ns-httpdXX.dll más reciente. Se ha probado hasta en servidores versión 6.1. Si se utiliza una versión más reciente del servidor Sun, la detección falla y nsapi_virtual() se deshabilita.

Si este fuera el caso, debe probarse lo siguiente: Añada el siguiente parámetro a php4_init en magnus.conf/obj.conf:

Init fn=php4_init ... server_lib="ns-httpdXX.dll"
donde XX es el número de versión correcto de la DLL. Para conocerlo, busca en el raíz del servidor el nombre correcto de la DLL. La DLL de mayor tamaño es la adecuada.

Puede comprobar el estado usando la función phpinfo().

Nota:

Pero tenga en cuenta: El soporte para nsapi_virtual() es EXPERIMENTAL.



Sambar Server en Microsoft Windows

Esta sección contiene notas y consejos específicos a el » Servidor Sambar para Windows.

Nota:

Debe leer primero los pasos del manual de instalación.

Esta lista describe cómo configurar el módulo ISAPI para trabajar con el servidor Sambar en Windows.

  • Busque el archivo llamado mappings.ini (en el directorio de configuración) en el directorio de instalación de Sambar.

  • Abra mappings.ini y adicione la siguiente línea de abajo [ISAPI]:

    Ejemplo #1 Configuracion de Sambar ISAPI

        #for PHP 4
        *.php = c:\php\php4isapi.dll
    
        #for PHP 5
        *.php = c:\php\php5isapi.dll
        
    (Esta línea asume que PHP se instaló en c:\php.)

  • Ahora reinicie el servidor Sambar para que los cambios surtan efecto.

Nota:

Si va a usar PHP para comunicarse con los recursos que se celebran en un equipo diferente en la red, entonces usted tendrá que modificar la cuenta utilizada por los servicios de el servidor Sambar. La cuenta por defecto utilizado por el Servicio del servidor Sambar es LocalSystem que no tendrán acceso a recursos remotos. La cuenta puede ser modificada mediante el uso de la opción de servicios de Windows en el Panel de control de las herramientas de administración.



Xitami en Microsoft Windows

Esta sección contiene notas y sugerencias específicas para » Xitami en Windows.

Nota:

Debe leer primero los pasos del Manual de instalación.

Esta lista describe cómo configurar el PHP CGI binary para trabajar con Xitami en Windows.

Nota: Importante para los usuarios de CGI

Leer las preguntas frecuentes en cgi.force_redirect para más detalles importantes. Esta directiva se debe establecer a0. Si desea utilizar $_SERVER['PHP_SELF'] tienes que habilitar la directiva cgi.fix_pathinfo.

Advertencia

Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor, leer la sección Seguridad con CGI para aprender como defenderse de estos ataques.

  • Asegúrese de que el servidor web está funcionando, y apunte el navegador a la consola de administración xitamis (por lo general http://127.0.0.1/admin), Y haga clic en Configuración.

  • Navegue a los filtros, y ponga la extensión PHP que debe analizar (es decir, .php) en el campo de las extensiones del fichero(.xxx).

  • En el comando del filtro o script coloque la ruta y el nombre de el ejecutable PHP CGI es decir, C:\php\php.exe para PHP 4, o C:\php\php-cgi.exe para PHP 5.

  • Pulse el icono "Guardar".

  • Reinicie el servidor para reflejar los cambios.



Construcción de la fuente

En este capítulo se enseña a compilar PHP a partir de fuentes en Windows, usando Microsoft's tools. Para compilar PHP con cygwin, por favor vaya a Instalación sobre sistemas Unix.

Consulte la documentación del Wiki en: » http://wiki.php.net/internals/windows/stepbystepbuild



Instalación de extensiones en Windows

Después de instalar PHP y un servidor web en Windows, es probable que desee instalar algunas extensiones para mayor funcionalidad. Puede elegir cuales extensiones desea cargar cuando PHP inicia modificando php.ini. También puede cargar un módulo dinámicamente en el script con dll().

Los DLL para las extensiones PHP tienen el prefijo php_.

Algunas extensiones son construidas dentro de la versión de Windows de PHP. Esto significa que los ficheros DLL adicionales, y la extensión directiva, no se utiliza para cargar estas extensiones. En la tabla de Windows las extensiones PHP son enumeradas las extensiones que se requieren, se utilizan, ficheros PHP DLL adicionales. Aquí hay una lista de extensiones construidas:

En PHP 4 (actualización de PHP 4.3.11): BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML y Zlib

En PHP 5 (actualización de PHP 5.0.4), existen los siguientes cambios. Contruidos en: DOM, LibXML, Iconv, SimpleXML, SPL y SQLite. Y a continuación se enumeran los no construidos en: MySQL y Overload.

La ubicación predeterminada de las búsquedas PHP para las extensiones es C:\php4\extensions en PHP 4 y C:\php5 en PHP 5. Para cambiar estos parámetros reflejando la configuración de PHP, edite el fichero php.ini:

  • Tendrá que cambiar los parámetros de la extension_dir para apuntar al directorio donde está la extensión, o donde tenga localizado el fichero php_*.dll. Por ejemplo:

    extension_dir = C:\php\extensions

  • Habilite la extensión(s) en php.ini que desea utilizar descomentando las siguientes líneas extension=php_*.dll en php.ini. Esto se hace mediante el borrado de la cabecera, desde la extensión que desea cargar.

    Ejemplo #1 Habilitar la extensión Bzip2 para PHP-Windows

    // cambiar la siguiente línea de ...
    ;extension=php_bz2.dll
    
    // ... to
    extension=php_bz2.dll

  • Algunas de las extensiones de archivos necesita DLL extras para trabajar. Un par de ellos se puede encontrar en el paquete de distribución, en la carpeta C:\php\dlls\ en PHP 4 o en la carpeta principal en PHP 5, pero algunos, por ejemplo Oracle requieren (php_oci8.dll) ficheros DLL que no se incluyen con el paquete de distribución. Si va a instalar PHP 4, copie el paquete DLL de la carpeta C:\php\dlls a la carpeta principal C:\php. No se olvide de incluir en el sistema C:\php PATH (Este proceso se explica por separado en Preguntas Frecuentes de entrada).

  • Algunos de estos DLLs no se incluye con la distribución de PHP. Consulta cada página de documentación de las extensiones para más detalles. Además, lea el manual sección titulada Instalación de extensiones PECL para más detalles sobre PECL. Un gran número de extensiones de PHP se encuentran en PECL, y estas extensiones requieren una descarga independiente .

Nota: Si está ejecutando un servidor de la versión de PHP como módulo recuerde reiniciar su servidor web para reflejar los cambios a php.ini.

En la tabla siguiente se describen algunas de las extensiones disponibles y las dlls adicionales.

Extensiones de PHP
Extensión Descripción Notas
php_bz2.dll Funciones de compresión bzip2 Nada
php_calendar.dll Funciones de conversión Calendario Construido a partir de PHP 4.0.3
php_crack.dll Funciones Crack Nada
php_ctype.dll Funciones familiares ctype Construido a partir de PHP 4.3.0
php_curl.dll Funciones de la libreria cliente URL CURL Requiere: libeay32.dll, ssleay32.dll(incluido)
php_dba.dll DBA: Funciones de Capa de abstracción de la Base de datos (dbm-style) Nada
php_dbase.dll Funciones dBase Nada
php_dbx.dll Funciones dbx  
php_domxml.dll Funciones DOM XML PHP <= 4.2.0 Requiere: libxml2.dll (incluido) PHP >= 4.3.0 Requiere: iconv.dll (incluido)
php_dotnet.dll Funciones .NET PHP <= 4.1.1
php_exif.dll FuncionesEXIF php_mbstring.dll. y, php_exif.dll se debe cargar después de php_mbstring.dll en php.ini.
php_fbsql.dll Funciones FrontBase PHP <= 4.2.0
php_fdf.dll FDF: Formato de datos de formularios de funciones. Requiere: fdftk.dll (incluido)
php_filepro.dll Funciones filePro Acceso de sólo lectura
php_ftp.dll Funciones FTP Incorporado desde PHP 4.0.3
php_gd.dll Funciones de libreria de imagen GD Eliminada en PHP 4.3.2. También tenga en cuenta que las funciones de color verdadero no están disponibles en GD1, utilice en su lugar php_gd2.dll.
php_gd2.dll Funciones de libreria de imagen GD GD2
php_gettext.dll Funciones Gettext PHP <= 4.2.0 requiere gnu_gettext.dll (incluido), PHP >= 4.2.3 requiere libintl-1.dll, iconv.dll (incluido).
php_hyperwave.dll Funciones HyperWave Nada
php_iconv.dll Conversión de caracteres ICONV Requiere: iconv-1.3.dll (incluido), PHP >=4.2.1 iconv.dll
php_ifx.dll Funciones Informix Requiere: Librerias Informix
php_iisfunc.dll Funciones de administracion IIS Nada
php_imap.dll POP3 y Funciones NNTP IMAP Nada
php_ingres.dll Funciones Ingres Requiere: Librerias Ingres
php_interbase.dll Funciones InterBase Requiere: gds32.dll (incluido)
php_java.dll Funciones Java PHP <= 4.0.6 requiere: jvm.dll (incluido)
php_ldap.dll Funciones LDAP PHP <= 4.2.0 requiere libsasl.dll (incluido), PHP >= 4.3.0 requiere libeay32.dll, ssleay32.dll (incluido)
php_mbstring.dll Funciones Multi-Byte String Nada
php_mcrypt.dll Funciones Mcrypt Encryption Requiere: libmcrypt.dll
php_mhash.dll Funciones Mhash PHP >= 4.3.0 requiere: libmhash.dll (incluido)
php_mime_magic.dll Funciones Mimetype Requiere: magic.mime (incluido)
php_ming.dll Funciones para Flash Ming Nada
php_msql.dll Funciones mSQL Requiere: msql.dll (incluido)
php_mssql.dll Funciones MSSQL Requiere: ntwdblib.dll (incluido)
php_mysql.dll Funciones MySQL PHP >= 5.0.0, requiere libmysql.dll (incluido)
php_mysqli.dll Funciones MySQLi PHP >= 5.0.0, requiere libmysql.dll (libmysqli.dll en PHP <= 5.0.2) (incluido)
php_oci8.dll Funciones Oracle 8 Requiere: Librerias cliente Oracle 8.1+
php_openssl.dll Funciones OpenSSL Requiere: libeay32.dll (incluido)
php_overload.dll Funciones Object overloading Construido a partir de PHP 4.3.0
php_pdf.dll Funciones PDF Nada
php_pgsql.dll Funciones PostgreSQL Nada
php_printer.dll Funciones Printer Nada
php_shmop.dll Funciones Shared Memory Nada
php_snmp.dll Funciones SNMP Solo NT !
php_soap.dll Funciones SOAP PHP >= 5.0.0
php_sockets.dll Funciones Socket Nada
php_sybase_ct.dll Funciones Sybase Requiere: librerias cliente Sybase
php_tidy.dll Funciones Tidy PHP >= 5.0.0
php_tokenizer.dll Funciones Tokenizer Construido a partir de PHP 4.3.0
php_w32api.dll Funciones W32api Nada
php_xmlrpc.dll Funciones XML-RPC PHP >= 4.2.1 requiere: iconv.dll (incluido)
php_xslt.dll Funciones XSLT PHP <= 4.2.0 requiere sablot.dll, expat.dll (incluido). PHP >= 4.2.1 requiere sablot.dll, expat.dll, iconv.dll (incluido).
php_yaz.dll Funciones YAZ Requiere: yaz.dll (incluido)
php_zip.dll Ficheros Zip incluido Acceso de sólo lectura
php_zlib.dll Funciones de compresión ZLib Construido a partir de PHP 4.3.0



Linea de Comandos PHP en Microsoft Windows

Esta sección contiene notas y sugerencias específicas para conseguir ejecutar PHP en la línea de comandos para Windows.

Nota:

Usted debe leer primero el manual de instalación

Cómo ejecutar PHP desde la línea de comandos sin hacer ningún cambio a Windows.

C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

Pero hay algunos pasos sencillos que puede seguir para hacer esto simple. Algunas de estas medidas ya se deberían haber tomado, pero se repiten aquí para ser capaz de proporcionar una completa secuencia paso a paso.

  • Añada la ubicación del ejecutable de PHP (php.exe, php-win.exe o php-cli.exe dependiendo de su versión de PHP y las preferencias de presentación) a la variable de entorno PATH. Lea más acerca de cómo añadir el directorio de PHP PATH en la entrada correspondiente de preguntas frecuentes.

  • Adicione la extensión .PHP de la variable de entorno PATHEXT. Esto se puede hacer al mismo tiempo, con la modificación de la variable de entorno PATH. Siga los mismos pasos como se describe en las Preguntas frecuentes pero habría que modificar la variable de entorno PATHEXTen lugar de la variable de entornoPATH.

    Nota:

    La posición en que se coloca el .PHP determina qué secuencia de comandos o programa se ejecuta cuando hay nombre de archivos coincidentes. Por ejemplo, colocar .PHP antes de .BAT hará que el script se ejecute, en lugar de el archivo por lotes, si hay un fichero por lotes con el mismo nombre.

  • Asociar la extensión .PHP con un tipo de fichero. Esta se hace ejecutando el siguiente comando:

    assoc .php=phpfile
    

  • Asociar el tipo de fichero phpfile con el adecuado ejecutable PHP. Esto se hace ejecutando el siguiente comando:

    ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2
    

Si sigue estos pasos permitirá ejecutar scripts PHP desde cualquier directorio sin necesidad de escribir el ejecutable PHP o la extensión .PHP y todos los parámetros, será enviada a el script para el procesamiento.

En el ejemplo a continuación se detallan algunos de los cambios de registro que se puede hacer manualmente.

Ejemplo #1 Registro de cambios

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\PHP5\\php-win.exe,0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\PHP5\\php.exe\" -f \"%1\" -- %~2"

Con estos cambios el mismo comando se puede escribir como:

"C:\PHP Scripts\script" -arg1 -arg2 -arg3
O, si la ruta de acceso "C:\PHP Scripts" está en el variable de entorno PATH:
script -arg1 -arg2 -arg3

Nota:

Hay un pequeño problema si tiene intención de utilizar esta técnica y usar scripts PHP como filtro de línea de comandos, como el ejemplo a continuación:

dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
o
dir | script -arg1 -arg2 -arg3
Es posible que el script simplemente se cuelga y no salga nada. Para hacer esto operacional, es necesario hacer otro cambio en el registro.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
Información adicional sobre este tema se pueden encontrar en el » artículo de Microsoft: 321788




Instalación en las plataformas de Nube Informática

Tabla de contenidos

PHP instalará en la nube. A la nube de PHP!


Microsoft Azure

PHP instalará el » Azure cloud platform.

Ver acerca de » Azure SDK para PHP.



Amazon EC2

PHP instalará el » EC2 cloud platform.

Ver acerca de » AWS SDK for PHP.




Manejador de Procesos FastCGI (FPM)

Tabla de contenidos

FPM (FastCGI Process Manager) es una implementación alternativa al PHP FastCGI con algunas características adicionales (la mayoría) útiles para sitios web con mucho tráfico.

Estas características incluyen:

  • Manejo avanzado para detener/arrancar procesos de forma grácil;

  • Posibilidad de iniciar hilos de procesos con diferentes uid/gid/chroot/environment, escuchar en diferentes puertos y usar distintos php.ini (remplazando); safe_mode

  • Registro stdout y stderr;

  • Reinicio de emergencia en caso de destrucción accidental del caché opcode;

  • Soporte acelerado de subidas;

  • "slowlog" - scripts de registro de procesos (no sólo sus nombres, sin sus backtraces también, usando ptrace y similares para leer procesos execute_data remotos) que son inusualmente lentos;

  • fastcgi_finish_request() - Función especial para detener y descargar todos los datos mientras continua haciendo algún proceso más largo (conversión de vídeos, procesamiento de estadísticas, etc.);

  • Creación dinámico/estático de hilos;

  • Información básica del status SAPI (similar al mod_status de Apache);

  • Basado en archivos de configuración php.ini


Instalación

Compilando el código fuente

Para habilitar FPM en la compilación de PHP, debe añadirse --enable-fpm a la línea de configuración-

Hay otras opciones de configuración específicas de FPM (todas ellas optativas):

  • --with-fpm-user - usuario de FPM (por omisión - nobody).

  • --with-fpm-group - grupo de FPM (por omisión - nobody).



Configuración

FPM usa la sintaxis de php.ini para su archivo de configuración - php-fpm.conf.

Lista de directivas globales de php-fpm.conf

pid string

Ruta al archivo PID. Valor por defecto: none.

error_log string

Ruta al archivo de registro de errores. Default value: #INSTALL_PREFIX#/log/php-fpm.log.

log_level string

Nivel de registro de errores. Posibles valores: alert, error, warning, notice, debug. Valor por defecto: notice.

emergency_restart_threshold int

Si este número de procesos termina con SIGSEGV o SIGBUS dentro del intervalo de tiempo establecido por emergency_restart_interval entonces FPM se reiniciará. Un valor de 0 corresponde a 'Off'. Valor por defecto: 0 (Off).

emergency_restart_interval mixed

Intervalo de tiempo usado por emergency_restart_interval para determinar cuando un reinicio agraciado será realizado. Esto puede ser útil trabajar sobre corrupciones accidentales in en acelerador de memoria compartida. Unidades disponibles:: s(segundos), m(inutos), h(oras), o d(ías). Unidad por defecto: segundos. Valor por defecto: 0 (Off).

process_control_timeout mixed

Límite de tiempo que un hilo de proceso espera por una señal maestra. Unidades disponibles: s(egundos), m(inutos), h(oras), o d(ías) Unidad por defecto: segundos. Valor por defecto: 0.

daemonize boolean

Envía a FPM al background. Establezca a 'no' para mantener FPM en foreground para depuración. Valor por defecto: yes.

Lista de directivas de grupo

Con FPM usted puede correr varios grupos de procesos con diferentes ajustes. Estos son los parámetros que pueden ser ajustados por grupo.

listen string

La dirección sobre la cual desea aceptar peticiones FastCGI. Las sintaxis válidas son: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket'. Estas opciones son obligatorias por cada grupo.

listen.backlog int

Establece listen(2) backlog. Un valor de '-1' significa ilimitado. Valor por defecto: -1.

listen.allowed_clients string

Lista de direcciones ipv4 de clientes FastCGI que tienen permiso para conectarse. El equivalente a la variable de entorno FCGI_WEB_SERVER_ADDRS en el PHP FastCGI (5.2.2+) original. Tiene sentido solamente con un socket tcp escuchando. Cada dirección debe ser separada por coma. Si este valor es dejado en blanco, las conexiones serán aceptas desde cualquier dirección ip. Valor por defecto: any.

listen.owner string

Establece permisos para sockets unix, si uno es usado. En Linux, los permisos de lectura/escritura deben ser puestos a fin de permitir conexiones desde un servidor web. Muchos sistemas derivados de BSD permiten conexiones sin considerar los permisos. Valor por defecto: usuario y grupo son establecidos según el usuario ejecutor, permisos puestos a 0666.

listen.group string

Ver listen.owner.

listen.mode string

Ver listen.owner.

user string

Usuario Unix de procesos FPM. Esta opción es obligatoria.

group string

Grupo Unix group of FPM processes. Si no es establecido, el grupo del usuario por defecto sera usado.

pm string

Seleccione cómo el manejador de procesos controlará el número de hilos de procesos. Valores posibles: static, ondemand, dynamic. Esta opción es obligatoria.

static - el número de hilos de proceso es fijo (pm.max_children).

ondemand - el proceso se lanza en demanda (cuando se solicita, al contrario que dynamic, donde pm.start_servers son iniciados cuando el servicio está iniciado.

dynamic - el número de hilos de proceso será basado dinámicamente basado en las siguientes directivas: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int

El número de hilos de procesos a ser creados cuando pm es puesto a static y el máximo número de hilos de proceso a ser creados cuando pm es puesto a dynamic. Esta opción es obligatoria.

Esta opción establece el límite sobre el número de peticiones simultaneas que serán servidas. Equivale a la directiva ApacheMaxClients con mpm_prefork y a la variable de entorno PHP_FCGI_CHILDREN del PHP FastCGI original.

pm.start_servers in

Número de hilos de procesos creados al inicio. Usado solamente cuando pm es puesto a dynamic. Valor por defecto: min_spare_servers + (max_spare_servers - min_spare_servers) / 2.

pm.min_spare_servers int

El número mínimo deseado de procesos libres en el servidor. Usado sólo cuando pm es puesto a dynamic. También obligatorio en este caso.

pm.max_spare_servers int

El número máximo deseado de procesos libres en el servidor. usado sólo cuando pm es puesto a dynamic. También obligatorio en este caso.

pm.max_requests int

El número de pedidos que cada hilo de proceso debe ejecutar antes de reaparecer. Esto puede ser útil para evitar las fugas de memoria en librerías de terceros. para el procesamiento de solicitudes sin límites especifique '0'. Equivale a PHP_FCGI_MAX_REQUESTS. Valor por defecto: 0.

pm.status_path string

La dirección URI para ver la página de status FPM. Si este valor no es establecido, ninguna dirección URI será reconocida como una página de status. Valor por defecto: none.

ping.path string

La dirección URI del ping para llamar a la página de monitor del FPM. Si este valor no es establecido, ninguna dirección URI será reconocida como página del ping. Esto debería ser usado para probar desde el exterior que el FPM está funcionando y respondiendo. Por favor, note que este valor debe empezar con un slash (/).

ping.response string

Esta directiva puede ser usada para personalizar las peticiones de respuestas a ping. La respuesta es formateada como text/plain con un código de respuesta 200. Valor por defecto: pong.

request_terminate_timeout mixed

El tiempo de espera para servir una simple petición luego que el proceso worker sea eliminado. Esta opción debe ser usada cuando la opción 'max_execution_time' no detenga la ejecuciuón del script por cualquier razón. Un valor de '0' corresponde a 'Off'. Unidades disponibles: s(egundos)(por defecto), m(inutos), h(horas), or d(ías). Default value: 0.

request_slowlog_timeout mixed

El tiempo de espera para servir una simple petición después de que un backtrace PHP sea volcado al archivo 'slowlog'. Un valor de '0' corresponde a 'Off'. Unidades disponibles: s(egundos)(por defecto), m(inutos), h(oras), or d(ías). Valor por defecto: 0.

slowlog string

El archivo de registro para peticiones lentas. Valor por defecto: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int

Establece el archivo descriptor rlimit. Valor por defecto: definido por el sistema.

rlimit_core int

Establece el tamaño máximo del rlimit. Valores posibles: 'unlimited' o un entero mayor o igualo a 0. Valor por defecto: definido por el sistema.

chroot string

Establece el Chroot (enjaulado) a este directorio al inicio. Este valor debe ser definido como una ruta absoluta. Cuando este valor no es establecido, el chroot no es usado.

chdir string

Establece el Chdir a este directorio al inicio. Este valor debe ser establecido como una ruta absoluta. Valor por defecto: directorio actual o / cuando está en chroot (enjaulado).

catch_workers_output boolean

Redirige los worker stdout y stderr en el archivo de registro principal. Sí no es establecido, stdout y stderr serán redirigidos a /dev/null de acuerdo a las especificaciones FastCGI. Valor por defecto: no.

Es posible pasar las variables de entorno adicionales y actualizar los ajustes PHP de ciertos grupos. Para ello, se necesita agregar las siguientes opciones a php-fpm.conf

Ejemplo #1 Pasando variables de entorno y ajustando las configuraciones de PHP por grupos

env[HOSTNAME] = $HOSTNAME
       env[PATH] = /usr/local/bin:/usr/bin:/bin
       env[TMP] = /tmp
       env[TMPDIR] = /tmp
       env[TEMP] = /tmp

       php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
       php_flag[display_errors] = off
       php_admin_value[error_log] = /var/log/fpm-php.www.log
       php_admin_flag[log_errors] = on
       php_admin_value[memory_limit] = 32M
Los ajustes PHP pasados con php_value o php_flag serán sobre-escritos a sus valores previos. Por favor note que definiendo disable_functions o disable_classes no sobre-escribirá los valores de definiciones anteriores php.ini, pero añadirán nuevos en cambio.

Ajustes definidos con php_admin_value and php_admin_flag cannot be anulados con ini_set().




Instalación de extensiones PECL

Tabla de contenidos


Introducción a las Instalaciones en PECL

» PECL es un respositorio de extensiones de PHP disponible mediante el sistema de paquetes » PEAR. Esta sección del manual tiene por objetivo ilustrar cómo obtener e instalar extensiones PECL.

Estas instrucciones asumen que la ruta al fuente de su distribución de PHP es /your/phpsrcdir/, y que extname es el nombre de la extensión PECL. Ajuste a sus valores. Estas instruccines, además, asumen conocimientos del » comando pear. La información del manual de PEAR para el comando pear también es aplicable al comando pecl.

Para poder usarse, una extensión compartida se debe construir, instalar, y cargar. Los métodos descritos abajo le proporcionan varias instrucciones para construir e instalar extensiones, pero no se cargarán automáticamente. Éstas se pueden cargar añadiendo una directivaextension. O bien al fichero php.ini, o bien mediante el uso de la función dl().

Al construir un módulo PHP, es importante contar con las versiones correctas de las herramientas requeridas (autoconf, automake, libtool, etc.). Para conocer los detalles de las herramientas requeridas y sus versiones, revise las » Instrucciones del SVN Anónimo.



Descarga de extensiones PECL

Existen varias opciones para descargar extensiones PECL, a saber:

  • El comando pecl install extname descarga el código de la extensión automáticamente, de modo que en este caso no se hace necesario realizar una descarga por separado.
  • » http://pecl.php.net/ La página web de PECL contiene información sobre las diferentes extensiones que ofrece el Equipo de Desarrollo de PHP. La información disponible aquí incluye: ChangeLog, notas de la versión, requisitos, y otros detalles similares.
  • pecl download extname Puede descargar e instalar las extensiones PECL listadas en el sitio web de PECL usando el » comando pecl. También se podrán especificar versiones concretas.
  • SVN La mayor parte de las extensiones PECL también están alojadas en SVN. Puede consultar la interfaz web en » http://svn.php.net/viewvc/pecl/. Para descargar directamente del SVN, debe usar la siguiente secuencia de comandos:


    $ svn checkout http://svn.php.net/repository/pecl/extname/trunk extname

  • Descargas para Windows Actualmente el proyecto PHP no compila binarios para Windows de las extensiones PECL. En cualquier caso, para compilar PHP bajo Windows, revise el capítulo titulado construcción de la fuente en Windows.


Instalación una extensión de PHP en Windows

Dispone de dos formas para cargar extensiones PHP en Windows: o bien compilándolas en PHP, o bien cargando su DLL. El método recomendado y más sencillo es cargar una extensión pre-compilada.

Para cargar una extensión, debe estar disponible como fichero ".dll" en su sistema. Todas las extensiones son compiladas por el Grupo PHP automática y periódicamente (revise la siguiente sección para realizar descargas).

Para compilar una extensión en PHP, por favor, acceda a la documentación de construcción de la fuente.

Para compilar una extensión independiente (o lo que es lo mismo, un fichero DLL), por favor, revise la documentación de construcción de la fuente. Si el fichero DLL no está disponible ni en su distribución de PHP ni en PECL, deberá compilarla antes de poder comenzar a usarla.

¿Dónde encontrar una extensión?

Las extensiones de PHP generalmente se llaman "php_*.dll" (donde el asterisco representa el nombre de la extensión) y se localizan bajo la carpeta "PHP\ext" ("PHP\extensions" en PHP 4).

PHP se distribuye con las extensiones más útiles para la mayoría de desarrolladores. Se les llama extensiones del "núcleo".

En cualquier caso, si necesita una funcionalidad que no proporciona ninguna de las extensiones del núcleo, podrá buscarla en PECL. La Biblioteca de la Comunidad de Extensiones de PHP (PECL) es un repositorio de extensiones PHP, que proporciona un directorio de todas las extensiones conocidas, y aloja utilidades para descargar y desarrollar extensiones de PHP.

Si usted ha desarrollado una extensión para su propio uso, quizá quiera considerar alojarla en PECL, de forma que otros desarrolladores con las mismas necesidades puedan verse beneficiados de su tiempo. Una de las ventajas es que tendrá la oportunidad de recibir colaboración, (ojalá) agradecimientos, informes de errores, e incluso parches/correcciones. Antes de enviar su extensión para ser alojada en PECL, por favor, lea http://pecl.php.net/package-new.php.

¿Qué extensión descargar?

A menudo, encontrará varias versiones de cada DLL:

  • Números de versión diferentes (al menos los dos primeros números deben coincidir)
  • Diferentes ajustes de seguridad en hilos
  • Diferentes arquitecturas de procesadores (x86, x64, ...)
  • Diferentes ajustes de depuración
  • etc.

Debe tener en cuenta que los ajustes de su extensión deben coincidir con la configuración del ejecutable de PHP que está utilizando. El siguiente script de PHP le dirá todo sobre sus ajustes de PHP:

Ejemplo #1 llamada a phpinfo()

<?php
phpinfo
();
?>

O ejecute desde la línea de comandos:

drive:\\path\to\php\executable\php.exe -i

Cargando una extensión

La forma más común de cargar una extensión PHP consiste en incluirla en el fichero de configuración php.ini. Por favor, tenga en cuenta que ya hay muchas extensiones presentes en el fichero php.ini y que sólo es necesario eliminar el punto y coma para activarlas.

;extension=php_extname.dll
extension=php_extname.dll

Sin embargo, algunos servidores web puede resultar confusos, dado que no utilizan el php.ini ubicado junto al ejecutable de PHP. Para averiguar dónde se localiza el php.ini en uso, consulte su ruta usando phpinfo():

Configuration File (php.ini) Path  C:\WINDOWS
Loaded Configuration File   C:\Program Files\PHP\5.2\php.ini

Tras activar una extensión, guarde el fichero php.ini, reinicie el servidor web y vuelva a comprobar phpinfo(). La nueva extensión debe ahora tener su propia sección.

Resolviendo problemas

Si la extensión no aparece en phpinfo(), compruebe los registro de errores para conocer qué provoca el problema.

Si está utilizando PHP desde la línea de comandos (CLI), podrá leer directamente en pantalla el error en la carga de la extensión.

Si está usando PHP en un servidor web, la localización y formato de los registros vería en función de su software. Por favor, lea la documentación de su servidor web para localizar los registros, dado que esto no lo gestiona el propio ejecutable de PHP.

Los problemas más comunes son la ubicación del fichero DLL, el valor de " extension_dir" en php.ini, y desajustes de configuración en tiempo de compilación.

Si el problema reside en desajustes de configuración en tiempo de compilación, seguramente se deba a que no se ha descargado el fichero DLL correcto. Pruebe a descargar de nuevo la extensión con los ajustes correctos. De nuevo, phpinfo() puede resultar de gran ayuda.



Compilando extensiones PECL compartidas con el comando pecl

PECL facilita la creación de extensiones PHP compartidas. Usando el » comando pecl, haga lo siguiente:


$ pecl install extname

Esto descargará el código fuente de extname, lo compilará, e instalará extname.so en su extension_dir. Ahora se puede cargar extname.so mediante php.ini

Por omisión, el comando pecl no instalará paquetes marcados en los estados alpha o beta. Si no hay paquetes disponibles en estado stable, podrá instalar un paquete en estado beta utilizando el siguiente comando:


$ pecl install extname-beta

Del mismo modo, podrá también instalar una versión en concreto usando esta variante:


$ pecl install extname-0.1

Nota:

Tras activar la extensión en php.ini, será necesario reiniciar el servidor web para hacer efectivos los cambios.



Compilando extensiones PEC compartidas con phpize

A menudo no es posible utilizar el instalador pecl. Esto se puede deber a que se encuentra tras un cortafuegos, o a que la extensión que trata de instalar no está disponible como paquete compatible con PECL, como por ejemplo extensiones no liberadas desde el SVN. Si necesita construir una extensión de este tipo, puede llevar a cabo esta tarea manualmente utilizando las herramientas de construcción de bajo nivel.

El comando phpize se utiliza para preparar el entorno de compilación de la extensión de PHP. En el siguiente ejemplo, el fuente de una extensión se ubica en un directorio llamado extname:

$ cd extname
$ phpize
$ ./configure
$ make
# make install

En caso de que la instalación sea correcta, se creará extname.so y se salvará en el directorio de extensiones de PHP. Quizá necesite ajustar el fichero php.ini y añadir una línea extension=extname.so antes de poder usar la extensión.

Si el sistema no contiene el comando phpize, y se están utilizando paquetes pre-compilados (como RPM), asegúrese de instalar también la versión de desarrollo apropiada del paquete PHP, dado que a menudo incluyen el comando phpize con los ficheros de cabeceras necesarios para construir PHP y sus extensiones.

Ejecute phpize --help para mostrar información de uso adicional.



php-config

php-config es una utilidad de consola que permite obtener información sobre la configuración de la instalación de PHP.

A la hora de compilar extensiones, si se tuvieran varias versiones de PHP instaladas, se podrá especificar sobre cuál se va a construir usando el modificador --with-php-config durante la configuración, donde especificaremos la ruta a su respecto script php-config.

En cualquier momento podrá consutlarse la lista de opciones de la utilidad php-config ejecutando php-config con el modificador -h :

Usage: /usr/local/bin/php-config [OPTION]
Options:
  --prefix            [...]
  --includes          [...]
  --ldflags           [...]
  --libs              [...]
  --extension-dir     [...]
  --include-dir       [...]
  --php-binary        [...]
  --php-sapis         [...]
  --configure-options [...]
  --version           [...]
  --vernum            [...]

Opciones de línea de comandos
Opción Descripción
--prefix Prefijo del directorio donde PHP está instalado, p.ej. /usr/local
--includes Lista de opciones -I con todos los ficheros incluídos
--ldflags Banderas LD con las que se ha compilado PHP
--libs Bibliotecas extras con las que se ha compilado PHP
--extension-dir Directorio en el que se buscan por omisión las extensiones
--include-dir Prefijo de directorio donde se buscan por omisión los ficheros de cabeceras
--php-binary Ruta completa al binario de php CLI o CGI
--php-sapis Muestra todos los módulos SAPI disponibles
--configure-options Opciones de configuración para recrear la configuración de la instalación actual de PHP
--version Versión de PHP
--vernum Versión de PHP en forma de entero



Compilando extensiones PECL estáticamente en PHP

Quizá necesite construir una extensión PECL estáticamente en su binario de PHP. Para hacer esto, necesitará ubicar el fuente de la extensión bajo el directorio php-src/ext/ e indicarle al sistema de construcción de PHP que regenere su script de configuración.

$ cd /your/phpsrcdir/ext
$ pecl download extname
$ gzip -d < extname.tgz | tar -xvf -
$ mv extname-x.x.x extname

Esto generará el siguiente directorio:


/your/phpsrcdir/ext/extname

Desde aquí, fuerce a PHP a regenerar el script de configuración, y entonces construya PHP con normalidad:


$ cd /your/phpsrcdir
$ rm configure
$ ./buildconf --force
$ ./configure --help
$ ./configure --with-extname --enable-someotherext --with-foobar
$ make
$ make install

Nota: Necesitará autoconf 2.13 y automake 1.4+ para ejecutar el script 'buildconf' (es posible que funcionen versiones más recientes de autoconf, pero no están oficialmente soportadas).

Dependiendo de la extensión, utilizará --enable-extname o --with-extname. Las extensiones que no requieren de bibliotecas externas generalmente utilizan --enable. Para asegurarse, ejecute el siguiente comando después de buildconf:


$ ./configure --help | grep extname




¿Problemas?

Tabla de contenidos


Lea el FAQ

Algunos problemas son más comunes que otros. Los más comunes están listados en la parte del manual PHP FAQ.



Otros problemas

Si sigue bloqueado, seguramente alguien de la lista de correo de la instalación de PHP podrá ayudarle. Se debe consultar el archivo primero, para comprobar si alguien ya haya contestado a otra persona que haya tenido el mismo problema. Los archivos están disponibles desde la página de soporte en » http://www.php.net/support.php. Para subscribirse a la lista de correo de la instalación de PHP (en Inglés), envíe un E-Mail vacío a » php-install-subscribe@lists.php.net. La lista de correo es » php-install@lists.php.net.

Si quiere obtener ayuda de la lista de correo, por favor trate de ser preciso y dar toda la información necesaria a cerca de su entorno (qué sistema operativo, que versión de PHP, que tipo de servidor web, si está usando PHP como GCI o como módulo, safe mode, etc.), y preferiblemente suficiente código para que otras personas sean capaces de reproducir y comprobar su problema.



Informar sobre bugs

Si cree que ha encontrado un bug en PHP, por favor informe. Los desarrolladores de PHP probablemente no están informados a cerca del problema y a no ser que lo mencione, es muy provable que no sea solucionado. Puede informar sobre bugs usando el sistema de bug-tracking en » http://bugs.php.net/. Por favor no envie informes de bugs a listas de correos o cartas personales. El sistema de bugs también está capacitado para enviar sugerencias y peticiones.

Lea el documento » Como informar sobre bugs antes de enviar cualquier informe de bugs!




Runtime Configuration

Tabla de contenidos


El fichero de configuración

Cuando PHP inicia, lee el fichero de configuración (php.ini). En las versiones en que PHP funciona como módulo de servidor, esto sucede únicamente cuando se arranca el servidor. Para las versiones CGI y CLI, esto ocurre en cada ejecución.

Se trata de encontrar al fichero php.ini en las siguientes localizaciones (en orden):

  • Localización específica de módulo SAPI (directiva PHPIniDir en Apache 2, opción de línea de comandos -c en CGI y CLI, parámetro php_ini en NSAPI, variable de entorno PHP_INI_PATH en THTTPD)
  • En la variable de entorno PHPRC. Antes de PHP 5.2.0 esta localización se comprobaba después de la clave de registro descrita más abajo.
  • A partir de PHP 5.2.0, se puede establecer la localización del fichero php.ini para diferentes versiones de PHP. Se examinan en orden las siguientes claves de registro: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] y [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], donde 'x', 'y' y 'z' identifican la versión mayor, menor y edición de PHP. Si hubiera un valor para IniFilePath en cualquiera de estas claves, la primera en ser encontrada se utilizaría como localización del fichero php.ini (solo en Windows).
  • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP], valor de IniFilePath (solo en Windows).
  • Directorio actual de trabajo (excepto CLI)
  • El directorio del servidor web (para módulos SAPI), o el directorio de PHP (excepto en Windows)
  • Directorio de Windows (C:\windows o C:\winnt) (para Windows), o --with-config-file-path en tiempo de compilación

Si existiera el fichero php-SAPI.ini (donde SAPI es la SAPI en uso, de manera que, por ejemplo, php-cli.ini o php-apache.ini), se usaría éste en lugar de php.ini. Se puede determinar el nombre de la SAPI usando php_sapi_name().

Nota:

El servidor web Apache cambia el directorio al raíz al arrancar, haciendo que PHP intente leer php.ini desde la raíz del sistema de ficheros si éste existe.

Las directivas de php.ini manejadas por extensiones están documentadas en la propia página de cada extensión. Hay una lista de directivas del núcleo disponible en el apéndice. Es posible que no todas las directivas de PHP estén documentadas en el manual. Para consultar una lista completa de las directivas disponibles en tu versión de PHP, por favor, revise la versión de su fichero php.ini que incluye todos los comentarios. Adicionalmente, puede encontrar útil » el último php.ini del SVN.

Ejemplo #1 Ejemplo de php.ini

; todo texto en una línea tras un punto y coma sin comillas (;) será ignorado
[php] ; los marcadores de sección (textos entre corchetes) también se ignoran
; Los valores de tipo Boolean puede establecerse a:
;    true, on, yes
; o  false, off, no, none
register_globals = off
track_errors = yes

; puedes encerrar tus strings en comillas dobles
include_path = ".:/usr/local/lib/php"

; las barras reciben el mismo tratamiento que el resto de caracteres
include_path = ".;c:\php\lib"

A partir de PHP 5.1.0, es posible hacer referencia a variables .ini ya existentes desde el propio fichero .ini. Ejemplo: open_basedir = ${open_basedir} ":/new/dir".



ficheros .user.ini

A partir de PHP 5.3.0, PHP incluye soporte para ficheros INI tipo .htaccess a nivel de directorios. Estos ficheros solo los procesa la SAPI CGI/FastCGI. Esta funcionalidad deja obsoleta la extensión PECL htscanner. Si está usando Apache, use los ficheros .htaccess para lograr el mismo efecto.

Además del fichero php.ini principal, PHP escanea en busqueda de ficheros INI en cada directorio, empezando por el directorio del fichero PHP solicitado, y continuando hasta el documento raíz actual (tal y como está establecido en $_SERVER['DOCUMENT_ROOT']). En el caso de que el fichero PHP se encuentre fuera del documento raíz, sólo se escaneará su directorio.

En los ficheros INI .user.ini sólo se reconocerán las cofiguraciones INI que tengan los modos PHP_INI_PERDIR y PHP_INI_USER.

Las dos nuevas directivas INI, user_ini.filename y user_ini.cache_ttl controlan el uso de los ficheros INI de usuarios.

user_ini.filename fija el nombre del fichero que PHP buscará en cada directorio; si se fija un string vacío, PHP directamente no realizará ninguna búsqueda. El nombre por omisión es .user.ini.

user_ini.cache_ttl controla con qué frecuencia se reescanean los ficheros INI de usuario. El valor por omisión es 300 segundos (5 minutos).



Dónde realizar un ajuste de configuración

Estos modos determinan cuándo y dónde se debe o no asignar una directiva PHP, y cada directiva del manual hace referencia a uno de estos modos. Por ejemplo, algunos ajustes pueden establecerse en scripts PHP usando ini_set(), mientras que otros requieren hacerlo en php.ini o en httpd.conf.

Por ejemplo, el ajuste de output_buffering es PHP_INI_PERDIR por tanto no puede establecerse usando ini_set(). Sin embargo, la directiva display_errors es PHP_INI_ALL por tanto se puede establecer en cualquier lugar, incluso con ini_set().

Definición de los modos PHP_INI_*
Modo Significado
PHP_INI_USER La entrada se puede fijar en scripts de usuario (como con ini_set()) o en el registro de Windows
PHP_INI_PERDIR La entrada se puede fijar en php.ini, .htaccess o en httpd.conf
PHP_INI_SYSTEM La entrada se puede fijar en php.ini o en httpd.conf
PHP_INI_ALL La entrada se puede fijar en cualquier lugar



Cómo cambiar los ajustes de configuración

Ejecutando PHP como un módulo de Apache

Cuando se usa PHP como un módulo de Apache, puede cambiar los ajustes de configuración usando directivas en los ficheros de configuración de Apache (p. ej. httpd.conf) y en los ficheros .htaccess. Necesitará los privilegios "AllowOverride Options" o "AllowOverride All" para poder hacerlo.

Existen varias directivas de Apache que permiten cambiar la configuración de PHP desde los propios ficheros de configuración de Apache. Para consultar un listado de qué directivas son PHP_INI_ALL, PHP_INI_PERDIR, o PHP_INI_SYSTEM, consulte el apéndice de la Lista de directivas de php.ini.

php_value nombre valor

Fija el valor de la directiva especificada. Sólo puede usarse con las directivas de tipo PHP_INI_ALL y PHP_INI_PERDIR. Para dejar en blanco un valor previamente establecido, use none como valor.

Nota: No use php_value para fijar valores boolean. Debe usarse en su lugar php_flag (ver más abajo).

php_flag name on|off

Usado para fijar una directiva de configuración de tipo boolean. Sólo puede usarse con las directivas de tipo PHP_INI_ALL y PHP_INI_PERDIR.

php_admin_value name value

Fija el valor de la directiva especificada. Esto no se puede usar en ficheros .htaccess. Ninguna directiva fijada con php_admin_value podrá ser sobrescrita por .htaccess o por ini_set(). Para borrar un valor fijado previamente use none como valor.

php_admin_flag name on|off

Usado para fijar una directiva de configuración de tipo boolean. Esto no se puede usar en ficheros .htaccess. Ninguna directiva fijada con php_admin_flag podrá ser sobcrescrita por .htaccess o por ini_set().

Ejemplo #1 Ejemplo de configuración de Apache

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag engine on
</IfModule>

Precaución

Las constantes de PHP no existen fuera de PHP. Por ejemplo, en httpd.conf no puede usar constantes de PHP tales como E_ALL o E_NOTICE para fijar la directiva error_reporting puesto que no tendrán ningún significado y se evaluarán a 0. Use en su lugar la máscara de bits asociada. Estas constantes sí pueden ser usadas en php.ini

Cambiar la configuración de PHP a partir del registro de Windows

Cuando se ejecuta PHP en Windows, se pueden modificar los valores de configuración a nivel de directorio usando el registro de Windows. Los valores de configuración se almacenan en la clave de registro HKLM\SOFTWARE\PHP\Per Directory Values, en las sub-claves correspondientes al path. Por ejemplo, los valores de configuración para el directorio c:\inetpub\wwwroot se almacenarían en la clave HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot. Los ajustes para el directorio estarían activos para cualquier script dentro de este directorio o en cualquier de sus subdirectorios. Los valores bajo esta clave deben tener el nombre de la directiva de configuración de PHP y su valor. Las constantes de PHP usadas como valor no serán procesadas. En cualquier aso, únicamente los valores de configuración modificables presentes en PHP_INI_USER podrán fijarse con este método, mientras que los valores en PHP_INI_PERDIR no.

Otras interfaces a PHP

Independientemente de cómo ejecute PHP, puede cambiar determinados valores de sus scripts en tiempo de ejecución mediante ini_set(). Consulte la documentación en la página ini_set() para más información.

Si está interesado en una lista completa de los ajustes de configuración en su sistema con sus parámetros actuales, puede ejecutar la función phpinfo(), y consultar la página mostrada. Puede también acceder a los valores de directivas de configuración concretas usando ini_get() o get_cfg_var().





Referencia del lenguaje


Sintaxis básica

Tabla de contenidos


Etiquetas de PHP

Cuando PHP interpreta un fichero, busca por las etiquetas de apertura y cierre, que son <?php y ?> las cuales indican a PHP dónde empezar y finalizar la interpretación del código. Este mecanismo permite a PHP ser incrustado en todo tipo de documentos, todo lo que esté fuera de las etiquetas de PHP será ignorado por el interpretador.

PHP también permite etiquetas lsa cortas <? y ?> (las que están desaconsejadas debido a que sólo están disponibles si se habilita con la directiva del fichero de configuración php.ini short_open_tag, o si PHP se configuró con la opción --enable-short-tags .

Si un fichero contiene código PHP puro, es preferible omitir la etiqueta de cierre de PHP al final del fichero. Esto previene de espacios en blanco o nuevas líneas después de la etiqueta de cierre de PHP que pueden causar efectos no deseados debido a que PHP iniciará el buffer de salida cuando no había intención por parte del programador de enviar ninguna salida en ese punto del script.

<?php
echo "Hola mundo";

// ... más código

echo "Última sentencia";

// el script finaliza aquí sin etiqueta de cierre de PHP



Salir de HTML

Cualquier cosa fuera del par de etiquetas de apertura y cierre es ignorado por el analizador de PHP, el cual permite los ficheros de PHP tengan contenido mixto. Esto permite que PHP sea embebido en documentos HTML, por ejemplo para crear plantillas.

<p>Esto va a ser ignorado por PHP y mostrado por el navegador.</p>
<?php echo 'Mientras que esto va a ser analizado.'?>
<p>Esto también será ignorado por PHP y mostrado por el navegador.</p>
Esto funciona como se espera, porque cuando PHP intercepta las etiquetas de cierre ?>, simplemente comienza a imprimir cualquier cosa que encuentre (a excepción de un una nueva lína inmediatamente después - véase separación de instrucciones) haste que dé con otra etiqueta de apertura a menos que se encuentre en mitad de una sentencia condicional, en cuyo caso el intérprete determinará el resultado de la condición antes de tomar una decisión de lo que tiene que saltar. Véase el siguiente ejemplo.

Usar estructuras con condiciones

Ejemplo #1 Advanced escaping using conditions

<?php if ($expresión == true): ?>
  Esto se mostrará si la expresión es verdadera.
<?php else: ?>
  En caso contrario se mostrará esto.
<?php endif; ?>
En este ejemplo PHP saltará los bloques donde la condición no se cumpla, incluso si están fuera de las etiquetas de apertura/cierre de PHP, PHP los saltará según la condición ya que el intérprete de saltará por encima de los bloques contenidos dentro de una condición que no se cumpla.

Para salir de bloques de texto grandes, es más eficiente abandonar el modo analítico de PHP que enviar todo el texto a través de echo o print.

Existen cuatro tipos de pares de etiquetas de apertura y de fin de bloque que se pueden usar en PHP. Dos de estas, <?php ?> y <script language="php"> </script>, siempre están disponibles. Las otras dos son etiquetas cortas y etiquetas estilo ASP y se pueden activar o desactivar desde el fichero de configuración php.ini Aunque para algunas personas las etiquetas cortas y etiquetas estilo ASP las encuentran más convenientes, son menos portables y generalmente no recomendadas.

Nota:

Observe también que si se está incrustando PHP con XML o XHTML necesitará usar las etiquetas <?php ?> para seguir los estándares.

Ejemplo #2 Etiquetas de apertura y de fin de bloque de PHP

1.  <?php echo 'si se quiere mostrar documentos XHTML o XML, debe hacerse así'?>

2.  <script language="php">
        
echo 'algunos editores (como FrontPage) no les gusta
              las instruciones de proceso'
;
    
</script>

3.  <? echo 'esta es la forma más simple, una instrución de procesado SGML'?>
    <?= expression ?> Esto es una forma corta para "<? echo expression ?>"

4.  <% echo 'Quizá use de forma opcional etiquetas de estilo ASP'; %>
    <%= $variable; # Esto es una forma corta para "<% echo . . ." %>

Las etiquetas vistas en los ejemplos uno y dos están siempre disponibles, el ejemplo uno es el más común y recomendado de los dos.

Las etiquetas cortas (ejemplo tres) están solo disponibles cuando se activan mediante la directiva short_open_tag en el fichero de configuración php.ini o si PHP se configuró con la opción --enable-short-tags .

Las etiquetas de estilo ASP (ejemplo cuatro) están solo disponibles cuando se activan mediante la directiva asp_tags en el fichero de configuración php.ini.

Nota:

El uso de etiquetas cortas debe ser evitado cuando se desarrollan aplicaciones o librerias que están pensadas para su redistribución, o extender en servidores PHP que no están bajo su control, porque quizá las etiquetas cortas no están soportadas en un servidor determinado. Por portabilidad, redistribución de código, asegúrese no usar etiquetas cortas.

Nota:

En PHP 5.2 y anteriores, no se permite que un fichero contenga únicamente la etiqueta de inicio de bloque <?php. En PHP 5.3 si se permite siempre que existan uno o más caracteres espacions en blanco después de la etiqueta de apertura.

Nota:

Desde PHP 5.4, la etiqueta abreviada de echo <?= siempre es reconocida y válida, sin tener en cuenta la configuración de short_open_tag.



Instrucción separador

Como en C o Perl, PHP requiere que las instrucciones terminen en punto y coma al final de cada declaración. La etiqueta de fin de bloque de PHP automáticamente implica un punto y coma. No se tiene que usar punto y coma para cerrar la última línea de código de PHP. La etiqueta de fin de bloque incluirá de inmediato salto de línea si no está presente.

<?php
    
echo 'Esto es una prueba';
?>

<?php echo 'Esto es una prueba' ?>

<?php echo 'Hemos omitido la última etiqueta de cerrado';

Nota:

Note: La etiqueta de fin de bloque es opcional al final del archivo y es útil omitirlo cuando se utilizan sentencias include o require, para que no se produzcan espacios en blanco al final de los archivos cuando se quieren mandar cabeceras de http. También sirve cuando se captura la salida con output buffering y no se desean espacios innecesarios al final de partes generadas por archivos incluídos.



Comentarios

PHP Soporta comentarios 'C', 'C++' y Unix estilo de consola (estilo Perl). Por ejemplo:

<?php
    
echo 'Esto es una prueba'// Esto es un comentario estilo c++ de una sola línea
    /* Esto es un comentario multi-línea
       si! otra lína de comentarios */
    
echo 'Esto es otro test';
    echo 
'Un test final'# Esto es un comentario estilo consola de una sola línea
?>

Los comentarios de estilo "una sola línea" solo comentan hasta el final de la línea o del bloque actual de código PHP, lo primero que suceda. Esto implica que el código HTML después de // ... ?> o # ... ?> Imprimirá ?> para salir del modo PHP y volver a HTML, y // o # no influyen. Si la directiva de configuración asp_tags está activada, actúa igual que // %> y # %>. Sin embargo, la etiqueta </script> no rompe el modo PHP en un comentario de una sola línea.

<h1>Esto es un <?php # echo 'simple';?> ejemplo</h1>
<p>El encabezado anterior dirá 'Esto es un  ejemplo'.</p>

Los comentarios del estilo 'C' finalizan al primer */ que se encuentre. Asegúrese que no utiliza muchos comentarios del estilo 'C'. Es muy fácil cometer errores cuando trata de comentar un gran bloque de código.

<?php
 
/*
    echo 'Esto es una prueba'; /* Este comentario puede causar un problema*/
 
*/
?>




Tipos

Tabla de contenidos


Introducción

PHP soporta ocho tipos primitivos.

Cuatro tipos escalares:

Dos tipos compuestos:

Y finalmente tres tipos especiales:

Este manual introduce también algunos pseudo-tipos por razones de legibilidad:

Y la pseudo-variable $... .

Puede que algunas referencias al tipo "double" aun existan en el manual. Considere al tipo double como el mismo que float; los dos nombres existen sólo por razones históricas.

El tipo de una variable usualmente no es declarado por el programador; en cambio, es decidido en tiempo de ejecución por PHP dependiendo del contexto en el que es usado la variable.

Nota: Para comprobar el tipo y el valor de una expresión, utilice la función var_dump().

Para obtener una representación legible para humanos del tipo para propósitos de depuración, use la función gettype(). Para comprobar un cierto tipo, no use gettype(), si no las funciones is_tipo. Algunos ejemplos:

<?php
$un_bool 
TRUE;   // un valor booleano
$un_str  "foo";  // una cadena
$un_str2 'foo';  // una cadena
$un_int  12;     // un entero

echo gettype($un_bool); // imprime: boolean
echo gettype($un_str);  // imprime: string

// Si este valor es un entero, incrementarlo en cuatro
if (is_int($un_int)) {
    
$un_int += 4;
}

// Si $a_bool es una cadena, imprimirla
// (no imprime nada)
if (is_string($un_bool)) {
    echo 
"Cadena: $un_bool";
}
?>

Para forzar la conversión de una variable a cierto tipo, puede moldear la variable o usar la función settype() sobre ella.

Note que una variable puede ser evaluada con valores diferentes en ciertas situaciones, dependiendo del tipo que posee en cada momento. Para más información, vea la sección sobre Manipulación de Tipos. Las tablas de comparación de tipos pueden resultar útiles también, ya que muestran ejemplos de varias comparaciones relacionadas con tipos.



Booleanos

Este es el tipo más simple. Un boolean expresa un valor de verdad. Puede ser TRUE or FALSE.

Sintaxis

Para especificar un literal boolean, use alguna de las palabras clave TRUE o FALSE. Ambas son insensibles a mayúsculas y minúsculas.

<?php
$foo 
True// asigna el valor TRUE a $foo
?>

Usualmente, el resultado de un operador que devuelve un valor boolean es pasado a una estructura de control.

<?php
// == es un operador que prueba por
// igualdad y devuelve un booleano
if ($accion == "mostrar_version") {
    echo 
"La versión es 1.23";
}

// esto no es necesario...
if ($mostrar_separadores == TRUE) {
    echo 
"<hr>\n";
}

// ...porque se puede escribir simplemente:
if ($mostrar_separadores) {
    echo 
"<hr>\n";
}
?>

Conversión a booleano

Para convertir explícitamente un valor a boolean, use el moldeamiento (bool) o (boolean). Sin embargo, en la mayoría de casos no es necesario usar el moldeamiento, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento tipo boolean.

Vea también Manipulación de Tipos.

Cuando se realizan conversiones a boolean, los siguientes valores son considerados FALSE:

  • el boolean FALSE mismo
  • el integer 0 (cero)
  • el float 0.0 (cero)
  • el valor string vacío, y el string "0"
  • un array con cero elementos
  • un object con cero variables miembro (sólo en PHP 4)
  • el tipo especial NULL (incluyendo variables no definidas)
  • objetos SimpleXML creados desde etiquetas vacías

Cualquier otro valor es considerado TRUE (incluyendo cualquier resource).

Advertencia

-1 es considerado TRUE, como cualquier otro número diferente a cero (¡ya sea negativo o positivo!)

<?php
var_dump
((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>


Enteros

Un entero o integer es un número del conjunto ℤ = {..., -2, -1, 0, 1, 2, ...}.

Consulte tambien:

Sintaxis

Los integer pueden ser especificados mediante notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente precedidos por un signo (- o +).

Los literales integer binarios están disponibles desde PHP 5.4.0.

Para usar la notación octal, se antepone al número un 0 (cero). Para usar la notación hexadecimal, se antepone al número un 0x. Para usar la notación binaria, se antepone al número un 0b.

Ejemplo #1 Enteros literales

<?php
$a 
1234// número decimal
$a = -123// un número negativo
$a 0123// número octal (equivalente a 83 decimal)
$a 0x1A// número hexadecimal (equivalente a 26 decimal)
?>

Formalmente, la estructura de integer literales es:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binario     : 0b[01]+

entero      : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary

El tamaño de un integer depende de la plataforma, aunque un valor máximo de aproximadamente dos billones es un valor usual (para 32 bits con signo). Las plataformas de 64-bits normalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite integers sin signo. El tamaño de los integer puede ser determinado mediante la constante PHP_INT_SIZE y el valor máximo mediante la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

Advertencia

Si en un integer octal se da un dígito incorrecto (por ejemplo 8 o 9), el resto del número se ignora.

Ejemplo #2 Octal raros

<?php
var_dump
(01090); // 010 octal = 8 decimal
?>

Desbordamiento de enteros

Si PHP encuentra un número fuera de los límites de un integer, se interpretará como un float en su lugar. Tambien, una operación cuyo resultado es un número fuera de los límites de un integer devolverá en su lugar un float.

Ejemplo #3 Desbordamiento de enteros en sistemas 32-bits

<?php
$large_number 
2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number 2147483648;
var_dump($large_number);                     // float(2147483648)

$million 1000000;
$large_number =  50000 $million;
var_dump($large_number);                     // float(50000000000)
?>

Ejemplo #4 Desbordamiento de enteros en sistemas 64-bits

<?php
$large_number 
9223372036854775807;
var_dump($large_number);                     // int(9223372036854775807)

$large_number 9223372036854775808;
var_dump($large_number);                     // float(9.2233720368548E+18)

$million 1000000;
$large_number =  50000000000000 $million;
var_dump($large_number);                     // float(5.0E+19)
?>

No existe operador de división de integer en PHP. 1/2produce el float 0.5. El valor puede ser forzado a ser un integer redondeando por defecto, o mediante la función round() que permite un mayor control sobre el redondeo.

<?php
var_dump
(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>

Conversión a enteros

Para convertir explicitamente un valor a integer, se puede emplear tanto (int) como (integer). Sin embargo, la mayoría de las veces la conversión no es necesaria, ya que un valor es convertido de forma automática cuando un operador, función o estructura de control necesite un argumento del tipo integer. Un valor tambien puede ser convertido a integer mediante la función intval().

Consulte también: manipulación de tipos.

Desde booleanos

FALSE produce 0 (cero), y TRUE produce 1 (uno).

Desde números de punto flotante

Cuando se convierte de un float a un integer, el número será redondeado hacia cero.

Si el float esta por debajo de los límites de un integer (normalmente +/- 2.15e+9 = 2^31 en plataformas de 32 bits y +/- 9.22e+18 = 2^63 en plataformas de 64 bits), el resultado es indefinido, debido a que float no tiene la precisión suficiente para ofrecer el resultado como un integer exacto. No se mostrará ninguna advertencia, ni siquiera un aviso cuando esto ocurre!

Advertencia

Nunca se debe convertir una fracción desconocida a un integer, ya que a veces puede producir resultados inesperados.

<?php
echo (int) ( (0.1+0.7) * 10 ); // muestra 7!
?>

Consulte tambien aviso sobre la precisión de float

Desde cadenas

Consulte Conversión de cadenas a números

Desde otros tipos

Precaución

El comportamiento de la conversion de integer a otros tipos es indefinido. No espere que exista un comportamiento esperado, ya que puede cambiar sin previo aviso.



Números de punto flotante

Los números de punto flotante (también conocidos como "flotantes", "dobles" o "números reales") pueden ser especificados usando cualquiera de las siguientes sintaxis:

<?php
$a 
1.234
$b 1.2e3
$c 7E-10;
?>

Formalmente:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

El tamaño de un flotante depende de la plataforma, aunque un valor común consiste en un máximo de ~1.8e308 con una precisión de aproximadamente 14 dígitos decimales (lo que es un valor de 64 bits en formato IEEE).

Advertencia

Precisión del punto flotante

Los números de punto flotante tienen una precisión limitada. Aunque depende del sistema, PHP típicamente utiliza el formato de doble precisión IEEE 754, el cual dará un error relativo máximo por aproximación del orden de 1.11e-16. Las operaciones aritméticas elementales no podrán dar grandes errores y por supuesto, los errores por propagación deben ser considerados cuando varias operaciones son compuestas.

Adicionalmente, los numeros racionales que son representables exactamente como números de punto flotante en base 10, como 0.1 o 0.7, no tienen una representación exacta como números de punto flotante en base 2, el cual es usado internamente, sin importar el tamaño de la mantisa. Por lo tanto, no se puede convertir en sus contrapartes binarias internas sin una pequeña pérdida de precisión. Esto puede llevar a confundir resultados: Por ejemplo, floor((0.1+0.7)*10) usualmente retornará 7 en lugar del 8 esperado, ya que la representación interna será algo así como 7.9999999999999991118....

Así que nunca se confía en resultados de números flotantes hasta el último dígito y no se comparan números de punto flotante directamente para igualdad. Si es necesaria una mejor precisión, están disponibles las funciones matemáticas de precisión arbitraria y las funciones gmp.

Conversión a flotante

Para más información sobre las conversiones de string a float, vea Conversión de cadenas a números. Para valores de otros tipos, la conversión es la misma que si el valor hubiese sido convertido a integer y luego a float. Vea Conversión a entero para más información. A partir de PHP 5, una noticia es generada si intenta convertir un objeto a float.

Comparing floats

Como se indica en la advertencia anterior, comprobar la igualdad de valores de punto flotante es problemático, debido a la forma en que se representan internamente. Sin embargo, hay maneras de hacer comparaciones de los valores de punto flotante que trabajan rodeando a estas limitaciones.

Para comprobar la igualdad de valores de punto flotante, se utiliza un límite superior en el error relativo debido al redondeo. Este valor se conoce como el epsilon de la máquina o unidad de redondeo y es la menor diferencia aceptable en los cálculos.

$a y $b son iguales a 5 dígitos de precisión.

<?php
$a 
1.23456789;
$b 1.23456780;
$epsilon 0.00001;

if(
abs($a-$b) < $epsilon) {
    echo 
"true";
}
?>

NaN

Algunas operaciones numéricas pueden resultar en un valor representado por la constante NAN. Este resultado representa un valor no definido o no representable mediante cálculos de coma flotante. Cualquier comparación, ya sea poco rígida o estricta, de esta valor con cualquier otro valor, incluido él mismo tenfrá un resultado de FALSE.

Ya que NAN representa cualquier número de diferentes valores, NAN no debería compararse con otros valores, incluido él mismo; en su lugar debería comprobarse usando la función is_nan().



Cadenas

Un string es una serie de caracteres donde un caracter es lo mismo que un byte. Esto significa que PHP solo soporta el conjunto de 256 caracteres y por lo tanto no tiene soporte nativo Unicode. Ver detalles del tipo de dato string.

Nota: string puede llegar a alcanzar 2GB de tamaño.

Sintaxis

Un string literal puede ser especificado de cuatro formas diferentes:

Comillas simples

La manera más sencilla de especificar un string es encerrarlo entre comillas simples (el caracter ').

Para especificar una comilla simple literal, se escapa con una barra invertida (\). Para especificar una barra invertida literal, se duplica (\\). Todas las otras instancias de barras invertidas serán tratadas como una barra invertida literal: esto significa que otras secuencias de escape que se puedan utilizar, tales como \r or \n, serán mostradas literalmente como se especifican en lugar de tener cualquier significado especial

Nota: A diferencia de las sintaxis de comillas dobles y heredoc, las variables y las sentencias de escape para caracteres especiales no se expandirán cuando estén incluidas dentro de un string con comillas simples.

<?php
echo 'Esto es una cadena sencilla';

echo 
'Tambien puede incluir nuevas líneas en
cadenas de esta forma ya que es
correcto hacerlo así'
;

// Resultado: Arnold una vez dijo: "I'll be back"
echo 'Arnold una vez dijo: "I\'ll be back"';

// Resultado: Ha borrado C:\*.*?
echo 'Ha borrado C:\\*.*?';

// Resultado: Ha borrado C:\*.*?
echo 'Ha borrado C:\*.*?';

// Resultado: Esto no se expandirá: \n una nueva línea
echo 'Esto no se expandirá: \n una nueva línea';

// Resultado: Las variables $tampoco se $expandiran
echo 'Las variables $tampoco se $expandiran';
?>

Comillas dobles

Si un string está encerrado entre comillas dobles ("), PHP interpretará más sentencias de escape como caracteres especiales:

Caracteres escapados
Sentencia Significado
\n avance de línea (LF o 0x0A (10) en ASCII)
\r retorno de carro (CR o 0x0D (13) en ASCII)
\t tabulador horizontal (HT o 0x09 (9) en ASCII)
\v tabulador vertical (VT o 0x0B (11) en ASCII) (desde PHP 5.2.5)
\e escape (ESC o 0x1B (27) en ASCII) (desde PHP 5.4.0)
\f avance de página (FF o 0x0C (12) en ASCII) (desde PHP 5.2.5)
\\ barra invertida
\$ signo del dólar
\" comillas dobles
\[0-7]{1,3} la secuencia de caracteres que coincida con la expresión regular es un caracter en notación octal
\x[0-9A-Fa-f]{1,2} la secuencia de caracteres que coincida con la expresión regular es un caracter en notación hexadecimal

Al igual que en la delimitación de un string mediante comillas simples, escapar cualquier otro caracter puede dar lugar a que se muestre tambien la barra invertida. Antes de PHP 5.1.1, la barra invertida en \{$var} no se mostraba.

La característica más importante de entrecomillar un string mediante comillas dobles es el hecho que los nombres de las variables son expandidas. Consulte string parsing para más detalles.

Heredoc

Una tercera forma de delimitar un string es mediante la sintaxis heredoc: <<<. Después de este operador, se deberá ofrecer un identificador y después una nueva línea. A continuación va el propio string, y para cerrar la notación se pone el mismo identificador.

El identificador de cierre debe empezar en la primera columna de la nueva línea. Asimismo, el identificador debe seguir las mismas reglas de nomenclatura de las etiquetas en PHP: debe contener solo caracteres alfanuméricos y guiones bajos, y debe empezar con un caracter alfabético o un guión bajo.

Advertencia

Es muy importante señalar que la línea con el identificador de cierre no debe contener ningún caracter, excepto posiblemente un punto y coma (;). Esto significa en particular que el identificador no debe usar sangría, y que no deben existir ningún espacio ni tabulación antes o después del punto y coma. Es muy importante darse cuenta que el primer caracter antes del identificador de cierre debe ser un salto de línea definida por el sistema operativo local. En los sistemas UNIX sería \n, al igual que en Mac OS X. El delimitador de cierre (posiblemente seguido de un punto y coma) también debe ser seguido de un salto de línea.

Si se rompe esta regla y el identificador de cierre no está "limpio", no será considerado como un identificador de cierre, y PHP continuará buscando uno. Si no se encuentra ningún identificador de cierre antes del final del fichero, se producirá un error de análisis en la última línea.

Tampoco se puede emplear Heredocs para inicializar las propiedades de una clase. Desde PHP 5.3, esta limitación solo concierne a los heredocs que contengan variables.

Ejemplo #1 Ejemplo no válido

<?php
class foo {
    public 
$bar = <<<EOT
bar
    EOT;
}
?>

El texto heredoc se comporta como un string entre comillas dobles, pero sin tener comillas dobles. Esto significa que las comillas en Heredoc no necesitan ser escapadas, pero los caracteres escapados indicados arriba se pueden seguir empleando. Las variables son expandidas, y se debe tener el mismo cuidado dentro de un Heredoc cuando se quieren expresar variables complejas, al igual que en los string.

Ejemplo #2 Ejemplo de entrecomillado de string Heredoc

<?php
$str 
= <<<EOD
Ejemplo de una cadena
expandida en varias líneas
empleando la sintaxis heredoc.
EOD;

/* Un ejemplo más complejo con variables. */
class foo
{
    var 
$foo;
    var 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'MiNombre';

echo <<<EOT
Mi nombre es "$name". Estoy escribiendo un poco de $foo->foo.
Ahora, estoy escribiendo un poco de 
{$foo->bar[1]}.
Esto debe mostrar una 'A' mayúscula: \x41
EOT;
?>

El resultado del ejemplo sería:

Mi nombre es "MiNombre". Estoy escribiendo un poco de Foo.
Ahora, estoy escribiendo un poco de Bar2.
Esto debe mostrar una 'A' mayúscula: A

Tambien se puede emplear la sintaxis Heredoc para pasar datos como argumento de una función:

Ejemplo #3 Ejemplo de Heredoc como argumento

<?php
var_dump
(array(<<<EOD
foobar!
EOD
));
?>

Desde PHP 5.3.0 es posible inicializar variables estáticas y propiedades/constantes de clase mediante la sintaxis Heredoc:

Ejemplo #4 Usando Heredoc para inicializar valores estáticos

<?php
// Variables estáticas
function foo()
{
    static 
$bar = <<<LABEL
Nada aqui dentro...
LABEL;
}

// Propiedades/Constantes de clase
class foo
{
    const 
BAR = <<<FOOBAR
Ejemplo de constante
FOOBAR;

    public 
$baz = <<<FOOBAR
Ejemplo de propiedad
FOOBAR;
}
?>

PHP 5.3.0 tambien introdujo la posibilidad en Heredoc de emplear las comillas dobles en declaraciones:

Ejemplo #5 Empleando comillas dobles en Heredoc

<?php
echo <<<"FOOBAR"
Hola Mundo!
FOOBAR;
?>

Nowdoc

Nowdocs son a las cadenas con comillas simples lo mismo que Heredoc lo es a las comillas dobles. Una cadena nowdoc se especifica de forma análoga a la heredoc, pero no se realiza ningún análisis dentro de nowdoc. Esta construcción es ideal para embeber código PHP o grandes fragmentos de texto sin necesidad de escaparlo. Comparte algunas características comunes con la construcción SGML <![CDATA[ ]]>, donde se declara un fragmento de texto que no debe ser analizado.

Una cadena nowdoc se identifica con la misma sintaxis <<< usada para heredoc, pero el identificador que le sigue esta encerrado entre comillas simples, por ejemplo <<<'EOT'. Todas las reglas para los identificadores heredoc también son aplicables a los identificadores nowdoc, especialmente aquellos que se refieren al empleo del identificador de cierre.

Ejemplo #6 Ejemplo de entrecomillado de string Nowdoc

<?php
$str 
= <<<'EOD'
Ejemplo de una cadena
expandida en varias líneas
empleando la sintaxis nowdoc.
EOD;

/* Un ejemplo más complejo con variables. */
class foo
{
    public 
$foo;
    public 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'MiNombre';

echo <<<'EOT'
Mi nombre es "$name". Estoy escribiendo un poco de $foo->foo.
Ahora, estoy escribiendo un poco de {$foo->bar[1]}.
Esto debe mostrar una 'A' mayúscula: \x41
EOT;
?>

El resultado del ejemplo sería:

Mi nombre es "$name". Estoy escribiendo un poco de $foo->foo.
Ahora, estoy escribiendo un poco de {$foo->bar[1]}.
Esto debe mostrar una 'A' mayúscula: \x41

Nota:

A diferencia de heredoc, nowdoc puede ser usado en cuaquier contexto de datos estáticos. Un ejemplo típico es la inicialización de propiedades o constantes en una clase:

Ejemplo #7 Ejemplo de datos estáticos

<?php
class foo {
    public 
$bar = <<<'EOT'
bar
EOT;
}
?>

Nota:

El soporte de Nowdoc se añadió en PHP 5.3.0.

Análisis de variables

Cuando un string es especificado mediante comillas dobles o mediante sintaxis heredoc, las variables dentro de dicha cadena son analizadas.

Existen dos tipos de sintaxis: una simple y otra compleja. La sintaxis simple es la más empleada y conveniente. Proporciona una forma de incluir una variable, un valor de un array o una propiedad de un object dentro de un string con el mínimo esfuerzo.

La sintaxis compleja puede ser reconocida por las llaves que encierran la expresión.

Sintaxis simple

Si se encuentra un signo de dólar ($), el analizador ávidamente cogerá el mayor número de símbolos para formar un nombre de variable válido. Encerrar el nombre de la variable entre llaves permite especificar explícitamente el final del nombre.

<?php
$jugo 
"manzana";

echo 
"El tomó algo de jugo de $jugo.".PHP_EOL
// Inválido. "s" es un caracter válido para un nombre de variable, pero la variable es $jugo.
echo "El tomó algo de jugo hecho de $jugos.";
?>

El resultado del ejemplo sería:

El tomó algo de jugo de manzana.
El tomó algo de jugo hecho de .

De forma parecida, el índice de un array o la propiedad de un object puede ser analizado. Con los índices de los arrays, el corchete de cierre (]) marca el final del índice. La misma regla se puede aplicar a las propiedades de los objetos y a las variables simples.

Ejemplo #8 Ejemplo de sintaxis simple

<?php
$jugos 
= array("manzana""naranja""koolaid1" => "púrpura");

echo 
"El tomó algo de jugo de $jugos[0].".PHP_EOL;
echo 
"El tomó algo de jugo de $jugos[1].".PHP_EOL;
echo 
"El tomó algo de jugo hecho de $jugo[0]s.".PHP_EOL;// No funcionará
echo "El tomó algo de jugo $jugos[koolaid1].".PHP_EOL;

class 
people {
    public 
$john "John Smith";
    public 
$jane "Jane Smith";
    public 
$robert "Robert Paulsen";
    
    public 
$smith "Smith";
}

$people = new people();

echo 
"$people->john tomó algo de jugo de $jugos[0].".PHP_EOL;
echo 
"$people->john entonces dijo hola a $people->jane.".PHP_EOL;
echo 
"La esposa de $people->john's saludó a $people->robert.".PHP_EOL;
echo 
"$people->robert saludó a los dos $people->smiths."// No funcionará
?>

El resultado del ejemplo sería:

El tomó algo de jugo de manzana.
El tomó algo de jugo de naranja.
El tomó algo de jugo hecho de s.
El tomó algo de jugo púrpura.
John Smith tomó algo de jugo de manzana.
John Smith entonces dijo hola a Jane Smith.
La esposa de John Smith's saludó a Robert Paulsen.
Robert Paulsen saludó a los dos .

Para casos más complejos se debe emplear la sintaxis compleja.

Sintaxis compleja (llaves)

Esta sintaxis no se llama compleja poque sea compleja de aplicar, sino porque permite el empleo de expresiones complejas.

Cualquier variable escalar, elemento de array o propiedad de objeto con una representación de string puede ser incluido a través de esta sintaxis. Simplemente se escribe la expresión del mismo modo en que debe aparecer por fuera del string, y entonces se encierra ente { y }. Dado que { no puede ser escapado, esta sintaxis será reconocida únicamente cuando el $ siga inmediatamente al {. Utilice {\$ para obtener un {$ literal. Algunos ejemplos para que quede más claro:

<?php
// Muestra todos los errores
error_reporting(E_ALL);

$great 'fantastico';

// No funciona, resultado: Esto es { fantastico}
echo "Esto es { $great}";

// Funciona, resultado: Esto es fantastico
echo "Esto es {$great}";
echo 
"Esto es ${great}";

// Funciona
echo "Este cuadrado tiene {$square->width}00 centímetros de lado.";

// Funciona, claves entre comillas sólo funcionan utilizando la sintaxis de llaves
echo "Esto funciona: {$arr['key']}";

// Funciona
echo "Funciona: {$arr[4][3]}";

// No funciona por la misma razón que $foo[bar] es incorrecto fuera de una cadena.
// En otras palabras, funcionaría pero solo porque PHP primero busca por una constante
// llamada foo; un error del nivel E_NOTICE (constante no definida) puede ser lanzado.
echo "No funciona: {$arr[foo][3]}";

// Funciona. Cuando se usan arrays multidimensionales, siempre emplee llaves encerrando
// los arrays cuando se encuentre dentro de una cadena
echo "Funciona: {$arr['foo'][3]}";

// Funciona.
echo "Funciona: " $arr['foo'][3];

echo 
"Tambien funciona: {$obj->values[3]->name}";

echo 
"Este es el valor de la variable llamada $name{${$name}}";

echo 
"Este es el valor de la variable llamada por el valor de retorno de getName(): {${getName()}}";

echo 
"Este es el valor de la variable llamada por el valor de retorno de \$object->getName(): {${$object->getName()}}";

//No funciona, imprime: Esto es el valor de retorno de getName(): {getName ()}
echo "Esto es el valor de retorno de getName(): {getName()}";
?>

También es posible acceder a las propiedades de una clase usando variables dentro de cadenas al emplear ésta sintaxis.

<?php
class foo {
    var 
$bar 'Soy bar.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
"{$foo->$bar}\n";
echo 
"{$foo->$baz[1]}\n";
?>

El resultado del ejemplo sería:

Soy bar.
Soy bar.

Nota:

Funciones, llamadas a métodos, variables estáticas de clases y constantes de clases dentro de {$} funcionan desde PHP 5. Sin embargo, el valor accedido puede ser interpretado como el nombre de la variable en el ámbito en el que la cadena está definida. Empleando llaves simples ({}) no servirá para acceder al valor de retorno de las funciones o métodos, constantes o variables estáticas de clases.

<?php
// Muestra todos los errores.
error_reporting(E_ALL);

class 
beers {
    const 
softdrink 'rootbeer';
    public static 
$ale 'ipa';
}

$rootbeer 'A & W';
$ipa 'Alexander Keith\'s';

// Funciona; resultado: Me gusta una A & W
echo "Me gusta una {${beers::softdrink}}\n";

// Tambien funciona; resultado: Me gusta una Alexander Keith's
echo "Me gusta una {${beers::$ale}}\n";
?>

Acceso a cadenas y modificacion por caracteres

Los caracteres dentro de un string pueden ser accedidos y modificados especificando la posición de caracter deseado (en base a la posición cero del primer caracter del string) empleando los corchetes de array, como en $str[42]. Piense en este caso que un string se comporta como un array de caracteres. Las funciones substr() y substr_replace() pueden ser empleados para extraer y reemplazar más de un caracter.

Nota: Los String también pueden accederse utilizando llaves, como en $str{42}, para el mismo propósito.

Advertencia

Escribir fuera del rango es compensado rellenando el string con espacios. Los tipos que no sean integer son convertidos a integer. Las compensaciones fuera de rango emiten E_NOTICE. Las compensaciones negativas emiten E_NOTICE en la escritura pero en la lectura obtienen una cadena vacía. Sólo se emplea el primer carácter de un string asignado. La asignación de un string vacío asigna un byte NULL.

Ejemplo #9 Algunos ejemplos de cadenas

<?php
// Obtención del primer caracter de una cadena
$str 'Esto es un test.';
$first $str[0];

// Obtención del tercer caracter de una cadena
$third $str[2];

// Obtención del último caracter de una cadena
$str 'Esto sigue siendo un test.';
$last $str[strlen($str)-1];

// Modificación del último caracter de una cadena
$str 'Mira el mar';
$str[strlen($str)-1] = 'e';

?>

Nota:

El acceso a variables de otros tipos (sin incluir arrays u objetos implementando las interfaces apropiadas) utilizando [] o {} silenciosamente retorna NULL.

Funciones y operadores útiles

Los string pueden ser concatenados empleando el operador '.' (punto). Fíjese que el operador '+' (suma) no servirá para concatenar. Consulte operadores de string para más información.

Hay una serie de funciones útiles para la manipulación de string.

Consulte la sección de funciones de string para funciones generales, y las funciones de expresiones regulares o las funciones de expresiones regulares compatibles con Perl para funcionalidades avanzadas de búsqueda y sustitución.

Tambien existen funciones para cadenas URL, y funciones para encriptar/desencriptar cadenas (mcrypt y mhash).

Finalmente, tambien existen las funciones para el tipo caracter.

Conversión a cadena

Un valor puede convertirse a una string mediante el forzado (string) o la función strval(). La conversión automática a string tiene lugar en el contexto de una expresióin que necesita un string. Esto ocurre cuando se utilizan las funciones echo o print, o cuando una variables es comparada con un string. Las secciones sobre tipos y Manipulación de tipos pueden ayudarle a enterderlo con más claridad. Consulte tambien la función settype().

El valor TRUE del tipo boolean es convertido en el string "1". El valor FALSE del tipo boolean es convertido en el string "" (la cadena vacía). Esto permite la conversión en ambos sentidos entre los valores de los tipos boolean y string.

Un integer o float es convertido en un string representando textualmente el número (incluyendo la parte exponencial para los floats. Los números de punto flotante pueden ser convertidos mediante la notación exponencial (4.1E+6).

Nota:

El caracter para el punto decimal se define en el script de configuración regional (categoría LC_NUMERIC). Consulte la función setlocale().

Los arrays siempre se convierten en un string "Array". Debido a esto, tanto echo y print no pueden pos sí mismos mostrar el contenido de un array. Para ver un elemento individualmente, utilice una construcción como echo $arr['foo']. Mire los trucos en la parte inferior para mostrar el contenido por completo.

Los objects en PHP 4 siempre se convierten en un string "Object". Para mostrar los valores de las propiedades de un objeto para depuración, mire los parrafos siguientes. Para obtener el nombre de la clase del objeto emplée la función get_class(). A partir de PHP 5 se puede emplear el método __toString.

Los resources siempre se convierten en strings mediante la estructura "Resource id #1", donde 1 es el número único asignado al resource por PHP en tiempo de ejecución. No debe confiar en esta estructura, ya que está sujeto a cambios. Para obtener el tipo del resource emplee la función get_resource_type().

NULL siempre es convertido a una cadena vacía.

Como se ha indicado anteriormente, la conversión directa de un array, object o resource a un string no proporciona información útil acerca del valor, más allá de su tipo. Consulte las funciones print_r() y var_dump() para obtener maneras más efectivas de inspeccionar el contenido de estos tipos.

La mayoría de los valores de PHP pueden ser convertidos a strings para su almacenamiento permanente. Este método se denomina serialización, y es realizado mediante la función serialize(). Si la máquina PHP está contruida con soporte de WDDX, los valores de PHP tambien pueden ser serializacos como texto XML correctamente formateado.

Conversión de cadenas a números

Cuando una string es evaluada en un contexto numérico, el valor resultante y el tipo se determina como se explica a continuación.

Si el string no contiene ninguno de los caracteres '.', 'e', o 'E' y el valor numérico está entre los límites del tipo entero (como se define en PHP_INT_MAX), la string será evaluada como un integer. En todos los demas casos será evaluado como un float.

El valor es dado por la parte inicial del string. Si el string empieza con un número válido, éste será el valor usado. De otra forma, el valor será 0 (cero). Se considera número válido a un signo opcional, seguido de uno o más dígitos (opcionalmente puede contener un punto decimal), seguido de un exponente opcional. El exponente es una 'e' o 'E' seguida de uno o más dígitos.

<?php
$foo 
"10.5";                // $foo es float (11.5)
$foo "-1.3e3";              // $foo es float (-1299)
$foo "bob-1.3e3";           // $foo es integer (1)
$foo "bob3";                // $foo es integer (1)
$foo "10 Small Pigs";       // $foo es integer (11)
$foo "10.2 Little Piggies"// $foo es float (14.2)
$foo "10.0 pigs " 1;          // $foo es float (11)
$foo "10.0 pigs " 1.0;        // $foo es float (11)     
?>

Para más información sobre esta conversión, consulte la página del manual UNIX correspondiente a strtod(3).

Para probar cualquiera de los ejemplos en esta sección, copie y pegue los ejemplos e incluya la siguiente línea para ver que está ocurriendo:

<?php
echo "\$foo==$foo; tipo es " gettype ($foo) . "<br />\n";
?>

No espere obtener el código de un caracter convirtiendolo a un entero, como ocurre en C. Emplee las funciones ord() y chr() para convertir entre código ASCII y caracteres.

Detalles del tipo de dato String

En PHP, los string se implementan como una matriz de bytes y con un entero que indica la longitud del buffer. No guarda ninguna información sobre cómo traducir esos bytes, relegando esa tarea al programador. No existe ninguna limitación sobre el valor que puede contener un string; en concreto, está permitido colocar un bytes con valor 0 (“bytes NUL”) en cualquier posición del string (existen algunas funciones, marcadas en este manual como que no utilizan "modo binario seguro", podrían rechazar estos strings para aquellas bibliotecas que ignoren los datos preceden a un byte NUL.)

Este comportamiento de los strings justifica el que no exista un tipo de dato "byte" en PHP – los strings se encargan de esto. Las funciones que no devuelvan datos de texto – por ejemplo, cualquier dato leído a partir de un socket de red – devolverán strings.

Dado que PHP no obliga a utilizar ninguna condificación en particular, uno podría preguntarse cómo se codifican los textos literales. Por ejemplo, ¿es el string "á" equivalente a "\xE1" (ISO-8859-1), "\xC3\xA1" (forma en C UTF-8), "\x61\xCC\x81" (forma en D UTF-8) o cualquier otra representación posible? La resuesta es que un string se codifica en cualesquiera forma en que estuviera el fichero de código. Por tanto, si un fichero de código estuviera escrito en ISO-8859-1, el string se codificará en ISO-8859-1, y así. Sin embargo, esto no es aplicable si Zend Multibyte está habilitado; en ese caso, el fichero de código podría estar escrito en cualquier codificación (declarada explícitamente o bien detectada) para después convertirse a una determinada codificación interna, que será entonces la codificación usada para los textos literales. Tenga presente que existen algunas limitaciones sobre la codificación del código fuente (o en la codificación internal, si Zend Multibyte estuviera habilitado) – esto suele significar que se debe usar uan codificación complatible con el conjunto ASCII, como por ejemplo UTF-8 o ISO-8859-1. Por contra, las codificaciones dependientes de estados, donde un mismo byte se puede utilizar en estados de desplazamiento iniciales y no iniciales, podría generar problemas.

Por supuesto, para poder ser útil, las funciones que operen con texto podrán partir de unos supuestos sobre cómo está codificado el string. Desafortunadamente, respecto a esto existen muchas variaciones en la funciones de PHP:

  • Algunas funciones asumen que el string está codificado en una codificación simple de bytes, por lo que no necesitan interpretar estos bytes como caracteres específicos. Este es el caso de, por ejemplo, substr(), strpos(), strlen() o strcmp(). Otra forma de entender estas funciones es pensando que operan sobre buffers de memoria, es decir, trabajan con bytes y con desplazamientos de bytes.
  • A otras funciones se les indica la codificación del string, si bien es posible que tengan una codificación predeterminada. Este es el caso de htmlentities() y la mayoría de funciones de la extensión mbstring.
  • Otras, utilizan las locales en uso (ver setlocale()), pero operan byte a byte. Este es el caso de strcasecmp(), strtoupper() y ucfirst(). Esto significa que sólo se pueden usar con codificaciones de un byte, siempre y cuando la codificación coincida con la de la local. Por ejemplo strtoupper("á") podría devolver "Á" si las locales están correctamente habilitadas y á está codificado con un único byte. Si está codificado en UTF-8, no se devolverá un resultado correcto y el string resultante podría, o no, devolverse corrupto, en función de las locales en uso.
  • Por último, podrán tambien asumir que se utiliza una codificación en particular, usualmente UTF-8. Este es el caso de la mayoría de las funciones de la extensión intl y de la extensión PCRE (en este último caso, sólo cuando se utiliza el modificador u). Debido a su propósito especial, la función utf8_decode() asume una codificación UTF-8, mientras que la función utf8_encode() asume una codificación ISO-8859-1.

En resumen, esto significa que para escribir programas Unicode de forma correcta hay que evitar cuidadosamente las funciones que pudean fallar y que muy probablemente vuelvan los datos corruptos, y utilizar en su lugar las funciones que se comportan de forma correcta, generalmente de las extensiones intl y mbstring. Sin embargo, el utilizar funciones que puedan manejar codificaciones Unicode es sólo el principio. No importa qué funciones incorpore el lenguaje; es primordial conocer la especificación Unicode. Por ejemplo, un programa que asuma que sólo hay mayúsculas y minúsculas estará haciendo una suposición erronea.



Arrays

Un array en PHP es realmente un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves. Este tipo es optimizado para varios usos diferentes; puede ser usado como una matriz real, una lista (vector), una tabla asociativa (una implementación de un mapa), diccionario, colección, pila, cola, y posiblemente más. Ya que los valores de un array pueden ser otros arrays, árboles y también son posibles arrays multidimensionales.

Una explicación sobre tales estructuras de datos está fuera del alcance de este manual, pero encontrará al menos un ejemplo de cada uno de ellos. Para más información, consulte la extensa literatura que existe sobre este amplio tema.

Sintaxis

Especificación con array()

Un array puede ser creado usando el constructor del lenguaje array(). Éste toma un cierto número de parejas clave => valor como argumentos.

array(
    clave  => valor,
    clave2 => valor2,
    clave3 => valor3,
    ...
)

La coma después del elemento del array es opcional y se puede omitir. Esto normalmente se hace para arrays de una sola línea, esto es, es preferible array(1, 2) que array(1, 2, ). Por otra parte, para arrays multilínea, la coma final se usa comnúnmente, ya que permite la adición sencilla de nuevos elementos al final.

A partir de PHP 5.4 también se puede usar la sintaxis de array corta, que reemplaza array() con [].

Ejemplo #1 Un array simple

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
);

// a partir de PHP 5.4
$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];
?>

La clave puede ser un integer o un string. El valor puede ser de cualquier tipo.

Además, los siguientes moldeados de tipo en la clave producirá:

  • Strings que contienen integers válidos serán moldeados a el tipo integer. P.e.j. la clave "8" en realidad será almacenada como 8. Por otro lado "08" no será convertido, ya que no es un número integer decimal válido.
  • Floats también serán moldeados en integers, lo que significa que la parte fraccionaria se elimina. P.e.j. la clave 8.7 en realidad será almacenada como 8.
  • Bools son moldeados a integers, también, p.e.j. la clave true en realidad será almacenada como 1 y la clave false como 0.
  • Null será moldeado a un string vacío, p.e.j. la clave null en realidad será almacenada como "".
  • Arrays y objects no pueden ser usados como claves. Si lo hace, dará lugar a una advertencia: Illegal offset type.

Desde PHP 5.4, el acceso al índice de cadena se hace consistente. Como resultado, algunos valores de retorno pueden ser diferentes de versiones anteriores. A partir de PHP 5.4, los índices de cadena deberían ser un integer o un integer como string, de otro modo el resultado será una advertencia.

Ejemplo #2 String offset access example

<?php
$str 
'abc';

var_dump($str['1']);
var_dump(isset($str['1']));

var_dump($str['1.0']);
var_dump(isset($str['1.0']));

var_dump($str['x']);
var_dump(isset($str['x']));

var_dump($str['1x']);
var_dump(isset($str['1x']));
?>

Muestra el ejemplo de arriba en PHP 5.3:

string(1) "b"
bool(true)
string(1) "b"
bool(true)
string(1) "a"
bool(true)
string(1) "b"
bool(true)

Muestra el ejemplo de arriba en PHP 5.4:

string(1) "b"
bool(true)

Warning: Illegal string offset '1.0' in /tmp/t.php on line 7
string(1) "b"
bool(false)

Warning: Illegal string offset 'x' in /tmp/t.php on line 9
string(1) "a"
bool(false)
string(1) "b"
bool(false)

Si varios elementos en la declaración del array usan la misma clave, sólo la última será usada y los demás son sobrescritos.

Ejemplo #3 Ejemplo de moldeado de tipo y sobrescritura

<?php
$array 
= array(
    
1    => "a",
    
"1"  => "b",
    
1.5  => "c",
    
true => "d",
);
var_dump($array);
?>

El resultado del ejemplo sería:

array(1) {
  [1]=>
  string(1) "d"
}

Como todas las claves en el ejemplo anterior se convierten en 1, los valores serán sobrescritos en cada nuevo elemento y el último valor asignado "d" es el único que queda.

Los arrays PHP pueden contener claves integer y string al mismo tiempo ya que PHP no distingue entre arrays indexados y asociativos.

Ejemplo #4 Claves mixtas integer y string

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
    
100   => -100,
    -
100  => 100,
);
var_dump($array);
?>

El resultado del ejemplo sería:

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

La clave es opcional. Si no se especifica, PHP usará el incremento de la clave integer más grande utilizada anteriormente.

Ejemplo #5 Arrays indexados sin clave

<?php
$array 
= array("foo""bar""hallo""world");
var_dump($array);
?>

El resultado del ejemplo sería:

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}

Es posible especificar la clave sólo para algunos de los elementos y dejar por fuera a los demás:

Ejemplo #6 Claves no en todos los elementos

<?php
$array 
= array(
         
"a",
         
"b",
    
=> "c",
         
"d",
);
var_dump($array);
?>

El resultado del ejemplo sería:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

Como se puede ver el último valor "d" se le asignó la clave 7. Esto es debido a que la mayor clave integer era 6.

Acceso a elementos de array con la sintaxis de corchete

Los elementos de array se pueden acceder utilizando la sintaxis array[key].

Ejemplo #7 Acceso a elementos de array

<?php
$array 
= array(
    
"foo" => "bar",
    
42    => 24,
    
"multi" => array(
         
"dimensional" => array(
             
"array" => "foo"
         
)
    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

El resultado del ejemplo sería:

string(3) "bar"
int(24)
string(3) "foo"

A partir de PHP 5.4 es posible hacer referencia al array de el resultado de una llamada a la función o el método directamente. Antes sólo era posible utilizando una variable temporal.

Ejemplo #8 Hacer referencia al resultado array de funciones

<?php
function getArray() {
    return array(
123);
}

// en PHP 5.4
$secondElement getArray()[1];

// anteriormente
$tmp getArray();
$secondElement $tmp[1];

// o
list(, $secondElement) = getArray();
?>

Nota:

Si intenta acceder a una clave del array que no se ha definido es lo mismo que el acceso a cualquier otra variable no definida: se emitirá un mensaje de error de nivel E_NOTICE, y el resultado será NULL.

Creación/modificación con sintaxis de corchete

Un array existente puede ser modificado al definir valores explícitamente en éste.

Esto se realiza mediante la asignación de valores al array, especificando la clave en corchetes. La clave también se puede omitir, resultando en un par de corchetes vacíos ([]).

    $arr[clave] = valor;
    $arr[] = valor;
    // clave puede ser un integer o string
    // valor puede ser cualquier valor de cualquier tipo

Si $arr aún no existe, se creará, así que esto es también una forma alternativa de crear un array. Sin embargo, esta práctica es desaconsejada ya que si $arr ya contiene algún valor (p.ej. un string de una variable de petición), entonces este valor estará en su lugar y [] puede significar realmente el operador de acceso a cadenas. Siempre es mejor inicializar variables mediante una asignación directa.

Para cambiar un valor determinado, se debe asignar un nuevo valor a ese elemento con su clave. Para quitar un par clave/valor, se debe llamar la función unset() en éste.

<?php
$arr 
= array(=> 112 => 2);

$arr[] = 56;    // Esto es lo mismo que $arr[13] = 56;
                // en este punto de el script

$arr["x"] = 42// Esto agrega un nuevo elemento a
                // el array con la clave "x"
                
unset($arr[5]); // Esto elimina el elemento del array

unset($arr);    // Esto elimina el array completo
?>

Nota:

Como se mencionó anteriormente, si no se especifica una clave, se toma el máximo de los índices integer existentes, y la nueva clave será ese valor máximo más 1 (aunque al menos 0). Si todavía no existen índices integer, la clave será 0 (cero).

Tenga en cuenta que la clave integer máxima utilizada para éste no es necesario que actualmente exista en el array. Ésta sólo debe haber existido en el array en algún momento desde la última vez que el array fué re-indexado. El siguiente ejemplo ilustra este comportamiento:

<?php
// Crear un array simple.
$array = array(12345);
print_r($array);

// Ahora elimina cada elemento, pero deja el mismo array intacto:
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// Agregar un elemento (note que la nueva clave es 5, en lugar de 0).
$array[] = 6;
print_r($array);

// Re-indexar:
$array array_values($array);
$array[] = 7;
print_r($array);
?>

El resultado del ejemplo sería:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

Funciones útiles

Hay un buen número de funciones útiles para trabajar con arrays. Véase la sección funciones de array.

Nota:

La función unset() permite remover claves de un array. Tenga en cuenta que el array no es re-indexado. Si se desea un verdadero comportamiento "eliminar y desplazar", el array puede ser re-indexado usando la función array_values().

<?php
$a 
= array(=> 'uno'=> 'dos'=> 'tres');
unset(
$a[2]);
/* producirá un array que se ha definido como
   $a = array(1 => 'uno', 3 => 'tres');
   y NO
   $a = array(1 => 'uno', 2 =>'tres');
*/

$b array_values($a);
// Ahora $b es array(0 => 'uno', 1 =>'tres')
?>

La estructura de control foreach existe específicamente para arrays. Ésta provee una manera fácil de recorrer un array.

Recomendaciones sobre arrays y cosas a evitar

¿Por qué es incorrecto $foo[bar]?

Siempre deben usarse comillas alrededor de un índice de array tipo string literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. ¿Pero por qué? Es común encontrar este tipo de sintaxis en scripts viejos:

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

Esto está mal, pero funciona. La razón es que este código tiene una constante indefinida (bar) en lugar de un valor string ('bar' - note las comillas). Puede que en el futuro PHP defina constantes que, desafortunadamente para tal tipo de código, tengan el mismo nombre. Funciona porque PHP automáticamente convierte una cadena pura (un string sin comillas que no corresponda con símbolo conocido alguno) en un string que contiene la cadena pura. Por ejemplo, si no se ha definido una constante llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última.

Nota: Esto no quiere decir que siempre haya que usar comillas en la clave. No use comillas con claves que sean constantes o variables, ya que en tal caso PHP no podrá interpretar sus valores.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('html_errors'false);
// Array simple:
$array = array(12);
$count count($array);
for (
$i 0$i $count$i++) {
    echo 
"\nRevisando $i: \n";
    echo 
"Mal: " $array['$i'] . "\n";
    echo 
"Bien: " $array[$i] . "\n";
    echo 
"Mal: {$array['$i']}\n";
    echo 
"Bien: {$array[$i]}\n";
}
?>

El resultado del ejemplo sería:

Revisando 0:
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mal:
Bien: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mal:
Bien: 1

Revisando 1:
Notice: Undefined index:  $i in /path/to/script.html on line 9
Mal:
Bien: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Mal:
Bien: 2

Más ejemplos para demostrar este comportamiento:

<?php
// Mostrar todos los errores
error_reporting(E_ALL);

$arr = array('fruit' => 'apple''veggie' => 'carrot');

// Correcto
print $arr['fruit'];  // apple
print $arr['veggie']; // carrot

// Incorrecto. Esto funciona pero también genera un error de PHP de
// nivel E_NOTICE ya que no hay definida una constante llamada fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

// Esto define una constante para demostrar lo que pasa. El valor 'veggie'
// es asignado a una constante llamada fruit.
define('fruit''veggie');

// Note la diferencia ahora
print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// Lo siguiente está bien ya que se encuentra al interior de una cadena. Las constantes no son procesadas al 
// interior de cadenas, así que no se produce un error E_NOTICE aquí
print "Hello $arr[fruit]";      // Hello apple

// Con una excepción, los corchetes que rodean las matrices al
// interior de cadenas permiten el uso de constantes
print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// Esto no funciona, resulta en un error de intérprete como:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Esto por supuesto se aplica también al uso de superglobales en cadenas
print "Hello $arr['fruit']";
print 
"Hello $_GET['foo']";

// La concatenación es otra opción
print "Hello " $arr['fruit']; // Hello apple
?>

Cuando se habilita error_reporting para mostrar errores de nivel E_NOTICE (como por ejemplo definiendo el valor E_ALL), este tipo de usos serán inmediatamente visibles. Por omisión, error_reporting se encuentra configurado para no mostrarlos.

Tal y como se indica en la sección de sintaxis, lo que existe entre los corchetes cuadrados ('[' y ']') debe ser una expresión. Esto quiere decir que código como el siguiente funciona:

<?php
echo $arr[somefunc($bar)];
?>

Este es un ejemplo del uso de un valor devuelto por una función como índice del array. PHP también conoce las constantes:

<?php
$error_descriptions
[E_ERROR]   = "Un error fatal ha ocurrido";
$error_descriptions[E_WARNING] = "PHP produjo una advertencia";
$error_descriptions[E_NOTICE]  = "Esta es una noticia informal";
?>

Note que E_ERROR es también un identificador válido, asi como bar en el primer ejemplo. Pero el último ejemplo es equivalente a escribir:

<?php
$error_descriptions
[1] = "Un error fatal ha ocurrido";
$error_descriptions[2] = "PHP produjo una advertencia";
$error_descriptions[8] = "Esta es una noticia informal";
?>

ya que E_ERROR es igual a 1, etc.

¿Entonces porqué está mal?

En algún momento en el futuro, puede que el equipo de PHP quiera usar otra constante o palabra clave, o una constante proveniente de otro código puede interferir. Por ejemplo, en este momento no puede usar las palabras empty y default de esta forma, ya que son palabras clave reservadas.

Nota: Reiterando, al interior de un valor string entre comillas dobles, es válido no rodear los índices de array con comillas, así que "$foo[bar]" es válido. Consulte los ejemplos anteriores para más detalles sobre el porqué, así como la sección sobre procesamiento de variables en cadenas.

Conversión a array

Para cualquiera de los tipos: integer, float, string, boolean y resource, convertir un valor a un array resulta en un array con un solo elemento, con índice 0, y el valor del escalar que fue convertido. En otras palabras, (array)$scalarValue es exactamente lo mismo que array($scalarValue).

Si convierte un object a un array, el resultado es un array cuyos elementos son las propiedades del object. Las claves son los nombres de las variables miembro, con algunas excepciones notables: las variables privadas tienen el nombre de la clase al comienzo del nombre de la variable; las variables protegidas tienen un caracter '*' al comienzo del nombre de la variable. Estos valores adicionados al inicio tienen bytes nulos a los lados. Esto puede resultar en algunos comportamientos inesperados:

<?php

class {
    private 
$A//  Este campo se convertirá en '\0A\0A'
}

class 
extends {
    private 
$A// Este campo se convertirá en '\0B\0A'
    
public $AA// Este campo se convertirá en 'AA'
}

var_dump((array) new B());
?>

En el ejemplo anterior parecerá que se tienen dos claves llamadas 'AA', aunque en realidad una de ellas se llama '\0A\0A'.

Si convierte un valor NULL a array, obtiene un array vacío.

Comparación

Es posible comparar arrays con la función array_diff() y mediante operadores de arrays.

Ejemplos

El tipo array en PHP es bastante versátil. Aquí hay algunos ejempos:

<?php
// Esto:
$a = array( 'color' => 'red',
            
'taste' => 'sweet',
            
'shape' => 'round',
            
'name'  => 'apple',
            
4        // la clave será 0
          
);

$b = array('a''b''c');

// . . .es completamente equivalente a
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // la clave será 0

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// Después de que se ejecute el código, $a será el array
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round',
// 'name' => 'apple', 0 => 4), y $b será el array
// array(0 => 'a', 1 => 'b', 2 => 'c'), o simplemente array('a', 'b', 'c').
?>

Ejemplo #9 Uso de array()

<?php
// Array como mapa de propiedades
$map = array( 'version'    => 4,
              
'OS'         => 'Linux',
              
'lang'       => 'english',
              
'short_tags' => true
            
);
            
// Keys estrictamente numéricas
$array = array( 7,
                
8,
                
0,
                
156,
                -
10
              
);
// esto es lo mismo que array(0 => 7, 1 => 8, ...)

$switching = array(         10// key = 0
                    
5    =>  6,
                    
3    =>  7,
                    
'a'  =>  4,
                            
11// key = 6 (el índice entero máximo era 5)
                    
'8'  =>  2// key = 8 (integer!)
                    
'02' => 77// key = '02'
                    
0    => 12  // el valor 10 será reemplazado por 12
                  
);
                  
// array vacío
$empty = array();         
?>

Ejemplo #10 Colección

<?php
$colors 
= array('rojo''azul''verde''amarillo');

foreach (
$colors as $color) {
    echo 
"¿Le gusta el $color?\n";
}

?>

El resultado del ejemplo sería:

¿Le gusta el rojo?
¿Le gusta el azul?
¿Le gusta el verde?
¿Le gusta el amarillo?

Modificar los valores del array directamente es posible a partir de PHP 5, pasándolos por referencia. Las versiones anteriores necesitan una solución alternativa:

Ejemplo #11 Cambiando elemento en el bucle

<?php
// PHP 5
foreach ($colors as &$color) {
    
$color strtoupper($color);
}
unset(
$color); /* se asegura de que escrituras subsiguientes a $color
no modifiquen el último elemento del arrays */

// Alternativa para versiones anteriores
foreach ($colors as $key => $color) {
    
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

El resultado del ejemplo sería:

Array
(
    [0] => ROJO
    [1] => AZUL
    [2] => VERDE
    [3] => AMARILLO
)

Este ejemplo crea un array con base uno.

Ejemplo #12 Índice con base 1

<?php
$firstquarter  
= array(=> 'Enero''Febrero''Marzo');
print_r($firstquarter);
?>

El resultado del ejemplo sería:

Array
(
    [1] => 'Enero'
    [2] => 'Febrero'
    [3] => 'Marzo'
)

Ejemplo #13 Llenado de un array

<?php
// llenar un array con todos los ítems de un directorio
$handle opendir('.');
while (
false !== ($file readdir($handle))) {
    
$files[] = $file;
}
closedir($handle);
?>

Los Arrays son ordenados. El orden puede ser modificado usando varias funciones de ordenado. Vea la sección sobre funciones de arrays para más información. La función count() puede ser usada para contar el número de elementos en un array.

Ejemplo #14 Ordenado de un array

<?php
sort
($files);
print_r($files);
?>

Dado que el valor de un array puede ser cualquier cosa, también puede ser otro array. De esta forma es posible crear arrays recursivas y multi-dimensionales.

Ejemplo #15 Arrays recursivos y multi-dimensionales

<?php
$fruits 
= array ( "fruits"  => array ( "a" => "orange",
                                       
"b" => "banana",
                                       
"c" => "apple"
                                     
),
                  
"numbers" => array ( 1,
                                       
2,
                                       
3,
                                       
4,
                                       
5,
                                       
6
                                     
),
                  
"holes"   => array (      "first",
                                       
=> "second",
                                            
"third"
                                     
)
                );

// Algunos ejemplos que hacen referencia a los valores del array anterior
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"

// Crear una nueva array multi-dimensional
$juices["apple"]["green"] = "good";
?>

La asignación de arrays siempre involucra la copia de valores. Use el operador de referencia para copiar un array por referencia.

<?php
$arr1 
= array(23);
$arr2 $arr1;
$arr2[] = 4// $arr2 ha cambiado,
             // $arr1 sigue siendo array(2, 3)
            
$arr3 = &$arr1;
$arr3[] = 4// ahora $arr1 y $arr3 son iguales
?>


Objetos

Inicialización de Objetos

Para crear un nuevo object, utilice la declaración new para instanciar una clase:

<?php
class foo
{
    function 
do_foo()
    {
        echo 
"Doing foo."
    }
}

$bar = new foo;
$bar->do_foo();
?>

Para una descripción completa, vea el capítulo Clases y Objetos.

Conversión a un objeto

Si un object se convierte en un object, éste no se ve modificado. Si un valor de cualquier otro tipo se convierte en un object, se crea una nueva instancia de la clase stdClass incorporada. Si el valor es NULL, la nueva instancia estará vacía. Los Arrays se convierten en un object con propiedades nombradas por claves con sus correspondientes valores. Para cualquier otro valor, una variable miembro denominada scalar contendrá el valor.

<?php
$obj 
= (object) 'ciao';
echo 
$obj->scalar;  // muestra 'ciao'
?>


Recursos

Un valor tipo resource es una variable especial, que contiene una referencia a un recurso externo. Los recursos son creados y usados por funciones especiales. Vea el apéndice para un listado de todas estas funciones y los tipos resource correspondientes.

Vea también la función get_resource_type().

Conversión a recurso

Dado que las variables resource contienen gestores especiales a archivos abiertos, conexiones con bases de datos, áreas de pintura de imágenes y cosas por el estilo, la conversión a tipo resource carece de sentido.

Liberación de recursos

Gracias al sistema de conteo de referencias introducido con el Motor Zend de PHP 4, un recurso que ya no es referenciado es detectado automáticamente, y es liberado por el recolector de basura. Por esta razón, rara vez se necesita liberar la memoria manualmente.

Nota: Los enlaces persistentes con bases de datos son una excepción a esta regla. Ellos no son destruidos por el recolector de basura. Vea también la sección sobre conexiones persistentes para más información.



NULO

El valor especial NULL representa una variable sin valor. NULL es el unico valor posible de tipo NULL.

Una variable es considerada null si:

  • Se le ha asignado la constante NULL.

  • No se ha asignado a un valor todavía.

  • Se ha destruido con unset().

Sintaxis

No hay más que un valor de tipo null, y es la constante NULL insensible a mayúsculas/minúsculas.

<?php
$var 
NULL;       
?>

Véase también las funciones is_null() y unset().

El moldeado a NULL

Moldear una variable a null usando (unset) $var no eliminará la variable o destruirá su valor. Esto sólo retornará un valor NULL.



Llamadas de retorno

Las llamadas de retorno se pueden representar con el tipo callable a partir de PHP 5.4. Esta documentación utilizó la información del tipo callback con el mismo propósito.

algunas funciones como call_user_func() o usort() aceptan funciones de llamadas de retorno definidas por el usuario como parámetro. Las funciones de llamadas de retorno no sólo pueden ser funciones simples, sino también métodos de un object, incluyendo métodos de clase estáticos.

Pasando

Una función PHP se pasa por su nombre como una string. Se puede utilizar cualquier función nativa o definida por el usuario, excepto contrucciones del lenguaje, tal como: array(), echo, empty(), eval(), exit(), isset(), list(), print o unset().

Un método de un object instanciado se pasa como un array conteniendo un object en el índice 0 y el nombre del método en el índice 1.

Métodos de clase estáticos también se pueden pasar sin instanciar un object de una clase al pasar el nombre de la clase en lugar de un object en el índice 0. A partir de PHP 5.2.3, también es posible pasar 'NombreDeClase::nombreDeMetodo'.

Además de las funciones definidas por el usuario normales, también se puede utilizar la función create_function() para crear funciones de devolución de llamadas anónimas. A partir de PHP 5.3.0 también es posible pasar un cierre a un parámetro de llamada de retorno.

Ejemplo #1 Ejemplos de funciones de llamadas de retorno

<?php

// Un ejemplo de función de llamada de retorno
function my_callback_function() {
    echo 
'hello world!';
}

// Un ejemplo de método de llamada de retorno
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Tipo 1: Llamada de retorno simple
call_user_func('my_callback_function'); 

// Tipo 2: Llamada a un método de clase estático
call_user_func(array('MyClass''myCallbackMethod')); 

// Tipo 3: Llamada al método de un objeto
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Tipo 4: Llamada a un método de clase estático (A partir de PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Tipo 5: Llamada a un método de clase estático relativo (A partir de PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A
?>

Ejemplo #2 Ejemplo de llamada de retorno utilizando un cierre o función anónima

<?php
// Nuestro cierre
$double = function($a) {
    return 
$a 2;
};

// Este es nuestro rango de números
$numbers range(15);

// Aquí utilizamos el cierre como llamada de retorno
// para doblar el valor de cada elemento en nuestro
// rango
$new_numbers array_map($double$numbers);

print 
implode(' '$new_numbers);
?>

El resultado del ejemplo sería:

2 4 6 8 10

Nota: En PHP 4, era necesario usar una referencia para crear una llamada de retorno que apunte al object real, y no a una copia del mismo. Para más detalles, vea las Referencias Explicadas.

Nota:

Las funciones de retorno de llamada que se registran con funciones como call_user_func() y call_user_func_array() no se llamarán si se produce una excepción en la función de retorno previa.



Pseudo tipos y variables usadas en esta documentación

mixed

mixed indica que un parámetro puede aceptar múltiples tipos (pero no necesariamente todos).

gettype(), por ejemplo, puede aceptar todos los tipos PHP, mientras que str_replace() sólo acepta strings y arrays.

number

number indica que un parámetro puede ser tanto un integer como un float.

Llamada de retorno

Los pseudo-tipos callback fueron usados en está documentación antes de que la sugerencia de tipo callable fuera introducida en PHP 5.4. Significan exactamente lo mismo.

void

void como un tipo de variable de retorno significa que el valor de retorno no es útil. void en una lista de parámetros significa que la función no acepta ningún parámetro.

...

$... en el prototipo de funciones significa and so on. Este nombre de variable se usa cuando una función puede tomar un número infinito de argumentos.



Manipulación de tipos

PHP no requiere (ni soporta) la definición explicita de tipos en la declaración de variables; el tipo de la variable se determina por el contexto en el cual se emplea la variable. Es decir, si se asigna un valor string a una variable $var, entonces $var se convierte en un string. Si un valor integer es entonces asignado a la misma variable $var, ésta se convierte en integer.

Un ejemplo de la conversión de tipos automática de PHP es el operador suma '+'. Si ambos operandos son float, entonces ambos operandos son evaluados como floats y el resultado será un float. De otra manera, los operandos seran interpretados como integers, y el resultado será entonces integer. Tenga en cuenta que esto no implica que se cambien los tipos de los propios operandos; el único cambio es en como se evalúan los operandos y en el tipo de expresión en sí mismo.

<?php
$foo 
"0";  // $foo es string (ASCII 48)
$foo += 2;   // $foo es ahora un integer (2)
$foo $foo 1.3;  // $foo es ahora un float (3.3)
$foo "10 Cerditos pequeñitos"// $foo es integer (15)
$foo "10 Cerdos pequeños";     // $foo es integer (15)
?>

Si considera confusos los últimos dos ejemplos anteriores, consulte Conversión de cadenas a números.

Para forzar a que una variable sea evaluada como un determinado tipo, consulte la sección Forzado de tipos. Para cambiar el tipo de variable, consulte la función settype().

Para probar cualquiera de los ejemplos de esta sección, utilice la función var_dump().

Nota:

El comportamiento de la conversión automática en array está actualmente sin definir.

Tambien, debido a que PHP soporta el indexado de string mediante compensaciones mediante la misma sintaxis empleada en el indexado de arrays, los siguientes ejemplos son válidos para todas las versiones de PHP:

<?php
$a    
'car'// $a es un string
$a[0] = 'b';   // $a sigue siendo un string
echo $a;       // bar
?>

Consulte la sección Acceso a cadenas mediante caracteres para más información.

Forzado de tipos

El forzado de tipos en PHP funciona de la misma manera que en C:, donde el nombre del tipo deseado se escribe entre paréntesis antes de la variable que se quiera forzar.

<?php
$foo 
10;   // $foo es un integer
$bar = (boolean) $foo;   // $bar es un boolean
?>

Los siguientes forzados de tipos están permitidos:

  • (int), (integer) - forzado a integer
  • (bool), (boolean) - forzado a boolean
  • (float), (double), (real) - forzado a float
  • (string) - forzado a string
  • (array) - forzado a array
  • (object) - forzado a object
  • (unset) - forzado a NULL (PHP 5)

El forzado (binary) y el soporte del prefijo b fueron añadidos en PHP 5.2.1

Fíjese que se permiten las tabulaciones y espacios dentro de los paréntesis, por lo que los siguientes ejemplos son funcionalmente equivalentes:

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Forzado literal de strings y variables a strings binarios:

<?php
$binary 
= (binary) $string;
$binary b"binary string";
?>

Nota:

El lugar de forzar una variable a string, tambien se puede encerrar la variable entre comillas dobles.

<?php
$foo 
10;            // $foo es un integer
$str "$foo";        // $str es un string
$fst = (string) $foo// $fst es tambien un string

// Esto muestra que "son lo mismo"
if ($fst === $str) {
    echo 
"son lo mismo";
}
?>

Puede que no sea obvio que sucede exactamente cuando se fuerzan ciertos tipos. Para más información, consulte estas secciones:




Variables

Tabla de contenidos


Conceptos básicos

En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.

Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado (underscore), seguido de cualquier número de letras, números y caracteres de subrayado. Como expresión regular se podría expresar como: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Nota: Para los propósitos de este manual, una letra es a-z, A-Z, y los bytes del 127 al 255 (0x7f-0xff).

Nota: $this es una variable especial que no puede ser asignada.

Para más información sobre funciones relacionadas con variables, vea la Referencia de Funciones de Variables.

<?php
$var 
'Roberto';
$Var 'Juan';
echo 
"$var$Var";      // imprime "Roberto, Juan"

$4site 'aun no';      // inválido; comienza con un número
$_4site 'aun no';     // válido; comienza con un carácter de subrayado
$täyte 'mansikka';    // válido; 'ä' es ASCII (Extendido) 228
?>

De forma predeterminada, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresión a una variable, el valor completo de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de una variable a otra, los cambios que se efectúen a una de esas variables no afectará a la otra. Para más información sobre este tipo de asignación, vea Expresiones.

PHP también ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, "se convierte en un alias de" ó "apunta a") la variable original. Los cambios a la nueva variable afectan a la original, y viceversa.

Para asignar por referencia, simplemente se antepone un signo ampersand (&) al comienzo de la variable cuyo valor se está asignando (la variable fuente). Por ejemplo, el siguiente segmento de código produce la salida 'Mi nombre es Bob' dos veces:

<?php
$foo 
'Bob';                // Asigna el valor 'Bob' a $foo
$bar = &$foo;                // Referenciar $foo vía $bar.
$bar "Mi nombre es $bar";  // Modifica $bar...
echo $bar;
echo 
$foo;                   // $foo también se modifica.
?>

Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por referencia.

<?php
$foo 
25;
$bar = &$foo;      // Esta es una asignación válida.
$bar = &(24 7);  // Inválida; referencia una expresión sin nombre.

function test() {
   return 
25;
}

$bar = &test();    // Inválido.
?>

No es necesario inicializar variables en PHP, sin embargo, es una muy buena práctica. Las variables no inicializadas tienen un valor predeterminado de acuerdo a su tipo dependiendo del contexto en el que son usadas - las booleanas se asumen como FALSE, los enteros y flotantes como cero, las cadenas (p.ej. usadas en echo) se establecen como una cadena vacía y las matrices se convierten en un array vacío.

Ejemplo #1 Valores predeterminados en variables sin inicializar

<?php
// Una variable no definida Y no referenciada (sin contexto de uso); imprime
// NULL
var_dump($variable_indefinida);

// Uso booleano; imprime 'false' (Vea operadores ternarios para más
// información sobre esta sintaxis)
echo($booleano_indefinido "true\n" "false\n");

// Uso de una cadena; imprime 'string(3) "abc"'
$cadena_indefinida .= 'abc';
var_dump($cadena_indefinida);

// Uso de un entero; imprime 'int(25)'
$int_indefinido += 25// 0 + 25 => 25
var_dump($int_indefinido);

// Uso de flotante/doble; imprime 'float(1.25)'
$flotante_indefinido += 1.25;
var_dump($flotante_indefinido);

// Uso de array; imprime array(1) {  [3]=>  string(3) "def" }
$array_indefinida[3] = "def"// array() + array(3 => "def") => array(3 => "def")
var_dump($array_indefinida);

// Uso de objetos; crea un nuevo objeto stdClass (vea http://www.php.net/manual/en/reserved.classes.php)
// Imprime: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$objeto_indefinido->foo 'bar';
var_dump($objeto_indefinido);
?>

Depender del valor predeterminado de una variable sin inicializar es problemático al incluir un archivo en otro que use el mismo nombre de variable. También es un importante riesgo de seguridad cuando la opción register_globals se encuentra habilitada. Un error de nivel E_NOTICE es emitido cuendo se trabaja con variables sin inicializar, con la excepción del caso en el que se anexan elementos a un array no inicializado. La construcción del lenguaje isset() puede ser usada para detectar si una variable ya ha sido inicializada.



Variables Predefinidas

PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se ejecute. Muchas de éstas, sin embargo, no pueden ser completamente documentadas ya que dependen del servidor que esté corriendo, la versión y configuración de dicho servidor, y otros factores. Algunas de estas variables no estarán disponibles cuando se ejecute PHP desde la línea de comandos. Para obtener una lista de estas variables, por favor vea la sección sobre Variables Predefinidas Reservadas.

Advertencia

A partir de PHP 4.2.0, el valor predeterminado de la directiva PHP register_globals es off (desactivada). Este es un cambio importante en PHP. Tener register_globals off afecta el conjunto de variables predefinidas disponibles en el sistema. Por ejemplo, para obtener DOCUMENT_ROOT se usará $_SERVER['DOCUMENT_ROOT'] en vez de $DOCUMENT_ROOT ó $_GET['id'] de la URL http://www.example.com/test.php?id=3 en lugar de $id ó $_ENV['HOME'] en lugar de $HOME.

Para más información sobre este cambio, puede consultar el apartado de configuración sobre register_globals, el capítulo sobre seguridad Usando "Register Globals" , asi como los anuncios de lanzamiento de PHP » 4.1.0 y » 4.2.0

El uso de las variables reservadas predefinidas en PHP, como las matrices superglobales es recomendable.

A partir de PHP 4.1.0, PHP ofrece un conjunto adicional de matrices predefinidas que contienen variables del servidor web, el entorno y entradas del usuario. Estas nuevas matrices son un poco especiales porque son automáticamente globales. Por esta razón, son conocidas a menudo como "superglobales". Las superglobales se mencionan más abajo; sin embargo para una lista de sus contenidos y más información sobre variables predefinidas en PHP, por favor consulte la sección Variables predefinidas reservadas. Asimismo, podrá notar cómo las antiguas variables predefinidas ($HTTP_*_VARS) todavía existen. A partir de PHP 5.0.0, las arrays de tipo long variables predefinidas se pueden desactivar con la directiva register_long_arrays .

Nota: Variables variables

Las superglobales no pueden ser usadas como variables variables al interior de funciones o métodos de clase.

Nota:

Aún cuando las superglobales y HTTP_*_VARS pueden existir al mismo tiempo; estas variables no son idénticas, así que modificar una no cambia la otra.

Si ciertas variables no son definidas en variables_order, las matrices PHP predefinidas asociadas a estas, estarán vacías.



Ámbito de las variables

El ámbito de una variable es el contexto dentro del que la variable está definida. La mayor parte de las variables PHP sólo tienen un ámbito simple. Este ámbito simple también abarca los ficheros incluídos y los requeridos. Por ejemplo:

<?php
$a 
1;
include 
'b.inc';
?>

Aquí, la variable $a estará disponible al interior del script incluido b.inc. Sin embargo, al interior de las funciones definidas por el usuario se introduce un ámbito local a la función. Cualquier variable usada dentro de una función está, por omisión, limitada al ámbito local de la función. Por ejemplo:

<?php
$a 
1/* ámbito global */

function test()
{
    echo 
$a/* referencia a una variable del ámbito local */
}

test();
?>

Este script no producirá salida, ya que la sentencia echo utiliza una versión local de la variable $a, a la que no se ha asignado ningún valor en su ámbito. Puede que usted note que hay una pequeña diferencia con el lenguaje C, en el que las variables globales están disponibles automáticamente dentro de la función a menos que sean expresamente sobreescritas por una definición local. Esto puede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente. En PHP, las variables globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro de dicha función.

La palabra clave global

En primer lugar, un ejemplo de uso de global:

Ejemplo #1 Uso de global

<?php
$a 
1;
$b 2;

function 
Suma()
{
    global 
$a$b;

    
$b $a $b;
}

Suma();
echo 
$b;
?>

El script anterior producirá la salida "3". Al declarar $a y $b globales dentro de la función, todas las referencias a tales variables se referirán a la versión global. No hay límite al número de variables globales que se pueden manipular dentro de una función.

Un segundo método para acceder a las variables desde un ámbito global es usando el array $GLOBALS. El ejemplo anterior se puede reescribir así:

Ejemplo #2 Uso de $GLOBALS en lugar de global

<?php
$a 
1;
$b 2;

function 
Suma()
{
    
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Suma();
echo 
$b;
?>

El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array. $GLOBALS existe en cualquier ámbito, esto ocurre ya que $GLOBALS es una superglobal. Aquí hay un ejemplo que demuestra el poder de las superglobales:

Ejemplo #3 Ejemplo que demuestra las superglobales y el ámbito

<?php
function test_global()
{
    
// La mayoría de variables predefinidas no son "super" y requieren
    // 'global' para estar disponibles al ámbito local de las funciones.
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['name'];

    
// Las superglobales están disponibles en cualquier ámbito y no
    // requieren 'global'. Las superglobales están disponibles desde
    // PHP 4.1.0, y ahora HTTP_POST_VARS se considera obsoleta.
    
echo $_POST['name'];
}
?>

Nota:

Utilizar una clave global fuera de una función no es un error. Esta puede ser utilizada aún si el fichero está incluido desde el interior de una función.

Uso de variables estáticas

Otra característica importante del ámbito de las variables es la variable estática. Una variable estática existe sólo en el ámbito local de la función, pero no pierde su valor cuando la ejecución del programa abandona este ámbito. Consideremos el siguiente ejemplo:

Ejemplo #4 Ejemplo que demuestra la necesidad de variables estáticas

<?php
function test()
{
    
$a 0;
    echo 
$a;
    
$a++;
}
?>

Esta función tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 e imprime un "0". La sentencia $a++, que incrementa la variable, no sirve para nada, ya que en cuanto la función finaliza, la variable $a desaparece. Para hacer una función útil para contar, que no pierda la pista del valor actual del conteo, la variable $a debe declararse como estática:

Ejemplo #5 Ejemplo del uso de variables estáticas

<?php
function test()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

Ahora, $a se inicializa únicamente en la primera llamada a la función, y cada vez que la función test() es llamada, imprimirá el valor de $a y lo incrementa.

Las variables estáticas también proporcionan una forma de manejar funciones recursivas. Una función recursiva es la que se llama a sí misma. Se debe tener cuidado al escribir una función recursiva, ya que puede ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse de implementar una forma adecuada de terminar la recursión. La siguiente función cuenta recursivamente hasta 10, usando la variable estática $count para saber cuándo parar:

Ejemplo #6 Variables estáticas con funciones recursivas

<?php
function test()
{
    static 
$count 0;

    
$count++;
    echo 
$count;
    if (
$count 10) {
        
test();
    }
    
$count--;
}
?>

Nota:

Las variables estáticas pueden ser declaradas como se ha visto en los ejemplos anteriores. Al tratar de asignar valores a estas variables que sean el resultado de expresiones, causará un error de análisis sintáctico.

Ejemplo #7 Declaración de variables estáticas

<?php
function foo(){
    static 
$int 0;          // correcto
    
static $int 1+2;        // incorrecto  (ya que es una expresión)
    
static $int sqrt(121);  // incorrecto  (es una expresión también)

    
$int++;
    echo 
$int;
}
?>

Nota:

Las declaraciones estáticas son resueltas en tiempo de compilación.

Nota:

Utilizar una clave global fuera de una función no es un error. Esta pueda ser utilizada aún si el fichero está incluido en el interior de una función.

Referencias con variables globales y estáticas

El motor Zend 1, utilizado por PHP 4, implementa los modificadores static y global para variables en términos de referencias. Por ejemplo, una variable global verdadera importada dentro del ámbito de una función con global crea una referencia a la variable global. Esto puede ser causa de un comportamiento inesperado, tal y como podemos comprobar en el siguiente ejemplo:

<?php
function prueba_referencia_global() {
    global 
$obj;
    
$obj = &new stdclass;
}

function 
prueba_no_referencia_global() {
    global 
$obj;
    
$obj = new stdclass;
}

prueba_referencia_global();
var_dump($obj);
prueba_no_referencia_global();
var_dump($obj);
?>

El resultado del ejemplo sería:


NULL
object(stdClass)(0) {
}

Un comportamiento similar se aplica a static. Las referencias no son almacenadas estáticamente.

<?php
function &obtener_instancia_ref() {
    static 
$obj;

    echo 
'Objeto estático: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Asignar una referencia a la variable estática
        
$obj = &new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

function &
obtener_instancia_no_ref() {
    static 
$obj;

    echo 
'Objeto estático: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Asignar el objeto a la variable estática
        
$obj = new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

$obj1 obtener_instancia_ref();
$aun_obj1 obtener_instancia_ref();
echo 
"\n";
$obj2 obtener_instancia_no_ref();
$aun_obj2 obtener_instancia_no_ref();
?>

El resultado del ejemplo sería:


Objeto estático: NULL
Objeto estático: NULL

Objeto estático: NULL
Objeto estático: object(stdClass)(1) {
["property"]=>
int(1)
}

Este ejemplo demuestra que al asignar una referencia a una variable estática, esta no es recordada cuando se invoca la funcion &obtener_instancia_ref() por segunda vez.



Variables variables

A veces es conveniente tener nombres de variables variables. Dicho de otro modo, son nombres de variables que se pueden definir y usar dinámicamente. Una variable normal se establece con una sentencia como:

<?php
$a 
'hola';
?>

Una variable variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, hola, se puede usar como el nombre de una variable utilizando dos signos de dólar. Es decir:

<?php
$$a 'mundo';
?>

En este momento se han definido y almacenado dos variables en el árbol de símbolos de PHP: $a, que contiene "hola", y $hola, que contiene "mundo". Es más, esta sentencia:

<?php
echo "$a ${$a}";
?>

produce el mismo resultado que:

<?php
echo "$a $hola";
?>

esto quiere decir que ambas producen el resultado: hola mundo.

Para usar variables variables con matrices, hay que resolver un problema de ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambigüedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.

También se puede acceder a las propiedades de la clase usando el nombre de la variable de la propiedad. El nombre de la propiedad será resuelto según donde se hizo la llamada. Por ejemplo, en esta expresión $foo->$bar, de forma local en la clase se buscará por $bar y su valor será usado como el nombre de la propiedad de $foo. Esto también es cierto si $bar es un acceso a un array.

Ejemplo #1 Ejemplo de la propiedad variable

<?php
class foo {
    var 
$bar 'Soy bar.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
$foo->$bar "\n";
echo 
$foo->$baz[1] . "\n";
?>

El resultado del ejemplo sería:


Soy bar.
Soy bar.

Advertencia

Por favor tenga en cuenta que las variables variables no pueden usarse con las Matrices superglobales de PHP al interior de funciones o métodos de clase. La variable $this es también una variable especial que no puede ser referenciada dinámicamente.



Variables Desde Fuentes Externas

Formularios HTML (GET y POST)

Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar automáticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente formulario:

Ejemplo #1 Variables de formulario simples

<form action="foo.php" method="post">
    Nombre usuario: <input type="text" name="username" /><br />
    Email:  <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="¡Enviarme!" />
</form>

Dependiendo de su configuración y preferencias personales, existen muchas maneras de acceder a los datos de formularios HTML. Algunos ejemplos:

Ejemplo #2 Acceso a datos de un formulario simple HTML POST

<?php
// Disponible desde PHP 4.1.0

   echo $_POST['username'];
   echo $_REQUEST['username'];

   import_request_variables('p', 'p_');
   echo $p_username;

// Desde PHP 5.0.0, las variables predefinidas largas se pueden
// desactivar con la directiva register_long_arrays.
   echo $HTTP_POST_VARS['username'];

// Disponible si la directiva de PHP register_globals = on. A partir de
// PHP 4.2.0 el valor predeterminado de register_globals = off.
// Usar o depender de este método no es recomendable.

   echo $username;
?>

Usar un formulario GET es similar excepto en el uso de variables predefinidas, que en este caso serán del tipo GET. GET también se usa con QUERY_STRING (la información despues del símbolo '?' en una URL). Por ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles con $_GET['id']. Vea también $_REQUEST e import_request_variables().

Nota:

Las matrices superglobales, como $_POST y $_GET, están disponibles desde PHP 4.1.0.

Nota:

Puntos y espacios en nombres de variable son convertidos a subguiones. Por ejemplo <input name="a.b" /> resulta $_REQUEST["a_b"].

Como hemos dicho, antes de PHP 4.2.0, el valor por omisión de register_globals era on (activado). La comunidad PHP recomienda no confiar en esta directiva ya que es preferible asumir que tiene el valor off (desactivada) y programar teniendo en cuenta esto.

Nota:

La directiva de configuración magic_quotes_gpc afecta a valores Get, Post y Cookie. Si está activada (on), el valor (It's "PHP!") será convertido automáticamente a (It\'s \"PHP!\"). El escape de caracteres es necesario en inserciones a bases de datos. Vea también addslashes(), stripslashes() y magic_quotes_sybase.

PHP también entiende arrays en el contexto de variables de formularios (vea la faq relacionada). Se puede, por ejemplo, agrupar juntas variables relacionadas o usar esta característica para obtener valores de una entrada "select" múltiple. Por ejemplo, vamos a mandar un formulario a sí mismo y a presentar los datos cuando se reciban:

Ejemplo #3 Variables de formulario más complejas

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Nombre:  <input type="text" name="personal[nombre]" /><br />
    Email:   <input type="text" name="personal[email]" /><br />
    Cerveza: <br />
    <select multiple name="cerveza[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="¡enviarme!" />
</form>

Nombres de variables tipo IMAGE SUBMIT

Cuando se envía un formulario, es posible usar una imagen en vez del botón estándar "submit":

<input type="image" src="image.gif" name="sub" />

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña se transmitirá al servidor con dos variables adicionales, sub_x y sub_y. Éstas contienen las coordenadas del clic del usuario dentro de la imagen. Los más experimentados puede notar que los nombres de variable enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte el guión en subrayado automáticamente.

Cookies HTTP

PHP soporta cookies de HTTP de forma transparente tal y como están definidas en » RFC 6265. Las cookies son un mecanismo para almacenar datos en el navegador y así rastrear o identificar a usuarios que vuelven. Se pueden crear cookies usando la función setcookie(). Las cookies son parte de la cabecera HTTP, así que se debe llamar a la función SetCookie antes de que se envíe cualquier salida al navegador. Es la misma restricción que para la función header(). Los datos de una cookie están disponibles en el array con datos de cookies apropiada, tal como $_COOKIE, $HTTP_COOKIE_VARS y también en $_REQUEST. Vea la función setcookie() para más detalles y ejemplos.

Si se quieren asignar múltiples valores a una sola cookie, basta con asignarlo como un array. Por ejemplo:

<?php
  setcookie
("MiCookie[foo]"'Prueba 1'time()+3600);
  
setcookie("MiCookie[bar]"'Prueba 2'time()+3600);
?>

Esto creará dos cookies separadas aunque MiCookie será un array simple en el script. Si se quiere definir una sola cookie con valores múltiples, considere el uso de la función serialize() o explode() primero en el valor.

Nótese que una cookie reemplazará a una cookie anterior que tuviese el mismo nombre en el navegador a menos que la ruta o el dominio fuesen diferentes. Así, para una aplicación de carrito de compras se podría querer mantener un contador e ir pasándolo. Es decir:

Ejemplo #4 Un ejemplo de setcookie()

<?php
if (isset($_COOKIE['conteo'])) {
    
$conteo $_COOKIE['conteo'] + 1;
} else {
    
$conteo 1;
}
setcookie('conteo'$conteotime()+3600);
setcookie("Carrito[$conteo]"$itemtime()+3600);
?>

Puntos en los nombres de variables de entrada

Típicamente, PHP no altera los nombres de las variables cuando se pasan a un script. Sin embargo, hay que notar que el punto no es un carácter válido en el nombre de una variable PHP. Para conocer la razón, considere el siguiente ejemplo:

<?php
$varname
.ext;  /* nombre de variable inválido */
?>
Lo que el intérprete vé es el nombre de una variable $varname, seguido por el operador de concatenación, y seguido por la cadena pura (es decir, una cadena sin entrecomillar que no coincide con ninguna palabra clave o reservada conocida) 'ext'. Obviamente, no se pretendía que fuese éste el resultado.

Por esta razón, es importante hacer notar que PHP reemplazará automáticamente cualquier punto en los nombres de variables de entrada por guiones bajos (subrayados).

Determinación de los tipos de variables

Dado que PHP determina los tipos de las variables y los convierte (generalmente) según lo necesita, no siempre resulta obvio de qué tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qué tipo es una variable: gettype(), is_array(), is_float(), is_int(), is_object(), y is_string(). Vea también el capítulo sobre Tipos.




Constantes

Tabla de contenidos

Una constante es un identificador (nombre) para expresar un valor simple. Como el nombre sugiere, este valor no puede variar durante la ejecucción del script. (A excepción de las constantes predefinidas, que en realidad no son constantes). Una constante es sensible a mayúsculas por defecto. Por convención, los identificadores de contantes siempre suelen declararse en mayúsculas.

El nombre de una constante sigue las mismas reglas que cualquier otra etiqueta de PHP. Un nombre de constante válido empieza por una letra o subguión, seguido por cualquier número o letras, números o subguiones. Usando una expresión regular, se representaría de la siguiente manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

Ejemplo #1 Nombres de constantes correctos e incorrectos

<?php

// Nombre de constantes correctos
define("FOO",     "something");
define("FOO2",    "something else");
define("FOO_BAR""something more");

// Nombres de constantes incorrectos
define("2FOO",    "something");

// Esto es válido, pero debería ser evitado:
// Ya que quizá algún día PHP crea una constante mágica 
// con el mismo nombre y en ese caso provocaría un error en tu script
define("__FOO__""something"); 

?>

Nota: Para nuestros propósitos, entenderemos como letra los carácteres a-z, A-Z, y los ASCII del 127 hasta el 255 (0x7f-0xff).

Igual que las superglobals, el acceso a una constante es global. Se puede acceder a constantes desde cualquier sitio del script sin importar desde donde. Para más información en el acceso, lea el manual en la sección acceso a variables.


Sintaxis

Se puede definir una constante usando la función define() o también declarándola fuera de la clase con const desde PHP 5.3.0. Una vez que la constante está definida, no puede ser cambiada o redifinida en ningún momento.

Solo se puede definir como constantes valores escalares (boolean, integer, float y string). Se puede definir resource en constantes, pero debería ser evitado, porque puede causar resultados inesperados.

Para obtener el valor de una constante solo es necesarios especificar su nombre. A diferencia de las variables, no se debe prefijar una constante con el signo $. También se puede usar la función constant() para leer el valor de una constante si se desea obtener el valor de una constante de forma dinámica. Use get_defined_constants() para obtener una lista de todas las constantes definidas.

Nota: Las contantes y las variables (globales) se encuentran en un espacio de nombres distinto. Esto implica que por ejemplo TRUE y $TRUE son diferentes.

Si se usa una constante que todavía no está definida, PHP asume que se está refiriendo al nombre de la constante en si, igual que si fuera una string (CONSTANT vs "CONSTANT"). Cuando esto suceda, se mostrará un error de nivel E_NOTICE. Ver también la sección en el manual de porqué $foo[bar] es incorrecto (a no ser que primero define() bar como constante). Si simplemente quiere comprobar si una constante está definida, use la función defined().

Estas son las diferencias entre constantes y variables:

  • Las constantes no llevan el signo dólar ($), como prefijo.
  • Las constantes solo pueden ser definidas usando la función define(), y no por simple asignación.
  • Las constantes pueden ser definidas y accedidas desde cualquier sitio sin importar las reglas de acceso de variables.
  • Las constantes no pueden ser redefinidas o eliminadas una vez se han definido. Y
  • Las constantes solo deberían contener valores escalares.

Ejemplo #1 Definiendo constantes

<?php
define
("CONSTANT""Hola mundo.");
echo 
CONSTANT// muestra "Hola mundo."
echo Constant// muestra "Constant" y provoca un error.
?>

Ejemplo #2 Definiendo constantes usando el keyword const

<?php
// Funciona desde PHP 5.3.0
const CONSTANT 'Hola Mundo';

echo 
CONSTANT;
?>

Nota:

A diferencia de definir constantes usando define(), las constantes definidas con la palabra clave const deben declararse en el nivel superior del entorno de la aplicación porque se definen en tiempo de ejecución. Esto significa que no pueden declararse dentro de funciones, loops o declaraciones if.

Vea también Constantes de clase.



Constantes predefinidas

PHP ofrece un largo número de constantes predefinidas a cualquier script en ejecucción. Muchas de estas constantes, sin embargo, son creadas por diferentes extensiones, y sólo estarán presentes si dichas extensiones están disponibles, bien por carga dinámica o porque han sido compiladas.

Hay ocho constantes predefinidas que cambian dependiendo de donde son usadas. Por ejemplo el valor de __LINE__ depende en la línea que se use en el script. Estas constantes especiales son sensibles a mayúsculas y son las siguientes:

Varias constantes PHP "mágicas"
Nombre Descripción
__LINE__ Línea actual en el fichero.
__FILE__ Ruta completa y nombre del fichero. Si se usa dentro de un include, devolverá el nombre del fichero del include. Desde PHP 4.0.2, __FILE__ siempre contiene la ruta absoluta con symlinks resueltos, en otras versiones contenía la ruta relativa según las circunstancias.
__DIR__ Directorio del fichero. Si se utiliza dentro de un include, devolverá el directorio del fichero incluído. Esta constante es igual que dirname(__FILE__). El nombre del directorio no lleva la barra inicial a no ser que esté en el directorio root. (Fue añadida en PHP 5.3.0)
__FUNCTION__ Nombre de la función. (Añadida en PHP 4.3.0) Desde PHP 5 esta constante devuelve el nombre de la función donde fue declarada (sensible a mayúsculas). En PHP 4 su valor siempre es en minúsculas.
__CLASS__ Nombre de la clase. (Añadida en PHP 4.3.0) Desde PHP 5 esta constante devuelve el nombre de la clase donde fue declarada (sensible a mayúsculas). En PHP 4 su valor siempre es en minúsculas. El nombre de la clase incluye el namespace declarado en (p.e.j. Foo\Bar). Tenga en cuenta que a partir de PHP 5.4 __CLASS__ también funciona con traits. Cuando es usado en un método trait, __CLASS__ es el nombre de la clase del trait que está siendo utilizado.
__TRAIT__ El nombre de el trait. (Añadido en PHP 5.4.0) A partir de PHP 5.4 esta constante devuelve el trait que fué declarado (sensible a mayúsculas y minúsculas). El nombre de el trait incluye el namespace si alguno fué declarado en (p.e.j. Foo\Bar).
__METHOD__ Nombre del método de la clase. (Añadida en PHP 5.0.0.) Nombre del método devuelto donde fue declarada. (sensible a mayúsculas).
__NAMESPACE__ Nombre del espacio de nombres actual (sensible a mayúsculas). Esta constante se define en tiempo de compilación (Añadida en PHP 5.3.0) El nombre del namespace actual (sensible a mayúsculas).

Véase también get_class(), get_object_vars(), file_exists() y function_exists().




Expresiones

La expresiones son las piedras de construcción más importantes de PHP. En PHP casi todo lo que se escribe es una expresión. La manera más simple y acertada de definir lo que es una expresión es "cualquier cosa que tiene un valor".

Las formas más básicas de expresiones son las constantes y las variables. Cuando se escribe "$a = 5", se está asignando '5' a $a. '5', obviamente, tiene el valor 5, o en otras palabras, '5' es una expresión con el valor de 5 (en este caso, '5' es una constante entera).

Después de esta asignación, se espera que el valor de $a sea 5 también, por lo que si se escribe $b = $a, se espera que esto se comporte tal como si se escribiera $b = 5. En otras palabras, $a es también una expresión con el valor 5. Si todo funciona bien, esto es exactamente lo que sucederá.

Un ejemplo de expresiones algo más complejo son las funciones. Por ejemplo, considere la siguiente función:

<?php
function foo ()
{
    return 
5;
}
?>

Asumiendo que está familiarizado con el concepto de función (si no lo está, échele una ojeada al capítulo sobre funciones), asumirá que escribir $c = foo() es esencialmente igual que escribir $c = 5. Y está en lo cierto. Las funciones son expresiones con el valor de sus valores devueltos. Ya que foo() devuelve 5, el valor de la expresión 'foo()' es 5. Normalmente las funciones no sólo devuelven un valor estático, sino que computan algo.

Por supuesto, los valores en PHP no tienen que ser enteros, y con frecuencia no lo son. PHP soporta cuatro tipos de valores escalares: valores enteros (integer), valores de coma (punto) flotante (float), valores de cadena (string) y valores booleanos (boolean) - (valores escalares son aquellos que no se pueden descomponer en piezas más pequeñas, a diferencia de las matrices, por ejemplo). PHP también soporta dos tipos compuestos (no escalares): matrices (arrays) y objetos. Cada uno de estos tipos de valores pueden ser asignados a variables o devueltos desde funciones.

PHP lleva las expresiones mucho más allá, de la misma manera que lo hacen otros lenguajes. PHP es un lenguaje orientado a expresiones, en el sentido de que casi todo es una expresión. Considere el ejemplo que ya hemos tratado, '$a = 5'. Es fácil de ver que aquí hay dos valores involucrados, el valor de la constante entera '5', y el valor de $a que ha sido actualizado a 5 también. Aunque la verdad es que existe aquí un valor adicional involucrado, que es el valor de la asignación misma. La asignación evalúa al valor asignado, en este caso 5. En la práctica, esto significa que '$a = 5', sin importar lo que haga, es una expresión con el valor 5. De este modo, escribir algo como '$b = ($a = 5)' es igual que escribir '$a = 5; $b = 5;' (el punto y coma marca el final de una sentencia). Ya que las asignaciones se analizan de derecha a izquierda, también se puede escribir '$b = $a = 5'.

Otro buen ejemplo de orientación a expresiones es el pre- y post-incremento y decremento. Los usuarios de PHP y de otros muchos lenguajes pueden estar familiarizados con la notación variable++ y variable--. Éstos son los operadores de incremento y decremento. En PHP, al igual que en C, hay dos tipos de incrementos - pre-incremento y post-incremento. Ambos esencialmente incrementan la variable, y el efecto sobre la variable es idéntico. La diferencia está con el valor de la expresión de incremento. Pre-incremento, que se escribre '++$variable', evalúa al valor incrementado (PHP incrementa la variable antes de leer su valor, de ahí el nombre de 'pre-incremento'). Post-incremento, que se escribe '$variable++' evalúa el valor original de $variable, antes de que sea incrementado (PHP incrementa la variable después de leer su valor, de ahí el nombre de 'post-incremento').

Un tipo de expresiones muy comunes son las expresiones de comparación. Estas expresiones evalúan si algo es FALSE (falso) o TRUE (verdadero). PHP soporta > (mayor que), >= (mayor o igual que), == (igual), != (distinto), < (menor que) y <= (menor o igual que). El lenguaje también soporta un conjunto de operadores de equivalencia estricta: === (igual y del mismo tipo) y !== (diferente o de distinto tipo). Estas expresiones se usan mayormente dentro de ejecuciones condicionales, tales como la sentencia if.

El último ejemplo de expresiones que trataremos aquí es una combinación de expresiones operador-asignación. Ya sabe que si quiere incrementar $a en 1, puede simplemente escribir '$a++' o '++$a'. Pero si lo que quiere es añadirle más de uno, por ejemplo 3, podría escribir '$a++' varias veces, pero esto, obviamente, no es una manera muy eficiente o cómoda. Una práctica mucho más común es escribir '$a = $a + 3'. '$a + 3' evalúa al valor de $a más 3, y se vuelve a asignar a $a, lo que resulta en incrementar $a en 3. En PHP, como en otros lenguajes como C, se puede escribir esto de una manera más abreviada, lo que con el tiempo se podría convertir en una forma más clara y rápida de entenderlo. Añadir 3 al valor actual de $a puede ser escrito '$a += 3'. Esto significa exactamente "toma el valor de $a, añádele 3 y asígnalo de nuevo a $a". Además de ser más corto y claro, también resulta en una ejecución más rápida. El valor de '$a += 3', al igual que el valor de una asignación normal, es el valor asignado. Observe que NO es 3, sino el valor combinado de $a más 3 (éste es el valor que es asignado a $a). Se puede usar cualquier operador compuesto de dos partes en este modo de operador-asignación, por ejemplo '$a -= 5' (restar 5 del valor de $a), '$b *= 7' (multiplicar el valor de $b por 7), etc.

Existe una expresión más que le puede parecer rara si no la ha visto en otros lenguajes, el operador condicional ternario:

<?php
$primero 
$segundo $tercero
?>

Si el valor de la primera subexpresión es TRUE (no es cero), se evalúa la segunda subexpresión, y ése será el resultado de la expresión condicional. Si no, se evalúa la tercera subexpresión, y ése será el valor.

El siguiente ejemplo debería ayudarle a comprender un poco mejor el pre- y post-incremento y las expresiones en general:

<?php
function doble($i)
{
    return 
$i*2;
}
$b $a 5;        /* asignar el valor cinco a la variable $a y $b */
$c $a++;          /* post-incremento, asignar el valor original de $a 
                       (5) a $c */
$e $d = ++$b;     /* pre-incremento, asignar el valor incrementado de
                       $b (6) a $d y $e */

/* en este punto, $d y $e son iguales a 6 */

$f doble($d++);  /* asignar el doble del valor de $d antes
                       del incremento, 2*6 = 12, a $f */
$g doble(++$e);  /* asignar el doble del valor de $e después
                       del incremento, 2*7 = 14, a $g */
$h $g += 10;      /* primero, $g es incrementado en 10 y finaliza con el
                       valor 24. El valor de la asignación (24) es
                       asignado después a $h, y $h finaliza también con el
                       valor 24. */
?>

Algunas expresiones pueden considerarse como sentencias. En este caso, una sentencia tiene la forma 'expr ;', es decir, una expresión seguida de un punto y coma. En '$b = $a = 5;', '$a = 5' es una expresión válida, pero no es una sentencia en sí. Sin embargo, '$b = $a = 5;' es una sentencia válida.

Lo último que vale la pena mencionar es el valor verdadero de las expresiones. En muchos casos, principalmente en ejecuciones condicionales y bucles, no interesa saber el valor específico de la expresión, sino sólo si el valor significa TRUE o FALSE. Las constantes TRUE y FALSE (insensible a mayúsculas-minúsculas) son los dos valores booleanos posibles. Cuando es necesario, una expresión es convertida automáticamente al tipo boolean. Véase la sección sobre conversión de tipos para más detalles.

PHP proporciona una implementación completa y potente de expresiones, y documentarla por completo va más allá del ámbito de este manual. Los ejemplos de arriba deberían darle una buena idea de lo que son las expresiones y cómo construir expresiones útiles. Durante el resto de este manual se escribirá expr para indicar cualquier expresión de PHP válida.



Operadores

Tabla de contenidos

Un operador es algo que toma uno más valores (o expresiones, en jerga de programación) y produce otro valor (de modo que la construcción en si misma se convierte en una expresión).

Los operadores se pueden agrupar de acuerdo con el número de valores que toman. Los operadores unarios toman sólo un valor, por ejemplo ! (el operador lógico de negación) o ++ (el operador de incremento). Los operadores binarios toman dos valores, como los familiares operadores aritméticos + (suma) y - (resta), y la mayoría de los operadores de PHP entran en esta categoría. Finalmente, hay sólo un operador ternario, ? :, el cual toma tres valores; usualmente a este se le refiere simplemente como "el operador ternario" (aunque podría tal vez llamarse más correctamente como el operador condicional).

Una lista completa de operadores de PHP sigue en la sección Precedencia de Operadores. Está también explica la precedencia y asociatividad, las cuales gobiernan exactamente como son evaluadas expresiones que contienen varios diferentes operadores.


Precedencia de operadores

La precedencia de un operador indica qué tan "estrechamente" se unen dos expresiones juntas. Por ejemplo, en la expresión 1 + 5 * 3 , la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una precedencia mayor que el operador de adición ("+"). Los paréntesis pueden ser usados para forzar la precedencia, si es necesario. Por ejemplo: (1 + 5) * 3 se evalúa como 18.

Cuando los operadores tienen la misma precedencia, su asociatividad decide si se evalúan a partir de la derecha o desde la izquierda - ver más abajo los ejemplos.

La siguiente tabla lista en orden la precedencia de los operadores, con los operadores de mayor precedencia en la parte superior. Los operadores en la misma línea tienen la misma precedencia, en cuyo caso su asociatividad decide cuál es el orden de evaluación.

Precedencia de operadores
Asociatividad Operadores Información adicional
no asociativo clone new clone and new
izquierda [ array()
no asociativo ++ -- incremento/decremento
derecha ~ - (int) (float) (string) (array) (object) (bool) @ tipos
no asociativo instanceof tipos
derecha ! lógico
izquierda * / % aritmética
izquierda + - . aritmética y string
izquierda << >> bit a bit
no asociativo < <= > >= <> comparación
no asociativo == != === !== comparación
izquierda & bit a bit y referencias
izquierda ^ bit a bit
izquierda | bit a bit
izquierda && lógico
izquierda || lógico
izquierda ? : ternario
derecha = += -= *= /= .= %= &= |= ^= <<= >>= => asignación
izquierda and lógico
izquierda xor lógico
izquierda or lógico
izquierda , muchos usos

Para operadores de igual precedencia, asociatividad izquierda significa que la evaluación procede de la izquierda a la derecha y asociatividad derecha significa lo opuesto.

Ejemplo #1 Asociatividad

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5

// mezclar ++ y + produce un comportamiento indefinido
$a 1;
echo ++
$a $a++; // puede mostrar 4 o 5
?>
El uso de paréntesis, incluso cuando no es estrictamente necesario, a menudo puede mejorar la legibilidad del código.

Nota:

Aunque = tiene una precedencia menor que la mayoría de los demás operadores, PHP permitirá aun expresiones similares a lo siguiente: if (!$a = foo()), en cuyo caso el valor devuelto de foo() es puesto en $a.



Operadores aritméticos

¿Recuerda la aritmética básica de la escuela? Estos funcionan igual que aquellos.

Operadores aritméticos
Ejemplo Nombre Resultado
-$a Negación Opuesto de $a.
$a + $b Adición Suma de $a y $b.
$a - $b Sustracción Diferencia de $a y $b.
$a * $b Multiplicación Producto de $a y $b.
$a / $b División Cociente de $a y $b.
$a % $b Módulo Resto de $a dividido por $b.

El operador de división ("/") devuelve un valor flotante a menos que los dos operandos sean integers (o strings que se conviertan a integers) y los números sean divisibles, en cuyo caso será devuelto un valor integer.

Los operandos del módulo se convierten en integers (por extracción de la parte decimal) antes del procesamiento.

El resultado del operador módulo % tiene el mismo signo que el dividendo — es decir, el resultado de $a % $b tendrá el mismo signo que $a. Por ejemplo:

<?php

echo (3)."\n";           // muestra 2
echo (% -3)."\n";          // muestra 2
echo (-3)."\n";          // muestra -2
echo (-% -3)."\n";         // muestra -2

?>

Véase también la página del manual sobre funciones matemáticas.



Operadores de asignación

El operador básico de asignación es "=". Se podría inclinar a pensar primero que es como un "igual a". No lo es. Realmente significa que el operando de la izquierda se establece con el valor de la expresión de la derecha (es decir, "se define como").

El valor de una expresión de asignación es el valor asignado. Es decir, el valor de "$a = 3" es de 3. Esto permite hacer algunas cosas intrincadas:

<?php

$a 
= ($b 4) + 5// ahora $a es igual a 9 y $b se ha establecido en 4.

?>

Para arrays, asignar un valor a una clave con nombre se realiza utilizando el operador "=>". La precedencia de este operador es la misma que otros operadores de asignación.

Además del operador básico de asignación, existen "operadores combinados" para todos los de aritmética binaria, unión de arrays y operadores de strings que permiten usar un valor en una expresión y entonces establecer su valor como el resultado de esa expresión. Por ejemplo:

<?php

$a 
3;
$a += 5// establece $a en 8, como si se hubiera dicho: $a = $a + 5;
$b "Hola ";
$b .= "ahí!"// establece $b en "Hola ahí!", al igual que $b = $b . "ahí!";

?>

Tener en cuenta que la asignación copia la variable original en la nueva (asignación por valor), por lo que los cambios en una no afectarán a la otra. Esto también puede tener relevancia si se necesita copiar algo como un gran array dentro de un bucle estrecho.

Una excepción al comportamiento usual de la asignación por valor en PHP ocurre con objects los cuales son asignados por referencia en PHP 5. Los objetos pueden ser explícitamente copiados por medio de la palabra clave clone.

Asignación por referencia

La asignación por referencia también está soportada, utilizando la sintaxis "$var = &$othervar;". Asignación por referencia significa que ambas variables terminan apuntando a los mismos datos y nada es copiado en ninguna parte.

Ejemplo #1 Asignación por referencia

<?php
$a 
3;
$b = &$a// $b es una referencia para $a

print "$a\n"// muestra 3
print "$b\n"// muestra 3

$a 4// cambia $a

print "$a\n"// muestra 4
print "$b\n"// muestra 4 también, dado que $b es una referencia para $a, la cual ha
              // sido cambiada
?>

Desde PHP 5, el operador new retorna una referencia automáticamente, así que asignar el resultado de new por referencia, resulta en un mensaje E_DEPRECATED en PHP 5.3 y posteriores y un mensaje E_STRICT en versiones anteriores.

Por ejemplo, éste código resultará en una advertencia:

<?php
class {}

/* La siguiente línea genera el siguiente mensaje de error:
 * Deprecated: Assigning the return value of new by reference is deprecated in...
 */
$o = &new C;
?>

Más información sobre referencias y sus usos potenciales se puede encontrar en la sección del manual Referencias Explicadas



Operadores bit a bit

Los operadores bit a bit permiten la evaluación y la manipulación de bits específicos dentro de un integer.

Operadores bit a bit
Ejemplo Nombre Resultado
$a & $b And (y) Los bits que están activos en ambos $a y $b son activados.
$a | $b Or (o inclusivo) Los bits que están activos ya sea en $a o en $b son activados.
$a ^ $b Xor (o exclusivo) Los bits que están activos en $a o en $b, pero no en ambos, son activados.
~ $a Not (no) Los bits que están activos en $a son desactivados, y viceversa. Bits that are set in $a are not set, and vice versa.
$a << $b Shift left(desplazamiento a izquierda) Desplaza los bits de $a, $b pasos a la izquierda (cada paso quiere decir "multiplicar por dos").
$a >> $b Shift right (desplazamiento a derecha) Desplaza los bits de $a, $b pasos a la derecha (cada paso quiere decir "dividir por dos").

El desplazamiento de bits en PHP es aritmético. Los bits desplazados por fuera de cualquiera de los extremos son descartados. Desplazamientos de izquierda tienen ceros desplazados a la derecha mientras que el bit de signo es desplazado fuera a la izquierda, es decir que no se conserva el signo de un operando. Desplazamientos a la derecha tienen copias del bit de signo desplazado a la izquierda, es decir que se conserva el signo de un operando.

Utilice paréntesis para garantizar la precedencia deseada. Por ejemplo, $a & $b == true evalúa la equivalencia y luego el bit a bit, mientras que ($a & $b) == true evalúa el bit a bit y luego la equivalencia.

Sea consciente de las conversiones de tipos de datos. Si tanto los parámetros de la izquierda como los de la derecha son cadenas, el operador bit a bit operará en los valores ASCII de los caracteres.

La configuración error_reporting del PHP ini utiliza valores de bit a bit,
lo que ofrece una demostración del mundo real de desactivar
bits. Para mostrar todos los errores, a excepción de los avisos,
las instrucciones del archivo php.ini dicen utilizar:
E_ALL & ~E_NOTICE
      

Esto funciona iniciando con E_ALL:
00000000000000000111011111111111
Luego se toma el valor de E_NOTICE ...
00000000000000000000000000001000
... y se invierte por medio de ~:
11111111111111111111111111110111
Finalmente, se utiliza AND (&) para encontrar los bits que se
activaron en ambos valores:
00000000000000000111011111110111
      

Otra forma de lograrlo es mediante XOR (^)
para encontrar los bits que están activados en sólo el primer valor o en el otro:
E_ALL ^ E_NOTICE
      

error_reporting también se puede utilizar para demostrar la activación de bits.
La forma para mostrar sólo los errores y los errores recuperables es:
E_ERROR | E_RECOVERABLE_ERROR
      

Este proceso combina E_ERROR
00000000000000000000000000000001
y
00000000000000000001000000000000
usando el operador OR (|)
para obtener los bits activados en cualquiera de estos valores:
00000000000000000001000000000001
      

Ejemplo #1 Operaciones AND, OR y XOR bit a bit sobre integers

<?php
/*
 * Ignore la sección superior,
 * es sólo el formateado para hacer la salida más clara.
 */

$format '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
        
' %3$s (%4$2d = %4$04b)' "\n";

echo <<<EOH
 ---------     ---------  -- ---------
 resultado     valor      op prueba
 ---------     ---------  -- ---------
EOH;


/*
 * Aquí están los ejemplos.
 */

$values = array(01248);
$test 4;

echo 
"\n AND bit a bit \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'&'$test);
}

echo 
"\n OR inclusivo bit a bit \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'|'$test);
}

echo 
"\n OR exclusivo (XOR) bit a bit \n";
foreach (
$values as $value) {
    
$result $value $test;
    
printf($format$result$value'^'$test);
}
?>

El resultado del ejemplo sería:

 ---------     ---------  -- ---------
 resultado     valor      op prueba
 ---------     ---------  -- ---------
 AND bit a bit
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 OR inclusivo bit a bit
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 OR exclusivo (XOR) bit a bit
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Ejemplo #2 Operaciones XOR bit a bit sobre strings

<?php
echo 12 9// Sale '5'

echo "12" "9"// Sale el caracter de retroceso (ascii 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" "hello"// Salen los valores ascii #0 #4 #0 #0 #0
                        // 'a' ^ 'e' = #4

echo "3"// Sale 1
              // 2 ^ ((int)"3") == 1

echo "2" 3// Sale 1
              // ((int)"2") ^ 3 == 1
?>

Ejemplo #3 Desplazamiento de bits sobre integers

<?php
/*
 * Aquí están los ejemplos.
 */

echo "\n--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---\n";

$val 4;
$places 1;
$res $val >> $places;
p($res$val'>>'$places'copia del bit de signo desplazado hacia el lado izquierdo');

$val 4;
$places 2;
$res $val >> $places;
p($res$val'>>'$places);

$val 4;
$places 3;
$res $val >> $places;
p($res$val'>>'$places'bits desplazados fuera del lado derecho');

$val 4;
$places 4;
$res $val >> $places;
p($res$val'>>'$places'mismo resultado que arriba; no se puede desplazar más allá del 0');


echo 
"\n--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---\n";

$val = -4;
$places 1;
$res $val >> $places;
p($res$val'>>'$places'copia del bit de signo desplazado al lado izquierdo');

$val = -4;
$places 2;
$res $val >> $places;
p($res$val'>>'$places'bits desplazados fuera del lado derecho');

$val = -4;
$places 3;
$res $val >> $places;
p($res$val'>>'$places'mismo resultado que arriba; no se puede desplazar más allá del -1');


echo 
"\n--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---\n";

$val 4;
$places 1;
$res $val << $places;
p($res$val'<<'$places'ceros rellenan en el lado derecho');

$val 4;
$places = (PHP_INT_SIZE 8) - 4;
$res $val << $places;
p($res$val'<<'$places);

$val 4;
$places = (PHP_INT_SIZE 8) - 3;
$res $val << $places;
p($res$val'<<'$places'bit de signo resulta desplazado fuera');

$val 4;
$places = (PHP_INT_SIZE 8) - 2;
$res $val << $places;
p($res$val'<<'$places'bit de signo desplazado fuera del lado izquierdo');


echo 
"\n--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---\n";

$val = -4;
$places 1;
$res $val << $places;
p($res$val'<<'$places'ceros rellenan en el lado derecho');

$val = -4;
$places = (PHP_INT_SIZE 8) - 3;
$res $val << $places;
p($res$val'<<'$places);

$val = -4;
$places = (PHP_INT_SIZE 8) - 2;
$res $val << $places;
p($res$val'<<'$places'bits desplazados fuera del lado izquierdo, incluyendo el bit de signo');


/*
 * Ignore this bottom section,
 * it is just formatting to make output clearer.
 */

function p($res$val$op$places$note '') {
    
$format '%0' . (PHP_INT_SIZE 8) . "b\n";

    
printf("Expression: %d = %d %s %d\n"$res$val$op$places);

    echo 
" Decimal:\n";
    
printf("  val=%d\n"$val);
    
printf("  res=%d\n"$res);

    echo 
" Binary:\n";
    
printf('  val=' $format$val);
    
printf('  res=' $format$res);

    if (
$note) {
        echo 
" NOTE: $note\n";
    }

    echo 
"\n";
}
?>

El resultado del ejemplo en equipos de 32 bits sería:


--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---
Expression: 2 = 4 >> 1
 Decimal:
  val=4
  res=2
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000000010
 NOTE: copia del bit de signo desplazado hacia el lado izquierdo

Expression: 1 = 4 >> 2
 Decimal:
  val=4
  res=1
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000000001

Expression: 0 = 4 >> 3
 Decimal:
  val=4
  res=0
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 NOTE: bits desplazados fuera del lado derecho

Expression: 0 = 4 >> 4
 Decimal:
  val=4
  res=0
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 NOTE: mismo resultado que arriba; no se puede desplazar más allá del 0


--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---
Expression: -2 = -4 >> 1
 Decimal:
  val=-4
  res=-2
 Binary:
  val=11111111111111111111111111111100
  res=11111111111111111111111111111110
 NOTE: copia del bit de signo desplazado al lado izquierdo

Expression: -1 = -4 >> 2
 Decimal:
  val=-4
  res=-1
 Binary:
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 NOTE: bits desplazados fuera del lado derecho

Expression: -1 = -4 >> 3
 Decimal:
  val=-4
  res=-1
 Binary:
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 NOTE: mismo resultado que arriba; no se puede desplazar más allá del -1


--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---
Expression: 8 = 4 << 1
 Decimal:
  val=4
  res=8
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000001000
 NOTE: ceros rellenan en el lado derecho

Expression: 1073741824 = 4 << 28
 Decimal:
  val=4
  res=1073741824
 Binary:
  val=00000000000000000000000000000100
  res=01000000000000000000000000000000

Expression: -2147483648 = 4 << 29
 Decimal:
  val=4
  res=-2147483648
 Binary:
  val=00000000000000000000000000000100
  res=10000000000000000000000000000000
 NOTE: bit de signo resulta desplazado fuera

Expression: 0 = 4 << 30
 Decimal:
  val=4
  res=0
 Binary:
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 NOTE: bit de signo desplazado fuera del lado izquierdo


--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---
Expression: -8 = -4 << 1
 Decimal:
  val=-4
  res=-8
 Binary:
  val=11111111111111111111111111111100
  res=11111111111111111111111111111000
 NOTE: ceros rellenan en el lado derecho

Expression: -2147483648 = -4 << 29
 Decimal:
  val=-4
  res=-2147483648
 Binary:
  val=11111111111111111111111111111100
  res=10000000000000000000000000000000

Expression: 0 = -4 << 30
 Decimal:
  val=-4
  res=0
 Binary:
  val=11111111111111111111111111111100
  res=00000000000000000000000000000000
 NOTE: bits desplazados fuera del lado izquierdo, incluyendo el bit de signo

El resultado del ejemplo en equipos de 64 bits sería:


--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS POSITIVOS ---
Expression: 2 = 4 >> 1
 Decimal:
  val=4
  res=2
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000010
 NOTE: copia del bit de signo desplazado hacia el lado izquierdo

Expression: 1 = 4 >> 2
 Decimal:
  val=4
  res=1
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000001

Expression: 0 = 4 >> 3
 Decimal:
  val=4
  res=0
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 NOTE: bits desplazados fuera del lado derecho

Expression: 0 = 4 >> 4
 Decimal:
  val=4
  res=0
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 NOTE: mismo resultado que arriba; no se puede desplazar más allá del 0


--- DESPLAZAMIENTO DE BITS A LA DERECHA SOBRE ENTEROS NEGATIVOS ---
Expression: -2 = -4 >> 1
 Decimal:
  val=-4
  res=-2
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111110
 NOTE: copia del bit de signo desplazado al lado izquierdo

Expression: -1 = -4 >> 2
 Decimal:
  val=-4
  res=-1
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 NOTE: bits desplazados fuera del lado derecho

Expression: -1 = -4 >> 3
 Decimal:
  val=-4
  res=-1
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 NOTE: mismo resultado que arriba; no se puede desplazar más allá del -1


--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS POSITIVOS ---
Expression: 8 = 4 << 1
 Decimal:
  val=4
  res=8
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000001000
 NOTE: ceros rellenan en el lado derecho

Expression: 4611686018427387904 = 4 << 60
 Decimal:
  val=4
  res=4611686018427387904
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0100000000000000000000000000000000000000000000000000000000000000

Expression: -9223372036854775808 = 4 << 61
 Decimal:
  val=4
  res=-9223372036854775808
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=1000000000000000000000000000000000000000000000000000000000000000
 NOTE: bit de signo resulta desplazado fuera

Expression: 0 = 4 << 62
 Decimal:
  val=4
  res=0
 Binary:
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 NOTE: bit de signo desplazado fuera del lado izquierdo


--- DESPLAZAMIENTO DE BITS A LA IZQUIERDA SOBRE ENTEROS NEGATIVOS ---
Expression: -8 = -4 << 1
 Decimal:
  val=-4
  res=-8
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111000
 NOTE: ceros rellenan en el lado derecho

Expression: -9223372036854775808 = -4 << 61
 Decimal:
  val=-4
  res=-9223372036854775808
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1000000000000000000000000000000000000000000000000000000000000000

Expression: 0 = -4 << 62
 Decimal:
  val=-4
  res=0
 Binary:
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=0000000000000000000000000000000000000000000000000000000000000000
 NOTE: bits desplazados fuera del lado izquierdo, incluyendo el bit de signo

Advertencia

No desplazar a la derecha más de 32 bits en sistemas de 32 bits. No desplazar a la izquierda en caso de que resulte en un número más largo de 32 bits. Usar funciones de la extensión gmp para manipulación bit a bit sobre números más allá de PHP_INT_MAX.

Ver también pack(), unpack(), gmp_and(), gmp_or(), gmp_xor(), gmp_testbit(), gmp_clrbit()



Operadores de comparación

Los operadores de comparación, como su nombre lo indica, permiten comparar dos valores. Puede también estar interesado en ver las tablas de comparación de tipos, ya que muestran ejemplos de las varias comparaciones relacionadas con tipos.

Operadores de comparación
Ejemplo Nombre Resultado
$a == $b Igual TRUE si $a es igual a $b después de la manipulación de tipos.
$a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.
$a != $b Diferente TRUE si $a no es igual a $b después de la manipulación de tipos.
$a <> $b Diferente TRUE si $a no es igual a $b después de la manipulación de tipos.
$a !== $b No idéntico TRUE si $a no es igual a $b, o si no son del mismo tipo.
$a < $b Menor que TRUE si $a es estrictamente menor que $b.
$a > $b Mayor que TRUE si $a es estrictamente mayor que $b.
$a <= $b Menor o igual que TRUE si $a es menor o igual que $b.
$a >= $b Mayor o igual que TRUE si $a es mayor o igual que $b.

Si se compara un número con un string o la comparación implica strings numéricos, entonces cada string es convertido en un número y la comparación realizada numéricamente. Estas reglas también se aplican a la sentencia switch. La conversión de tipo no tiene lugar cuando la comparación es === o !== ya que esto involucra comparar el tipo así como el valor.

<?php
var_dump
(== "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// nunca alcanzado debido a que "a" ya ha coincidido con 0
    
echo "a";
    break;
}
?>

Para varios tipos, la comparación se realiza de acuerdo a la siguiente tabla (en orden).

La comparación con varios tipos
Tipo de operando 1 Tipo de operando 2 Resultado
null o string string Convierte NULL en "", comparación numérica o léxica
bool o null cualquiera Convierte en bool, FALSE < TRUE
object object Las clases internas pueden definir su propia comparación, diferentes clases son incomparables, la misma clase - comparan propiedades en la misma forma que los arrays (PHP 4), PHP 5 tiene su propia explicación
string, resource o number string, resource o number Traducir las cadenas y recursos a números, matemática usual
array array Un array con menos elementos es menor, si una clave del operando 1 no se encuentra en el operando 2 entonces los arrays son incomparables, de otra forma - compara valor por valor (ver el siguiente ejemplo)
array cualquiera array es siempre mayor
object cualquiera object es siempre mayor

Ejemplo #1 Transcripción de la comparación estándar de arrays

<?php
// Arrays son comparados de esta forma con los operadores de comparación estándar
function standard_array_compare($op1$op2)
{
    if (
count($op1) < count($op2)) {
        return -
1// $op1 < $op2
    
} elseif (count($op1) > count($op2)) {
        return 
1// $op1 > $op2
    
}
    foreach (
$op1 as $key => $val) {
        if (!
array_key_exists($key$op2)) {
            return 
null// uncomparable
        
} elseif ($val $op2[$key]) {
            return -
1;
        } elseif (
$val $op2[$key]) {
            return 
1;
        }
    }
    return 
0// $op1 == $op2
}
?>

Ver también strcasecmp(), strcmp(), operadores de array, y la sección del manual sobre tipos.

Advertencia

Comparación de números de punto flotante

Debido a la forma en que son representados internamente los floats, no se deben probar por igualdad dos floats.

Ver la documentación de float para más información.

Operador ternario

Otro operador condicional es el operador "?:" (o ternario).

Ejemplo #2 Asignación de un valor predeterminado

<?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

// Lo anterior es idéntico a esta sentencia if/else
if (empty($_POST['action'])) {
    
$action 'default';
} else {
    
$action $_POST['action'];
}

?>
La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 se evalúa como TRUE y a expr3 si expr1 se evalúa como FALSE.

A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. La expresión expr1 ?: expr3 retorna expr1 si expr1 se evalúa como TRUE y expr3 si es de otra manera.

Nota: Por favor note que el operador ternario es una sentencia, y que no evalúa a una variable, pero si al resultado de una sentencia. Esto es importante saberlo si se desea retornar una variable por referencia. La sentencia return $var == 42 ? $a : $b; en una función con retorno-por-referencia no funcionará por lo que se ha mencionado y una advertencia es generada en versiones posteriores de PHP.

Nota:

Es recomendable evitar el "apilamiento" expresiones ternarias. El comportamiento de PHP al utilizar más de un operador ternario en una única sentencia no es evidente:

Ejemplo #3 Comportamiento Ternario poco obvio

<?php
// a primera vista, lo siguiente parece tener la salida de 'true'
echo (true?'true':false?'t':'f');

// sin embargo, la salida real de lo anterior es 't'
// esto se debe a que las expresiones ternarias se evalúan de izquierda a derecha

// la siguiente es una versión más obvia del mismo código anterior
echo ((true 'true' false) ? 't' 'f');

// aquí, se puede ver que la primera expresión es evaluada como 'true', que
// a su vez se evalúa como (bool)true, retornando así la rama verdadera de la
// segunda expresión ternaria.
?>



Operadores de control de errores

PHP soporta un operador de control de errores: el signo de arroba (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueden ser generado por esa expresión será ignorado.

Si se ha establecido una función de controlador de errores personalizado con set_error_handler() entonces todavía será llamada, pero este controlador de errores personalizado puede (y debe) llamar a error_reporting() el cual devolverá 0 cuando la llamada que provocó el error fue precedida por el signo @.

Si la propiedad track_errors está activada, cualquier mensaje de error generado por la expresión será guardada en la variable $php_errormsg. Esta variable se sobrescribe en cada error, así que se debe comprobar antes si se desea utilizar.

<?php
/* Error intencional de archivo */
$my_file = @file ('non_existent_file') or
    die (
"La apertura de archivo ha fallado: el error fue '$php_errormsg'");

// esto funciona con cualquier expresión, no solo con funciones:
$value = @$cache[$key];
// no producirá una anotación si el índice $key no existe.

?>

Nota: El operador @ trabaja sólo sobre expresiones. Una simple regla de oro es: si se puede tomar el valor de algo, entonces se le puede anteponer el operador @. Por ejemplo, puede anteponerse a variables, a llamadas a funciones e includes, constantes y así sucesivamente. No puede anteponerse a definiciones de función o clase, ni a estructuras condicionales como if y foreach, y así sucesivamente.

Ver también error_reporting() y la sección del manual sobre funciones de Manejo de Errores y Registros.

Advertencia

En la actualidad, el operador de prefijo "@" para control de errores deshabilitará incluso el reporte de errores en casos de fallos críticos que terminarán la ejecución del script. Entre otras cosas, esto quiere decir que si se usa "@" para eliminar los errores de una cierta función y ésta no se encuentra disponible o ha sido escrita de forma incorrecta, el script se detendrá en ese punto sin indicación de por qué.



Operadores de ejecución

PHP soporta un operador de ejecución: las comillas invertidas (``). ¡Note que estas no son las comillas sencillas! PHP intentará ejecutar el contenido entre las comillas invertidas como si se tratara de un comando del shell; la salida será retornada (es decir, no será simplemente volcada como salida; puede ser asignada a una variable). El uso del operador de comillas invertidas es idéntico al de shell_exec().

<?php
$output 
= `ls -al`;
echo 
"<pre>$output</pre>";
?>

Nota:

El operador de comillas invertidas se deshabilita cuando safe mode esta activado o shell_exec() esta desactivado.

Nota:

A diferencia de otros lenguajes, las comillas invertidas no pueden ser usadas dentro de strings entre comillas dobles.

Vea también la sección del manual sobre funciones de ejecución de programas, popen() proc_open() y Usando PHP desde la línea de comandos.



Operadores de incremento/decremento

PHP soporta operadores estilo C de pre- y post-incremento y decremento.

Nota: Los operadores de incremento/decremento no afectan a los valores booleanos. Decrementar valores NULL tampoco tiene efecto, pero incrementarlos entonces resulta en 1.

Operadores de incremento/decremento
Ejemplo Nombre Efecto
++$a Pre-incremento Incrementa $a en uno, y luego retorna $a.
$a++ Post-incremento Retorna $a, y luego incrementa $a en uno.
--$a Pre-decremento Decrementa $a en uno, luego retorna $a.
$a-- Post-decremento Retorna $a, luego decrementa $a en uno.

Aquí hay un script simple de ejemplo:

<?php
echo "<h3>Postincremento</h3>";
$a 5;
echo 
"Debe ser 5: " $a++ . "<br />\n";
echo 
"Debe ser 6: " $a "<br />\n";

echo 
"<h3>Preincremento</h3>";
$a 5;
echo 
"Debe ser 6: " . ++$a "<br />\n";
echo 
"Debe ser 6: " $a "<br />\n";

echo 
"<h3>Postdecremento</h3>";
$a 5;
echo 
"Debe ser 5: " $a-- . "<br />\n";
echo 
"Debe ser 4: " $a "<br />\n";

echo 
"<h3>Predecremento</h3>";
$a 5;
echo 
"Debe ser 4: " . --$a "<br />\n";
echo 
"Debe ser 4: " $a "<br />\n";
?>

PHP sigue la convención de Perl cuando trabaja con operaciones aritméticas sobre variables de caracteres y no la de C. Por ejemplo, en PHP y Perl $a = 'Z'; $a++; convierte $a en 'AA', mientras que en C a = 'Z'; a++; convierte a en '[' (el valor ASCII de 'Z' es 90, el valor ASCII de '[' es 91). Nótese que las variables de caracteres pueden ser incrementadas pero no decrementadas y aun así sólo caracteres de ASCII plano (a-z y A-Z) están soportados. Incrementar o decrementar otras variables de caracteres no tiene efecto, el string original no se modifica.

Ejemplo #1 Operaciones aritméticas sobre variables de caracteres

<?php
$i 
'W';
for (
$n=0$n<6$n++) {
    echo ++
$i "\n";
}
?>

El resultado del ejemplo sería:

X
Y
Z
AA
AB
AC

Incrementar o decrementar booleanos no tiene efecto.



Operadores lógicos

Operadores lógicos
Ejemplo Nombre Resultado
$a and $b And (y) TRUE si tanto $a como $b son TRUE.
$a or $b Or (o inclusivo) TRUE si cualquiera de $a o $b es TRUE.
$a xor $b Xor (o exclusivo) TRUE si $a o $b es TRUE, pero no ambos.
! $a Not (no) TRUE si $a no es TRUE.
$a && $b And (y) TRUE si tanto $a como $b son TRUE.
$a || $b Or (o inclusivo) TRUE si cualquiera de $a o $b es TRUE.

La razón para tener las dos variaciones diferentes de los operadores "and" y "or" es que ellos operan con precedencias diferentes. (Ver Precedencia de operadores.)

Ejemplo #1 Los operadores lógicos ilustrados

<?php

// --------------------
// foo() nunca será llamado ya que los operadores están en cortocircuito

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

// --------------------
// "||" tiene una precedencia mayor que "or"

// El resultado de la expresión (false || true) es asignado a $e
// Actúa como: ($e = (false || true))
$e false || true;

// La constante false es asignada a $f y entonces true es ignorado
// Actúa como: (($f = false) or true)
$f false or true;

var_dump($e$f);

// --------------------
// "&&" tiene una precedencia mayor que "and"

// El resultado de la expresión (true && false) es asignado a $g
// Actúa como: ($g = (true && false))
$g true && false;

// La constante true es asignada a $h y entonces false es ignorado
// Actúa como: (($h = true) and false)
$h true and false;

var_dump($g$h);
?>

El resultado del ejemplo sería algo similar a:

bool(true)
bool(false)
bool(false)
bool(true)


Operadores para strings

Existen dos operadores para datos tipo string. El primero es el operador de concatenación ('.'), el cual retorna el resultado de concatenar sus argumentos derecho e izquierdo. El segundo es el operador de asignación sobre concatenación ('.='), el cual añade el argumento del lado derecho al argumento en el lado izquierdo. Por favor consulte Operadores de asignación para más información.

<?php
$a 
"Hello ";
$b $a "World!"// ahora $b contiene "Hello World!"

$a "Hello ";
$a .= "World!";     // ahora $a contiene "Hello World!"
?>

Ver también las secciones del manual sobre el tipo string y las funciones de strings.



Operadores para arrays

Operadores para arrays
Ejemplo Nombre Resultado
$a + $b Unión Unión de $a y $b.
$a == $b Igualdad TRUE si $a i $b tienen las mismas parejas clave/valor.
$a === $b Identidad TRUE si $a y $b tienen las mismas parejas clave/valor en el mismo orden y de los mismos tipos.
$a != $b Desigualdad TRUE si $a no es igual a $b.
$a <> $b Desigualdad TRUE si $a no es igual a $b.
$a !== $b No-identidad TRUE si $a no es idéntica a $b.

El operador + devuelve el array del lado derecho añadido al array del lado izquierdo; para las claves que existan en ambos arrays, serán utilizados los elementos del array de la izquierda y serán ignorados los elementos correspondientes del array de la derecha.

<?php
$a 
= array("a" => "apple""b" => "banana");
$b = array("a" => "pear""b" => "strawberry""c" => "cherry");

$c $a $b// Unión de $a y $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c $b $a// Unión de $b y $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
Cuando sea ejecutado, este script producirá la siguiente salida:
Union of $a and $b:
array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}
Union of $b and $a:
array(3) {
  ["a"]=>
  string(4) "pear"
  ["b"]=>
  string(10) "strawberry"
  ["c"]=>
  string(6) "cherry"
}

Los elementos de los arrays son iguales para la comparación si éstos tienen la misma clave y valor.

Ejemplo #1 Comparando arrays

<?php
$a 
= array("apple""banana");
$b = array(=> "banana""0" => "apple");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Ver también las secciones del manual sobre el tipo array y funciones de arrays.



Operadores de tipo

instanceof se utiliza para determinar si una variable de PHP es un objeto instanciado de una cierta clase:

Ejemplo #1 Utilizando instanceof con clases

<?php
class MyClass
{
}

class 
NotMyClass
{
}
$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>

El resultado del ejemplo sería:

bool(true)
bool(false)

instanceof también se puede utilizar para determinar si una variable es un objeto instanciado de una clase que hereda de una clase padre:

Ejemplo #2 Utilizando instanceof con clases heredadas

<?php
class ParentClass
{
}

class 
MyClass extends ParentClass
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>

El resultado del ejemplo sería:

bool(true)
bool(true)

Para comprobar si un objeto no es una instancia de una clase, se puede usar el operador lógico not.

Ejemplo #3 Utilizando instanceof para verificar si un objeto no es una instancia de una clase

<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>

El resultado del ejemplo sería:

bool(true)

Finalmente, instanceof también se puede utilizar para determinar si una variable es un objeto instanciado de una clase que implementa una interface:

Ejemplo #4 Utilizando instanceof para la clase

<?php
interface MyInterface
{
}

class 
MyClass implements MyInterface
{
}

$a = new MyClass;

var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>

El resultado del ejemplo sería:

bool(true)
bool(true)

Aunque instanceof se utiliza generalmente con un nombre de clase literal, también puede ser utilizado con otro objeto o una variable string:

Ejemplo #5 Utilizando instanceof con otras variables

<?php
interface MyInterface
{
}

class 
MyClass implements MyInterface
{
}

$a = new MyClass;
$b = new MyClass;
$c 'MyClass';
$d 'NotMyClass';

var_dump($a instanceof $b); // $b is an object of class MyClass
var_dump($a instanceof $c); // $c is a string 'MyClass'
var_dump($a instanceof $d); // $d is a string 'NotMyClass'
?>

El resultado del ejemplo sería:

bool(true)
bool(true)
bool(false)

Hay algunas trampas para tener en cuenta. Antes de versión de PHP 5.1.0, instanceof llamaría a __autoload() si el nombre de clase no existía. Además, si la clase no estaba cargada, un error fatal ocurriría. Esto se puede solucionar mediante una referencia de clase dinámica o una variable string que contenga el nombre de la clase:

Ejemplo #6 Evitando búsquedas del nombre de clase y errores fatales con instanceof en PHP 5.0

<?php
$d 
'NotMyClass';
var_dump($a instanceof $d); // aquí no hay error fatal
?>

El resultado del ejemplo sería:

bool(false)

El operador instanceof fue introducido en PHP 5. Antes de esta época se utilizaba is_a(), pero desde entonces is_a() se ha quedado obsoleto en favor de instanceof. Tenga en cuenta que a partir de PHP 5.3.0, is_a() ya no está obsoleto.

Ver también get_class() y is_a().




Estructuras de Control

Tabla de contenidos


Introducción

Todo script PHP está construido en base a una serie de sentencias. Una sentencia puede ser una asignación, una llamada de función, un ciclo, una sentencia condicional o incluso una sentencia que no hace nada (una sentencia vacía). Las sentencias generalmente finalizan con un punto y coma. Adicionalmente, las sentencias pueden agruparse en un conjunto de sentencias, encapsulándolas entre corchetes. Un grupo de sentencias es una sentencia por sí misma también. Los diferentes tipos de sentencias son descritos en este capítulo.



if

(PHP 4, PHP 5)

El constructor if es una de las características más importantes de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código. PHP dispone de una estructura if que es similar a la de C:

if (expr)
  sentencia

Como se describe en la sección sobre expresiones , la expresión es evaluada a su valor booleano. Si la expresión se evalúa como TRUE, PHP ejecutará la sentencia y si se evalúa como FALSE la ignorará. Más información sobre qué valores evalúan como FALSE se puede encontrar en la sección 'Convirtiendo a booleano'.

El siguiente ejemplo mostraría a es mayor que b si $a es mayor que $b:

<?php
if ($a $b) {
  echo 
"a es mayor que b";
}
?>

A menudo se desea tener más de una sentencia para ser ejecutada condicionalmente. Por supuesto, no hay necesidad de envolver cada sentencia con una cláusula if. En cambio, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este código mostraría a es mayor que b si $a es mayor que $b y entonces asignaría el valor de $a a $b:

<?php
if ($a $b) {
  echo 
"a es mayor que b";
  
$b $a;
}
?>

Las sentencias if pueden anidarse dentro de otra sentencias if infinitamente, lo cual provee completa flexibilidad para la ejecución condicional de diferentes partes del programa.



else

(PHP 4, PHP 5)

Con frecuencia se desea ejecutar una sentencia si una determinada condición se cumple y una sentencia diferente si la condición no se cumple. Esto es para lo que sirve else. El else extiende una sentencia if para ejecutar una sentencia en caso que la expresión en la sentencia if se evalúe como FALSE. Por ejemplo, el siguiente código deberá mostrar a es mayor que b si $a es mayor que $b y a NO es mayor que b en el caso contrario:

<?php
if ($a $b) {
  echo 
"a es mayor que b";
} else {
  echo 
"a NO es mayor que b";
}
?>
La sentencia else sólo es ejecutada si la expresión if es evaluada como FALSE y si hay algunas expresiones elseif - sólo se ejecuta si también todas son evaluadas como FALSE (ver elseif).



elseif/else if

(PHP 4, PHP 5)

elseif, como su nombre lo sugiere, es una combinación de if y else. Del mismo modo que else, extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión if original se evalúe como FALSE. Sin embargo, a diferencia de else, esa expresión alternativa sólo se ejecutará si la expresión condicional del elseif se evalúa como TRUE. Por ejemplo, el siguiente código debe mostrar a es mayor que b, a es igual que b o a es menor que b:

<?php
if ($a $b) {
    echo 
"a es mayor que b";
} elseif (
$a == $b) {
    echo 
"a es igual que b";
} else {
    echo 
"a es menor que b";
}
?>

Puede haber varios elseif dentro de la misma sentencia if. La primera expresión elseif (si hay alguna) que se evalúe como TRUE sería ejecutada. En PHP también se puede escribir 'else if' (en dos palabras) y el comportamiento sería idéntico al de 'elseif' (en una sola palabra). El significado sintáctico es ligeramente diferente (si se está familiarizado con C, este es el mismo comportamiento) pero la conclusión es que ambos resultarían tener exactamente el mismo comportamiento.

La sentencia elseif es ejecutada solamente si la expresión if precedente y cualquiera de las expresiones elseif precedentes son evaluadas como FALSE, y la expresión elseif actual se evalúa como TRUE.

Nota: Tenga en cuenta que elseif y else if serán considerados exactamente iguales sólamente cuando se utilizan corchetes como en el ejemplo anterior. Al utilizar los dos puntos para definir las condiciones if/elseif, no debe separarse else if en dos palabras o PHP fallará con un error del interprete.

<?php

/* Método incorrecto: */
if($a $b):
    echo 
$a." es mayor que ".$b;
else if(
$a == $b): // No compilará
    
echo "La línea anterior provoca un error del interprete.";
endif;


/* Método correcto: */
if($a $b):
    echo 
$a." es mayor que ".$b;
elseif(
$a == $b): // Tenga en cuenta la combinación de las palabras.
    
echo $a." igual ".$b;
else:
    echo 
$a." no es ni mayor que ni igual a ".$b;
endif;

?>



Sintaxis alternativa de estructuras de control

(PHP 4, PHP 5)

PHP ofrece una sintaxis alternativa para algunas de sus estructuras de control; a saber: if, while, for, foreach, y switch. En cada caso, la forma básica de la sintaxis alternativa es cambiar el corchete de apertura por dos puntos (:) y el corchete de cierre por endif;, endwhile;, endfor;, endforeach;, o endswitch;, respectivamente.

<?php if ($a == 5): ?>
A es igual a 5
<?php endif; ?>

En el ejemplo anterior, el bloque HTML "A es igual a 5" se anida dentro de una sentencia if escrita en la sintaxis alternativa. El bloque HTML se mostraría solamente si $a es igual a 5.

La sintaxis alternativa también se aplica a else y elseif. El siguiente es una estructura if con elseif y else en el formato alternativo:

<?php
if ($a == 5):
    echo 
"a igual 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a igual 6";
    echo 
"!!!";
else:
    echo 
"a no es 5 ni 6";
endif;
?>

Nota:

No se soporta la mezcla de sintaxis en el mismo bloque de control.

Véase también while, for e if para más ejemplos.



while

(PHP 4, PHP 5)

Los bucles while son el tipo más sencillo de bucle en PHP. Se comportan igual que su contrapartida en C. La forma básica de una sentencia while es:

while (expr)
    sentencia

El significado de una sentencia while es simple. Le dice a PHP que ejecute las sentencias anidadas, tanto como la expresión while se evalúe como TRUE. El valor de la expresión es verificado cada vez al inicio del bucle, por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas, la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio, las sentencias anidadas no se ejecutarán ni siquiera una vez.

Al igual que con la sentencia if, se pueden agrupar varias instrucciones dentro del mismo bucle while rodeando un grupo de sentencias con corchetes, o utilizando la sintaxis alternativa:

while (expr):
    sentencias
    ...
endwhile;

Los siguientes ejemplos son idénticos y ambos presentan los números del 1 al 10:

<?php
/* ejemplo 1 */

$i 1;
while (
$i <= 10) {
    echo 
$i++;  /* el valor presentado sería
                   $i antes del incremento
                   (post-incremento) */
}

/* ejemplo 2 */

$i 1;
while (
$i <= 10):
    echo 
$i;
    
$i++;
endwhile;
?>



do-while

(PHP 4, PHP 5)

Los bucles do-while son muy similares a los bucles while, excepto que la expresión verdadera es verificada al final de cada iteración en lugar que al principio. La diferencia principal con los bucles while es que está garantizado que corra la primera iteración de un bucle do-while (la expresión verdadera sólo es verificada al final de la iteración), mientras que no necesariamente va a correr con un bucle while regular (la expresión verdadera es verificada al principio de cada iteración, si se evalúa como FALSE justo desde el comienzo, la ejecución del bucle terminaría inmediatamente).

Hay una sola sintaxis para bucles do-while:

<?php
$i 
0;
do {
    echo 
$i;
} while (
$i 0);
?>

El bucle de arriba se ejecutaría exactamente una sola vez, ya que después de la primera iteración, cuando la expresión verdadera es verificada, se evalúa como FALSE ($i no es mayor que 0) y termina la ejecución del bucle.

Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do-while, para permitir parar la ejecución en medio de los bloques de código, mediante el encapsulado con do-while (0), y utilizando la sentencia break. El siguiente fragmento de código demuestra esto:

<?php
do {
    if (
$i 5) {
        echo 
"i no es lo suficientemente grande";
        break;
    }
    
$i *= $factor;
    if (
$i $minimum_limit) {
        break;
    }
   echo 
"i está bien";

    
/* procesar i */

} while (0);
?>

No se preocupe si no se entiende esto completamente o en absoluto. Se pueden codificar scripts e incluso scripts potentes sin usar esta 'característica'. Desde PHP 5.3.0, es posible utilizar el operador goto en lugar de este hack.



for

(PHP 4, PHP 5)

Los bucles for son los ciclos más complejos en PHP. Se comportan como sus contrapartes en C. La sintaxis de un bucle for es:

for (expr1; expr2; expr3)
    sentencia

La primera expresión (expr1) es evaluada (ejecutada) una vez incondicionalmente al comienzo del bucle.

En el comienzo de cada iteración, la expr2 es evaluada, Si es TRUE, el bucle continúa y las sentencias anidadas son ejecutadas. Si se evalúa como FALSE, termina la ejecución del bucle.

Al final de cada iteración, la expr3 es evaluada (ejecutada).

Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. En la expr2, todas las expresiones separadas por una coma son evaluadas pero el resultado se toma de la última parte. Que la expr2 esté vacía significa que el bucle deberá ser corrido indefinidamente (PHP implícitamente lo considera como TRUE, como en C). Esto puede no ser tan inútil como se pudiera pensar, ya que muchas veces se quiere terminar el bucle usando una sentencia condicional break en lugar de utilizar la expresión verdadera del for.

Considere los siguientes ejemplos. Todos ellos muestran los números del 1 al 10:

<?php
/* ejemplo 1 */

for ($i 1$i <= 10$i++) {
    echo 
$i;
}

/* ejemplo 2 */

for ($i 1; ; $i++) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
}

/* ejemplo 3 */

$i 1;
for (; ; ) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
    
$i++;
}

/* ejemplo 4 */

for ($i 1$j 0$i <= 10$j += $i, print $i$i++);
?>

Por supuesto, el primer ejemplo parece ser el mejor (o quizás el cuarto), pero se puede encontrar que la posibilidad de usar expresiones vacías en los bucles for resulta útil en muchas ocasiones.

PHP también soporta la sintaxis alternativa de los dos puntos para bucles for.

for (expr1; expr2; expr3):
    sentencia
    ...
endfor;

Es una cosa común a muchos usuarios iterar por medio de arrays como en el ejemplo de abajo.

<?php
/*
* Este es un array con algunos datos que se desean modificar
* cuando se corra por el bucle for.
*/
$people = Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$i sizeof($people); ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>

El problema radica en la segunda expresión del for. Este código puede ser lento porque tiene que calcular el tamaño del array en cada iteración. Dado que el tamaño nunca cambia, se pueden optimizar fácilmente usando una variable intermedia para almacenar el tamaño y usarla en el bucle en lugar del sizeof. El siguiente ejemplo ilustra esto:

<?php
$people 
= Array(
        Array(
'name' => 'Kalle''salt' => 856412),
        Array(
'name' => 'Pierre''salt' => 215863)
        );

for(
$i 0$size sizeof($people); $i $size; ++$i)
{
    
$people[$i]['salt'] = rand(000000999999);
}
?>



foreach

(PHP 4, PHP 5)

El constructor foreach proporcina un modo sencillo de iterar sobre arrays. foreach funciona sólo sobre arrays y objetos, y emitirá un error al intentar usarlo con una variable de un tipo diferente de datos o una variable no inicializada. Existen dos sintaxis:

foreach (expresión_array as $valor)
    sentencias
foreach (expresión_array as $clave => $valor)
    sentencias

La primera forma recorre el array dado por expresión_array. En cada iteración, el valor del elemento actual se asigna a $valor y el puntero interno del array avanza una posición (así en la próxima iteración se estará observando el siguiente elemento).

La segunda forma además asigna la clave del elemento actual a la variable $clave en cada iteración.

También es posible personalizar la iteración de objetos.

Nota:

Cuando foreach inicia su ejecución, el puntero interno del array se pone automáticamente en el primer elemento del array. Esto significa que no es necesario llamar la función reset() antes de un bucle foreach.

Ya que foreach depende el puntero de array interno, cambiar éste dentro del bucle puede conducir a un comportamiento inesperado.

Para poder modificar directamente los elementos del array dentro de bucle, se ha de anteponer & a $valor. En este caso el valor será asignado por referencia.

<?php
$array 
= array(1234);
foreach (
$array as &$valor) {
    
$valor $valor 2;
}
// $array ahora es array(2, 4, 6, 8)
unset($valor); // rompe la referencia con el último elemento
?>

Referenciar $valor sólo es posible si el array iterado puede ser referenciado (es decir, si es una variable). El siguiente código no funcionará:

<?php
foreach (array(1234) as &$valor) {
    
$valor $valor 2;
}
?>

Advertencia

La referencia del $valor y el último elemento del array permanecen aún después del bucle foreach. Se recomienda destruirlos con unset().

Nota:

foreach no soporta la capacidad de suprimir mensajes de error usando '@'.

Se puede haber notado que las siguientes construcciones son funcionalmente idénticas:

<?php
$array 
= array("uno""dos""tres");
reset($array);
while (list(, 
$valor) = each($array)) {
    echo 
"Valor: $valor<br />\n";
}

foreach (
$array as $valor) {
    echo 
"Valor: $valor<br />\n";
}
?>

Las siguientes construcciones también son funcionalmente idénticas:

<?php
$array 
= array("uno""dos""tres");
reset($array);
while (list(
$clave$valor) = each($array)) {
    echo 
"Clave: $clave; Valor: $valor<br />\n";
}

foreach (
$array as $clave => $valor) {
    echo 
"Clave: $clave; Valor: $valor<br />\n";
}
?>

Algunos ejemplos más para demostrar su uso:

<?php
/* Ejemplo 1 de foreach: sólo el valor */

$a = array(12317);

foreach (
$a as $v) {
    echo 
"Valor actual de \$a: $v.\n";
}

/* Ejemplo 2 de foreach: valor (con su notación de acceso manual impreso con fines ilustrativos) */

$a = array(12317);

$i 0/* sólo para efectos ilustrativos */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* Ejemplo 3 de foreach: clave y valor */

$a = array(
    
"uno" => 1,
    
"dos" => 2,
    
"tres" => 3,
    
"diecisiete" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* Ejemplo 4 de foreach: arrays multidimensionales */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* Ejemplo 5 de foreach: arrays dinámicos */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>



break

(PHP 4, PHP 5)

break termina la ejecución de la estructura actual for, foreach, while, do-while o switch.

break acepta un argumento numérico opcional el cual indica de cuantas estructuras anidadas encerradas se debe salir.

<?php
$arr 
= array('uno''dos''tres''cuatro''pare''cinco');
while (list(, 
$val) = each($arr)) {
    if (
$val == 'pare') {
        break;    
/* Se puede también escribir 'break 1;' aquí. */
    
}
    echo 
"$val<br />\n";
}

/* Usando el argumento opcional. */

$i 0;
while (++
$i) {
    switch (
$i) {
    case 
5:
        echo 
"En 5<br />\n";
        break 
1;  /* Sólo sale del switch. */
    
case 10:
        echo 
"En 10; saliendo<br />\n";
        break 
2;  /* Sale del switch y del while. */
    
default:
        break;
    }
}
?>

Registro de cambios para break
Versión Descripción
5.4.0 Removida la posibilidad de pasar variables (por ejemplo, $num = 2; break $num;) como argumento numérico.



continue

(PHP 4, PHP 5)

continue se utiliza dentro de las estructuras de bucle para saltarse el resto de la actual iteración del bucle y continuar la ejecución en la evaluación de la condición y entonces el comienzo de la siguiente iteración.

Nota: Tenga en cuenta que en PHP la sentencia switch se considera una estructura de bucle para los efectos del continue.

continue acepta un argumento numérico opcional el cual indica hasta el final de cuantos niveles de bucles cerrados se debe saltar.

Nota:

continue 0; y continue 1; son lo mismo que ejecutar continue;.

<?php
while (list($key$value) = each($arr)) {
    if (!(
$key 2)) { // saltar miembros impares
        
continue;
    }
    
do_something_odd($value);
}

$i 0;
while (
$i++ < 5) {
    echo 
"Outer<br />\n";
    while (
1) {
        echo 
"Middle<br />\n";
        while (
1) {
            echo 
"Inner<br />\n";
            continue 
3;
        }
        echo 
"This never gets output.<br />\n";
    }
    echo 
"Neither does this.<br />\n";
}
?>

Omitir el punto y coma después del continue puede llevar a confusión. He aquí un ejemplo de lo que no se debe hacer.

<?php
for ($i 0$i 5; ++$i) {
    if (
$i == 2)
        continue
    print 
"$i\n";
}
?>

Se esperaría que el resultado sea:

0
1
3
4

Pero la salida de este script será:

2

debido a que el continue print "$i\n"; se evalúa completo como una sola expresión y así print se llama solamente cuando $i == 2 es verdadero. (El valor de retorno de print es pasado a continue como el argumento numérico.)

Control de cambios para continue
Versión Descripción
5.4.0 Se ha eliminado la posibilidad de pasar variables (por ejemplo, $num = 2; continue $num;) como argumento numérico.



switch

(PHP 4, PHP 5)

La sentencia switch es similar a una serie de sentencias IF en la misma expresión. En muchas ocasiones, es posible que se quiera comparar la misma variable (o expresión) con muchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a que valor es igual. Para esto es exactamente la expresión switch.

Nota: Cabe señalar que a diferencia de algunos otros lenguajes, la sentencia continue se aplica a switch y actúa de manera similar a break. Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración de del ciclo exterior, se utiliza continue 2.

Nota:

Tener en cuenta que switch/case hace comparaciones flexibles.

Los dos ejemplos siguientes son dos formas diferentes de escribir lo mismo, uno con una serie de sentencias if y elseif, y el otro usando la sentencia switch:

Ejemplo #1 Estructura switch

<?php
if ($i == 0) {
    echo 
"i es igual a 0";
} elseif (
$i == 1) {
    echo 
"i es igual a 1";
} elseif (
$i == 2) {
    echo 
"i es igual a 2";
}

switch (
$i) {
    case 
0:
        echo 
"i es igual a 0";
        break;
    case 
1:
        echo 
"i es igual a 1";
        break;
    case 
2:
        echo 
"i es igual a 2";
        break;
}
?>

Ejemplo #2 Estrutura switch permite el uso de strings

<?php
switch ($i) {
    case 
"manzana":
        echo 
"i es una manzana";
        break;
    case 
"barra":
        echo 
"i es una barra";
        break;
    case 
"pastel":
        echo 
"i es un pastel";
        break;
}
?>

Es importante entender cómo la sentencia switch es ejecutada con el fin de evitar errores. La sentencia switch ejecuta línea por línea (en realidad, sentencia por sentencia). Al principio, ningún código es ejecutado. Sólo cuando una sentencia case es encontrada con un valor que coincide con el valor de la sentencia switch, PHP comienza a ejecutar la sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o hasta la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de la lista de sentencias de un caso, PHP seguirá ejecutando las sentencias del caso siguiente. Por ejemplo:

<?php
switch ($i) {
    case 
0:
        echo 
"i es igual a 0";
    case 
1:
        echo 
"i es igual a 1";
    case 
2:
        echo 
"i es igual a 2";
}
?>

Aquí, si $i es igual a 0, PHP ejecutaría todas las sentencias echo! Si $i es igual a 1, PHP ejecutaría las últimas dos sentencias echo. Se obtendría el comportamiento esperado (se mostraría 'i es igual a 2') sólo si $i es igual a 2. Por lo tanto, es importante no olvidar las sentencias break (aunque es posible que se desee evitar proporcionarlas a propósito bajo determinadas circunstancias).

En una sentencia switch, la condición es evaluada sólo una vez y el resultado es comparado con cada una de las sentencias case. En una sentencia elseif, la condición es evaluada otra vez. Si la condición es más complicada que una simple comparación y/o está en un bucle estrecho, un switch puede ser más rápido.

La lista de sentencias para un caso también puede estar vacía, lo cual simplemente pasa el control a la lista de sentencias para el siguiente caso.

<?php
switch ($i) {
case 
0:
case 
1:
case 
2:
    echo 
"i es menor que 3 pero no negativo";
    break;
case 
3:
    echo 
"i es 3";
}
?>

Un caso especial es el default. Este caso coincide con cualquier cosa que no se haya correspondido por los otros casos. Por ejemplo:

<?php
switch ($i) {
    case 
0:
        echo 
"i es igual a 0";
        break;
    case 
1:
        echo 
"i es igual a 1";
        break;
    case 
2:
        echo 
"i es igual a 2";
        break;
    default:
       echo 
"i no es igual a 0, 1 ni 2";
}
?>

La expresión case puede ser cualquier expresión que se evalúa como un tipo simple, es decir, entero o números de punto flotante y strings. Los arrays u objetos no se pueden utilizar aquí a menos que sean desreferenciados a un tipo simple.

La sintaxis alternativa para las estructuras de control es compatible con los switch. Para obtener más información, consulte Sintaxis alternativa de estructuras de control.

<?php
switch ($i):
    case 
0:
        echo 
"i es igual a 0";
        break;
    case 
1:
        echo 
"i es igual a 1";
        break;
    case 
2:
        echo 
"i es igual a 2";
        break;
    default:
        echo 
"i no es igual a 0, 1 ni 2";
endswitch;
?>

Es posible utilizar un punto y coma en lugar de dos puntos después de un caso como:

<?php
switch($beer)
{
    case 
'tuborg';
    case 
'carlsberg';
    case 
'heineken';
        echo 
'Buena elección';
    break;
    default;
        echo 
'Por favor haga una nueva selección...';
    break;
}
?>



declare

(PHP 4, PHP 5)

El constructor declare es usado para fijar directivas de ejecución para un bloque de código. La sintaxis de declare es similar a la sintaxis de otros constructores de control de flujo:

declare (directive)
    statement

La sección directive permite que el comportamiento de declare sea configurado. Actualmente, sólo dos directivas están reconocidas: ticks (Ver abajo para más información sobre la directiva ticks) y encoding (Ver abajo para más información sobre la directiva encoding ).

Nota: La directiva encoding fue agregada en PHP 5.3.0

La parte statement del bloque declare será ejecutada - como se ejecuta y que efectos secundarios ocurran durante la ejecución puede depender de la directiva fijada en el bloque directive.

El constructor declare también se puede utilizar en el alcance global, afectando a todo el código que le sigue (sin embargo, si el archivo con el declare fue incluido entonces no afectará al archivo padre).

<?php
// estos son lo mismo:

// se puede usar ésto:
declare(ticks=1) {
    
// script entero aquí
}

// o se puede usar ésto:
declare(ticks=1);
// script entero aquí
?>

Ticks

Un tick es un evento que ocurre para cada sentencia tickable N de bajo nivel ejecutada por el intérprete dentro del bloque declare. El valor para N se especifica usando ticks=N dentro del bloque de declare de la sección directive.

No todas las sentencias son tickable. Por lo general, expresiones de condición y expresiones de argumento no son tickables.

Los eventos que ocurren en cada tick se especifican mediante la register_tick_function(). Ver el ejemplo abajo para más detalles. Tener en cuenta que más de un evento puede ocurrir por cada tick.

Ejemplo #1 Ejemplo de uso del tick

<?php

declare(ticks=1);

// Una función llamada en cada evento tick
function tick_handler()
{
    echo 
"tick_handler() llamado\n";
}

register_tick_function('tick_handler');

$a 1;

if (
$a 0) {
    
$a += 2;
    print(
$a);
}

?>

Ejemplo #2 Ejemplo de uso de ticks

<?php

function tick_handler()
{
  echo 
"tick_handler() llamado\n";
}

$a 1;
tick_handler();

if (
$a 0) {
    
$a += 2;
    
tick_handler();
    print(
$a);
    
tick_handler();
}
tick_handler();

?>

Véase también register_tick_function() y unregister_tick_function().

Encoding

Una codificación de script puede ser especificada para cada script usando la directiva encoding.

Ejemplo #3 Declarando un encoding para el script

<?php
declare(encoding='ISO-8859-1');
// código aquí
?>

Precaución

Cuando se combina con espacios de nombres, la única sintaxis legal para declarar es declare(encoding='...'); donde ... es el valor del encoding. declare(encoding='...') {} resultará en un error de análisis cuando se combina con espacios de nombres.

El valor declarado de encoding es ignorado en PHP 5.3 a menos que php esté compilado con --enable-zend-multibyte.

Tener en cuenta que PHP no expone si --enable-zend-multibyte fue utilizado para compilar PHP que no sea por phpinfo().

Ver también zend.script_encoding.



return

(PHP 4, PHP 5)

Si se llama desde una función, la sentencia return inmediatamente termina la ejecución de la función actual, y devuelve su argumento como el valor de la llamada a la función. return también pondrá fin a la ejecución de una sentencia eval() o a un archivo de script.

Si se llama desde el ámbito global, entonces la ejecución del script actual se termina. Si el archivo script actual fue incluido o requerido con include o require, entonces el control es pasado de regreso al archivo que hizo el llamado. Además, si el archivo script actual fue incluido con include, entonces el valor dado a return será retornado como el valor de la llamada include. Si return es llamado desde dentro del fichero del script principal, entonces termina la ejecución del script. Si el archivo script actual fue nombrado por las opciones de configuración auto_prepend_file o auto_append_file en php.ini, entonces se termina la ejecución de ese archivo script.

Para más información, ver Retornando valores.

Nota: Cabe señalar que dado que return es un constructor del lenguaje y no una función, los paréntesis que rodean su argumentos no son necesarios. Es común no utilizarlos, y en realidad se debería hacer así a fin de que PHP tenga menos trabajo que hacer en este caso.

Nota: Si no se suministra un parámetro, entonces el paréntesis debe omitirse y NULL será retornado. Llamadas a return con paréntesis pero sin argumentos resultarán en un error del intérprete.

Nota: Nunca se deben usar paréntesis al rededor de la variable de retorno cuando se retorna por referencia, ya que esto no funcionará. Sólo se pueden retornar variables por referencia, no el resultado de una sentencia. Si se utiliza return ($a); entonces no se está retornando una variable, sino el resultado de la expresión ($a) (el cual es, por supuesto, el valor de $a).



require

(PHP 4, PHP 5)

require es idéntico a include excepto que en caso de fallo producirá un error fatal de nivel E_COMPILE_ERROR. En otras palabras, éste detiene el script mientras que include sólo emitirá una advertencia (E_WARNING) lo cual permite continuar el script.

Véase la documentación de include para más información.



include

(PHP 4, PHP 5)

La sentencia include incluye y evalúa el archivo especificado.

La siguiente documentación también se aplica a require.

Los archivos son incluidos con base en la ruta de acceso dada o, si ninguna es dada, el include_path especificado. Si el archivo no se encuentra en el include_path, include finalmente verificará en el propio directorio del script que hace el llamado y en el directorio de trabajo actual, antes de fallar. El constructor include emitirá una advertencia si no puede encontrar un archivo, éste es un comportamiento diferente al de require, el cual emitirá un error fatal..

Si una ruta es definida — ya sea absoluta (comenzando con una letra de unidad o \ en Windows o / en sistemas Unix/Linux) o relativa al directorio actual (comenzando con . o ..) — el include_path será ignorado por completo. Por ejemplo, si un nombre de archivo comienza con ../, el interprete buscará en el directorio padre para encontrar el archivo solicitado.

Para más información sobre como PHP maneja la inclusión de archivos y la ruta de accesos para incluir, ver la documentación de include_path.

Cuando se incluye un archivo, el código que contiene hereda el ámbito de las variables de la línea en la cual ocurre la inclusión. Cualquier variable disponible en esa línea del archivo que hace el llamado, estará disponible en el archivo llamado, desde ese punto en adelante. Sin embargo, todas las funciones y clases definidas en el archivo incluido tienen el ámbito global.

Ejemplo #1 Ejemplo básico de include

vars.php
<?php

$color 
'verde';
$fruta 'manzana';

?>

test.php
<?php

echo "Una $fruta $color"// Una

include 'vars.php';

echo 
"Una $fruta $color"// Una manzana verde

?>

Si la inclusión ocurre al interior de una función dentro del archivo que hace el llamado, entonces todo el código contenido en el archivo llamado se comportará como si hubiera sido definida dentro de esa función. Por lo tanto, seguirá el ámbito de las variables de esa función. Una excepción a esta regla son las constantes mágicas las cuales son evaluadas por el intérprete antes que ocurra la inclusión.

Ejemplo #2 Incluyendo dentro de funciones

<?php

function foo()
{
    global 
$color;

    include 
'vars.php';

    echo 
"Una $fruta $color";
}

/* vars.php está en el ámbito de foo() así que *
* $fruta NO está disponible por fuera de éste  *
* ámbito. $color sí está porque fue declarado *
* como global.                                 */

foo();                      // Una manzana verde
echo "Una $fruta $color";   // Una verde

?>

Cuando un archivo es incluido, el intérprete abandona el modo PHP e ingresa al modo HTML al comienzo del archivo objetivo y se reanuda de nuevo al final. Por esta razón, cualquier código al interior del archivo objetivo que deba ser ejecutado como código PHP, tendrá que ser encerrado dentro de etiquetas válidas de comienzo y terminación de PHP.

Si las "envolturas URL fopen" están activadas en PHP (las cuales lo están en la configuración predeterminada), se puede especificar el archivo a ser incluido usando una URL (vía HTTP u otra envoltura soportada - ver Protocolos y Envolturas soportados para una lista de protocolos) en lugar de una ruta de acceso local. Si el servidor objetivo interpreta el archivo objetivo como código PHP, las variables se pueden pasar al archivo incluido usando una string de petición como la usada con HTTP GET. Esto no es, en estricto rigor, lo mismo que haber incluido el archivo y que haya heredado el ámbito de variables del archivo padre; el script realmente está siendo ejecutado en el servidor remoto y el resultado entonces se incluye dentro del script local.

Advertencia

Versiones de PHP para Windows anteriores a 4.3.0, no soportan el acceso remoto a archivos para esta función, no funcionará ni activando siquiera allow_url_fopen.

Ejemplo #3 include por medio de HTTP

<?php

/* Este ejemplo asume que www.example.com está configurado para interpretar archivos
* .php y no archivos .txt. Además, aquí 'Funciona' quiere decir que las variables
* $foo y $bar están disponibles dentro del archivo incluido. */

// No funciona; file.txt no puede ser manejado por www.example.com como PHP
include 'http://www.example.com/file.txt?foo=1&bar=2';

// No funciona; busca por un archivo llamado 'file.php?foo=1&bar=2' en el
// sistema de archivos local.
include 'file.php?foo=1&bar=2';

// Si funciona.
include 'http://www.example.com/file.php?foo=1&bar=2';

$foo 1;
$bar 2;
include 
'file.txt';  // Funciona.
include 'file.php';  // Funciona.

?>

Advertencia

Advertencia de seguridad

El archivo remoto puede ser procesado en el servidor remoto (dependiendo de la extensión del archivo y del hecho de si el servidor remoto corre PHP o no) pero aun así tiene que producir un script PHP válido, porque será procesado en el servidor local. Si el archivo desde el servidor remoto debe ser procesado allá y entregar la salida solamente, readfile() es la mejor función para usar. De lo contrario, debe tenerse especial cuidado para asegurar que el script remoto produce un código válido y deseado.

Ver también Archivos remotos, fopen() y file() para información relacionada.

Manejando retornos: Es posible ejecutar una sentencia return dentro de un archivo incluido con el fin de terminar el procesamiento en ese archivo y volver a script que lo llamó. Además, es posible retornar valores desde los archivos incluidos. Se puede tomar el valor de la llamada "include" de la misma forma como se haría con una función normal. Esto no es, sin embargo, posible si se incluyen archivos remotos, a menos que la salida del archivo remoto tenga unas etiquetas válidas de inicio y terminación de PHP (igual que con cualquier archivo local). Se pueden declarar la variables necesarias dentro de esas etiquetas y serán introducidas en el punto del archivo en el cual fue incluido.

Debido a que include es un constructor especial del lenguaje, los paréntesis no son necesarios en torno a su argumento. Se debe tener cuidado cuando se compara el valor de retorno.

Ejemplo #4 Comparando el valor de retorno de include

<?php
// no funciona, evaluado como include(('vars.php') == 'OK'), es decir include('')
if (include('vars.php') == 'OK') {
    echo 
'OK';
}

// si funciona
if ((include 'vars.php') == 'OK') {
    echo 
'OK';
}
?>

Ejemplo #5 include y la sentencia return

return.php
<?php

$var 
'PHP';

return 
$var;

?>

noreturn.php
<?php

$var 
'PHP';

?>

testreturns.php
<?php

$foo 
= include 'return.php';

echo 
$foo// muestra 'PHP'

$bar = include 'noreturn.php';

echo 
$bar// muestra 1

?>

$bar tiene el valor 1 debido a que el include fue exitoso. Nótese la diferencia entre los ejemplos anteriores. El primero usa return dentro del archivo incluido, mientras que el otro no. Si el archivo no se pueden incluir, se retorna FALSE y se emite un E_WARNING.

Si hay funciones definidas en el archivo incluido, se pueden utilizar en el archivo principal independientemente que hayan return antes o después. Si el archivo se incluye dos veces, PHP 5 arrojará un error fatal ya que las funciones ya han sido declaradas, mientras que PHP 4 no se queja acerca de las funciones definidas después de un return. Se recomienda el uso de include_once en lugar de comprobar si el archivo ya estaba incluido y hacer el retorno de forma condicionada dentro del archivo incluido.

Otra forma de "incluir" un archivo PHP en una variable es capturar la salida mediante el uso de Funciones de control de salida con include. Por ejemplo:

Ejemplo #6 Usando buffering de salida para incluir un archivo PHP dentro de una cadena

<?php
$string 
get_include_contents('somefile.php');

function 
get_include_contents($filename) {
    if (
is_file($filename)) {
        
ob_start();
        include 
$filename;
        return 
ob_get_clean();
    }
    return 
false;
}

?>

Con el fin de incluir archivos de forma automática dentro de scripts, véase también las opciones de configuración auto_prepend_file y auto_append_file en php.ini.

Nota: Puesto que esto es una construcción del lenguaje y no una función, no puede ser llamada usando funciones variables.

Ver también require, require_once, include_once, get_included_files(), readfile(), virtual() y include_path.



require_once

(PHP 4, PHP 5)

La sentencia require_once es idéntica a require excepto que PHP verificará si el archivo ya ha sido incluido y si es así, no se incluye (require) de nuevo.

Ver la documentación de include_once para información sobre el comportamiento de _once, y como difiere de sus hermanos no _once.



include_once

(PHP 4, PHP 5)

La sentencia include_once incluye y evalúa el fichero especificado durante la ejecución del script. Es un comportamiento similar al de la sentencia include, siendo la única diferencia que si el código del fichero ya ha sido incluido, no se volverá a incluir. Como su nombre lo indica, será incluido sólo una vez.

include_once puede ser usado en casos donde el mismo fichero podría ser incluido y evaluado más de una vez durante una ejecución particular de un script, así que en este caso, puede ayudar a evitar problemas como la redefinición de funciones, reasignación de valores de variables, etc.

Ver la documentación de include para información sobre como trabaja esta función.

Nota:

Con PHP 4, la funcionalidad _once difiere entre sistemas operativos insensibles a mayúsculas y minúsculas (como Windows) así que por ejemplo:

Ejemplo #1 include_once con un SO insensible a mayúsculas y minúsculas en PHP 4

<?php
include_once "a.php"// esto incluirá a.php
include_once "A.php"// esto incluirá a.php otra vez! (sólo PHP 4)
?>

Este comportamiento cambió en PHP 5, así que por ejemplo con Windows primero se normaliza la ruta de acceso para que C:\PROGRA~1\A.php sea identificado igual que C:\Program Files\a.php y el fichero sea incluido sólo una vez.



goto

(PHP 5 >= 5.3.0)

El operador goto puede ser usado para saltar a otra sección en el programa. El punto de destino es especificado mediante una etiqueta seguida de dos puntos y la instrucción es dada como goto seguida de la etiqueta del destino deseado. Este goto no es completamente sin restricciones. La etiqueta de destino debe estar dentro del mismo fichero y contexto, lo que significa que no se puede saltar fuera de una función o método, ni se puede saltar dentro de uno. Tampoco se puede saltar dentro de cualquier clase de estructura de bucle o switch. Se puede saltar fuera de estos y un uso común es utilizar un goto en lugar de un break multi-nivel.

Ejemplo #1 Ejemplo de goto

<?php
goto a;
echo 
'Foo';
 
a:
echo 
'Bar';
?>

El resultado del ejemplo sería:

Bar

Ejemplo #2 Ejemplo de goto en un bucle

<?php
for($i=0,$j=50$i<100$i++) {
  while(
$j--) {
    if(
$j==17) goto end;
  }  
}
echo 
"i = $i";
end:
echo 
'j alcanzó 17';
?>

El resultado del ejemplo sería:

j hit 17

Ejemplo #3 Esto no funcionará

<?php
goto loop;
for(
$i=0,$j=50$i<100$i++) {
  while(
$j--) {
    
loop:
  }
}
echo 
"$i = $i";
?>

El resultado del ejemplo sería:

Fatal error: 'goto' into loop or switch statement is disallowed in script on line 2
(Error fatal: 'goto' hacia el interior de un bucle o sentencia switch no esta permitido en el script en la línea 2)

Nota:

El operador goto está disponible a partir de PHP 5.3.

¿Qué es lo peor que podría suceder si utiliza goto?
Imagen cortesía de » xkcd




Funciones

Tabla de contenidos


Funciones definidas por el usuario

Una función puede ser definida usando una sintaxis como la siguiente:

Ejemplo #1 Pseudo código para demostrar el uso de funciones

<?php
function foo($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Función de ejemplo.\n";
    return 
$valordevuelto;
}
?>

Cualquier código PHP válido puede aparecer dentro de una función, incluso otras funciones y definiciones de clases.

Los nombres de las funciones siguen las mismas reglas que otras etiquetas de PHP. Un nombre de función válido comienza con una letra o guión bajo, seguido de cualquier número de letras, números, o guiones bajos. Como expresión regular se expresaría así: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Las funciones no necesitan ser definidas antes de que se referencien, excepto cuando una función está condicionalmente definida como se muestra en los dos ejemplos de abajo.

Cuando una función está definida de una forma condicional como en los dos ejemplos mostrados, sus definiciones deben ser procesadas antes de ser llamadas.

Ejemplo #2 Funciones condicionales

<?php

$haceralgo 
true;

/* No podemos llamar a foo() desde aquí
   ya que no existe aún,
   pero podemos llamar a bar() */

bar();

if (
$haceralgo) {
  function 
foo()
  {
    echo 
"No existo hasta que la ejecución del programa llegue hasta mí.\n";
  }
}

/* Ahora podemos llamar de forma segura a foo()
   ya que $haceralgo se evaluó como verdadero */

if ($haceralgofoo();

function 
bar() 
{
  echo 
"Existo desde el momento inmediato que comenzó el programa.\n";
}

?>

Ejemplo #3 Funciones dentro de funciones

<?php
function foo() 
{
  function 
bar() 
  {
    echo 
"No existo hasta que se llame a foo().\n";
  }
}

/* No podemos llamar aún a bar()
   ya que no existe. */

foo();

/* Ahora podemos llamar a bar(),
   el procesamiento de foo()
   la ha hecho accesible. */

bar();

?>

Todas las funciones y las clases de PHP tienen ámbito global - pueden ser llamadas fuera de una función incluso si fueron definidas dentro, y viceversa.

PHP no soporta la sobrecarga de funciones, ni es posible 'desdefinir' ni redefinir funciones previamente declaradas.

Nota: Los nombres de las fuciones son insensibles a mayúsculas-minúsculas, por lo que es una buena idea llamar a las funciones tal y como aparecen en sus declaraciones.

El número variable de argumentos y los argumentos predeterminados están soportados por las funciones. Vea también las referencias de funciones para func_num_args(), func_get_arg(), y func_get_args() para más información.

En PHP es posible llamar a funciones recursivas. Sin embargo, evite las llamadas a funciones/métodos recursivos con más de 100-200 niveles de recursividad ya que pueden agotar la pila y causar la terminación del script actual.

Ejemplo #4 Funciones recursivas

<?php
function recursividad($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursividad($a 1);
    }
}
?>



Argumentos de funciones

La información puede ser pasada a las funciones mediante la lista de argumentos, la cual es una lista de expresiones delimitadas por comas. Los argumentos son evaluados de izquierda a derecha.

PHP soporta argumentos pasados por valor (por defecto), pasados por referencia, y valores de argumentos predeterminados. Las Listas de argumentos de longitud variable también están soportadas, vea también las referencias de funciones para func_num_args(), func_get_arg(), y func_get_args() para más información.

Ejemplo #1 Pasar arrays a funciones

<?php
function tomar_array($entrada)
{
    echo 
"$entrada[0] + $entrada[1] = ".$entrada[0]+$entrada[1];
}
?>

Hacer que los argumentos sean pasados por referencia

Por defecto, los argumentos de las funciones son pasados por valor (por lo que si el valor del argumento dentro de la función se cambia, no se cambia fuera de la función). Para permitir a una función modificar sus argumentos, éstos deben pasarse por referencia.

Para hacer que un argumento a una función sea siempre pasado por referencia hay que poner delante del nombre del argumento el signo 'ampersand' (&) en la definición de la función:

Ejemplo #2 Pasar parámetros de una función por referencia

<?php
function añadir_algo(&$cadena)
{
    
$cadena .= 'y algo más.';
}
$cad 'Esto es una cadena, ';
añadir_algo($cad);
echo 
$cad;    // imprime 'Esto es una cadena, y algo más.'
?>

Valores de argumentos predeterminados

Una función puede definir valores predeterminados al estilo C++ para argumentos escalares como sigue:

Ejemplo #3 Uso de parámetros predeterminados en funciones

<?php
function hacercafé($tipo "capuchino")
{
    return 
"Hacer una taza de $tipo.\n";
}
echo 
hacercafé();
echo 
hacercafé(null);
echo 
hacercafé("espresso");
?>

El resultado del ejemplo sería:

Hacer una taza de capuchino.
Hacer una taza de .
Hacer una taza de espresso.

PHP también permite el uso de arrays y del tipo especial NULL como valores predeterminados, por ejemplo:

Ejemplo #4 Usar tipos no escalares como valores predeterminados

<?php
function hacercafé($tipos = array("capuchino"), $fabricanteCafé NULL)
{
    
$aparato is_null($fabricanteCafé) ? "las manos" $fabricanteCafé;
    return 
"Hacer una taza de ".join(", "$tipos)." con $aparato.\n";
}
echo 
hacercafé();
echo 
hacercafé(array("capuchino""lavazza"), "una tetera");
?>

El valor predeterminado debe ser una expresión constante, no (por ejemplo) una variable, un miembro de una clase o una llamada a una función.

Observe que cuando se usan argumentos predeterminados, cualquiera de ellos debería estar a la derecha de los argumentos no predeterminados; si no, las cosas no funcionarán como se esperaba. Considere el siguiente trozo de código:

Ejemplo #5 Uso incorrecto de argumentos predeterminados en una función

<?php
function haceryogur($tipo "acidófilo"$sabor)
{
    return 
"Hacer un tazón de yogur $tipo de $sabor.\n";
}
 
echo 
haceryogur("frambuesa");   // no funcionará como se esperaba
?>

El resultado del ejemplo sería:

Warning: Missing argument 2 in call to haceryogur() in 
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Hacer un tazón de yogur frambuesa de .

Ahora compare el ejemplo de arriba con este:

Ejemplo #6 Uso correcto de argumentos predeterminados en una función

<?php
function haceryogur($sabor$tipo "acidófilo")
{
    return 
"Hacer un tazón de yogur $tipo de $sabor.\n";
}
 
echo 
haceryogur("frambuesa");   // funciona como se esperaba
?>

El resultado del ejemplo sería:

Hacer un tazón de yogur acidófilo de frambuensa.

Nota: A partir de PHP 5, los valores predeterminados se pueden pasar por referencia.

Listas de argumentos de longitud variable

PHP tiene soporte para listas de argumentos de longitud variable en funciones definidas por el usuario. Esto realmente es bastante fácil si se usan las funciones func_num_args(), func_get_arg(), y func_get_args().

No se necesita una sintaxis especial, y la lista de argumentos aún puede ser proporcionada explícitamente con definiciones de funciones, y se comportará con normalidad.



Devolver valores

Los valores son devueltos usando la sentencia opcional return. Se puede devolver cualquier tipo, incluidos arrays y objetos. Esto causa que la función finalice su ejecución inmediatamente y pase el control de nuevo a la línea desde la que fue llamada. Véase return para más información.

Nota:

Si se omite return será devuelto el valor NULL.

Ejemplo #1 Uso de return

<?php
function cuadrado($núm)
{
    return 
$núm $núm;
}
echo 
cuadrado(4);   // imprime '16'.
?>

Una función no puede devolver múltiples valores, pero se pueden obtener resultados similares devolviendo un array.

Ejemplo #2 Devolver un array para obtener múltiples valores

<?php
function números_pequeños()
{
    return array (
012);
}
list (
$cero$uno$dos) = números_pequeños();
?>

Para devolver una referencia desde una función use el operador de referencia &, en la declaración de la función y cuando se asigne el valor devuelto a una variable:

Ejemplo #3 Devolver una referencia desde una función

<?php
function &devolver_referencia()
{
    return 
$algunaref;
}

$nuevaref =& devolver_referencia();
?>

Para más información sobre referencias, por favor, lea las Referencias Explicadas.



Funciones variables

PHP soporta el concepto de funciones variables. Esto significa que si un nombre de variable tiene paréntesis anexos a él, PHP buscará una función con el mismo nombre que lo evaluado por la variable, e intentará ejecutarla. Entre otras cosas, esto se puede usar para implementar llamadas de retorno, tablas de funciones, y así sucesivamente.

Las funciones variables no funcionarán con constructores de lenguaje como echo, print, unset(), isset(), empty(), include, require y similares. Utilice funciones de envoltura para hacer uso de cualquiera de estos constructores como funciones variables.

Ejemplo #1 Ejemplo de función variable

<?php
function foo() {
    echo 
"En foo()<br />\n";
}

function 
bar($arg '')
{
    echo 
"En bar(); el argumento era '$arg'.<br />\n";
}

// Esta es una función de envoltura alrededor de echo
function hacerecho($cadena)
{
    echo 
$cadena;
}

$func 'foo';
$func();        // Esto llama a foo()

$func 'bar';
$func('prueba');  // Esto llama a bar()

$func 'hacerecho';
$func('prueba');  // Esto llama a hacerecho()
?>

Un método de un objeto también puede ser llamado con la sintaxis de funciones variables.

Ejemplo #2 Ejemplo de método variable

<?php
class Foo
{
    function 
Variable()
    {
        
$nombre 'Bar';
        
$this->$nombre(); // Esto llama al método Bar()
    
}
    
    function 
Bar()
    {
        echo 
"Esto es Bar";
    }
}

$foo = new Foo();
$nombrefunc "Variable";
$foo->$nombrefunc();  // Esto llama a $foo->Variable()

?>

Cuando se llaman a métodos estáticos, la llamada a la función es más fuerte que el operador de propiedad static:

Ejemplo #3 Ejemplo de método variable con propiedades estáticas

<?php
class Foo
{
    static 
$variable 'propiedad estática';
    static function 
Variable()
    {
        echo 
'Método Variable llamado';
    }
}

echo 
Foo::$variable// Esto imprime 'propiedad estática'. No necesita una $variable en este ámbito.
$variable "Variable";
Foo::$variable();  // Esto llama a $foo->Variable() leyendo $variable en este ámbito.

?>

Véase también call_user_func(), variables variables y function_exists().



Funciones internas (incluidas)

PHP se estandariza con muchas funciones y construcciones. También existen funciones que necesitan extensiones específicas de PHP compiladas, si no, aparecerán errores fatales "undefined function" ("función no definida"). Por ejemplo, para usar las funciones de image tales como imagecreatetruecolor(), PHP debe ser compilado con soporte para GD. O para usar mysql_connect(), PHP debe ser compilado con soporte para MySQL. Hay muchas funciones de núcleo que está incluidas en cada versión de PHP, tales como las funciones de string y de variable. Una llamada a phpinfo() o get_loaded_extensions() mostrará las extensiones que están cargadas en PHP. Observe también que muchas extensiones están habilitadas por defecto y que el manual de PHP está dividido por extensiones. Véase configuración, instalación, y capítulos individuales de extensiones para más información sobre cómo configurar PHP.

Interpretar y comprender un prototipo de una función está explicado dentro de la sección del manual titulada cómo interpretar la definición de una función. Es importante comprender lo que devuelve una función o si una función funciona directamente con un valor pasado. Por ejemplo, str_replace() devolverá la cadena modificada mientras que usort() funciona con la variable actual pasada. Cada página del manual también tiene información específica para cada función, como información sobre parámetros de funciones, cambios de comportamiento, valores devueltos en caso de éxito o fallo, e información de disponibilidad. Conocer estas importantes diferencias (a menudo imperceptibles) es crucial para escribir código de PHP correcto.

Nota: Si los parámetros dados a una función no son los que se esperaban, como pasar un array donde se esperaba un string, el valor devuelto de la función será indefinido. En este caso lo más probable es que devuelva NULL pero esto es sólo una convención, y no se puede confiar en ello.

Véase también function_exists(), la referencia de funciones, get_extension_funcs(), y dl().



Funciones anónimas

Las funciones anónimas, también conocidas como closures (cierres), permiten la creación de funciones que no tienen un nombre especificado. Son más útiles como valor de los parámetros de llamadas de retorno, pero tienen muchos otros usos.

Ejemplo #1 Ejemplo de función anónima

<?php
echo preg_replace_callback('~-([a-z])~', function ($coincidencia) {
    return 
strtoupper($coincidencia[1]);
}, 
'hola-mundo');
// imprime holaMundo
?>

Los cierres también se pueden usar como valores de variables; PHP automáticamente convierte tales expresiones en instancias de la clase interna Closure. Se asume que un cierre a una variable usa la misma sintaxis que cualquier otra asignación, incluido el punto y coma final:

Ejemplo #2 Ejemplo de asignación de variable de una función anónima

<?php
$saludo 
= function($nombre)
{
    
printf("Hola %s\r\n"$nombre);
};

$saludo('Mundo');
$saludo('PHP');
?>

Los cierres también pueden heredar variables del ámbito padre. Cualquier variable de estas debe ser declarada en la cabecera de la función. Heredar variables del ámbito padre no es lo mismo que usar variables globales. Las variables globales existen en el ámbito global, lo que implica que no importa qué función se esté ejecutando. El ámbito padre de un cierre es la función en la que el cierre fue declarado (no necesariamente la función desde la que se llamó). Vea el siguiente ejemplo:

Ejemplo #3 Cierres y ámbito

<?php
// Un carro de compras básico que contiene una lista de productos añadidos
// y la cantidad de cada producto. Incluye un método que
// calcula el precio total de los artículos del carro usando un
// cierre como llamada de retorno.
class Carro
{
    const 
PRECIO_MANTEQUILLA 1.00;
    const 
PRECIO_LECHE       3.00;
    const 
PRECIO_HUEVOS      6.95;

    protected 
$productos = array();
    
    public function 
añadir($producto$cantidad)
    {
        
$this->productos[$producto] = $cantidad;
    }
    
    public function 
obtenerCantidad($producto)
    {
        return isset(
$this->productos[$producto]) ? $this->productos[$producto] :
               
FALSE;
    }
    
    public function 
obtenerTotal($impuesto)
    {
        
$total 0.00;
        
        
$llamadaDeRetorno =
            function (
$cantidad$producto) use ($impuesto, &$total)
            {
                
$precioUnidad constant(__CLASS__ "::PRECIO_" .
                    
strtoupper($producto));
                
$total += ($precioUnidad $cantidad) * ($impuesto 1.0);
            };
        
        
array_walk($this->productos$llamadaDeRetorno);
        return 
round($total2);
    }
}

$mi_carro = new Carro;

// Añadir algunos artículos al carro
$mi_carro->añadir('mantequilla'1);
$mi_carro->añadir('leche'3);
$mi_carro->añadir('huevos'6);

// Imprimir el total con un impuesto de venta del 5%.
print $mi_carro->obtenerTotal(0.05) . "\n";
// El resultado es 54.29
?>

Las funciones anónimas son implementadas usando la clase Closure.

Historial de cambios

Versión Descripción
5.4.0 $this puede ser usado en funciones anónimas.
5.3.0 Las funciones anónimas se encuentran disponibles.

Notas

Nota: Es posible usar func_num_args(), func_get_arg(), y func_get_args() desde dentro de un cierre.




Clases y Objetos

Tabla de contenidos


Introducción

A partir de PHP 5, el modelo de objetos ha sido reescrito para permitir un mejor rendimiento y con más características. Este fue un cambio importante a partir de PHP 4. PHP 5 tiene un modelo de objetos completo.

Entre las características de PHP 5 están la inclusión de la visibilidad, las clases abstractas y clases y métodos finales, métodos mágicos adicionales, interfaces, clonación y tipos sugeridos.

PHP trata los objetos de la misma manera como referencias o manejadores, lo que significa que cada variable contiene una referencia de objeto en lugar de una copia de todo el objeto. Ver objetos y referencias



Lo básico

class

La definición básica de clases comienza con la palabra clave class, seguido por un nombre de clase, continuado por un par de llaves que encierran las definiciones de las propiedades y métodos pertenecientes a la clase.

El nombre de clase puede ser cualquier etiqueta válida que no sea una palabra reservada de PHP. Un nombre válido de clase comienza con una letra o un guión bajo, seguido de la cantidad de letras, números o guiones bajos que sea. Como una expresión regular, se expresaría de la siguiente forma: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Una clase puede tener sus propias constantes, variables (llamadas "propiedades"), y funciones (llamadas "métodos").

Ejemplo #1 Definición simple de una clase

<?php
class SimpleClass
{
    
// Declaración de la propiedad
    
public $var 'a default value';

    
// Declaración del método
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

La pseudo-variable $this está disponible cuando un método es invocado dentro del contexto de un objeto. $this es una referencia del objeto que invoca (usualmente el objeto al que el método pertenece, pero posiblemente sea otro objeto, si el método es llamado estáticamente desde el contexto de un objeto secundario).

Ejemplo #2 Algunos ejemplo de la pseudo-variable $this

<?php
class A
{
    function 
foo()
    {
        if (isset(
$this)) {
            echo 
'$this está definida (';
            echo 
get_class($this);
            echo 
")\n";
        } else {
            echo 
"\$this no está definida.\n";
        }
    }
}

class 
B
{
    function 
bar()
    {
        
// Nota: la siguiente línea arrojará un Warning si E_STRICT está habilitada.
        
A::foo();
    }
}

$a = new A();
$a->foo();

// Nota: la siguiente línea arrojará un Warning si E_STRICT está habilitada.
A::foo();
$b = new B();
$b->bar();

// Nota: la siguiente línea arrojará un Warning si E_STRICT está habilitada.
B::bar();
?>

El resultado del ejemplo sería:

$this está definida (A)
$this no está definida.
$this está definida (B)
$this no está definida.

new

Para crear una instancia de una clase, la palabra clave new debe ser usada. Un objeto siempre se creará a menos que el objeto tenga un constructor que arroje una excepción en caso de error. Las clases deberían ser definidas antes de la instanciación (y en algunos casos esto es un requerimiento).

Si un string que contiene el nombre de una clase se usa con new, una nueva instancia de esa clase será creada. Si la clase está en un espacio de nombres, su nombre completo debe ser usado cuando se hace esto.

Ejemplo #3 Creación de una instancia

<?php
$instance 
= new SimpleClass();

// Esto también se puede hacer con variables:
$className 'Foo';
$instance = new $className(); // Foo()
?>

En el contexto de una clase, es posible crear un nuevo objeto con new self y new parent.

Cuando se asigna una instancia de una clase ya creada a una nueva variable, ésta última accederá a la misma instancia como al objeto que le fue asignado. Esta conducta es la misma cuando se pasan instancias a una función. Una copia de un objeto ya creado se puede lograr a través de la clonación de la misma.

Ejemplo #4 Asignación de objetos

<?php

$instance 
= new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->var '$assigned tendrá este valor';

$instance null// $instance y $reference se transforman en null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

El resultado del ejemplo sería:

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned tendrá este valor"
}

PHP 5.3.0 introdujo un par de nuevas maneras para crear instancias de un objeto:

Ejemplo #5 Creando nuevos objetos

<?php
class Test
{
    static public function 
getNew()
    {
        return new static;
    }
}

class 
Child extends Test
{}

$obj1 = new Test();
$obj2 = new $obj1;
var_dump($obj1 !== $obj2);

$obj3 Test::getNew();
var_dump($obj3 instanceof Test);

$obj4 Child::getNew();
var_dump($obj4 instanceof Child);
?>

El resultado del ejemplo sería:

bool(true)
bool(true)
bool(true)

extends

Una clase puede heredar los métodos y propiedades de otra clase al utilizar la palabra clave extends en la declaración de la clase. No es posible extender múltiples clases; una clase sólo puede heredar de una clase base.

Los métodos y propiedades heredados pueden ser sobrescritos con la redeclaración de éstos utilizando el mismo nombre que en la clase parent. Sin embargo, si la clase parent definió un método como final, éste no podrá ser sobrescrito. Es posible acceder a los métodos sobrescritos o propiedades estáticas referenciándolos con parent::.

Cuando se sobrescriben métodos, la cantidad y disposición de los parámetros debería ser la misma o PHP generará un error a nivel de E_STRICT. Esto no se aplica a los constructores, que permiten la sobrescritura con diferentes parámetros.

Ejemplo #6 Herencia simple de clases

<?php
class ExtendClass extends SimpleClass
{
    
// Redefinición del método parent
    
function displayVar()
    {
        echo 
"Clase extendida\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

El resultado del ejemplo sería:

Clase extendida
un valor por defecto


Propiedades

Las variables pertenecientes a clases son llamadas "propiedades". También se les puede referir usando otros términos como "atributos" o "campos", pero para los propósitos de esta referencia vamos a utilizar "propiedades". Éstas se definen usando una de las palabras claves public, protected, o private, seguido por una declaración normal de variable. Esta declaración puede incluir una inicialización, pero esta inicialización debe ser un valor constante, es decir, debe tener la capacidad de ser evaluada en la compilación y no debe depender de información en tiempo de ejecución para ser evaluada.

Vea Visibilidad para más información sobre que significan public, protected, y private.

Nota:

Con el fin de mantener la compatibilidad con PHP 4, PHP 5 continuará aceptando el uso de la palabra clave var en la declaración de propiedades en lugar de (o además de) public, protected, o private. Sin embargo, var ya no se requiere más. Entre las versiones 5.0 y 5.1.3 de PHP, el uso de var fue considerado obsoleto y emitirá un Warning E_STRICT, pero a partir de PHP 5.1.3 no está más obsoleta y no emitirá la advertencia.

Si declara una propiedad utilizando var en lugar de public, protected, o private, entonces PHP tratará dicha propiedad como si hubiera sido definida como public.

Dentro de los métodos de clase, las propiedades, constantes y métodos pueden ser accedidos a través de $this->property (donde property es el nombre de la propiedad) a menos que el acceso sea a una propiedad estática dentro del contexto de un método de clase estático, en cuyo caso sería accedida usando self::$property. Vea Static para más información.

La pseudo-variable $this está disponible dentro de cualquier método de clase cuando éste es invocado dentro del contexto de un objeto. $this es una referencia del objeto que invoca (usualmente el objeto al que el método pertenece, pero posiblemente sea otro objeto, si el método es llamado estáticamente desde el contexto de un objeto secundario).

Ejemplo #1 Declaración de propiedades

<?php
class SimpleClass
{
   
// Declaraciones inválida de propiedades:
   
public $var1 'hola ' 'mundo';
   public 
$var2 = <<<EOD
hola mundo
EOD;
   public 
$var3 1+2;
   public 
$var4 self::myStaticMethod();
   public 
$var5 $myVar;

   
// Declaraciones válida de propiedades:
   
public $var6 myConstant;
   public 
$var7 = array(truefalse);

   
// Esto se permite sólo en PHP 5.3.0 y superiores.
   
public $var8 = <<<'EOD'
hola mundo
EOD;
}
?>

Nota:

Existen varias funciones interesantes para manipular clases y objetos. Quizá le interese echar un vistazo a las Funciones de Clases/Objetos.

A diferencia de heredocs, nowdocs puede ser utilizado en cualquier contexto de datos estáticos, incluyendo declaración de propiedades.

Ejemplo #2 Ejemplo del uso de nowdoc para inicializar una propiedad

<?php
class foo {
   
// A partir de PHP 5.3.0
   
public $bar = <<<'EOT'
bar
EOT;
}
?>

Nota:

El soporte nowdoc fue agregado en PHP 5.3.0.



Constantes de Clases

Es posible definir valores constantes en función de cada clase manteniéndola invariable. Las constantes se diferencian de variables comunes en que no utilizan el símbolo $ al declararlas o usarlas.

El valor debe ser una expresión constante, no (por ejemplo) una variable, una propiedad, un resultado de una operación matemática, o una llamada a una función.

También es posible para las interfaces tener constantes. Ver la documentación de interfaces para ejemplos.

A partir de PHP 5.3.0, es posible hacer referencia a una clase utilizando una variable. El valor de la variable no puede ser una palabra clave (por ej., self, parent y static).

Ejemplo #1 Definición y uso de una constante

<?php
class MyClass
{
    const 
constant 'valor constante';

    function 
showConstant() {
        echo  
self::constant "\n";
    }
}

echo 
MyClass::constant "\n";

$classname "MyClass";
echo 
$classname::constant "\n"// A partir de PHP 5.3.0

$class = new MyClass();
$class->showConstant();

echo 
$class::constant."\n"// A partir de PHP 5.3.0
?>

Ejemplo #2 Ejemplo de datos estáticos

<?php
class foo {
    
// A partir de PHP 5.3.0
    
const bar = <<<'EOT'
bar
EOT;
}
?>

A diferencia de heredocs, nowdocs puede ser utilizado en cualquier contexto de datos estáticos.

Nota:

El soporte nowdoc fue agregado en PHP 5.3.0.



Auto-carga de Clases

Muchos desarrolladores que escriben aplicaciones orientadas a objetos crean un archivo fuente PHP para cada definición de clase. Una de las mayores molestias es tener que hacer una larga lista de includes al comienzo de cada script (uno por cada clase).

En PHP 5, esto ya no es más necesario. Se puede definir una función __autoload() la cual es automáticamente invocada en caso de que esté intentando utilizar una clase/interfaz que todavía no haya sido definida. Al invocar a esta función el motor de scripting está dando una última oportunidad de cargar la clase antes que PHP falle con un error.

Sugerencia

spl_autoload_register() proporciona una alternativa más flexible para la carga automática de clases. Por esta razón, el uso de __autoload() no se recomienda y puede ser obsoleta o eliminada en el futuro.

Nota:

Antes de 5.3.0, las excepciones lanzadas en la función __autoload no podían ser capturadas en el bloque catch y eso resultaba en un error fatal. Desde 5.3.0+ las excepciones lanzadas en la función __autoload pueden ser capturadas en el bloque catch, con 1 disposición. Si se lanza una excepción personalizada, entonces la clase de excepción personalizada debe estar disponible. La función __autoload puede ser usada recursivamente para auto-cargar la clase de excepción personalizada.

Nota:

La auto-carga no está disponible si utiliza PHP en modo interactivo CLI.

Nota:

Si el nombre de la clase es usado, por ejemplo, en call_user_func() entonces puede contener algunos caracteres peligrosos tal como ../. Se recomienda no utilizar la entrada del usuario en tales funciones o al menos verifique dicha entrada en __autoload().

Ejemplo #1 Ejemplo de auto-carga

Este ejemplo intenta cargar las clases MyClass1 y MyClass2 de los archivos MyClass1.php y MyClass2.php respectivamente.

<?php
function __autoload($class_name) {
    include 
$class_name '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

Ejemplo #2 Otro ejemplo de auto-carga

Este ejemplo intenta cargar la interfaz ITest.

<?php

function __autoload($name) {
    
var_dump($name);
}

class 
Foo implements ITest {
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>

Ejemplo #3 Auto-carga con manejo de excepciones para 5.3.0+

Este ejemplo lanza una excepción y demuestra los bloques try/catch.

<?php
function __autoload($name) {
    echo 
"Intentando cargar $name.\n";
    throw new 
Exception("Imposible cargar $name.");
}

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

El resultado del ejemplo sería:

Intentando cargar NonLoadableClass.
Imposible cargar NonLoadableClass.

Ejemplo #4 Auto-carga con manejo de excepciones para 5.3.0+ - Omitiendo excepción personalizada

Este ejemplo lanza una excepción para una excepción personalizada no cargable.

<?php
function __autoload($name) {
    echo 
"Intentando cargar $name.\n";
    throw new 
MissingException("Imposible cargar $name.");
}

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

El resultado del ejemplo sería:

Intentando cargar NonLoadableClass.
Intentando cargar MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4



Constructores y destructores

Constructor

void __construct ([ mixed $args [, $... ]] )

PHP 5 permite a los desarrolladores declarar métodos constructores para las clases. Aquellas que tengan un método constructor lo invocarán en cada nuevo objeto creado, lo que lo hace idóneo para cualquier inicialización que el objeto pueda necesitar antes de ser usado.

Nota: Constructores parent no son llamados implícitamente si la clase child define un constructor. Para ejecutar un constructor parent, se requiere invocar a parent::__construct() desde el constructor child.

Ejemplo #1 Utilización de nuevos constructores unificados

<?php
class BaseClass {
   function 
__construct() {
       print 
"En el constructor de BaseClass\n";
   }
}

class 
SubClass extends BaseClass {
   function 
__construct() {
       
parent::__construct();
       print 
"En el constructor de SubClass\n";
   }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Por motivos de compatibilidad, si PHP 5 no puede encontrar una función __construct() para una determinada clase, buscará el viejo estilo de la función constructora, mediante el nombre de la clase. Efectivamente, esto significa que en el único caso en el que se tendría compatibilidad es si la clase tiene un método llamado __construct() que fuese utilizado para diferentes propósitos.

A diferencia con otros métodos, PHP no generará un mensaje de error a nivel de E_STRICT cuando __construct() es sobrescrito con diferentes parámetros que los métodos padre __construct() tienen.

A partir de PHP 5.3.3, los métodos con el mismo nombre que el último elemento de una clase en un nombre de espacios no serán más tratados como un constructor. Este cambio no afecta a clases sin espacio de nombres.

Ejemplo #2 Constructores en clases pertenecientes a un nombre de espacios

<?php
namespace Foo;
class 
Bar {
    public function 
Bar() {
        
// Tratado como constructor en PHP 5.3.0 - 5.3.2
        // Tratado como método regular a partir de PHP 5.3.3
    
}
}
?>

Destructor

void __destruct ( void )

PHP 5 introduce un concepto de destructor similar al de otros lenguajes orientados a objetos, tal como C++. El método destructor será llamado tan pronto como no hayan otras referencias a un objeto determinado, o en cualquier otra circunstancia de finalización.

Ejemplo #3 Ejemplo de Destructor

<?php
class MyDestructableClass {
   function 
__construct() {
       print 
"En el constructor\n";
       
$this->name "MyDestructableClass";
   }

   function 
__destruct() {
       print 
"Destruyendo " $this->name "\n";
   }
}

$obj = new MyDestructableClass();
?>

Como los constructores, los destructores padre no serán llamados implícitamente por el motor. Para ejecutar un destructor padre, se deberá llamar explícitamente a parent::__destruct() en el interior del destructor.

El destructor será invocado aún si la ejecución del script es detenida usando exit(). Llamar a exit() en un destructor evitará que se ejecuten las rutinas restantes de finalización.

Nota:

Los destructores invocados durante la finalización del script tienen los headers HTTP ya enviados. El directorio de trabajo en la fase de finalización del script puede ser diferente con algunos SAPIs (por ej., Apache).

Nota:

Intentar lanzar una excepción desde un destructor (invocado en la finalización del script) causa un error fatal.



Visibilidad

La visibilidad de una propiedad o método se puede definir anteponiendo una de las palabras claves public, protected o private en la declaración. Miembros de clases declarados como public pueden ser accedidos de cualquier lado. Miembros declarados como protected, sólo de la clase misma, por herencia y clases parent. Aquellos definidos como private, únicamentede la clase que los definió.

Visibilidad de Propiedades

Las propiedades de clases deben ser definidas como public, private, o protected. Si se declaran usando var, serán definidas como public.

Ejemplo #1 Declaración de propiedades

<?php
/**
 * Definición de MyClass
 */
class MyClass
{
    public 
$public 'Public';
    protected 
$protected 'Protected';
    private 
$private 'Private';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj = new MyClass();
echo 
$obj->public// Funciona
echo $obj->protected// Error Fatal
echo $obj->private// Error Fatal
$obj->printHello(); // Muestra Public, Protected y Private


/**
 * Definición de MyClass2
 */
class MyClass2 extends MyClass
{
    
// Se puede redeclarar los métodos public y protected, pero no el private
    
protected $protected 'Protected2';

    function 
printHello()
    {
        echo 
$this->public;
        echo 
$this->protected;
        echo 
$this->private;
    }
}

$obj2 = new MyClass2();
echo 
$obj2->public// Funciona
echo $obj2->private// Undefined
echo $obj2->protected// Error Fatal
$obj2->printHello(); // Muestra Public, Protected2, Undefined

?>

Nota: La forma de declaración de una variable de PHP 4 con la palabra clave var todavía es soportado (como un sinónimo de public) por razones de compatibilidad. En PHP 5 antes de 5.1.3, su uso genera un Warning E_STRICT.

Visibilidad de Métodos

Los métodos de clases pueden ser definidos como public, private, o protected. Aquellos declarados sin ninguna palabra clave de visibilidad explícita serán definidos como public.

Ejemplo #2 Declaración de métodos

<?php
/**
 * Definición de MyClass
 */
class MyClass
{
    
// Declaración de un constructor public
    
public function __construct() { }

    
// Declaración de un método public
    
public function MyPublic() { }

    
// Declaración de un método protected
    
protected function MyProtected() { }

    
// Declaración de un método private
    
private function MyPrivate() { }

    
// Esto es public
    
function Foo()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // Funciona
$myclass->MyProtected(); // Error Fatal
$myclass->MyPrivate(); // Error Fatal
$myclass->Foo(); // Public, Protected y Private funcionan


/**
 * Definición de MyClass2
 */
class MyClass2 extends MyClass
{
    
// Esto es public
    
function Foo2()
    {
        
$this->MyPublic();
        
$this->MyProtected();
        
$this->MyPrivate(); // Error Fatal
    
}
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // Funciona
$myclass2->Foo2(); // Public y Protected funcionan, pero Private no

class Bar
{
    public function 
test() {
        
$this->testPrivate();
        
$this->testPublic();
    }

    public function 
testPublic() {
        echo 
"Bar::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Bar::testPrivate\n";
    }
}

class 
Foo extends Bar
{
    public function 
testPublic() {
        echo 
"Foo::testPublic\n";
    }
    
    private function 
testPrivate() {
        echo 
"Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

Visibilidad desde otros objetos

Los objetos del mismo tipo tendrán acceso a los miembros private y protected entre ellos aunque no sean de la misma instancia. Esto es porque los detalles específicos de implementación ya se conocen cuando se encuentra dentro de estos objetos.

Ejemplo #3 Accediendo a miembros private del mismo tipo de objeto

<?php
class Test
{
    private 
$foo;

    public function 
__construct($foo)
    {
        
$this->foo $foo;
    }

    private function 
bar()
    {
        echo 
'Método private accedido.';
    }

    public function 
baz(Test $other)
    {
        
// Se puede cambiar la propiedad private:
        
$other->foo 'hola';
        
var_dump($other->foo);

        
// También se puede invocar al método private:
        
$other->bar();
    }
}

$test = new Test('test');

$test->baz(new Test('other'));
?>

El resultado del ejemplo sería:

string(5) "hola"
Método private accedido.


Herencia de Objetos

La herencia es un principio de programación bien establecido y PHP hace uso de él en su modelado de objetos. Este principio afectará la manera en que muchas clases y objetos se relacionan unas con otras.

Por ejemplo, cuando se extiende una clase, la subclase hereda todos los métodos públicos y protegidos de la clase padre. A menos que una clase sobrescriba esos métodos, mantendrán su funcionalidad original.

Esto es útil para la definición y abstracción de la funcionalidad y permite la implementación de funcionalidad adicional en objetos similares sin la necesidad de reimplementar toda la funcionalidad compartida.

Nota:

A menos que la carga automática sea utilizada, entonces las clases deben ser definidas antes de ser usadas. Si una clase se extiende a otra, entonces la clase padre debe ser declarada antes de la estructura de clase hija. Esta regla se aplica a las clases que heredan de otras clases e interfaces.

Ejemplo #1 Ejemplo de herencia

<?php

class foo
{
    public function 
printItem($string)
    {
        echo 
'Foo: ' $string PHP_EOL;
    }
    
    public function 
printPHP()
    {
        echo 
'PHP is great.' PHP_EOL;
    }
}

class 
bar extends foo
{
    public function 
printItem($string)
    {
        echo 
'Bar: ' $string PHP_EOL;
    }
}

$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Salida: 'Foo: baz'
$foo->printPHP();       // Salida: 'PHP is great' 
$bar->printItem('baz'); // Salida: 'Bar: baz'
$bar->printPHP();       // Salida: 'PHP is great'

?>


Operador de Resolución de Ámbito (::)

El Operador de Resolución de Ámbito (también denominado Paamayim Nekudotayim) o en términos simples, el doble dos-puntos, es un token que permite acceder a elementos estáticos, constantes, y sobrescribir propiedades o métodos de una clase.

Cuando se hace referencia a estos items desde el exterior de la definición de la clase, se utiliza el nombre de la clase.

A partir de PHP 5.3.0, es posible hacer referencia a una clase usando una variable. El valor de la variable no puede ser una palabra clave (por ej., self, parent y static).

Paamayim Nekudotayim podría, en un principio, parecer una extraña elección para bautizar a un doble dos-puntos. Sin embargo, mientras se escribía el Zend Engine 0.5 (que utilizó PHP 3), asi es como el equipo Zend decidió bautizarlo. En realidad, significa doble dos-puntos - en Hebreo!

Ejemplo #1 :: desde el exterior de la definición de la clase

<?php
class MyClass {
    const 
CONST_VALUE 'Un valor constante';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE// A partir de PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Las tres palabras claves especiales self, parent y static son utilizadas para acceder a propiedades y métodos desde el interior de la definición de la clase.

Ejemplo #2 :: desde el interior de la definición de la clase

<?php
class OtherClass extends MyClass
{
    public static 
$my_static 'variable estática';

    public static function 
doubleColon() {
        echo 
parent::CONST_VALUE "\n";
        echo 
self::$my_static "\n";
    }
}

$classname 'OtherClass';
echo 
$classname::doubleColon(); // A partir de PHP 5.3.0

OtherClass::doubleColon();
?>

Cuando una clase extendida sobrescribe la definición parent de un método, PHP no invocará al método parent. Depende de la clase extendida el hecho de llamar o no al método parent. Esto también se aplica a definiciones de métodos Constructores y Destructores, Sobrecarga, y Mágicos.

Ejemplo #3 Invocando a un método parent

<?php
class MyClass
{
    protected function 
myFunc() {
        echo 
"MyClass::myFunc()\n";
    }
}

class 
OtherClass extends MyClass
{
    
// Sobrescritura de definición parent
    
public function myFunc()
    {
        
// Pero todavía se puede llamar a la función parent
        
parent::myFunc();
        echo 
"OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>

Véase también algunos ejemplos de trucos de llamadas estáticas .



Palabra Clave Static

Declarar propiedades o métodos de clases como estáticos los hacen accesibles sin necesidad de una instanciación de la clase. Una propiedad declarada como static no puede ser accedida con un objeto de clase instanciado (pero sí se puede con métodos estáticos).

Por motivos de compatibilidad con PHP 4, si no se utiliza ninguna declaración de visibilidad, se tratará a las propiedades o métodos como si hubiesen sido definidos como public.

Debido a que los métodos estáticos se pueden invocar sin tener creada una instancia del objeto, la pseudo-variable $this no está disponible dentro de los métodos declarados como static.

Las propiedades estáticas no pueden ser accedidas a través del objeto utilizando el operador flecha (->).

Invocar métodos no estáticos estáticamente genera un Warning a nivel de E_STRICT.

Como cualquier otra variable estática en PHP, las propiedades estáticas sólo pueden ser inicializadas utilizando una string literal o una constante; las expresiones no están permitidas. Por tanto, puede inicializar una propiedad estática con enteros o arrays (por ejemplo), pero no puede hacerlo con otra variable, con el valor de devolución de una función, o con un objeto.

A partir de PHP 5.3.0, es posible hacer referencia a una clase usando una variable. El valor de la variable no puede ser una palabra clave (por ej., self, parent y static).

Ejemplo #1 Ejemplo de propiedad estática

<?php
class Foo
{
    public static 
$my_static 'foo';

    public function 
staticValue() {
        return 
self::$my_static;
    }
}

class 
Bar extends Foo
{
    public function 
fooStatic() {
        return 
parent::$my_static;
    }
}


print 
Foo::$my_static "\n";

$foo = new Foo();
print 
$foo->staticValue() . "\n";
print 
$foo->my_static "\n";      // Undefined "Property" my_static

print $foo::$my_static "\n";
$classname 'Foo';
print 
$classname::$my_static "\n"// A partir de PHP 5.3.0

print Bar::$my_static "\n";
$bar = new Bar();
print 
$bar->fooStatic() . "\n";
?>

Ejemplo #2 Ejemplo de método estático

<?php
class Foo {
    public static function 
aStaticMethod() {
        
// ...
    
}
}

Foo::aStaticMethod();
$classname 'Foo';
$classname::aStaticMethod(); // A partir de PHP 5.3.0
?>


Abstracción de clases

PHP 5 introduce clases y métodos abstractos. Las clases definidas como abstract seguramente no son instanciadas y cualquier clase que contiene almenos un método abstracto debe ser definida como abstract. Los métodos definidos como abstractos simplemente declaran la estructura del método, pero no pueden definir la implementación.

Cuando se hereda de una clase abstracta, todos los métodos definidos como abstract en la definición de la clase parent deben ser redefinidos en la clase child; adicionalmente, estos métodos deben ser definidos con la misma visibilidad (o con una menos restrictiva). Por ejemplo, si el método abstracto está definido como protected, la implementación de la función puede ser redefinida como protected o public, pero nunca como private. Por otra parte, las estructuras de los métodos tienen que coincidir, es decir, los (type hinting) tipos sugeridos y el número de argumentos requeridos deben ser los mismos. Esto también aplica a los constructores de PHP 5.4. Antes de PHP 5.4 las estructuras del constructor podían ser diferentes.

Ejemplo #1 Ejemplo de clase abstracta

<?php
abstract class AbstractClass
{
    
// Forzando la extensión de clase para definir este método
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Método común
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}

class 
ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class 
ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>

El resultado del ejemplo sería:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Códigos antiguos que no tengan clases o funciones definidas por el usuario llamadas 'abstract' deberían ejecutarse sin modificaciones.



Interfaces de objetos

Las interfaces de objetos permiten crear código con el cual especificamos qué métodos deben ser implementados por una clase, sin tener que definir cómo estos métodos son manipulados.

Las interfaces son definidas utilizando la palabra clave interface, de la misma forma que con clases estándar, pero sin métodos que tengan su contenido definido.

Todos los métodos declarados en una interfaz deben ser public, ya que ésta es la naturaleza de una interfaz.

implements

Para implementar una interfaz, se utiliza el operador implements. Todos los métodos en una interfaz deben ser implementados dentro de la clase; el no cumplir con esta regla resultará en un error fatal. Las clases pueden implementar más de una interfaz si se deseara, separándolas cada una por una coma.

Nota:

Una clase no puede implementar dos interfaces que compartan nombres de funciones, puesto que esto causaría ambigüedad.

Nota:

Las interfaces se pueden extender al igual que las clases utilizando el operador extends.

Nota:

La clase que implemente una interfaz debe utilizar exactamente las mismas estructuras de métodos que fueron definidos en la interfaz. De no cumplir con esta regla, se generará un error fatal.

Constantes

Es posible tener constantes dentro de las interfaces. Las constantes de interfaces funcionan como las constantes de clases excepto porque no pueden ser sobrescritas por una clase/interfaz que las herede.

Ejemplos

Ejemplo #1 Ejemplo de interfaz

<?php

// Declarar la interfaz 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Implementar la interfaz
// Ésto funcionará 
class Template implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
  
    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }
 
        return 
$template;
    }
}
// Ésto no funcionará
// Error fatal: La Clase BadTemplate contiene un método abstracto
// y por lo tanto debe declararse como abstracta (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}
?>

Ejemplo #2 Interfaces extensibles

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}

// Ésto sí funcionará
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Ésto no funcionará y resultará en un error fatal
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Ejemplo #3 Herencia múltiple de interfaces

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Ejemplo #4 Interfaces con constantes

<?php
interface a
{
    const 
'Interface constant';
}

// Imprime: Interface constant
echo a::b;


// Sin embargo ésto no funcionará ya que no está permitido
// sobrescribir constantes
class implements a
{
    const 
'Class constant';
}
?>

Una interfaz, junto con type-hinting, proveen una buena forma de asegurarse que determinado objeto contiene métodos particulares. Vea el operador instanceof y type hinting.



Traits

Desde PHP 5.4.0, PHP implementa una metodología de reutilización de código llamada Traits.

Los traits (rasgos) son un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP. El objetivo de un trait es el de reducir las limitaciones propias de la herencia simple permitiendo que los desarrolladores reutilicen a voluntad conjuntos de métodos sobre varias clases independientes y pertenecientes a clases jerárquicas distintas. La semántica a la hora combinar Traits y clases se define de tal manera que reduzca su complejidad y se eviten los problemas típicos asociados a la herencia múltiple y a los Mixins.

Un Trait es similar a una clase, pero con el único objetivo de agrupar funcionalidades muy específicas y de una manera coherente. No se puede instanciar directamente un Trait. Es por tanto un añadido a la herencia tradicional, y habilita la composición horizontal de comportamientos; es decir, permite combinar miembros de clases sin tener que usar herencia.

Ejemplo #1 Ejemplo de Trait

<?php
trait ezcReflectionReturnInfo 
{
    function 
getReturnType() { /*1*/ }
    function 
getReturnDescription() { /*2*/ }
}

class 
ezcReflectionMethod extends ReflectionMethod {
    use 
ezcReflectionReturnInfo;
    
/* ... */
}

class 
ezcReflectionFunction extends ReflectionFunction {
    use 
ezcReflectionReturnInfo;
    
/* ... */
}
?>

Precedencia

Los miembros heredados de una clase base se sobrescriben cuando se inserta otro miembro homónimo desde un Trait. De acuerdo con el orden de precedencia, los miembros de la clase actual sobrescriben los métodos del Trait, que a su vez sobrescribe los métodos heredados.

Ejemplo #2 Ejemplo de Orden de Precedencia

Se sobrescribe un miembro de la clase base con el método insertado en MiHolaMundo a partir del Trait DecirMundo. El comportamiento es el mismo para los métodos definidos en la clase MiHolaMundo. Según el orden de precedencia los métodos de la clase actual sobrescriben los métodos del Trait, a la vez que el Trait sobrescribe los métodos de la clase base.

<?php
class Base {
    public function 
decirHola() {
        echo 
'¡Hola ';
    }
}

trait DecirMundo {
    public function 
decirHola() {
        
parent::decirHola();
        echo 
'Mundo!';
    }
}

class 
MiHolaMundo extends Base {
    use 
DecirMundo;
}

$o = new MiHolaMundo();
$o->decirHola();
?>

El resultado del ejemplo sería:

¡Hola Mundo!

Ejemplo #3 Ejemplo de Orden de Precedencia #2

<?php
trait HolaMundo 
{
    public function 
decirHola() {
        echo 
'¡Hola Mundo!';
    }
}

class 
ElMundoNoEsSuficiente {
    use 
HolaMundo;
    public function 
decirHola() {
        echo 
'¡Hola Universo!';
    }
}

$o = new ElMundoNoEsSuficiente();
$o->decirHola();
?>

El resultado del ejemplo sería:

¡Hola Universo!

Multiples Traits

Se pueden insertar múltiples Traits en una clase, mediante una lista separada por comas en la sentencia use.

Ejemplo #4 Uso de Múltiples Traits

<?php
trait Hola 
{
    public function 
decirHola() {
        echo 
'Hola ';
    }
}

trait Mundo {
    public function 
decirMundo() {
        echo 
'Mundo';
    }
}

class 
MiHolaMundo {
    use 
HolaMundo;
    public function 
decirAdmiración() {
        echo 
'!';
    }
}

$o = new MiHolaMundo();
$o->decirHola();
$o->decirMundo();
$o->decirAdmiración();
?>

El resultado del ejemplo sería:

Hola Mundo!

Resolución de Conflictos

Si dos Traits insertan un método con el mismo nombre, se produce un error fatal, siempre y cuando no se haya resuelto explicitamente el conflicto.

Para resolver los conflictos de nombres entre Traits en una misma clase, se debe usar el operador insteadof para elejir unívocamente uno de los métodos conflictivos.

Como esto sólo permite excluir métodos, se puede usar el operador as para permitir incluir uno de los métodos conflictivos bajo otro nombre.

Ejemplo #5 Resolución de Conflictos

En este ejemplo, Talker utiliza los traits A y B. Como A y B tienen métodos conflictos, se define el uso de la variante de smallTalk del trait B, y la variante de bigTalk del traita A.

Aliased_Talker hace uso del operador as para poder usar la implementación de bigTalk de B, bajo el alias adicional talk.

<?php
trait A 
{
    public function 
smallTalk() {
        echo 
'a';
    }
    public function 
bigTalk() {
        echo 
'A';
    }
}

trait B {
    public function 
smallTalk() {
        echo 
'b';
    }
    public function 
bigTalk() {
        echo 
'B';
    }
}

class 
Talker {
    use 
A{
        
B::smallTalk insteadof A;
        
A::bigTalk insteadof B;
    }
}

class 
Aliased_Talker {
    use 
A{
        
B::smallTalk insteadof A;
        
A::bigTalk insteadof B;
        
B::bigTalk as talk;
    }
}
?>

Modificando la Visibilidad de los Métodos

Al usar el operador as, se puede también ajustar la visibilidad del método en la clase exhibida.

Ejemplo #6 Modificar la Visibilidad de un Método

<?php
trait HolaMundo 
{
    public function 
decirHola() {
        echo 
'Hola Mundo!';
    }
}

// Cambiamos visibilidad de decirHola
class MiClase1 {
    use 
HolaMundo decirHola as protected }
}

// Método alias con visibilidad cambiada
// La visibilidad de decirHola no cambia
class MiClase2 {
  use 
HolaMundo hacerHolaMundo as private decirHola }
}
?>

Traits Compuestos de Traits

Al igual que las clases, los Traits también pueden hacer uso de otros Traits. Al usar uno o más traits en la definición de un trait, éste puede componerse parcial o completamente de miembros de finidos en esos otros traits.

Ejemplo #7 Traits Compuestos de Traits

<?php
trait Hola 
{
    public function 
decirHola() {
        echo 
'Hola ';
    }
}

trait Mundo {
    public function 
decirMundo() {
        echo 
'Mundo!';
    }
}

trait HolaMundo {
    use 
HolaMundo;
}

class 
MiHolaMundo {
    use 
HolaMundo;
}

$o = new MiHolaMundo();
$o->decirHola();
$o->decirMundo();
?>

El resultado del ejemplo sería:

Hola Mundo!

Miembros Abstractos de Traits

Los traits soportan el uso de métodos abstractos para imponer requisitos a la clase a la que se exhiban.

Ejemplo #8 Expresar Resquisitos con Métodos Abstractos

<?php
trait Hola 
{
    public function 
decirHolaMundo() {
        echo 
'Hola'.$this->obtenerMundo();
    }
    abstract public function 
obtenerMundo();
}

class 
MiHolaMundo {
    private 
$mundo;
    use 
Hola;
    public function 
obtenerMundo() {
        return 
$this->mundo;
    }
    public function 
asignarMundo($val) {
        
$this->mundo $val;
    }
}
?>

Miembros Estáticos en Traits

Los métodos de un trait pueden referenciar a variables estáticas, pero no puede ser definido en el trait. Los traits, sin embargo, pueden definir método estáticos a la clase a la que se exhiben.

Ejemplo #9 Variables estáticas

<?php
trait Contador 
{
    public function 
inc() {
        static 
$c 0;
        
$c $c 1;
        echo 
"$c\n";
    }
}

class 
C1 {
    use 
Contador;
}

class 
C2 {
    use 
Contador;
}

$o = new C1(); $o->inc(); // echo 1
$p = new C2(); $p->inc(); // echo 1
?>

Ejemplo #10 Métodos Estáticos

<?php
trait EjemploEstatico 
{
    public static function 
hacerAlgo() {
        return 
'Hacer algo';
    }
}

class 
Ejemplo {
    use 
EjemploEstatico;
}

Ejemplo::hacerAlgo();
?>

Propiedades

Los traits también pueden definir propiedades.

Ejemplo #11 Definir Propiedades

<?php
trait PropiedadesTrait 
{
    public 
$x 1;
}

class 
EjemploPropiedades {
    use 
PropiedadesTrait;
}

$ejemplo = new EjemploPropiedades;
$ejemplo->x;
?>

Si un trait define una propiedad una clase no puede definir una propiedad con el mismo nombre, si no se emitirá un error.Éste de tipo E_STRICT si la definición de la clase es compatible (misma visibilidad y valor inicial) o de otro modo un error fatal.

Ejemplo #12 Resolución de Conflictos

<?php
trait PropiedadesTrait 
{
    public 
$misma true;
    public 
$diferente false;
}

class 
EjemploPropiedades {
    use 
PropiedadesTrait;
    public 
$misma true// Estándares estrictos
    
public $diferente true// Error fatal
}
?>


Sobrecarga

La sobrecarga en PHP ofrece los medios para "crear" dinámicamente propiedades y métodos. Estas entidades dinámicas se procesan por los métodos mágicos que se pueden establecer en una clase para diversas acciones.

Se invoca a los métodos de sobrecarga cuando se interactúa con propiedades o métodos que no se han declarado o que no son visibles en el ámbito activo. A lo largo de esta sección usaremos los términos "propiedades inaccesibles" y "métodos inaccesibles" para referirnos a esta combinación de declaración y visibilidad.

Todos los métodos sobrecargados deben definirse como public.

Nota:

No se puede pasar ninguno de los parámetros de estos métodos mágicos por referencia.

Nota:

La interpretación de PHP de "overloading" es distinta de la mayoría de los lenguajes orientados a objetos. La sobrecarga tradicionalmente ofrece la capacidad de tener múltiples métodos con el mismo nombre, pero con un tipo o un número distinto de parámetros.

Historial de cambios

Versión Descripción
5.3.0 Se añade __callStatic. Se añadieron advertencias para hacer cumplir la visibilidad public e impedir la declaración static.
5.1.0 Añadidos los métodos __isset y __unset.

Sobrecarga de propiedades

public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )

__set() se ejecuta al escribir datos sobre propiedades inaccesibles.

__get() se utiliza para consultar datos a partir de propiedades inaccesibles.

__isset() se lanza al llamar a isset() o a empty() sobre propiedades inaccesibles.

__unset() se invoca cuando se usa unset() sobre propiedades inaccesibles.

El parámetro $name es el nombre de la propiedad con la que se está interactuando. En el método __set() el parámetro $value especifica el valor que se debe asignar a la propiedad $name.

La sobrecarga de propiedades sólo funciona en contextos de objetos. Estos métodos mágicos no se lanzarán en contextos estáticos. Por esa razón, no se deben declarar como estáticos. Desde PHP 5.3.0, se emite un aviso si alguno de los métodos de sobrecarga es declarado como static.

Nota:

Debido a la forma en que PHP procesa el operador de asignación, el valor que devuelve __set() se ignora. Del mismo modo, nunca se llama a __get() al encadenar asignaciones como ésta:

 $a = $obj->b = 8; 

Nota:

No se puede utilizar una propiedad sobrecargada en ninguna construcción del lenguaje que no sea isset(). Esto significa que si se invoca a empty() en una propiedad sobrecargada, no se llamará al método de sobrecarga.

Para solventar esta limitación, se debe copiar la propiedad sobrecargada en una variable de ámbito local que empty() pueda manejar.

Ejemplo #1 Sobrecarga de propiedades mediante los métodos __get(), __set(), __isset() y __unset()

<?php
class PropertyTest
{
    
/**  Localización de los datos sobrecargados.  */
    
private $data = array();

    
/**  La sobrecarga no se usa en propiedades declaradas.  */
    
public $declared 1;

    
/**  La sobre carga sólo funciona aquí al acceder desde fuera de la clase.  */
    
private $hidden 2;

    public function 
__set($name$value)
    {
        echo 
"Estableciendo '$name' a '$value'\n";
        
$this->data[$name] = $value;
    }

    public function 
__get($name)
    {
        echo 
"Consultando '$name'\n";
        if (
array_key_exists($name$this->data)) {
            return 
$this->data[$name];
        }

        
$trace debug_backtrace();
        
trigger_error(
            
'Propiedad indefinida mediante __get(): ' $name .
            
' en ' $trace[0]['file'] .
            
' en la línea ' $trace[0]['line'],
            
E_USER_NOTICE);
        return 
null;
    }

    
/**  Desde PHP 5.1.0  */
    
public function __isset($name)
    {
        echo 
"¿Está definido '$name'?\n";
        return isset(
$this->data[$name]);
    }

    
/**  Desde PHP 5.1.0  */
    
public function __unset($name)
    {
        echo 
"Eliminando '$name'\n";
        unset(
$this->data[$name]);
    }

    
/**  No es un método mágico, esta aquí para completar el ejemplo.  */
    
public function getHidden()
    {
        return 
$this->hidden;
    }
}


echo 
"<pre>\n";

$obj = new PropertyTest;

$obj->1;
echo 
$obj->"\n\n";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"\n";

echo 
$obj->declared "\n\n";

echo 
"Vamos a probar con la propiedad privada que se llama 'hidden':\n";
echo 
"Las propiedades privadas pueden consultarse en la clase, por lo que no se usa __get()...\n";
echo 
$obj->getHidden() . "\n";
echo 
"Las propiedades privadas no son visibles fuera de la clase, por lo que se usa __get()...\n";
echo 
$obj->hidden "\n";
?>

El resultado del ejemplo sería:

Estableciendo 'a' a '1'
Consultando 'a'
1

¿Está definido 'a'?
bool(true)
Eliminando 'a'
¿Está definido 'a'?
bool(false)

1

Vamos a probar con la propiedad privada que se llama 'hidden':
Las propiedades privadas pueden consultarse en la clase, por lo que no se usa __get()...
2
Las propiedades privadas no son visibles fuera de la clase, por lo que se usa __get()...
Consultando 'hidden'


Notice:  Propiedad indefinida mediante __get(): hidden en <file> en la línea 69 in <file>en la línea 28

Sobrecarga de métodos

public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )

__call() es lanzado al invocar un método inaccesible en un contexto de objeto.

__callStatic() es lanzado al invocar un método inaccesible en un contexto estático.

El parámetro $name corresponde al nombre del método al que se está llamando. El parámetro $arguments es un array enumerado que contiene los parámetros que se han pasado al método $name.

Ejemplo #2 Sobrecarga de métodos mediante los métodos __call() and __callStatic()

<?php
class MethodTest
{
    public function 
__call($name$arguments)
    {
        
// Nota: el valor $name es sensible a mayúsculas.
        
echo "Llamando al método de objeto '$name' "
             
implode(', '$arguments). "\n";
    }

    
/**  Desde PHP 5.3.0  */
    
public static function __callStatic($name$arguments)
    {
        
// Nota: el valor $name es sensible a mayúsculas.
        
echo "Llamando al método estático '$name' "
             
implode(', '$arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('en contexto de objeto');

MethodTest::runTest('en contexto estático');  // Desde PHP 5.3.0
?>

El resultado del ejemplo sería:

Llamando al método de objeto 'runTest' en contexto de objeto
Llamando al método estático 'runTest' en contexto estático


Iteración de objetos

PHP 5 ofrece una manera para que los objetos sean definidos por lo que es posible iterar a través de una lista de elementos, con, por ejemplo, una sentencia foreach. Por defecto, todas las propiedades visibles serán utilizados para la iteración.

Ejemplo #1 Iteración simple de objeto

<?php
class MyClass
{
    public 
$var1 'value 1';
    public 
$var2 'value 2';
    public 
$var3 'value 3';

    protected 
$protected 'protected var';
    private   
$private   'private var';

    function 
iterateVisible() {
       echo 
"MyClass::iterateVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

?>

El resultado del ejemplo sería:

var1 => value 1
var2 => value 2
var3 => value 3

MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var

Como se muestra en la salida, el foreach itera a través de todas las propiedades visibles que se puedan acceder.

Para dar un paso más, se puede implementar la interfaz Iterator. Esto permite al objeto decidir cómo será iterado y qué valores estarán disponibles en cada iteración.

Ejemplo #2 Iteración de objeto implementando Iterator

<?php
class MyIterator implements Iterator
{
    private 
$var = array();
    
    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind()
    {
        echo 
"rewinding\n";
        
reset($this->var);
    }

    public function 
current()
    {
        
$var current($this->var);
        echo 
"current: $var\n";
        return 
$var;
    }

    public function 
key()
    {
        
$var key($this->var);
        echo 
"key: $var\n";
        return 
$var;
    }

    public function 
next()
    {
        
$var next($this->var);
        echo 
"next: $var\n";
        return 
$var;
    }

    public function 
valid()
    {
        
$key key($this->var);
        
$var = ($key !== NULL && $key !== FALSE);
        echo 
"valid: $var\n";
        return 
$var;
    }

}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

El resultado del ejemplo sería:

rewinding
valid: 1
current: 1
key: 0
0: 1
next: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
valid: 1
current: 3
key: 2
2: 3
next:
valid:

La interface IteratorAggregate se puede usar como alternativa para implementar todos los métodos de Iterator. IteratorAggregate solamente requiere la implementación de un único método, IteratorAggregate::getIterator(), el cual debería devolver una instancia de una clase que implemente Iterator.

Ejemplo #3 Iteración de objeto implementando IteratorAggregate

<?php
class MyCollection implements IteratorAggregate
{
    private 
$items = array();
    private 
$count 0;

    
// Se requiere la definición de la interfaz IteratorAggregate
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

    public function 
add($value) {
        
$this->items[$this->count++] = $value;
    }
}

$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');

foreach (
$coll as $key => $val) {
    echo 
"key/value: [$key -> $val]\n\n";
}
?>

El resultado del ejemplo sería:

rewinding
current: value 1
valid: 1
current: value 1
key: 0
key/value: [0 -> value 1]

next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]

next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]

next:
current:
valid:

Nota:

Para más ejemplos de iteradores, vea la extensión SPL.



Métodos mágicos

Los nombres de método __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() y __clone() son mágicos en las clases PHP. No se puede tener métodos con estos nombres en cualquiera de las clases a menos que desee la funcionalidad mágica asociada a estos.

Precaución

PHP se reserva todos los nombres de los métodos que comienzan con __ como mágicos. Se recomienda que no utilice los nombres de métodos con __ en PHP a menos que desee alguna funcionalidad mágica documentada.

__sleep() y __wakeup()

public array __sleep ( void )
void __wakeup ( void )

serialize() comprueba si la clase tiene un método con el nombre mágico __sleep(). Si es así, el método se ejecuta antes de cualquier serialización. Se puede limpiar el objeto y se supone que devuelve un array con los nombres de todas las variables de el objeto que se va a serializar. Si el método no devuelve nada, entonces NULL es serializado y un error E_NOTICE es emitido.

Nota:

No es posible para __sleep() devolver nombres de propiedades privadas en las clases padres. Hacer esto resultaría un nivel de error E_NOTICE. En su lugar, puede utilizar la interfaz Serializable.

El uso para el que está destinado __sleep() consiste en confirmar datos pendientes o realizar tareas similares de limpieza. Además, el método es útil si tiene objetos muy grandes que no necesitan guardarse por completo.

Por el contrario, unserialize() comprueba la presencia de un método con el nombre mágico __wakeup(). Si está presente, este método puede reconstruir cualquier recurso que el objeto pueda tener.

El uso para el que está destinado __wakeup() es restablecer las conexiones de base de datos que se puedan haber perdido durante la serialización y realizar otras tareas de reinicialización.

Ejemplo #1 Sleep y wakeup

<?php
class Connection
{
    protected 
$link;
    private 
$server$username$password$db;
    
    public function 
__construct($server$username$password$db)
    {
        
$this->server $server;
        
$this->username $username;
        
$this->password $password;
        
$this->db $db;
        
$this->connect();
    }
    
    private function 
connect()
    {
        
$this->link mysql_connect($this->server$this->username$this->password);
        
mysql_select_db($this->db$this->link);
    }
    
    public function 
__sleep()
    {
        return array(
'server''username''password''db');
    }
    
    public function 
__wakeup()
    {
        
$this->connect();
    }
}
?>

__toString()

public string __toString ( void )

El método __toString() permite a una clase decidir cómo comportarse cuando se le trata como un string. Por ejemplo, lo que echo $obj; mostraría. Este método debe devolver un string, si no se emitirá un nivel de error fatal E_RECOVERABLE_ERROR.

Ejemplo #2 Ejemplo simple

<?php
// Declarar una clase simple
class TestClass
{
    public 
$foo;

    public function 
__construct($foo)
    {
        
$this->foo $foo;
    }

    public function 
__toString()
    {
        return 
$this->foo;
    }
}

$class = new TestClass('Hola Mundo');
echo 
$class;
?>

El resultado del ejemplo sería:

Hola Mundo

Antes de PHP 5.2.0 el método __toString() se llama sólo cuando se combina directamente con echo o print. Desde PHP 5.2.0, se le llama en cualquier contexto de string (e.j. en printf() con el modificador %s) pero no en el contexto de otros tipos (e.j. con el modificador %d). Desde PHP 5.2.0, la conversión de los objetos sin el método __toString() a string podría causar E_RECOVERABLE_ERROR.

__invoke()

mixed __invoke ([ $... ] )

El método __invoke() es llamado cuando un script intenta llamar a un objeto como si fuera una función.

Nota:

Esta característica está disponible desde PHP 5.3.0.

Ejemplo #3 Uso de __invoke()

<?php
class CallableClass
{
    public function 
__invoke($x)
    {
        
var_dump($x);
    }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>

El resultado del ejemplo sería:

int(5)
bool(true)

__set_state()

static object __set_state ( array $properties )

Este método static es llamado para las clases exportadas por var_export(), desde PHP 5.1.0.

El único parámetro de este método es un array que contiene las propiedades exportadas en la forma array('property' => value, ...).

Ejemplo #4 Uso de __set_state() (desde PHP 5.1.0)

<?php

class A
{
    public 
$var1;
    public 
$var2;

    public static function 
__set_state($an_array// A partir de PHP 5.1.0
    
{
        
$obj = new A;
        
$obj->var1 $an_array['var1'];
        
$obj->var2 $an_array['var2'];
        return 
$obj;
    }
}

$a = new A;
$a->var1 5;
$a->var2 'foo';

eval(
'$b = ' var_export($atrue) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

El resultado del ejemplo sería:

object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}


Palabra clave Final

PHP 5 introduce la nueva palabra clave final, que impide que las clases hijas sobrescriban un método, antecediendo su definición con la palabra final. Si la propia clase se define como final, entonces no se podrá heredar de ella.

Ejemplo #1 Ejemplo de métodos Final

<?php
class BaseClass {
   public function 
test() {
       echo 
"llamada a BaseClass::test()\n";
   }
   
   final public function 
moreTesting() {
       echo 
"llamada a BaseClass::moreTesting()\n";
   }
}

class 
ChildClass extends BaseClass {
   public function 
moreTesting() {
       echo 
"llamada a ChildClass::moreTesting()\n";
   }
}
// Devuelve un error Fatal: Cannot override final method BaseClass::moreTesting()
?>

Ejemplo #2 Ejemplo de clase Final

<?php
final class BaseClass {
   public function 
test() {
       echo 
"llamada a BaseClass::test()\n";
   }

   
// Aquí no importa si definimos una función como final o no
   
final public function moreTesting() {
       echo 
"llamada a BaseClass::moreTesting()\n";
   }
}

class 
ChildClass extends BaseClass {
}
// Devuelve un error Fatal: Class ChildClass may not inherit from final class (BaseClass)
?>

Nota: Las propiedades no pueden declararse como final. Sólo pueden las clases y los métodos.



Clonación de Objetos

No siempre se desea crear una copia de un objeto replicando todas sus propiedades completamente. Un buen ejemplo que ilustra la necesidad de contar con un constructor de copias, sería si tuviéramos un objeto que represente una ventana en GTK y el objeto almacene los recursos de esta ventana GTK, de forma que cuando creas un duplicado el comportamiento esperado sería una nueva ventana con las mismas propiedades, y que el nuevo objeto referencie a los recursos de la nueva ventana. Otro ejemplo es si un objeto hace referencia a otro objeto necesario, de forma que cuando se realiza una réplica del objeto principal, se espera que se cree una nueva instancia de este otro objeto, de forma que la réplica tenga su propia copia

Para crear una copia de un objeto se utiliza la palabra clave clone (que invoca, si fuera posible, al método __clone() del objeto). No se puede llamar al método __clone() de un objeto directamente.

$copia_de_objeto = clone $objeto;

Cuando se clona un objeto, PHP5 llevará a cabo una copia superficial de las propiedades del objeto. Las propiedades que sean referencias a otras variables, mantendrán las referencias.

void __clone ( void )

Una vez que la clonación ha finalizado, se llamará al método __clone() del nuevo objeto (si el método __clone() estuviera definido), para permitirle realizar los cambios necesarios sobre sus propiedades.

Ejemplo #1 Clonación de un objeto

<?php
class SubObject
{
    static 
$instances 0;
    public 
$instance;

    public function 
__construct() {
        
$this->instance = ++self::$instances;
    }

    public function 
__clone() {
        
$this->instance = ++self::$instances;
    }
}

class 
MyCloneable
{
    public 
$object1;
    public 
$object2;

    function 
__clone()
    {
        
// Forzamos la copia de this->object, si no
        // hará referencia al mismo objeto.
        
$this->object1 = clone $this->object1;
    }
}

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Objeto Original:\n");
print_r($obj);

print(
"Objeto Clonado:\n");
print_r($obj2);

?>

El resultado del ejemplo sería:

Objeto Original:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Objeto Clonado:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)


Comparación de Objetos

En PHP 5, la comparación de objetos es más complicada que en PHP 4, y en mayor concordancia con lo que cabe esperar de un Lenguaje Orientado a Objetos (tenga en cuenta que PHP lo es).

Al utilizar el operador de comparación (==), se comparan de una forma sencilla las variables de cada objeto, es decir: Dos instancias de un objeto son iguales si tienen los mismos atributos y valores, y son instancias de la misma clase.

Por otra parte, cuando se utiliza el operador identidad (===), las variables de un objeto son idénticas sí y sólo sí hacen referencia a la misma instancia de la misma clase.

Un ejemplo aclarará estas reglas.

Ejemplo #1 Ejemplo de comparación de objetos en PHP 5

<?php
function bool2str($bool)
{
    if (
$bool === false) {
        return 
'FALSO';
    } else {
        return 
'VERDADERO';
    }
}

function 
compararObjetos(&$o1, &$o2)
{
    echo 
'o1 == o2 : ' bool2str($o1 == $o2) . "\n";
    echo 
'o1 != o2 : ' bool2str($o1 != $o2) . "\n";
    echo 
'o1 === o2 : ' bool2str($o1 === $o2) . "\n";
    echo 
'o1 !== o2 : ' bool2str($o1 !== $o2) . "\n";
}

class 
Bandera
{
    public 
$bandera;

    function 
Bandera($bandera true) {
        
$this->bandera $bandera;
    }
}

class 
OtraBandera
{
    public 
$bandera;

    function 
OtraBandera($bandera true) {
        
$this->bandera $bandera;
    }
}

$o = new Bandera();
$p = new Bandera();
$q $o;
$r = new OtraBandera();

echo 
"Dos instancias de la misma clase\n";
compararObjetos($o$p);

echo 
"\nDos referencias a la misma instancia\n";
compararObjetos($o$q);

echo 
"\nInstancias de dos clases diferentes\n";
compararObjetos($o$r);
?>

El resultado del ejemplo sería:

Dos instancias de la misma clase
o1 == o2 : VERDADERO
o1 != o2 : FALSO
o1 === o2 : FALSO
o1 !== o2 : VERDADERO

Dos referencias a la misma instancia
o1 == o2 : VERDADERO
o1 != o2 : FALSO
o1 === o2 : VERDADERO
o1 !== o2 : FALSO

Instancias de dos clases diferentes
o1 == o2 : FALSO
o1 != o2 : VERDADERO
o1 === o2 : FALSO
o1 !== o2 : VERDADERO

Nota:

Las extensiones pueden definir sus propias reglas para la comparación de sus objetos.



Implicación de Tipos

Desde PHP 5 se incorpora la implicación de tipos. Ahora, las funciones pueden obligar a que sus parámetros sean objetos (especificando el nombre de la clase en el prototipo de la función), interfaces, arrays (desde PHP 5.1) o tipos callable (despe PHP 5.4). Sin embargo, si se usa NULL como el valor predeterminado del parámetro, será permitido como un argumento para llamada posterior.

Si se especifica una clase o una interfaz como tipo implicado también se permitirán todos sus hijos o implementaciones too.

La implicación de tipos no puede usarse con tipos escalares como int o string. Tampoco están permitidos los Traits.

Ejemplo #1 Ejemplos de Implicación de Tipos

<?php
// Una clase de ejemplo
class MiClase
{
    
/**
     * Una función de prueba 
     *
     * El primer parámetro debe ser un objeto del tipo OtraClase
     */
    
public function prueba(OtraClase $otraclase) {
        echo 
$otraclase->var;
    }


    
/**
     * Otra función de prueba
     *
     * El primer parámetro debe ser un array
     */
    
public function prueba_array(array $array_entrada) {
        
print_r($array_entrada);
    }

    
/**
     * El primer parámetro debe ser un iterador
     */
    
public function prueba_interface(Traversable $iterador) {
        echo 
get_class($iterador);
    }
    
    
/**
     * El primer parámetro debe ser de tipo callable
     */
    
public function prueba_callable(callable $callback$data) {
        
call_user_func($callback$data);
    }
}

// Otra clase de ejemplo
class OtraClase {
    public 
$var 'Hola Mundo';
}
?>

Si no se satisface el type hint, se produce un error fatal capturable

<?php
// Una instancia de cada clase
$miclase = new MiClase;
$otraclase = new OtraClase;

// Error Fatal: El argumento 1 debe ser un objeto de la clase OtraClase
$miclase->prueba('hola');

// Error Fatal: El argumento 1 debe ser una instancia de OtraClase
$foo = new stdClass;
$miclase->prueba($foo);

// Error fatal: El argumento 1 no puede ser null
$miclase->prueba(null);

// Funciona: Imprime en pantalla Hola Mundo
$miclase->prueba($otraclase);

// Error Fatal: El argumento 1 debe ser un array
$miclase->prueba('una cadena');

// Funciona: Imprime en pantalla el array
$miclase->prueba(array('a''b''c'));

// Funciona: Imprime en pantalla ArrayObject
$miclase->prueba_interface(new ArrayObject(array()));

// Funciona: Imprime en pantalla int(1)
$miclase->prueba_callable('var_dump'1);
?>

Los tipos sugeridos tambíen se pueden usar con funciones:

<?php
// Una clase de ejemplo
class MiClase {
    public 
$var 'Hola Mundo';
}

/**
 * Una función de prueba
 *
 * El primer parámetro debe ser un objeto del tipo MiClase
 */
function miFunción (MiClase $foo) {
    echo 
$foo->var;
}

// Funciona
$miclase = new MiClase;
miFunción($miclase);
?>

Tipo implicado que acepta valores de tipo NULL:

<?php

/* Se acepta el valor NULL */
function prueba(stdClass $obj NULL) {

}

prueba(NULL);
prueba(new stdClass);

?>


Enlace estático en tiempo de ejecución

Desde PHP 5.3.0, PHP incorpora una nueva funcionalidad llamada enlace estático en tiempo de ejecución que permite hacer referencias a la clase en uso dentro de un contexto de herencia estática.

De forma más precisa, un enlace estático en tiempo de ejecución para funcionar almacena el nombre de clase de la última llamada que no tenga "propagación". En el caso de las llamadas a métodos estáticos, se trata de la clase a la que se llamó explícitamente (normalmente, la que precede al operador ::); en los casos de llamadas a métodos que no son estáticos, se resolvería a la clase del objeto. Una "llamada con propagación" es una llamada estática que está precedida por self::, parent::, static::, o, si seguimos la jerarquía de clases, forward_static_call(). La función get_called_class() puede utilizarse para obtener un string con el nombre de la clase que realiza la llamada, y static:: revela cuál es su alcance.

Se le ha llamado "enlace estático en tiempo de ejecución" teniendo en cuenta un punto de vista interno. "Enlace en tiempo de ejecución" viene del hecho de que static:: ya resuelve a la clase en la que se definió el método, sino que en su lugar se resolverá utilizando información en tiempo de ejecución debido a que se puede utilizar (entre otras cosas) para las llamadas de métodos estáticos, se le llamó también "enlace estático".

Limitaciones de self::

Las referencias estáticas que hay dentro de la clase en uso, como self:: o __CLASS__, se resuelven empleando el nombre de la clase a la que pertenece la función:

Ejemplo #1 Uso de self::

<?php
class {
    public static function 
who() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        
self::who();
    }
}

class 
extends {
    public static function 
who() {
        echo 
__CLASS__;
    }
}

B::test();
?>

El resultado del ejemplo sería:

A

Uso de Enlace Estático en Tiempo de ejecución

Los enlaces estáticos en tiempo de ejecución tratan de resolver estas limitaciones empleando una palabra clave que haga referencia a la clase que realizó la llamada en tiempo de ejecución. Es decir, una palabra clave que en el ejemplo anterior permita hacer referencia desde test() a B. Se decidió no crear una nueva palabra clave, por lo que en su lugar se ha utilizado la palabra reservada static.

Ejemplo #2 Uso básico de static::

<?php
class {
    public static function 
who() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        static::
who(); // He aquí el enlace estático en tiempo de ejecución
    
}
}

class 
extends {
    public static function 
who() {
        echo 
__CLASS__;
    }
}

B::test();
?>

El resultado del ejemplo sería:

B

Nota:

En contextos no estáticos, la clase que realiza la llamada será la clase del objeto instanciado. Dado que $this-> tratará de invocar métodos privados en su mismo ámbito, el uso de static:: puede provocar diferents resultados. Otra diferencia es que static:: sólo puede hacer referencia a propiedades estáticas.

Ejemplo #3 Uso de static:: en un contexto no estático

<?php
class {
    private function 
foo() {
        echo 
"exito!\n";
    }
    public function 
test() {
        
$this->foo();
        static::
foo();
    }
}

class 
extends {
   
/* foo() se copiará en B, por lo tanto su ámbito seguirá siendo A
    * y la llamada tendrá éxito */
}

class 
extends {
    private function 
foo() {
        
/* se reemplaza el método original; el ámbito del nuevo es ahora C */
    
}
}

$b = new B();
$b->test();
$c = new C();
$c->test();   //falla
?>

El resultado del ejemplo sería:

exito!
exito!
exito!


Fatal error:  Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

Nota:

En una llamada que se resuelva como estática, la resolución de enlaces estáticos en tiempo de ejecución se dentendrá sin propagarse. Por otra parte, las llamadas estáticas que utilicen palabras clave como parent:: o self:: sí propagarán la información.

Ejemplo #4 Llamadas que propagan y que no propagan

<?php
class {
    public static function 
foo() {
        static::
who();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}

class 
extends {
    public static function 
test() {
        
A::foo();
        
parent::foo();
        
self::foo();
    }

    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}
class 
extends {
    public static function 
who() {
        echo 
__CLASS__."\n";
    }
}

C::test();
?>

El resultado del ejemplo sería:

A
C
C



Objetos y referencias

Uno de los puntos clave de la POO de PHP 5 que a menudo se menciona es que "por omisión los objetos se pasan por referencia". Esto no es completamente cierto. Esta sección rectifica esa creencia general, usando algunos ejemplos.

Una referencia en PHP es un alias, que permite a dos variables diferentes escribir sobre un mismo valor. Desde PHP 5, una variable de tipo objeto ya no contiene el objeto en sí como valor. Únicamente contiene un identificador del objeto que le permite localizar al objeto real. Cuando se pasa un objeto como parámetro, o se devuelve como retorno, o se asigna a otra variable, las distintas variables no son alias: guardan una copia del identificador, que apunta al mismo objeto.

Ejemplo #1 Referencias y Objetos

<?php
class {
    public 
$foo 1;
}  

$a = new A;
$b $a;     // $a y $b son copias del mismo identificador
             // ($a) = ($b) = <id>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c y $d son referencias
             // ($c,$d) = <id>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <id>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

El resultado del ejemplo sería:

2
2
2


Serialización de objetos

serialización de objetos - objetos en sesiones

La función serialize() devuelve un string que contiene un flujo de bytes que representa cualquier valor que se pueda almacenar en PHP. Por otra parte, unserialize() puede restaurar los valores originales a partir de dicho string. Al utilizar serialize para guardar un objeto, almacenará todas las variables de dicho objeto. En cambio los métodos no se guardarán, sólo el nombre de la clase.

Para poder deserializar (unserialize()) un objeto, debe estar definida la clase de ese objeto. Es decir, si se tiene un objeto de la clase A, y lo serializamos, se obtendrá un string que haga referencia a la clase A y contenga todas las variables que haya en esta clase. Si se desea deseralizar en otro fichero, antes debe estar presente la definición de la clase A. Esto se puede hacer, por ejemplo, escribiendo la definición de la clase A en un fichero, para después o bien incluirlo, o bien hacer uso de la función spl_autoload_register().

<?php
// classa.inc:
  
  
class {
      public 
$one 1;
    
      public function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("classa.inc");
  
  
$a = new A;
  
$s serialize($a);
  
// almacenamos $s en algún lugar en el que page2.php puede encontrarlo.
  
file_put_contents('store'$s);

// page2.php:
  
  // se necesita para que unserialize funcione correctamente.
  
include("classa.inc");

  
$s file_get_contents('store');
  
$a unserialize($s);

  
// now use the function show_one() of the $a object.  
  
$a->show_one();
?>

Si una aplicación está usando sesiones, y utiliza session_register() para registrar objetos, estos objetos se serializarán automáticamente al final de cada página PHP, y se deserializan también automáticamente en cada una de las siguientes peticiones. Esto significa que, una vez que formen parte de la sesión, estos objetos se podrán utilizar en cualquier página de la aplicación. Sin embargo, la función session_register(): ha sido borrada a partir de PHP 5.4.0

Si una aplicación serializa objetos para su uso posterior, se recomienda encarecidamente que se incluya la definición de la clase en toda la aplicación. Si no se hiciera, se deserializaría el objeto sin una definición de clase, lo cual daría como resultado que PHP definiera al objeto con la clase __PHP_Incomplete_Class_Name, que no tiene métodos, haciendo que el objeto no fuera útil.

Por tanto, si en el ejemplo anterior $a se guardara en una sesión mediante session_register("a"), sería necesario incluir el fichero classa.inc en todas las páginas, no sólo en page1.php y page2.php.



Registro de cambios de POO

Aquí se registran los cambios del modelo de POO de PHP 5. Las descripciones y otras notas respecto a estas nuevas funcionalidades están documentadas dentro de la documentación de POO 5.

Versión Descripción
5.4.0 Cambiado: Si una clase abstracta define una firma para el constructor ahora se hará cumplir.
5.3.3 Cambiado: Los métodos con el mismo nombre que el último elemento de un nombre de clase perteneciente a un espacio de nombres ya no serán tratado como un constructor. Este cambio no afecta a las clases que no pertenecen a un espacio de nombres.
5.3.0 Cambiado: Ya no es necesario que los valores por omisión de los métodos de una clase que implemente un interfaz coincidan con los valores por omisión de los prototipos de la interfaz.
5.3.0 Cambiado: Ahora es posible hacer referencia a la clase utilizando una variable (p.ej., echo $nombreclase::constante;). La variable no puede contener como valor una palabra clave (p.ej., self, parent o static).
5.3.0 Cambiado: Se emite un error de nivel E_WARNING si al sobrecargar un método mágico se le declara como estático. Además, hace necesario que tengan visibilidad pública.
5.3.0 Cambiado: Antes de 5.3.0, las excepciones lanzadas en la función __autoload() no podían capturarse en el bloque catch, y provocaban un error fatal. Ahora, las excepciones lanzadas dentro de la función __autoload pueden capturarse en el bloque catch, con una única salvedad. Si se lanza una excepción definida por el usuario, entonces esta excepción debería estar disponible. Se puede utilizar recursivamente la función __autoload para cargar automáticamente la clase de la excepción definida por el usuario.
5.3.0 Añadido: El método __callStatic.
5.3.0 Añadido: Soporte heredoc y nowdoc para constantes de clase y definición de propiedades. Nota: los valores heredoc deben seguir las mismas reglas que las cadenas de dobles comillas (p.ej., no contener variables).
5.3.0 Añadido: Enlaces estáticos en tiempo de ejecución.
5.3.0 Añadido: El método __invoke().
5.2.0 Cambiado: Al método __toString() sólo se le invocaba cuando se le combinaba con echo o con print. Pero ahora, se le invoca en cualquier contexto de strings (p.ej, en printf() con el modificador %s) pero no en contextos de otro tipo (p.ej. con el modificador %d). Desde PHP 5.2.0, convertir objetos a string sin el método __toString emitirá un error de nivel E_RECOVERABLE_ERROR.
5.1.3 Cambiado: En versiones anteriores de PHP 5, se consideraba obsoleto el uso de var y emitía un error de nivel E_STRICT. Ya no está obsoleto, y por tanto no emite el error.
5.1.0 Cambiado: Ahora se invoca al método estático __set_state() en las clases exportadas por var_export().
5.1.0 Añadido: Los métodos __isset() y __unset().




Espacios de Nombres

Tabla de contenidos


Visión general de los espacios de nombres

(PHP 5 >= 5.3.0)

¿Qué son los espacios de nombres? En su definición más amplia los espacios de nombres son una manera de encapsular elementos. Se puede ver como un concepto abstracto en muchos aspectos. Por ejemplo, en cualquier sistema operativo los directorios sirven para agrupar archivos relacionados, y actúan como espacios de nombres para los archivos que hay en ellos. Como ejemplo, el archivo foo.txt puede existir en los directorios /home/greg y /home/otro, pero no pueden existir dos copias de foo.txt en el mismo directorio. Además, para acceder al archivo foo.txt fuera del directorio /home/greg se debe añadir el nombre del directorio delante del nombre del archivo usando el separador de directorios para obtener /home/greg/foo.txt. Este mismo principio se extiende a los espacios de nombres en el mundo de la programación.

En el mundo de PHP, los espacios de nombres están diseñados para solucionar dos problemas que los autores de bibliotecas y aplicaciones se encuentran cuando crean elementos de código reusable tales como clases o funciones:

  1. El conflicto de nombres entre el código que se crea y las clases/funciones/constantes internas de PHP o las clases/funciones/constantes de terceros.
  2. La capacidad de apodar (o abreviar) Nombres_Extra_Largos diseñado para aliviar el problema en primer lugar, mejorando la legibilidad del código fuente.

Los espacios de nombres en PHP proporcionan una manera para agrupar clases, interfaces, funciones y constantes relacionadas. Un ejemplo de la sintaxis de los espacios de nombres de PHP:

Ejemplo #1 Ejemplo de sintaxis de espacios de nombres

<?php
namespace mi\nombre// véase la sección "Definir Espacios de Nombres"

class MiClase {}
function 
mifunción() {}
const 
MICONSTANTE 1;

$a = new MiClase;
$c = new \mi\nombre\MiClase// véase la sección "Espacio Global"

$a strlen('hola'); // véase la sección "Usar espacios de nombres: una alternativa a
                     // funciones/constantes globales"

$d = namespace\MICONSTANTE// véase la sección "El operador namespace y
                            // la constante __NAMESPACE__"
$d __NAMESPACE__ '\MICONSTANTE';
echo 
constant($d); // véase la sección "Espacios de Nombres y características dinámicas del lenguaje"
?>

Nota:

Los nombres de espacio de nombres PHP y php, y los nombres compuestos a partir de estos nombres (como PHP\Classes) están reservados para el uso del lenguaje interno y no deben ser utilizados en el código.



Definir espacios de nombres

(PHP 5 >= 5.3.0)

Aunque cualquier código de PHP válido puede estar contenido dentro de un espacio de nombres, sólo son afectados por los espacios de nombres cuatro tipos de código: clases, interfaces, funciones y constantes.

Los espacios de nombres se declaran usando la palabra clave namespace. Un archivo que contiene un espacio de nombres debe declararlo al inicio del archivo, antes que cualquier otro código - con una excepción: la palabra clave declare.

Ejemplo #1 Declarar un único espacio de nombres

<?php
namespace MiProyecto;

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }

?>
La única construcción de código permitida antes de la declaración de un espacio de nombres es la sentencia declare, para declarar la codificación de un archivo fuente. Además, algo que no sea código de PHP no puede preceder a la declaración del espacio de nombres, incluyendo espacios en blanco extra:

Ejemplo #2 Declarar un único espacio de nombres

<html>
<?php
namespace MiProyecto// error fatal - el espacio de nombres debe ser la primera sentencia del script
?>

Además, a diferencia de otras construcciones de PHP, se puede definir el mismo espacio de nombres en múltiples archivos, permitiendo la separación de contenido de espacios de nombres a través del sistema de archivos.



Declarar subespacios de nombres

(PHP 5 >= 5.3.0)

Al igual que los directorios y archivos, los espacios de nombres de PHP también tienen la capacidad de especificar una jerarquía de nombres de espacios de nombres. Así, un nombre de un espacio de nombres se puede definir con subniveles:

Ejemplo #1 Declarar un único espacio de nombres con jerarquía

<?php
namespace MiProyecto\Sub\Nivel;

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }

?>
El ejemplo de arriba crea la constante MiProyecto\Sub\Nivel\CONECTAR_OK, la clase MiProyecto\Sub\Nivel\Conexión y la función MiProyecto\Sub\Nivel\conectar.



Definir múltiples espacios de nombres en el mismo archivo

(PHP 5 >= 5.3.0)

También se pueden declarar múltiples espacios de nombres en el mismo archivo. Hay dos sintaxis permitidas.

Ejemplo #1 Declarar múltiples espacios de nombres, sintaxis de combinación simple

<?php
namespace MiProyecto;

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }

namespace 
OtroProyecto;

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }
?>

No se recomienda esta sintaxis para combinar espacios de nombres en un único archivo. En su lugar se recomienda usar la sintaxis de llaves alternativa.

Ejemplo #2 Declarar múltiples espacios de nombres, sintaxis de llaves

<?php
namespace MiProyecto {

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }
}

namespace 
OtroProyecto {

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }
}
?>

Se desaconseja encarecidamente, como práctica de código, el combinar múltiples espacios de nombres en el mismo archivo. El caso de uso principal es combinar múltiples scripts de PHP en el mismo archivo.

Combinar código global que no es de espacio de nombres con código que sí lo es, sólo está soportado mediante la sintaxis de llaves. El código global debería estar encerrado en una declaración de espacio de nombres sin nombre de espacio de nombres:

Ejemplo #3 Declarar múltiples espacios de nombres y código que no es de espacio de nombres

<?php
namespace MiProyecto {

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }
}

namespace { 
// código global
session_start();
$a MiProyecto\conectar();
echo 
MiProyecto\Conexión::iniciar();
}
?>

No puuede existir código de PHP fuera de las llaves del espacio de nombres excepto para una sentencia de apertura declare.

Ejemplo #4 Declarar múltiples espacios de nombres y código que no es de espacio de nombres

<?php
declare(encoding='UTF-8');
namespace 
MiProyecto {

const 
CONECTAR_OK 1;
class 
Conexión /* ... */ }
function 
conectar() { /* ... */  }
}

namespace { 
// código global
session_start();
$a MiProyecto\conectar();
echo 
MiProyecto\Conexión::iniciar();
}
?>



Usar espacios de nombres: Lo básico

(PHP 5 >= 5.3.0)

Antes de hablar del uso de los espacios de nombres es importante entender cómo sabe PHP qué elemento del código del espacio de nombre se requiere. Se puede hacer una simple analogía entre los espacios de nombres de PHP y el sistema de archivos. Existen tres maneras de acceder a un archivo en el sistema de archivos:

  1. Nombre de archivo relativo como foo.txt. Esto se resuelve con directorioactual/foo.txt donde directorioactual es el directorio actualmente ocupado. Por lo que si el directorio actual es /home/foo, el nombre se resuelve con /home/foo/foo.txt.
  2. Nombre de ruta relativa como subdirectorio/foo.txt. Esto se resuelve con directorioactual/subdirectorio/foo.txt.
  3. Nombre de ruta absoluto como /main/foo.txt. Esto se resuelve con /main/foo.txt.
Se puede aplicar el mismo principio a los elementos del espacio de nombres de PHP. Por ejemplo, se puede hacer referencia a un nombre de una clase de tres maneras:
  1. Nombre no cualificado, o nombre de clase sin prefijo como $a = new foo(); o foo::métodoestático();. Si el espacio de nombres actual es espaciodenombresactual, esto se resuelve con espaciodenombresactual\foo. Si el código es global, no es de espacio de nombres, esto se resuelve con foo. Una advertencia: los nombres no cualificados para funciones y constantes se resolverán con funciones y constantes globales si la función o la constante del espacio de nombres no está definida. Véase Usar espacios de nombres: una alternativa a funciones/constantes globales para más detalles.
  2. Nombre cualificado, o un nombre de clase con prefijo como $a = new subespaciodenombres\foo(); o subespaciodenombres\foo::métodoestático();. Si el espacio de nombres actual es espaciodenombresactual, esto se resuelve con espaciodenombresactual\subespaciodenombres\foo. Si el código es global, no es de espacio de nombres, esto se resuelve con subespaciodenombres\foo.
  3. Nombre completamente cualificado, o un nombre con prefijo con el operador de prefijo global como $a = new \espaciodenombresactual\foo(); o \espaciodenombresactual\foo::métodoestático();. Esto siempre se resuelve con nombre literal especificado en el código, espaciodenombresactual\foo.

Aquí hay un ejemplo de los tres tipos de sintaxis en código real:

archivo1.php

<?php
namespace Foo\Bar\subespaciodenombres;

const 
FOO 1;
function 
foo() {}
class 
foo
{
    static function 
métodoestático() {}
}
?>

archivo2.php

<?php
namespace Foo\Bar;
include 
'archivo1.php';

const 
FOO 2;
function 
foo() {}
class 
foo
{
    static function 
métodoestático() {}
}

/* Nombre no cualificado */
foo(); // se resuelve con la función Foo\Bar\foo
foo::métodoestático(); // se resuelve con la clase Foo\Bar\foo, método métodoestático
echo FOO// se resuelve con la constante Foo\Bar\FOO

/* Nombre cualificado */
subespaciodenombres\foo(); // se resuelve con la función Foo\Bar\subespaciodenombres\foo
subespaciodenombres\foo::métodoestático(); // se resuelve con la clase Foo\Bar\subespaciodenombres\foo,
                                           // método métodoestático
echo subespaciodenombres\FOO// se resuelve con la constante Foo\Bar\subespaciodenombres\FOO
                                  
/* Nombre conmpletamente cualificado */
\Foo\Bar\foo(); // se resuelve con la función Foo\Bar\foo
\Foo\Bar\foo::métodoestático(); // se resuelve con la clase Foo\Bar\foo, método métodoestático
echo \Foo\Bar\FOO// se resuelve con la constante Foo\Bar\FOO
?>

Observe que para acceder a cualquier clase, función o constante globales, se puede usar un nombre completamente cualificado, como \strlen() o \Exception o \INI_ALL.

Ejemplo #1 Acceder a clases, funciones y constantes globales desde un espacio de nombres

<?php
namespace Foo;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = \strlen('hola'); // llama a la función global strlen
$b = \INI_ALL// accede a la constante global INI_ALL
$c = new \Exception('error'); // instancia a la clase global Exception
?>



Espacios de Nombres y características dinámicas del lenguaje

(PHP 5 >= 5.3.0)

La implementación de PHP de los espacios de nombres está influenciada por su naturaleza dinámica como lenguaje de programación. Así, para convertir código como el del siguiente ejemplo en código de espacios de nombres:

Ejemplo #1 Acceder dinámicamente a elementos

ejemplo1.php:

<?php
class nombreclase
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
nombrefunc()
{
    echo 
__FUNCTION__,"\n";
}
const 
nombreconst "global";

$a 'nombreclase';
$obj = new $a// imprime nombreclase::__construct
$b 'nombrefunc';
$b(); // imprime nombrefunc
echo constant('nombreconst'), "\n"// imprime global
?>
Se debe usar el nombre completamente cualificado (nombre de clase con prefijo de espacio de nombres). Observe que ya que no hay diferencia entre un nombre cualificado y uno completamente cualificado dentro de un nombre de clase, función, o constante dinámicas, no es necesario la barra invertida inicial.

Ejemplo #2 Acceder dinámicamente a elementos de un espacio de nombres

<?php
namespace nombreespaciodenombres;
class 
nombreclase
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
nombrefunc()
{
    echo 
__FUNCTION__,"\n";
}
const 
nombreconst "de espacio de nombres";

include 
'ejemplo1.php';

$a 'nombreclase';
$obj = new $a// imprime nombreclase::__construct
$b 'nombrefunc';
$b(); // imprime nombrefunc
echo constant('nombreconst'), "\n"// imprime global

/* observe que si se usan comillas dobles, se debe usar "\\nombreespaciodenombres\\nombreclase" */
$a '\nombreespaciodenombres\nombreclase';
$obj = new $a// imprime nombreespaciodenombres\nombreclase::__construct
$a 'nombreespaciodenombres\nombreclase';
$obj = new $a// también imprime nombreespaciodenombres\nombreclase::__construct
$b 'nombreespaciodenombres\nombrefunc';
$b(); // imprime nombreespaciodenombres\nombrefunc
$b '\nombreespaciodenombres\nombrefunc';
$b(); // también imprime nombreespaciodenombres\nombrefunc
echo constant('\nombreespaciodenombres\nombreconst'), "\n"// imprime de espacio de nombres
echo constant('nombreespaciodenombres\nombreconst'), "\n"// también imprime de espacio de nombres
?>

Asegúrese de leer la nota sobre escapar nombres de espacios de nombres en cadenas.



La palabra clave namespace y la constante __NAMESPACE__

(PHP 5 >= 5.3.0)

PHP soporta dos formas de acceder de manera abstracta a elementos dentro del espacio de nombres actual, la constante mágica __NAMESPACE__, y la palabra clave namespace.

El valor de __NAMESPACE__ es una cadena que contiene el nombre del espacio de nombres actual. En código global, código que no es de espacio de nombres, contiene una cadena vacía.

Ejemplo #1 Ejemplo de __NAMESPACE__, código de espacio de nombres

<?php
namespace MiProyecto;

echo 
'"'__NAMESPACE__'"'// imprime "MiProyecto"
?>

Ejemplo #2 Ejemplo de __NAMESPACE__, código global

<?php

echo '"'__NAMESPACE__'"'// imprime ""
?>
La constante __NAMESPACE__ es útil para construir nombres dinámicamente, por ejemplo:

Ejemplo #3 usar __NAMESPACE__ para la construcción dinámica de nombres

<?php
namespace MiProyecto;

function 
obtener($nombreclase)
{
    
$a __NAMESPACE__ '\\' $nombreclase;
    return new 
$a;
}
?>

La palabra clave namespace se puede usar para solicitar explícitamente un elemento del espacio de nombres o subespacio de nombres actual. Es el espacio de nombres equivalente al operador self de las clases.

Ejemplo #4 El operador namespace, dentro de un espacio de nombres

<?php
namespace MiProyecto;

use 
blah\blah as mío// véase "Usar espacios de nombres: Apodar/Importar"

blah\mío(); // llama a la función MiProyecto\blah\mío()
namespace\blah\mío(); // llama a la función MiProyecto\blah\mío()

namespace\func(); // llama a la función MiProyecto\func()
namespace\sub\func(); // llama a la función MiProyecto\sub\func()
namespace\nombrec::método(); // llama al método estático "método" de la clase MiProyecto\nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase MiProyecto\sub\nombrec
$b = namespace\CONSTANTE// asigna el valor de la constante MiProyecto\CONSTANTE a $b
?>

Ejemplo #5 El operador namespace, en código global

<?php

namespace\func(); // llama a la función func()
namespace\sub\func(); // llama a la función sub\func()
namespace\nombrec::método(); // llama al método estático "método" de la clase nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase sub\nombrec
$b = namespace\CONSTANTE// asigna el valor de la constante CONSTANTE a $b
?>



Usar espacios de nombres: Apodar/Importar

(PHP 5 >= 5.3.0)

La capacidad de referirse a un nombre completamente cualificado externo con un alias, o importar, es una característca importante de los espacios de nombres. Esto es similar a la capacidad de los sistemas de archivos basados en Unix de crear enlaces simbólicos a un archivo o directorio.

Los espacios de nombres de PHP soportan tres tipos de poner alias o importar: apodar un nombre de clase, apodar un nombre de interfaz, y apodar un nombre de espacio de nombres. Observe que importar una función o una constante no está soportado.

En PHP, apodar se lleva a cabo con el operador use. Aquí hay un ejemplo que muestra los tres tipos de importación:

Ejemplo #1 Importar/apodar con el operador use

<?php
namespace foo;
use 
Mi\Completo\NombreDeClase as Otra;

// esto es lo mismo que usar Mi\Completo\NombreEN as NombreEN
use Mi\Completo\NombreEN;

// importar una clase global
use ArrayObject;

$obj = new namespace\Otra// instancia un objeto de la clase foo\Otra
$obj = new Otra// instancia un objeto de la clase class Mi\Completo\NombreDeClase
NombreEN\suben\func(); // llama a la función Mi\Completo\NombreEN\subes\func
$a = new ArrayObject(array(1)); // instancia un objeto de la clase ArrayObject
// sin el "use ArrayObject" instanciaríamos un objeto de la clase foo\ArrayObject
?>
Observe que para los nombres de espacios de nombres (nombres de espacios de nombres completamente cualificados que contienen el separador de espacios de nombres, como Foo\Bar en oposición a los nombres globales que no lo contienen, como FooBar), no es necesaria y no está recomendada la barra invertida inicial, ya que los nombres importados deben ser completamente cualificados, y no son procesados en relación al espacio de nombres actual.

PHP soporta adicionalmente un atajo apropiado para poner múltiples sentencias use en la misma línea

Ejemplo #2 Importar/apodar con el operador use, múltiples sentencias use combinadas

<?php
use Mi\Completo\NombreDeClase as OtraMi\Completo\NombreEN;

$obj = new Otra// instancia un objeto de la clase Mi\Completo\NombreDeClase
NombreEN\suben\func(); // llama a la función Mi\Completo\NombreEN\suben\func
?>

La importación se realiza en tiempo de compilación, y al hacerlo no afecta a los nombres de clases, funciones o constantes.

Ejemplo #3 La importación y los nombres dinámicos

<?php
use Mi\Completo\NombreDeClase as OtraMi\Completo\NombreEN;

$obj = new Otra// instancia un objeto de la clase Mi\Completo\NombreDeClase
$a 'Otra';
$obj = new $a;      // instancia un objeto de la clase Otra
?>

Además, la importación sólo afecta a los nombres no cualificados y cualificados. Los nombres completamente cualificados son absolutos, y no son afectados por la importación.

Ejemplo #4 La importación y los nombres completamente cualificados

<?php
use Mi\Completo\NombreDeClase as OtraMi\Completo\NombreEN;

$obj = new Otra// instancia un objeto de la clase Mi\Completo\NombreDeClase
$obj = new \Otra// instancia un objeto de la clase Otra
$obj = new Otra\cosa// instancia un objeto de la clase Mi\Completo\NombreDeClase\cosa
$obj = new \Otra\cosa// instancia un objeto de la clase Otra\cosa
?>

Reglas de ámbito para la importación

La palabra clave use debe ser declarada en el ámbito exterior de un fichero (el ámbito global) o dentro de declaraciones de espacios de nombres. Esto es porque la importación se realiza en tiempo de compilación y no en tiempo de ejecución, por lo que no puede ser delimitada en bloque. El siguiente ejemplo mostrará un uso ilegal de la palabra clave use:

Ejemplo #5 Regla de importación ilegal

<?php
namespace Languages;

class 
Greenlandic
{
    use 
Languages\Danish;

 ...
}
?>

Nota:

Las reglas de importación tiene una base por fichero, lo que significa que los archivos incluidos NO heredarán las reglas de importación del padre.



Espacio global

(PHP 5 >= 5.3.0)

Sin ninguna definición de espacios de nombres, todas las definiciones de clases y funciones son colocadas en el espacio global - como si lo estuvieran antes de que PHP soportara los espacios de nombres. Prefijar un nombre con \ especificará que el nombre es requerido desde el espacio global incluso en el contexto del espacio de nombres.

Ejemplo #1 Usar la especificación de espacio global

<?php
namespace A\B\C;

/* Esta función es A\B\C\fopen */
function fopen() { 
     
/* ... */
     
$f = \fopen(...); // llamar a fopen global
     
return $f;

?>



Usar espacios de nombres: una alternativa a funciones/constantes globales

(PHP 5 >= 5.3.0)

Dentro de un espacio de nombres, cuando PHP se encuentra con nombre no cualificado en un contexto de nombre de clase, función o constante, los resuelve con diferentes propiedades. Los nombres de clases siempre se resuelven con el nombre de espacio de nombres actual. Así, para acceder a clases de usuario internas o que no son de espacio de nombres, se debe referir a ellas con su nombre completamente cualificado:

Ejemplo #1 Acceder a clases globales dentro de un espacio de nombres

<?php
namespace A\B\C;
class 
Exception extends \Exception {}

$a = new Exception('hola'); // $a es un objeto de la clase A\B\C\Exception
$b = new \Exception('hola'); // $b es un objeto de la clase Exception

$c = new ArrayObject// error fatal, no se encontró la clase A\B\C\ArrayObject
?>

Para funciones y constantes, PHP recurrirá a funciones y constantes globales si no existe una función o constante en el espacio de nombres.

Ejemplo #2 Recurrir a funciones/constantes globales dentro de un espacio de nombres

<?php
namespace A\B\C;

const 
E_ERROR 45;
function 
strlen($str)
{
    return \
strlen($str) - 1;
}

echo 
E_ERROR"\n"// imprime "45"
echo INI_ALL"\n"// imprime "7" - recurre a INI_ALL global

echo strlen('hola'), "\n"// imprime "3"
if (is_array('hola')) { // imprime "no es un array"
    
echo "es una array\n";
} else {
    echo 
"no es un array\n";
}
?>



Reglas de resolución de nombres

(PHP 5 >= 5.3.0)

Aquí hay algunas definiciones importantes para los propósitos de estas reglas de resolución:

Definiciones de nombres de espacios de nombres
Nombre no cualificado

Es un identificador sin un separador de espacios de nombres, como Foo

Nombre cualificado

Es un identificador con un separador de espacios de nombres, como Foo\Bar

Nombre completamente cualificado

Es un identificador con un separador de espacios de nombres que comienza con un separador de espacios de nombres, como \Foo\Bar. namespace\Foo también es un nombre completamente cualificado.

Los nombres se resuelven siguiendo estas reglas de resolución:

  1. Las llamadas a clases, funciones o constantes completamente cualificadas se resuleven en tiempo de compilación. Por ejemplo new \A\B se resuelve con la clase A\B.
  2. Todos los nombres no cualificados y cualificados (no los completamente cualificados) se traducen durante la compilación según las reglas de importación actuales. Por ejemplo, si el espacio de nombres A\B\C se importa como C, una llamada a C\D\e() se traduce a A\B\C\D\e().
  3. Dentro de un espacio de nombres, todos los nombres cualificados no traducidos según la reglas de importación tienen añadido al inicio el espacio de nombres actual. Por ejemplo, si una llamada a C\D\e() se lleva a cabo dentro del espacio de nombres A\B, es traduce a A\B\C\D\e().
  4. Los nombres de clases no cualificados se traducen durante la compilación según las reglas de importación actuales (el nombre completo sustituido por el nombre abreviado importado). Por ejemplo, si el espacio de nombres A\B\C se importa como C, new C() se traduce a new A\B\C().
  5. Dentro de un espacio de nombres (digamos A\B), las llamdas a funciones no cualificadas se resuelven en tiempo de ejecución. Aquí se muestra cómo se resuelve una llamada a la función foo():
    1. Se busca una función desde el espacio de nombres actual: A\B\foo().
    2. Se intenta encontrar y llamar a la función global foo().
  6. Dentro de un espacio de nombres (digamos A\B), las llamadas a nombres de clases no cualificados o cualificados (no los completamente cualificados) se resuelve en tiempo de ejecución. Aquí se muestra cómo se resuelve una llamada a new C() o a new D\E(). Para new C():
    1. Se busca una clase desde el espacio de nombres actual: A\B\C.
    2. Se intenta autocargar A\B\C.
    Para new D\E():
    1. Se busca una clase añadiendo al inicio el espacio de nombres actual: A\B\D\E.
    2. Se intenta autocargar A\B\D\E.
    Para referenciar cualquier clase global en el espacio de nombres global, se debe usar su nombre completamente cualificado new \C().

Ejemplo #1 Las resoluciones de nombres ilustradas

<?php
namespace A;
use 
B\DC\as F;

// llamadas a funciones

foo();      // primero se intenta llamar a "foo" definida en el espacio de nombres "A"
            // después se llama a la función global "foo"

\foo();     // se llama a la función "foo" definidia en el ámbito global

mi\foo();   // se llama a la función "foo" definida en el espacio de nombres "A\mi"

F();        // primero se intenta llamar a "F" definida en el espacio de nombres "A"
            // después se llama a la función global "F"

// referecias a clases

new B();    // crea un objeto de la clase "B" definida en el espacio de nombres "A"
            // si no se encuentra, se intenta autocargar la clase "A\B"

new D();    // usando las reglas de importación, se crea un objeto de la clase "D" definida en el
            // espacio de nombres "B"
            // si no se encuentra, se intenta autocargar la clase "B\D"

new F();    // usando las reglas de importación, se crea un objeto de la clase "E" definida en el
            // espacio de nombres "C"
            // si no se encuentra, se intenta autocargar la clase "C\E"

new \B();   // crea un objeto de la clase "B" definida en el ámbito global
            // si no se encuentra, se intenta autocargar la clase "B"

new \D();   // crea un objeto de la clase "D" definida en el ámbito global
            // si no se encuentra, se intenta autocargar la clase "D"

new \F();   // crea un objeto de la clase "F" definida en el ámbito global
            // si no se encuentra, se intenta autocargar la clase "F"

// métodos estáticos/funciones de espacio de nombres desde otro espacio de nombres

B\foo();    // se llama a la función "foo" desde el espacio de nombres "A\B"

B::foo();   // se llama al método "foo" de la clase "B" definidia en el espacio de nombres "A"
            // si no se encuentra la clase "A\B", se intenta autocargar la clase "A\B"

D::foo();   // usando las reglas de importación, se llama al método "foo" de la clase "D"
            // definida en el espacio de nombres "B"
            // si no se encuentra la clase "B\D", se intenta autocargar la clase "B\D"

\B\foo();   // se llama a la función "foo" desde el espacio de nombres "B"

\B::foo();  // se llama al método "foo" de la clase "B" desde el ámbito global
            // si no es encuentra la clase "B", se intenta autocargar la clase "B"

// métodos estáticos/funciones de espacio de nombres del espacio de nombres actual

A\B::foo();   // se llama al método "foo" de la clase "B" desde el espacio de nombres "A\A"
              // si no se encuentra la clase "A\A\B", se intenta autocargar la clase "A\A\B"

\A\B::foo();  // se llama al método "foo" de la clase "B" desde el espacio de nombres "A"
              // si no se encuentra la clase "A\B", se intenta autocargar la clase "A\B"
?>


FAQ: cosas que se necesitan saber sobre los espacios de nombres

(PHP 5 >= 5.3.0)

Esta FAQ está dividida en dos secciones: preguntas comunes, y algunas especificaciones de implementación que son útiles para comprenderlos completamente.

Primero, las preguntas comunes.

  1. Si no utilizo espacios de nombres, ¿debería preocuparme por algo de esto?
  2. ¿Cómo uso clases internas o globales en un espacio de nombres?
  3. ¿Cómo uso clases, funciones o constantes de espacios de nombres en su propio espacio de nombres?
  4. ¿Cómo se resuelve un nombre como \mi\nombre o \nombre?
  5. ¿Cómo se resuelve un nombre como mi\nombre?
  6. ¿Cómo se resuelve un nombre de clase no cualificado como nombre?
  7. ¿Cómo se resuelve un nombre de función o de constante no cualifcado como nombre?

Existen unos pocos detalles de implementación de las implementaciones de espacios de nombres que son útiles para enterderlos.

  1. Importar nombres no entra en conflicto con las clases definidas en el mismo archivo.
  2. Los espacios de nombres anidados no están permitidos.
  3. Ni las funciones ni las constantes se pueden importar mediante la sentencia use.
  4. Los nombres de espacios de nombres dinámicos (identificadores entre comillas) deberían escaparse con una barra invertida.
  5. Las Constantes No Definidas referenciadas usando cualquier barra invertida mueren con un error fatal
  6. No se pueden sobrescribir las constantes especiales NULL, TRUE, FALSE, ZEND_THREAD_SAFE o ZEND_DEBUG_BUILD

Si no utilizo espacios de nombres, ¿debería preocuparme por algo de esto?

No. Los espacios de nombres no afectan a ningún código existente de ninguna manera, o a ningún código todavía por escribir que no contenga espacios de nombres. Se puede escribir este código si se desea:

Ejemplo #1 Acceder a clases globales fuera de un espacio de nombres

<?php
$a 
= new \stdClass;
?>

Esto es funcionalmente equivalente a:

Ejemplo #2 Acceder a clases globales fuera de un espacio de nombres

<?php
$a 
= new stdClass;
?>

¿Cómo uso clases internas o globales en un espacio de nombres?

Ejemplo #3 Acceder a clases internas en espacios de nombres

<?php
namespace foo;
$a = new \stdClass;

function 
probar(\ArrayObject $ejemploalusiónatipo null) {}

$a = \DirectoryIterator::CURRENT_AS_FILEINFO;

// extender una clase interna o global
class MiExcepción extends \Exception {}
?>

¿Cómo uso clases, funciones o constantes de espacios de nombres en su propio espacio de nombres?

Ejemplo #4 Acceder a clases, funciones o constantes internas en un espacio de nombres

<?php
namespace foo;

class 
MiClase {}

// usar una clase desde el espacio de nombres actual como una alusión a tipo
function probar(MiClase $ejemploalusiónatipo null) {}
// otra manera de usar una clase desde el espacio de nombres actual una alusión a tipo
function probar(\foo\MiClase $ejemploalusiónatipo null) {}

// extender una clase desde el espacio de nombres actual
class Extendida extends MiClase {}

// acceder a una función global
$a = \funcglobal();

// acceder a una constante global
$b = \INI_ALL;
?>

¿Cómo se resuelve un nombre como \mi\nombre o \nombre?

Los nombres que comienzan con una \ siempre se resuelven a aquello que parecen, así \mi\nombre de hecho es mi\nombre, y \Exception es Exception.

Ejemplo #5 Nombres Completamente Cualificados

<?php
namespace foo;
$a = new \mi\nombre(); // instancia a la clase "mi\nombre"
echo \strlen('hola'); // llama a la función "strlen"
$a = \INI_ALL// $a está establecida al valor de la constante "INI_ALL"
?>

¿Cómo se resuelve un nombre como mi\nombre?

Los nombres que contienen una barra invertida pero no comienzan con una barra invertida como mi\nombre pueden resolverse de 2 formas diferentes.

Si hay una sentencia de importación que apode a otro nombre como mi, el alias de importación se aplica a mi en mi\nombre.

De otro modo, al nombre del espacio de nombres actual se le añade al inicio mi\nombre.

Ejemplo #6 Nombres Cualificados

<?php
namespace foo;
use 
blah\blah as foo;

$a = new mi\nombre(); // instancia a la clase "foo\mi\nombre"
foo\bar::nombre(); // llama a método estático "nombre" de la clase "blah\blah\bar"
mi\bar(); // llama a la función "foo\mi\bar"
$a mi\BAR// establece $a al valor de la constante "foo\mi\BAR"
?>

¿Cómo se resuelve un nombre de clase no cualificado como nombre?

Los nombres de clases que no contienen una barra invertida como nombre se pueden resolver de 2 formas diferentes.

Si hay una sentencia de importación que apode a otro nombre como nombre, se aplica el alias de importación.

De otro modo, al nombre del espacio de nombres actual se le añade al inicio nombre.

Ejemplo #7 Nombres de clases no cualificados

<?php
namespace foo;
use 
blah\blah as foo;

$a = new nombre(); // instancia a la clase "foo\nombre"
foo::nombre(); // llama al método estático "nombre" de la clase "blah\blah"
?>

¿Cómo se resuelve un nombre de función o de constante no cualifcado como nombre?

Los nombres de funciones o de constantes que no contienen una barra invertida como nombre se pueden resolver de 2 formas diferentes.

Primero, al nombre del espacio de nombres actual se le añade al inicio nombre.

Finalmente, si el nombre de la constante o de la función no existe en el espacio de nombres actual, se usa un nombre de constante o función global si es que existe.

Ejemplo #8 Nombres de funciones o constantes no cualificados

<?php
namespace foo;
use 
blah\blah as foo;

const 
FOO 1;

function 
mi() {}
function 
foo() {}
function 
sort(&$a)
{
    
sort($a);
    
$a array_flip($a);
    return 
$a;
}

mi(); // calls "foo\mi"
$a strlen('hola'); // llama a la función global "strlen" ya que "foo\strlen" no existe
$matriz = array(1,3,2);
$b sort($matriz); // llama a la función "foo\sort"
$c foo(); // llama a la función "foo\foo" - la importación no se aplica

$a FOO// establece $a al valor de la constante "foo\FOO" - la importación no se aplica
$b INI_ALL// establece $b al valor de la constante "INI_ALL"
?>

Importar nombres no entra en conflicto con las clases definidas en el mismo archivo.

Las siguientes combinaciones de scripts está permitidas:

archivo1.php

<?php
namespace mis\cosas;
class 
MiClase {}
?>

otro.php

<?php
namespace otro;
class 
cosa {}
?>

archivo2.php

<?php
namespace mis\cosas;
include 
'archivo1.php';
include 
'otro.php';

use 
otro\cosa as MiClase;
$a = new MiClase// instancia a la clase "cosa" desde el espacio de nombres otro
?>

No existe conflicto entre nombres, aunque la clase MiClase exista dentro del espacio de nombres mis\cosas, porque la definición de MiClase está en otro archivo. Sin embargo, el siguiente ejemplo causa un error fatal con conflicto de nombres ya que MiClase está definida en el mismo archivo que el de la sentencia use.

<?php
namespace mis\cosas;
use 
otro\cosa as MiClase;
class 
MiClase {} // error fatal: MiClase entra en conflicto con la sentencia de importación
$a = new MiClase;
?>

Los espacios de nombres anidados no están permitidos.

PHP no permite los espacios de nombres anidados

<?php
namespace mis\cosas {
    namespace 
anidado {
        class 
foo {}
    }
}
?>
Sin embargo, es fácil simular los espacios de nombres anidados, de la siguiente manera:
<?php
namespace mis\cosas\anidado {
    class 
foo {}
}
?>

Ni las funciones ni las constantes se pueden importar mediante la sentencia use.

Los únicos elementos que son afectados por la sentencia use son los espacios de nombres y los nombres de clases. Para abreviar una constante o función largas, importe el espacio de nombres que la contiene

<?php
namespace mío;
use 
nombre\en\ultra\largo;

$a largo\CONSTANT;
largo\func();
?>

Los nombres de espacios de nombres dinámicos (identificadores entre comillas) deberían escaparse con una barra invertida.

Es muy importante darse cuenta de que ya que la barra invertida se usa como carácter de escape dentro de cadenas, se deberían usar dobles cuando se utilizan dentro de cadenas. Si no, existe el riesgo de obtener consecuencias inesperadas:

Ejemplo #9 Peligros de usar nombres de espacios de nombres dentro de una cadena entre comillas dobles

<?php
$a 
= new "peligro\nombre"// ¡\n es una nueva línea dentro de las cadenas entre comillas dobles!
$obj = new $a;

$a = new 'sin\peligro\alguno'// aquí sin problemas.
$obj = new $a;
?>
Dentro de una cadena entre comillas dobles, es más seguro usar la secuencia de escape de la barra invertida, pero aún se recomienda como práctica escapar las barras invertidas en todas las cadenas.

Las Constantes No Definidas referenciadas usando cualquier barra invertida mueren con un error fatal

Cualquier constante no definida que no es cualificada como FOO producirá una aviso explicando que PHP asume que FOO es el valor de la constante. Cualquier constante, cualificada o completamente cualificada, que contenga una barra invertida producirá un error fatal si no es encontrada.

Ejemplo #10 Constantes no definidas

<?php
namespace bar;
$a FOO// produce un aviso - constante no definida "FOO" se asume que es "FOO";
$a = \FOO// error fatal, constante FOO del espacio de nombres no definida
$a Bar\FOO// error fatal, constante bar\Bar\FOO del espacio de nombres no definida
$a = \Bar\FOO// error fatal, constante Bar\FOO del espacio de nombres no definida
?>

No se pueden sobrescribir las constantes especiales NULL, TRUE, FALSE, ZEND_THREAD_SAFE o ZEND_DEBUG_BUILD

Cualquier intento de definir una constante de espacio de nombres que sea especial, constante interna, resultará en un error fatal

Ejemplo #11 Constantes no definidas

<?php
namespace bar;
const 
NULL 0// error fatal;
const true 'estúpido'// también error fatal;
// etc.
?>




Excepciones

Tabla de contenidos

PHP 5 tiene un modelo de excepciones similar al de otros lenguajes de programación. Una excepción puede ser lanzada (thrown), y atrapada ("catched") dentro de PHP. El código puede estar dentro de un bloque try, para facilitar la captura de excepciones potenciales. Cada bloque try debe tener al menos un bloque catch correspondiente. Se pueden usar múltiples bloques catch para atrapar diferentes clases de excepciones. La ejecución normal (cuando no es lanzada ninguna excepción dentro del bloque try, o cuando un bloque catch que coincide con la clase de la excepción lanzada no está presente) continuará después del último bloque catch definido en la sencuencia. Las excepciones pueden ser lanzadas (o relanzadas) dentro de un bloque catch.

Cuando una excepción es lanzada, el código siguiente a la declaración no será ejecutado, y PHP intentará encontrar el primer bloque catch conicidente. Si una excepción no es capturada, se emitirá un Error Fatal de PHP con un mensaje "Uncaught Exception ..." ("Excepción No Capturada"), a menos que se haya definido un gestor con set_exception_handler().

El objeto lanzado debe ser una instancia de la clase Exception o de una subclase de Exception. Intentar lanzar un objeto que no lo es resultará en un Error Fatal de PHP.

Nota:

Las funciones internas de PHP utilizan principalmente Información de Errores, sólo las extensiones Orientadas a objetos modernas utilizan excepciones. Sin embargo, los errores se pueden traducir a excepciones simplemente con ErrorException.

Sugerencia

Standard PHP Library (SPL) - (Biblioteca PHP Estándar) proporciona un buen número de excepciones internas.

Ejemplo #1 Lanzar una Excepción

<?php
function inverso($x) {
    if (!
$x) {
        throw new 
Exception('División por cero.');
    }
    else return 
1/$x;
}

try {
    echo 
inverso(5) . "\n";
    echo 
inverso(0) . "\n";
} catch (
Exception $e) {
    echo 
'Excepción capturada: ',  $e->getMessage(), "\n";
}

// Continuar la ejecución
echo 'Hola Mundo';
?>

El resultado del ejemplo sería:

0.2
Excepción capturada: División por cero.
Hola Mundo

Ejemplo #2 Excepciones Anidadas

<?php

class MiExcepción extends Exception { }

class 
Prueba {
    public function 
probar() {
        try {
            try {
                throw new 
MiExcepción('foo!');
            } catch (
MiExcepción $e) {
                
/* relanzarla */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Prueba;
$foo->probar();

?>

El resultado del ejemplo sería:

string(4) "foo!"

Ampliar las Excepciones

Una clase de Excepción definida por el usuario puede ser definida ampliando la clase Exception interna. Los miembros y las propiedades de abajo muestran lo que es accesible dentro de la clase hija que deriva de la clase Exception interna.

Ejemplo #1 La clase Exception Interna

<?php
class Exception
{
    protected 
$message 'Unknown exception';   // mensaje de excepción
    
private   $string;                          // caché de __toString
    
protected $code 0;                        // código de excepción definido por el usuario
    
protected $file;                            // nombre de archivo fuente de la excepción
    
protected $line;                            // línea fuente de la excepción
    
private   $trace;                           // determinación del origen
    
private   $previous;                        // excepción previa si la excepción está anidada

    
public function __construct($message null$code 0Exception $previous null);

    final private function 
__clone();           // Inhibe la clonación de excepciones.

    
final public  function getMessage();        // mensaje de excepción
    
final public  function getCode();           // código de excepción
    
final public  function getFile();           // nombre de archivo fuente
    
final public  function getLine();           // línea fuente
    
final public  function getTrace();          // un array de backtrace()
    
final public  function getPrevious();       // excepción anterior
    
final public  function getTraceAsString();  // string formateado del seguimiento del origen

    /* Sobrescribible */
    
public function __toString();               // string formateado para mostrar
}
?>

Si una clase extiende la clase Exception interna y redefine el constructor, se recomienda encarecidamente que también llame a parent::__construct() para asegurarse que toda la información disponible haya sido asignada apropiadamente. El método __toString() puede ser sobrescrito para proporcionar una salida personalizada cuando el objeto es presentado como un string.

Nota:

Las excepciones no se pueden clonar. Intentar clonar una Excepción resultará en un error E_ERROR fatal.

Ejemplo #2 Extender la clase Exception (PHP 5.3.0+)

<?php
/**
 * Definir una clase de excepción personalizada
 */
class MiExcepción extends Exception
{
    
// Redefinir la excepción, por lo que el mensaje no es opcional
    
public function __construct($message$code 0Exception $previous null) {
        
// algo de código
    
        // asegúrese de que todo está asignado apropiadamente
        
parent::__construct($message$code$previous);
    }

    
// representación de cadena personalizada del objeto
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
funciónPersonalizada() {
        echo 
"Una función personalizada para este tipo de excepción\n";
    }
}


/**
 * Crear una clase para probar la excepción
 */
class ProbarExcepción
{
    public 
$var;

    const 
THROW_NONE    0;
    const 
THROW_CUSTOM  1;
    const 
THROW_DEFAULT 2;

    function 
__construct($avalue self::THROW_NONE) {

        switch (
$avalue) {
            case 
self::THROW_CUSTOM:
                
// lanzar la excepción personalizada
                
throw new MiExcepción('1 no es un parámetro válido'5);
                break;

            case 
self::THROW_DEFAULT:
                
// lanzar la predeterminada.
                
throw new Exception('2 no está permitido como parámetro'6);
                break;

            default: 
                
// No hay excepción, el objeto se creará.
                
$this->var $avalue;
                break;
        }
    }
}


// Ejemplo 1
try {
    
$o = new ProbarExcepción(ProbarExcepción::THROW_CUSTOM);
} catch (
MiExcepción $e) {      // Será atrapada
    
echo "Atrapada mi excepción\n"$e;
    
$e->funciónPersonalizada();
} catch (
Exception $e) {        // Skipped
    
echo "Atrapada la Excepción Predeterminada\n"$e;
}

// Continuar la ejecución
var_dump($o); // Null
echo "\n\n";


// Ejemplo 2
try {
    
$o = new ProbarExcepción(ProbarExcepción::THROW_DEFAULT);
} catch (
MiExcepción $e) {      // Este tipo no coincide
    
echo "Atrapada mi excepción\n"$e;
    
$e->funciónPersonalizada();
} catch (
Exception $e) {        // Will be caught
    
echo "Atrapada la Excepción Predeterminada\n"$e;
}

// Continuar la ejecución
var_dump($o); // Null
echo "\n\n";


// Ejemplo 3
try {
    
$o = new ProbarExcepción(ProbarExcepción::THROW_CUSTOM);
} catch (
Exception $e) {        // Será atrapada
    
echo "Atrapada la Excepción Predeterminada\n"$e;
}

// Continuar la ejecución
var_dump($o); // Null
echo "\n\n";


// Ejemplo 4
try {
    
$o = new ProbarExcepción();
} catch (
Exception $e) {        // Saltado, sin excepción
    
echo "Atrapada la Excepción Predeterminada\n"$e;
}

// Continuar la ejecución
var_dump($o); // ProbarExcepción
echo "\n\n";
?>

Nota:

Las versiones de PHP 5, anteriores a PHP 5.3.0, no soportan excepciones anidadas. El siguiente fragmento de código se puede usar para reemplazar la clase MiExcepción si se desea ejecutar este ejemplo.

<?php
/**
 * Definir una clase de excepción personalizada
 */
class MiExcepción extends Exception
{
    
// Redefinir la excepción, por lo que el mensaje no es opcional
    
public function __construct($message$code 0) {
        
// algo de código
    
        // asegúrese de que todo está asignador apropiadamente
        
parent::__construct($message$code);
    }

    
// representación de cadena personalizada del objeto
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
funciónPersonalizada() {
        echo 
"Una función personalizada para este tipo de excepción\n";
    }
}
?>




Referencias Explicadas

Tabla de contenidos


¿Qué son las Referencias?

Las Referencias en PHP son medios de acceder al mismo contenido de una variable mediante diferentes nombres. No son como los punteros de C; por ejemplo, no se puede realizar aritmética de punteros con ellas, realmente no son direcciones de memoria, etc. Véase ¿Qué NO son las Referencias? para más información. Las referencias son alias de la tabla de símbolos. Observe que en PHP el nombre de la variable y el contenido de la variable son cosas diferentes, por lo que el mismo contenido puede tener diferentes nombres. La analogía más próxima es con los archivos y los nombres de archivos de Unix - los nombres de variables son entradas de directorio, mientras que el contenido de las variables es el archivo en sí. Las referencias se pueden vincular a enlaces duros en sistemas de archivos Unix.



¿Qué hacen las referencias?

Hay tres operaciones básicas que se realizan usando referencias: asignar por referencia, pasar por referencia, y devolver por referencia. En esta sección se dará una introducción a estas operaciones, con enlaces para una lectura complementaria.

Asignar por Referencia

En la primera de estas operaciones, las referencias de PHP permiten hacer que dos variables hagan referencia al mismo contenido. Es decir, cuando se hace:

<?php
$a 
=& $b;
?>
significa que $a y $b apuntan al mismo contenido.

Nota:

$a y $b aquí son completamente iguales. $a no está apuntando a $b o viceversa. $a y $b están apuntando al mismo lugar.

Nota:

Si se asigna, pasa, o devuelve una variable no definida por referencia, la variable se creará.

Ejemplo #1 Usar referencias con variables no definidas

<?php
function foo(&$var) { }

foo($a); // $a es "creada" y asignada a null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>

Se puede usar la misma sintaxis con funciones que devuelven referencias y con el operador new (desde PHP 4.0.4 y anterior a PHP 5.0.0):

<?php
$foo 
=& find_var($bar);
?>
Desde PHP 5, new devuelve una referencia automáticamente, por lo que usar =& en este contexto es obsoleto y produce un mensaje E_DEPRECATED en PHP 5.3 y posteriores, y un mensaje E_STRICT en versiones anteriores. (Técnicamente, la diferencia es que, en PHP 5, las variables de objetos, como los recursos, son meros punteros a la información del objeto actual, por lo que estas referencias a objetos no son "referencias" en el mismo sentido usado antes (alias). Para más información, véase Objetos y referencias.)

Advertencia

Si se asigna una referencia a una varible declarada global dentro de una función, la referencia será visible sólo dentro de la función. Se puede evitar esto usando la matriz $GLOBALS.

Ejemplo #2 Refenciar variables globales dentro de funciones

<?php
$var1 
"Variable de ejemplo";
$var2 "";

function 
referencias_globales($usar_globals)
{
    global 
$var1$var2;
    if (!
$usar_globals) {
        
$var2 =& $var1// visible sólo dentro de la función
    
} else {
        
$GLOBALS["var2"] =& $var1// visible también en el contexto global
    
}
}

referencias_globales(false);
echo 
"var2 está establecida a '$var2'\n"// var2 está establecida a ''
referencias_globales(true);
echo 
"var2 está establecida a '$var2'\n"// var2 está establecida a 'Variable de ejemplo'
?>
Piense en global $var; como simplificación de $var =& $GLOBALS['var'];. De este modo, al asignar otra referencia a $var sólo cambia la referencia de la variable local.

Nota:

Si se asigna un valor a una variable con referencias en una sentencia foreach, también se modifican las referencias.

Ejemplo #3 Referencias y la sentencia foreach

<?php
$ref 
0;
$fila =& $ref;
foreach (array(
123) as $fila) {
    
// hacer algo
}
echo 
$ref// 3 - último elemento de la matriz iterada
?>

Mientras que no sea estrictamente una asignación por referencia, las expresiones creadas con el constructor de lenguaje array() también pueden comportarse como tales prefijando & al elemento del array a añadir. Ejemplo:

<?php
$a 
1;
$b = array(23);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;
/* $a == 2, $b == array(3, 4); */
?>

Observe, sin embargo, que las referencias dentro de arrays son potencialmente peligrosas. Realizar una asignación normal (no por referencia) con una referencia en el lado derecho no convierte el lado izquierdo en una referencia, pero las referencias dentro de arrays son conservadas en estas asignaciones normales. Esto también se aplica a las llamadas a funciones donde el array es pasado por valor. Ejemplo:

<?php
/* Asignación de variables escalares */
$a 1;
$b =& $a;
$c $b;
$c 7//$c no es una referencia; no cambia $a o $b

/* Asignación de variables de array */
$arr = array(1);
$a =& $arr[0]; // $a y $arr[0] son el mismo conjunto de referencias
$arr2 $arr// ¡no es una asignación por referencia!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* ¡El contenido de $arr se cambia incluso si no es una referencia! */
?>
En otras palabras, el comportamiento de las referencias de arrays está definido en una base elemento-por-elemento; el comportamiento de las referencias de elementos individuales está desasociado del estado de la referencia del array contenedor.

Pasar por Referencia

Lo segundo que hacen las referencias es pasar variables por referencia. Esto se lleva a cabo haciendo que una variable local en una función y una variable en el ámbito de la llamada referencien al mismo contenido. Ejemplo:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
?>
hará que $a sea 6. Esto sucede porque en la función foo la variable $var hace referencia al mismo contenido que $a. Para más información sobre esto, lea la sección pasar por referencia.

Devolver por Referencia

Lo tercero que hacen las referncias es devolver por referencia.



¿Qué NO son las Referencias?

Como se dijo antes, las referencias no son punteros. Es decir, la siguiente construcción no hará lo que se esperaba:

<?php
function foo(&$var)
{
    
$var =& $GLOBALS["baz"];
}
foo($bar); 
?>

Lo que sucede es que $var en foo será ligada con $bar en la llamada, pero entonces será religada con $GLOBALS["baz"]. No hay forma de ligar $bar en el ámbito de la llamada a otra cosa usando el mecanismo de referencia, ya que $bar no está disponible en la función foo (está representada por $var, pero $var sólo tiene el contenido de la variable y no la vinculación nombre-a-valor en la tabla de símbolos de llamada). Se puede usar devolver referencias para referencias variables seleccionadas por la función.



Pasar por Referencia

Se puede pasar una variable por referencia a una función y así hacer que la función pueda modificar la variable. La sintaxis es la siguiente:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
// $a es 6 aquí
?>

Nota: No existe ningún signo de referencia en una llamada a una función - sólo en la definición de la función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el argumento por referencia. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use & en foo(&$a);.

Se puede pasar por referencia lo siguiente:

  • Variables, esto es, foo($a)
  • Nuevas declaraciones, esto es, foo(new foobar())
  • Referencias devueltas desde funciones, esto es:

    <?php
    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>
    Vea más sobre devolver por referencia.

Ninguna otra expresión debería pasarse por referencia, ya que el resultado no está definido. Por ejemplo, los siguientes ejemplos de pasar por referencia no son válidos:

<?php
function foo(&$var)
{
    
$var++;
}
function 
bar() // Observe que falta el &
{
    
$a 5;
    return 
$a;
}
foo(bar()); // Produce un error fatal a partir de PHP 5.0.5

foo($a 5); // Expresión, no una variable
foo(5); // Produce un error fatal
?>
Estos requerimientos son para PHP 4.0.4 y posterior.



Devolver Referencias

Devolver por referencia es útil cuando se quiere usar una función para encontrar a qué variable debería estar vinculada una referencia. No use devolver por referencia para aumentar el rendimiento. El motor optimizará automáticamente esto por sí mismo. Hay que devolver referencias sólo cuando se tenga una razón técnicamente válida para hacerlo. Para devolver referencias use esta sintaxis:

<?php
class foo {
    public 
$valor 42;

    public function &
obtenerValor() {
        return 
$this->valor;
    }
}

$obj = new foo;
$miValor = &$obj->obtenerValor(); // $miValor es una referencia a $obj->valor, que es 42.
$obj->valor 2;
echo 
$miValor;                // imprime el nuevo valor de $obj->valor, esto es, 2.
?>
En este ejemplo, la propiedad del objeto devuelto por la función obtenerValor debería estar establecida, no la copia, como si estuviera sin usar la sintaxis de referencia.

Nota: A diferencia de pasar un parámetro, aquí se tiene que usar & en ambos lugares - para indicar que se quiere devolver por referencia, no una copia, y para indicar que la vinculación por referencia, en vez de la asignación normal, debería ser hecha para $miValor.

Nota: Si se intenta devolver una referencia desde una función con la sintaxis: return ($this->valor);, no funcionará ya que se está intentando devolver el resultado de una expresión, y no de una variable, por referencia. Sólo se puede devolver variables por referencia desde una función - nada más. Desde PHP 4.4.0 en la rama PHP 4, y PHP 5.1.0 en la rama PHP 5, se emite un error E_NOTICE si el código intenta devolver una expresión dinámica o un resultado del operador new.

Para usar la referencia retornada, se debe usar la asignación por referencia:

<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Para pasar la referencia retornada a otra función que espera una referencia se puede usar la siguiente sintaxis:
<?php
function &collector() {
  static 
$collection = array();
  return 
$collection;
}
array_push(collector(), 'foo');
?>

Nota: Observe que array_push(&collector(), 'foo'); no funcionará, resultará en un error fatal.



Destruir Referencias

Cuando se destruye una referencia, se rompe el vínculo entre el nombre de la variable y el contenido de la variable. Esto no significa que el contenido de la variable sea destruida. Por ejemplo:

<?php
$a 
1;
$b =& $a;
unset(
$a); 
?>
no destruirá $b, sólo $a.

De nuevo, podría ser útil pensar en esto como análogo a una llamada a unlink de Unix.



Ubicar las Referencias

Muchas construcciones sintácticas de PHP están implementadas mediante el mecanismo de referencia, por lo que todo lo mencionado aquí sobre la vinculación de referencias también se aplica a estas construcciones. Algunas construcciones, como pasar y devolver por referencia, han sido mencionadas antes. Otras construcciones que usan referencias son:

Referencias globales

Cuando se declara una variable como global $var, de hecho se está creando una referencia a una variable global. Es decir, esto es lo mismo que:

<?php
$var 
=& $GLOBALS["var"];
?>

Esto también significa que al destruir $var no se destruirá la variable global.

$this

En un método de un objeto, $this es siempre una referencia al objeto que realiza la llamada.




Variables predefinidas

PHP proporciona una gran cantidad de variables predefinidas para todos los scripts. Las variables representan de todo, desde variables externas hasta variables de entorno incorporadas, desde los últimos mensajes de error hasta los últimos encabezados recuperados.

Véase también la pregunta frecuente titulada "¿Cómo me afecta register_globals?"


Superglobals

SuperglobalsSuperglobals son variables internas que están disponibles siempre en todos los ámbitos

Descripción

Algunas variables predefinidas en PHP son "superglobales", lo que significa que están disponibles en todos los ámbitos a lo largo del script. No es necesario emplear global $variable; para acceder a ellas dentro de las funciones o métodos.

Las variables superglobals son:

Historial de cambios

Versión Descripción
4.1.0 Las superglobals son añadidas a PHP.

Notas

Nota: Disponibilidad de variables

Por defecto, todas las superglobals están disponibles pero hay directivas que afectan a su disponibilidad. Para más información, véase la documentacion de variables_order.

Nota: Tratando con register_globals

Si la directiva obsoleta register_globals tiene el valor on entonces las variables están tambien disponibles en el ámbito global del código. Por ejemplo, $_POST['foo'] tambien existirá como $foo.

Para información relacionada, consulte el FAQ titulado "¿Cómo puede afectarme register_globals?"

Nota: Variables variables

Las variables superglobals no pueden ser usadas como variables variables dentro de funciones o métodos de clase.



$GLOBALS

(PHP 4, PHP 5)

$GLOBALSHace referencia a todas las variables disponibles en el ámbito global

Descripción

Es un array asociativo que contiene las referencias a todas la variables que están definidas en el ámbito global del script. Los nombres de las variables son las claves del array.

Ejemplos

Ejemplo #1 Ejemplo de $GLOBALS

<?php
function test() {
    
$foo "variable local";

    echo 
'$foo en el ámbito global: ' $GLOBALS["foo"] . "\n";
    echo 
'$foo en el ámbito simple: ' $foo "\n";
}

$foo "Contenido de ejemplo";
test();
?>

El resultado del ejemplo sería algo similar a:

$foo en el ámbito global: Contenido de ejemplo
$foo en el ámbito simple: variable local

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Nota: Disponibilidad de las variables

A diferencia de todas las otras superglobals, $GLOBALS ha estado esencialmente siempre disponible en PHP.



$_SERVER

$HTTP_SERVER_VARS [obsoleto]

(PHP 4 >= 4.1.0, PHP 5)

$_SERVER -- $HTTP_SERVER_VARS [obsoleto]Información del entorno del servidor y de ejecución

Descripción

$_SERVER es un array que contiene información, tales como cabeceras, rutas y localizaciones del código. Las entradas en este array son creadas por el servidor web. No existe garantía que cada servidor web proporcione todas estas entradas, ya que existen servidores que pueden omitir algunas o proporcionar otras que no se encuentran recogidas aquí. Un gran número de estas variables se encuentran recogidas en » especificación CGI 1.1, así que al menos debe esperar encontrar estas entradas.

$HTTP_SERVER_VARS contiene la misma información inicial, pero no es una variable superglobal. (Fijese que $HTTP_SERVER_VARS y $_SERVER son diferentes variables y que por tanto PHP las trata diferente).

Índices

Puede encontrar o no los siguientes elementos en $_SERVER. Tenga en cuenta que si ejecuta PHP desde línea de comando pocos o ninguno de los siguientes elementos estarán disponibles (o tendrán algún significado).

'PHP_SELF'
El nombre del archivo de script ejecutándose actualmente, relativa al directorio raíz de documentos del servidor. Por ejemplo, el valor de $_SERVER['PHP_SELF'] en un script ejecutado en la dirección http://example.com/test.php/foo.bar será /test.php/foo.bar. La constante __FILE__ contiene la ruta completa del fichero actual, incluyendo el nombre del archivo. Si PHP se está ejecutando como un proceso de línea de comando, esta variable es el nombre del script desde PHP 4.3.0. En anteriores versiones no estaba disponible.
'argv'
Array de los argumentos enviados al script. Cuando se ejecuta el script en línea de comando se obtiene acceso a los parámetros de línea de comando con un estilo parecido a como sería en C. Cuando se ejecuta el script mediante el método GET, contendrá la cadena de la consulta.
'argc'
Contiene el número de parámetros de línea de comando enviados al script (si se ejecuta en línea de comando).
'GATEWAY_INTERFACE'
Número de revisión de la especificación CGI que está empleando el servidor, por ejemplo 'CGI/1.1'.
'SERVER_ADDR'
La dirección IP del servidor donde se está ejecutando actualmente el script.
'SERVER_NAME'
El nombre del host del servidor donde se está ejecutando actualmente el script. Si el script se ejecuta en un host virtual se obtendrá el valor del nombre definido para dicho host virtual.
'SERVER_SOFTWARE'
Cadena de identificación del servidor dada en las cabeceras de respuesta a las peticiones.
'SERVER_PROTOCOL'
Nombre y número de revisión del protocolo de información a través del cual la página es solicitada, por ejemplo 'HTTP/1.0'.
'REQUEST_METHOD'
Método de petición empleado para acceder a la página, es decir 'GET', 'HEAD', 'POST', 'PUT'.

Nota:

El script de PHP se considera terminado después de enviar las cabeceras (es decir después de producir cualquier resultado sin emplear buffers para el resultado) si el método de la petición empleado era HEAD.

'REQUEST_TIME'
Fecha Unix de inicio de la petición. Disponible desde PHP 5.1.0.
'REQUEST_TIME_FLOAT'
El timestamp del inicio de la solicitud, con precisión microsegundo. Disponible desde PHP 5.4.0.
'QUERY_STRING'
Si existe, la cadena de la consulta de la petición de la página.
'DOCUMENT_ROOT'
El directorio raíz de documentos del servidor en el cual se está ejecutando el script actual, según está definida en el archivo de configuración del servidor.
'HTTP_ACCEPT'
Contenido de la cabecera Accept: de la petición actual, si existe.
'HTTP_ACCEPT_CHARSET'
Contenido de la cabecera Accept-Charset: de la petición actual, si existe. Por ejemplo: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
Contenido de la cabecera Accept-Encoding: de la petición actual, si existe. Por ejemplo: 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
Contenido de la cabecera Accept-Language: de la petición actual, si existe. Por ejemplo: 'en'.
'HTTP_CONNECTION'
Contenido de la cabecera Connection: de la petición actual, si existe. Por ejemplo: 'Keep-Alive'.
'HTTP_HOST'
Contenido de la cabecera Host: de la petición actual, si existe.
'HTTP_REFERER'
Dirección de la pagina (si la hay) que emplea el agente de usuario para la pagina actual. Es definido por el agente de usuario. No todos los agentes de usuarios lo definen y algunos permiten modificar HTTP_REFERER como parte de su funcionalidad. En resumen, es un valor del que no se puede confiar realmente.
'HTTP_USER_AGENT'
Contenido de la cabecera User-Agent: de la petición actual, si existe. Consiste en una cadena que indica el agente de usuario empleado para acceder a la pagina. Un ejemplo típico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre otras opciones, puede emplear dicho valor con get_browser() para personalizar el resultado de la salida de la página en función de las capacidades del agente de usuario empleado.
'HTTPS'
Ofrece un valor no vacío si el script es pedido mediante el protocolo HTTPS.

Nota: Tenga en cuenta que si se emplea ISAPI con IIS el valor será off si la petición no se ha realizado a través del protocolo HTTPS.

'REMOTE_ADDR'
La dirección IP desde la cual está viendo la página actual el usuario.
'REMOTE_HOST'
El nombre del host desde el cual está viendo la página actual el usuario. La obtención inversa del dns está basada en la REMOTE_ADDR del usuario.

Nota: Su servidor web debe estar configurado para crear esta variable. Por ejemplo en Apache necesita que exista HostnameLookups On dentro de httpd.conf. Consulte tambien gethostbyaddr().

'REMOTE_PORT'
El puerto empleado por la máquina del usuario para comunicarse con el servidor web.
'REMOTE_USER'
El usuario autenticado.
'REDIRECT_REMOTE_USER'
El usuario autenticado si la petición es redirigida internamente.
'SCRIPT_FILENAME'

La ruta del script ejecutándose actualmente en forma absoluta.

Nota:

Si un script se ejecuta mediante CLI como ruta relativa, como por ejemplo file.php o ../file.php, entonces $_SERVER['SCRIPT_FILENAME'] contendrá la ruta relativa especificada por el usuario.

'SERVER_ADMIN'
El valor dado a la directiva SERVER_ADMIN (de Apache) en el archivo de configuración del servidor web. Si el script se está ejecutando en un host virtual, el valor dado será el definido para dicho host virtual.
'SERVER_PORT'
El puerto de la máquina del servidor usado por el servidor web para la comunicación. Para las configuraciones por omisión, el valor será '80'; el empleo de SSL, por ejemplo, cambiará dicho valor al valor definido para el puerto HTTP seguro.
'SERVER_SIGNATURE'
Cadena que contiene la versión del servidor y el nombre del host virtual que son añadidas a las páginas generadas por el servidor, si esta habilitada esta funcionalidad.
'PATH_TRANSLATED'
Ruta de acceso basada en el sistema (no en el directorio raíz de documentos del servidor) del script actual, después de cualquier mapeo de virtual a real realizada por el servidor.

Nota: A partir de PHP 4.3.2, PATH_TRANSLATED no está definida de forma implícita en el SAPI de Apache 2, en comparación a la situación de Apache 1, donde era necesario establecer el mismo valor que la variable del servidor SCRIPT_FILENAME cuando no era proporcionada por Apache. Este cambio ha sido realizado para cumplir la especificación CGI donde PATH_TRANSLATED sólo debe existir si PATH_INFO esta definida. Los usuarios de Apache 2 pueden emplear AcceptPathInfo = On dentro de httpd.conf para definir PATH_INFO.

'SCRIPT_NAME'
Contiene la ruta del script actual. Esto es de utilidad para las páginas que necesiten apuntarse a si mismas. La constante __FILE__ contiene la ruta absoluta y el nombre del archivo actual incluido.
'REQUEST_URI'
La URI que se empleó para acceder a la página. Por ejemplo: '/index.html'.
'PHP_AUTH_DIGEST'
Cuando se hace autenticación Digest HTTP, esta variable se establece para el encabezado 'Authorization' enviado por el cliente (el cual se debe entonces usar para hacer la validación apropiada).
'PHP_AUTH_USER'
Cuando se hace autenticación HTTP, esta variable se establece para el nombre de usuario provisto por el usuario.
'PHP_AUTH_PW'
Cuando se hace autenticación HTTP, esta variable se establece para la clave provista por el usuario.
'AUTH_TYPE'
Cuando se hace autenticado HTTP, está variable se establece para el tipo de autenticación.
'PATH_INFO'
Contiene cualquier información sobre la ruta proporcionada por el cliente a continuación del nombre del fichero del script actual pero antecediendo a la cadena de la petición, si existe. Por ejemplo, si el script actual se accede a través de la URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, entonces $_SERVER['PATH_INFO'] contendrá /some/stuff.
'ORIG_PATH_INFO'
Versión original de 'PATH_INFO' antes de ser procesado por PHP.

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_SERVER que deprecaba $HTTP_SERVER_VARS.

Ejemplos

Ejemplo #1 Ejemplo de $_SERVER

<?php
echo $_SERVER['SERVER_NAME'];
?>

El resultado del ejemplo sería algo similar a:

www.example.com

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Ver también



$_GET

$HTTP_GET_VARS [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_GET -- $HTTP_GET_VARS [obsoleta]Variables HTTP GET

Descripción

Un array asociativo de variables pasado al script actual vía parámetros URL.

$HTTP_GET_VARS contiene la misma información, pero no es una superglobal. (Note que $HTTP_GET_VARS y $_GET son diferentes variables y que PHP los usa de forma diferente)

Historial de cambios

Versión Descripción
4.1.0 Se introduzco $_GET y $HTTP_GET_VARS quedó obsoleto.

Ejemplos

Ejemplo #1 Ejemplo de $_GET

<?php
echo 'Hola ' htmlspecialchars($_GET["nombre"]) . '!';
?>

Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes

El resultado del ejemplo sería algo similar a:

Hola Hannes!

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Nota:

Las variables GET son pasadas vía urldecode().



$_POST

$HTTP_POST_VARS [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_POST -- $HTTP_POST_VARS [obsoleta]Variables HTTP POST

Descripción

Un array asociativo de variables pasadas al script actual a través del método HTTP POST.

$HTTP_POST_VARS contiene la misma información inicial, pero no es una superglobal. (Nótese que $HTTP_POST_VARS y $_POST son diferentes variables y que PHP las trata de forma distinta)

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_POST y $HTTP_POST_VARS quedó obsoleta.

Ejemplos

Ejemplo #1 Ejemplo de $_POST

<?php
echo 'Hola ' htmlspecialchars($_POST["nombre"]) . '!';
?>

Asumiendo que el usuario envió por el método POST nombre=Juan

El resultado del ejemplo sería algo similar a:

Hola Juan!

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.



$_FILES

$HTTP_POST_FILES [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_FILES -- $HTTP_POST_FILES [obsoleta]Variables de Carga de Archivos HTTP

Descripción

Una variable tipo array asociativo de elementos cargados al script actual a través del método POST.

$HTTP_POST_FILES contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_POST_FILES y $_FILES son variables diferentes y que PHP las trata como tal)

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_FILES, haciendo $HTTP_POST_FILES obsoleta.

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Ver también



$_REQUEST

(PHP 4 >= 4.1.0, PHP 5)

$_REQUESTVariables HTTP Request

Descripción

Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.

Historial de cambios

Versión Descripción
5.3.0 Se introdujo request_order. Esta directiva afecta al contenido de $_REQUEST.
4.3.0 Se eliminó la información $_FILES de $_REQUEST.
4.1.0 Se introdujo $_REQUEST.

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Nota:

Cuando se ejecuta en la línea de comandos , no se incluirán las entradas argv y argc; ya que están presentes en el array $_SERVER

Nota:

Las variables en $_REQUEST se proporcionan al script a través de los mecanismos de entrada GET, POST, y COOKIE y por lo tanto pueden ser manipulados por el usuario remoto y no debe confiar en el contenido. La presencia y el orden de las variables listadas en este array se definen según la directiva de configuración PHP variables_order.

Ver también



$_SESSION

$HTTP_SESSION_VARS [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_SESSION -- $HTTP_SESSION_VARS [obsoleta]Variables de sesión

Descripción

Es un array asociativo que contiene variables de sesión disponibles para el script actual. Ver la documentación de Funciones de sesión para más información sobre su uso.

$HTTP_SESSION_VARS contiene la misma información inicial pero no es una superglobal. (Nótese que $HTTP_SESSION_VARS y $_SESSION son diferentes variables y PHP las trata de forma distinta)

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_SESSION y $HTTP_SESSION_VARS quedó absoleta.

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Ver también



$_ENV

$HTTP_ENV_VARS [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_ENV -- $HTTP_ENV_VARS [obsoleta]Variables de entorno

Descripción

Una variable tipo array asociativo de variables pasadas al script actual a través del método del entorno.

Estas variables son importadas en el espacio de nombres global de PHP desde el entorno bajo el que está siendo ejecutado el intérprete PHP. Muchas son entregadas por el intérprete de comandos bajo el que PHP está corriendo y diferentes sistemas suelen tener diferentes tipos de intérpretes de comandos, una lista definitiva es imposible. Por favor consulte la documentación de su intérprete de comandos para una lista de las variables de entorno que se definen.

Otras variables de entorno incluyen las variables CGI, colocadas allí independientemente de que PHP esté siendo ejecutado como módulo del servidor o procesador CGI.

$HTTP_ENV_VARS contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_ENV_VARS y $_ENV son variables diferentes y que PHP las trata como tal)

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_ENV, haciendo $HTTP_ENV_VARS obsoleta.

Ejemplos

Ejemplo #1 Ejemplo de $_ENV

<?php
echo '¡Mi nombre de usuario es ' $_ENV["USER"] . '!';
?>

Asumiendo que "bjori" ejecuta este script

El resultado del ejemplo sería algo similar a:

¡Mi nombre de usuario es bjori!

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.

Ver también



$_COOKIE

$HTTP_COOKIE_VARS [obsoleta]

(PHP 4 >= 4.1.0, PHP 5)

$_COOKIE -- $HTTP_COOKIE_VARS [obsoleta]Cookies HTTP

Descripción

Una variable tipo array asociativo de variables pasadas al script actual a través de Cookies HTTP.

$HTTP_COOKIE_VARS contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_COOKIE_VARS y $_COOKIE son variables diferentes y que PHP las trata como tal)

Historial de cambios

Versión Descripción
4.1.0 Se introdujo $_COOKIE, haciendo $HTTP_COOKIE_VARS obsoleta.

Ejemplos

Ejemplo #1 Ejemplo de $_COOKIE

<?php
echo '¡Hola ' htmlspecialchars($_COOKIE["nombre"]) . '!';
?>

Asumiendo que la cookie "nombre" ha sido definida anteriormente

El resultado del ejemplo sería algo similar a:

¡Hola Juan!

Notas

Nota:

Esta es una 'superglobal' o una variable automatic global. Significa simplemente que es una variable que está disponible en cualquier parte del script. No hace falta hacer global $variable; para acceder a la misma desde funciones o métodos.



$php_errormsg

(PHP 4, PHP 5)

$php_errormsgEl último mensaje de error

Descripción

$php_errormsg es una variable que contiene el texto del último mensaje de error generado por PHP. Esta variable solo está disponible en el entorno en donde el error ocurrió y solamente funcionará si la opción de configuración track_errors está activada on (por defecto es off).

Nota: Esta variable solamente está disponible cuando la directiva track_errors está activada en el php.ini.

Advertencia

Si el usuario ha definido un controlador de errores (set_error_handler()), $php_errormsg tendrá un valor solamente si el controlador de errores devuelve FALSE

Ejemplos

Ejemplo #1 Ejemplo de $php_errormsg

<?php
@strpos();
echo 
$php_errormsg;
?>

El resultado del ejemplo sería algo similar a:

Wrong parameter count for strpos()



$HTTP_RAW_POST_DATA

(PHP 4, PHP 5)

$HTTP_RAW_POST_DATADatos POST sin tratar

Descripción

$HTTP_RAW_POST_DATA contiene los datos POST sin tratar. Véase always_populate_raw_post_data



$http_response_header

(PHP 4 >= 4.0.4, PHP 5)

$http_response_headerEncabezados de respuesta HTTP

Descripción

El array $http_response_header es similar a la functión get_headers(). Cuando se hace uso de HTTP wrapper, $http_response_header será poblado con los encabezados de respuesta HTTP. $http_response_header será creada en el ámbito global.

Ejemplos

Ejemplo #1 Ejemplo de $http_response_header

<?php
function get_contents() {
  
file_get_contents("http://example.com");
  
var_dump($http_response_header);
}
get_contents();
var_dump($http_response_header);
?>

El resultado del ejemplo sería algo similar a:

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}
NULL



$argc

(PHP 4, PHP 5)

$argcEl número de argumentos pasados a un script

Descripción

Contiene el número de argumentos pasados al script actual cuando se ejecuta desde la línea de comandos.

Nota: El nombre del script es pasado siempre como argumento del script, por lo tanto, el valor mínimo de $argc es 1.

Nota: Esta variable sólo está disponible cuando register_argc_argv está activado.

Ejemplos

Ejemplo #1 Ejemplo de $argc

<?php
var_dump
($argc);
?>

Cuando se ejecuta el ejemplo con: php script.php arg1 arg2 arg3

El resultado del ejemplo sería algo similar a:

int(4)



$argv

(PHP 4, PHP 5)

$argvArray de argumentos pasados a un script

Descripción

Contiene un array de todos los argumentos pasados a un script cuando se ejecuta desde la línea de comandos.

Nota: El primer argumento $argv[0] siempre es el nombre del fichero que fue usado para ejecutar el script.

Nota: Esta variable no está disponible si register_argc_argv está deshabilitado.

Ejemplos

Ejemplo #1 Ejemplo de $argv

<?php
var_dump
($argv);
?>

Cuando se ejecuta el ejemplo con: php script.php arg1 arg2 arg3

El resultado del ejemplo sería algo similar a:

array(4) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

Ver también

  • getopt() - Obtiene las opciones de la lista de argumentos de la línea de comandos


Tabla de contenidos

  • Superglobals — Superglobals son variables internas que están disponibles siempre en todos los ámbitos
  • $GLOBALS — Hace referencia a todas las variables disponibles en el ámbito global
  • $_SERVER — Información del entorno del servidor y de ejecución
  • $_GET — Variables HTTP GET
  • $_POST — Variables HTTP POST
  • $_FILES — Variables de Carga de Archivos HTTP
  • $_REQUEST — Variables HTTP Request
  • $_SESSION — Variables de sesión
  • $_ENV — Variables de entorno
  • $_COOKIE — Cookies HTTP
  • $php_errormsg — El último mensaje de error
  • $HTTP_RAW_POST_DATA — Datos POST sin tratar
  • $http_response_header — Encabezados de respuesta HTTP
  • $argc — El número de argumentos pasados a un script
  • $argv — Array de argumentos pasados a un script


Excepciones predefinidas

Tabla de contenidos

Ver también las Excepciones SPL


Exception

(PHP 5 >= 5.1.0)

Introducción

Exception es la clase base para todas las excepciones.

Sinopsis de la Clase

Exception {
/* Propiedades */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* Métodos */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )
final public mixed getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

Propiedades

message

El mensaje de la excepción

code

El código de la excepción

file

El nombre del fichero donde se originó la excepción

line

La línea donde se originó la excepción


Exception::__construct

(PHP 5 >= 5.1.0)

Exception::__constructConstructor de la excepción

Descripción

public Exception::__construct() ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )

Construye la Excepción.

Parámetros

message

Mensaje de la Excepción a lanzar.

code

El código de la Excepción.

previous

La excepción previa usada por el encadenado de la excepción.

Historial de cambios

Versión Descripción
5.3.0 Se añadió el parámetro previous.

Notas

Nota:

El message NO es seguro binariamente.



Exception::getMessage

(PHP 5 >= 5.1.0)

Exception::getMessageObtiene el mensaje de Excepción

Descripción

final public string Exception::getMessage ( void )

Devuelve el mensaje de Excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el mensaje de Excepción en formato cadena.

Ejemplos

Ejemplo #1 Ejemplo de Exception::getMessage()

<?php
try {
    throw new 
Exception("Algún mensaje de error");
} catch(
Exception $e) {
    echo 
$e->getMessage();
}
?>

El resultado del ejemplo sería algo similar a:

Algún mensaje de error



Exception::getPrevious

(PHP 5 >= 5.3.0)

Exception::getPreviousDevuelve la Excepción anterior

Descripción

final public Exception Exception::getPrevious ( void )

Devuelve la Excepción anterior (el tercer parámetro de Exception::__construct()).

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve la anterior Exception si está disponible o NULL en caso contrario.

Ejemplos

Ejemplo #1 Ejemplo de Exception::getPrevious()

Recorre e imprime las excepciones.

<?php
class MyCustomException extends Exception {}

function 
doStuff() {
    try {
        throw new 
InvalidArgumentException("You are doing it wrong!"112);
    } catch(
Exception $e) {
        throw new 
MyCustomException("Something happend"911$e);
    }
}


try {
    
doStuff();
} catch(
Exception $e) {
    do {
        
printf("%s:%d %s (%d) [%s]\n"$e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e));
    } while(
$e $e->getPrevious());
}
?>

El resultado del ejemplo sería algo similar a:

/home/bjori/ex.php:8 Something happend (911) [MyCustomException]
/home/bjori/ex.php:6 You are doing it wrong! (112) [InvalidArgumentException]



Exception::getCode

(PHP 5 >= 5.1.0)

Exception::getCodeObtiene el código de Excepción

Descripción

final public mixed Exception::getCode ( void )

Devuelve el código de Excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el código de Excepción en forma de integer en Exception pero posiblemente en forma de otros tipos en Exception descendientes (por ejemplo como string en PDOException).

Ejemplos

Ejemplo #1 Ejemplo de Exception::getCode()

<?php
try {
    throw new 
Exception("Un mensaje de error"30);
} catch(
Exception $e) {
    echo 
"El código de excepción es: " $e->getCode();
}
?>

El resultado del ejemplo sería algo similar a:

El código de excepción es: 30



Exception::getFile

(PHP 5 >= 5.1.0)

Exception::getFileObtiene el fichero en el que ocurrió la excepción

Descripción

final public string Exception::getFile ( void )

Obtiene el nombre del fichero desde donde fue creada la excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el nombre del fichero en donde fue creada la excepción.

Ejemplos

Ejemplo #1 Ejemplo de Exception::getFile()

<?php
try {
    throw new 
Exception;
} catch(
Exception $e) {
    echo 
$e->getFile();
}
?>

El resultado del ejemplo sería algo similar a:

/home/bjori/tmp/ex.php



Exception::getLine

(PHP 5 >= 5.1.0)

Exception::getLineObtiene la línea en donde ocurrió la excepción

Descripción

final public int Exception::getLine ( void )

Devuelve el número de la línea donde se creó la excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el número de la línea donde se creó la excepción.

Ejemplos

Ejemplo #1 Ejemplo de Exception::getLine()

<?php
try {
    throw new 
Exception("Algún mensaje de error");
} catch(
Exception $e) {
    echo 
"La excepción se creó en la línea: " $e->getLine();
}
?>

El resultado del ejemplo sería algo similar a:

La excepción se creó en la línea: 3



Exception::getTrace

(PHP 5 >= 5.1.0)

Exception::getTraceObtiene el seguimiento de la pila

Descripción

final public array Exception::getTrace ( void )

Devuelve el seguimiento de pila de excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el seguimiento de pila de excepción como un array.

Ejemplos

Ejemplo #1 Exception::getTrace() example

<?php
function test() {
 throw new 
Exception;
}

try {
 
test();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

El resultado del ejemplo sería algo similar a:

array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(22) "/home/bjori/tmp/ex.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(4) "test"
    ["args"]=>
    array(0) {
    }
  }
}



Exception::getTraceAsString

(PHP 5 >= 5.1.0)

Exception::getTraceAsStringObtiene el stack trace como cadena

Descripción

final public string Exception::getTraceAsString ( void )

Devuelve el stack trace de la Excepción como cadena.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el stack trace de la Excepción como cadena.

Ejemplos

Ejemplo #1 Ejemplo de Exception::getTraceAsString()

<?php
function test() {
    throw new 
Exception;
}

try {
    
test();
} catch(
Exception $e) {
    echo 
$e->getTraceAsString();
}
?>

El resultado del ejemplo sería algo similar a:

#0 /home/bjori/tmp/ex.php(7): test()
#1 {main}



Exception::__toString

(PHP 5 >= 5.1.0)

Exception::__toStringRepresentación de la excepción en formato cadena

Descripción

public string Exception::__toString ( void )

Devuelve la representación de la excepción en formato string.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve la representación de la excepción en formato string.

Ejemplos

Ejemplo #1 Ejemplo de Exception::__toString()

<?php
try {
    throw new 
Exception("Some error message");
} catch(
Exception $e) {
    echo 
$e;
}
?>

El resultado del ejemplo sería algo similar a:

exception 'Exception' with message 'Some error message' in /home/bjori/tmp/ex.php:3
Stack trace:
#0 {main}



Exception::__clone

(PHP 5 >= 5.1.0)

Exception::__cloneClona la excepción

Descripción

final private void Exception::__clone ( void )

Intenta clonar la Excepción, lo que resultará en un error Fatal.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Las Excepciones no se pueden clonar.


Tabla de contenidos



ErrorException

(PHP 5 >= 5.1.0)

Introducción

Un error de excepción.

Sinopsis de la Clase

ErrorException extends Exception {
/* Propiedades */
protected int $severity ;
/* Métodos */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )
final public int getSeverity ( void )
/* Métodos heredados */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public mixed Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}

Propiedades

severity

La gravedad de la excepción

Ejemplos

Ejemplo #1 Use set_error_handler() para convertir mensajes de error en errores de excepción.

<?php
function exception_error_handler($errno$errstr$errfile$errline ) {
    throw new 
ErrorException($errstr0$errno$errfile$errline);
}
set_error_handler("exception_error_handler");

/* Trigger exception */
strpos();
?>

El resultado del ejemplo sería algo similar a:

Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
  thrown in /home/bjori/tmp/ex.php on line 8


ErrorException::__construct

(PHP 5 >= 5.1.0)

ErrorException::__constructConstructor de la Excepción

Descripción

public ErrorException::__construct() ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )

Construye la Excepción.

Parámetros

message

Mensaje de la Excepción a lanzar.

code

El código de la Excepción.

severity

Nivel de la severidad de la Excepción.

filename

Nombre del fichero donde se lanzó la Excepción.

lineno

Número de la línea donde se produjo la excepción.

previous

La anterior excepción utilizada para la excepción de encadenamiento.



ErrorException::getSeverity

(PHP 5 >= 5.1.0)

ErrorException::getSeverityObtiene la severidad de la excepción

Descripción

final public int ErrorException::getSeverity ( void )

Devuelve la severidad de la excepción.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el nivel de la severidad de la excepción.

Ejemplos

Ejemplo #1 Ejemplo de ErrorException::getSeverity()

<?php
try {
    throw new 
ErrorException("Exception message"075);
} catch(
ErrorException $e) {
    echo 
"La severidad de la excepción es: " $e->getSeverity();
}
?>

El resultado del ejemplo sería algo similar a:

La severidad de la excepción es: 75


Tabla de contenidos




Interfaces predefinidas

Tabla de contenidos

Ver también Interfaces SPL


La interfaz Traversable

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Interfaz para detectar si una clase es tranvesable mediante foreach.

Una interfaz abstracta básica no puede ser implementada por su cuenta. Sin embargo debe ser implementada con IteratorAggregate o Iterator.

Nota:

Las clases internas que implementan esta interfaz pueden ser usadas en una construcción foreach y no necesitan implementar IteratorAggregate o Iterator.

Nota:

Este es el motor interno de una interfaz que no puede ser implementada en códigos de PHP. Se debe emplear en su lugar tanto IteratorAggregate como Iterator.

Sinopsis de la Interfaz

Traversable {
}

Esta interfaz no tiene métodos, ya que su único propósito es servir de interfaz básica para todas las clases traversable.



La interfaz Iterator

(PHP 5 >= 5.0.0)

Introducción

Interfaz para iteradores externos u objetos que pueden ser iterados internamente por sí mismos.

Sinopsis de la Interfaz

Iterator extends Traversable {
/* Métodos */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

Iteradores Predefinidos

PHP ya ofrece un número de iteradores para muchas de las tareas del día a día. Véase la lista de iteradores SPL.

Ejemplos

Ejemplo #1 Uso básico

Este ejemplo muestra el orden en el que se llaman a los métodos cuando se emplea un foreach con un iterator.

<?php
class myIterator implements Iterator {
    private 
$position 0;
    private 
$array = array(
        
"firstelement",
        
"secondelement",
        
"lastelement",
    );  

    public function 
__construct() {
        
$this->position 0;
    }

    function 
rewind() {
        
var_dump(__METHOD__);
        
$this->position 0;
    }

    function 
current() {
        
var_dump(__METHOD__);
        return 
$this->array[$this->position];
    }

    function 
key() {
        
var_dump(__METHOD__);
        return 
$this->position;
    }

    function 
next() {
        
var_dump(__METHOD__);
        ++
$this->position;
    }

    function 
valid() {
        
var_dump(__METHOD__);
        return isset(
$this->array[$this->position]);
    }
}

$it = new myIterator;

foreach(
$it as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

El resultado del ejemplo sería algo similar a:

string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

Iterator::current

(PHP 5 >= 5.0.0)

Iterator::currentDevuelve el elemento actual

Descripción

abstract public mixed Iterator::current ( void )

Devuelve el elemento actual.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Puede devolver cualquier tipo.



Iterator::key

(PHP 5 >= 5.0.0)

Iterator::keyDevuelve la clave del elemento actual

Descripción

abstract public scalar Iterator::key ( void )

Devuelve la clave del elemento actual.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve scalar en caso de éxito, o NULL en caso de error.

Errores/Excepciones

Muestra un E_NOTICE en caso de error.



Iterator::next

(PHP 5 >= 5.0.0)

Iterator::nextAvanza al siguiente elemento

Descripción

abstract public void Iterator::next ( void )

Avanza la posición actual al siguiente elemento.

Nota:

El método es llamado después de cada foreach loop.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

El valor devuelto es ignorado.



Iterator::rewind

(PHP 5 >= 5.0.0)

Iterator::rewindRebobine la Iterator al primer elemento

Descripción

abstract public void Iterator::rewind ( void )

Rebobina de nuevo al primer elemento de la Iterator.

Nota:

Este es el primer método llamado cuando se inicia un foreach bucle. No va a ser ejecutado despues foreach bucle.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Cualquier valor devuelto se pasa por alto.



Iterator::valid

(PHP 5 >= 5.0.0)

Iterator::validComprueba si la posición actual es válido

Descripción

abstract public boolean Iterator::valid ( void )

Este método se llama después de Iterator::rewind() y Iterator::next() para comprobar si la posición actual es válido.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

El valor de retorno se debe fundir a boolean y luego evaluar. Devuelve TRUE en caso de éxito o FALSE en caso de error.


Tabla de contenidos



La interfaz IteratorAggregate

(PHP 5 >= 5.0.0)

Introducción

Para crear una interfaz externa Iterator.

Sinopsis de la Interfaz

IteratorAggregate extends Traversable {
/* Métodos */
abstract public Traversable getIterator ( void )
}

Ejemplo #1 Uso básico

<?php
class myData implements IteratorAggregate {
    public 
$property1 "Public property one";
    public 
$property2 "Public property two";
    public 
$property3 "Public property three";

    public function 
__construct() {
        
$this->property4 "last property";
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this);
    }
}

$obj = new myData;

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

El resultado del ejemplo sería algo similar a:

string(9) "property1"
string(19) "Public property one"

string(9) "property2"
string(19) "Public property two"

string(9) "property3"
string(21) "Public property three"

string(9) "property4"
string(13) "last property"


IteratorAggregate::getIterator

(PHP 5 >= 5.0.0)

IteratorAggregate::getIteratorRecuperar un Iterator externo

Descripción

abstract public Traversable IteratorAggregate::getIterator ( void )

Devuelve un iterador externo.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Una instancia de un objeto que implementa Iterator o Traversable

Errores/Excepciones

Lanza una Exception en caso de fallo.


Tabla de contenidos



La interfaz ArrayAccess

(PHP 5 >= 5.0.0)

Introducción

Interfaz para proporcionar acceso a objetos como arrays.

Sinopsis de la Interfaz

ArrayAccess {
/* Métodos */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}

Ejemplo #1 Uso básico

<?php
class obj implements arrayaccess {
    private 
$container = array();
    public function 
__construct() {
        
$this->container = array(
            
"one"   => 1,
            
"two"   => 2,
            
"three" => 3,
        );
    }
    public function 
offsetSet($offset$value) {
        if (
is_null($offset)) {
            
$this->container[] = $value;
        } else {
            
$this->container[$offset] = $value;
        }
    }
    public function 
offsetExists($offset) {
        return isset(
$this->container[$offset]);
    }
    public function 
offsetUnset($offset) {
        unset(
$this->container[$offset]);
    }
    public function 
offsetGet($offset) {
        return isset(
$this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new obj;

var_dump(isset($obj["two"]));
var_dump($obj["two"]);
unset(
$obj["two"]);
var_dump(isset($obj["two"]));
$obj["two"] = "A value";
var_dump($obj["two"]);
$obj[] = 'Append 1';
$obj[] = 'Append 2';
$obj[] = 'Append 3';
print_r($obj);
?>

El resultado del ejemplo sería algo similar a:

bool(true)
int(2)
bool(false)
string(7) "A value"
obj Object
(
    [container:obj:private] => Array
        (
            [one] => 1
            [three] => 3
            [two] => A value
            [0] => Append 1
            [1] => Append 2
            [2] => Append 3
        )

)

ArrayAccess::offsetExists

(PHP 5 >= 5.0.0)

ArrayAccess::offsetExistsComprobar si existe o no un índice

Descripción

abstract public boolean ArrayAccess::offsetExists ( mixed $offset )

Comprueba si existe o no un índice.

Este método se ejecuta cuando se utilizan las funciones isset() o empty() sobre los objetos ArrayAccess.

Nota:

Cuando se utiliza empty() ArrayAccess::offsetGet() se puede llamar y comprobar si está vacío sólo si ArrayAccess::offsetExists() devuelve TRUE.

Parámetros

offset

El índice a ser comprobado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Nota:

El valor de retorno se debe forzar a boolean si no devuelve un valor boleano.

Ejemplos

Ejemplo #1 Ejemplo de ArrayAccess::offsetExists()

<?php
class obj implements arrayaccess {
    public function 
offsetSet($offset$value) {
        
var_dump(__METHOD__);
    }
    public function 
offsetExists($var) {
        
var_dump(__METHOD__);
        if (
$var == "foobar") {
            return 
true;
        }
        return 
false;
    }
    public function 
offsetUnset($var) {
        
var_dump(__METHOD__);
    }
    public function 
offsetGet($var) {
        
var_dump(__METHOD__);
        return 
"value";
    }
}

$obj = new obj;

echo 
"Runs obj::offsetExists()\n";
var_dump(isset($obj["foobar"]));

echo 
"\nRuns obj::offsetExists() and obj::offsetGet()\n";
var_dump(empty($obj["foobar"]));

echo 
"\nRuns obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get\n";
var_dump(empty($obj["foobaz"]));
?>

El resultado del ejemplo sería algo similar a:

Runs obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Runs obj::offsetExists() and obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Runs obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get
string(17) "obj::offsetExists"
bool(true)



ArrayAccess::offsetGet

(PHP 5 >= 5.0.0)

ArrayAccess::offsetGetOffset para recuperar

Descripción

abstract public mixed ArrayAccess::offsetGet ( mixed $offset )

Devuelve el valor correspondiente a desplazamiento especificado.

Este método se ejecuta para comprobar si el desplazamiento es empty().

Parámetros

offset

El desplazamiento va a recuperar.

Notas

Nota:

A partir de PHP 5.3.4, el prototipo de los controles se relajaron y es posible para las implementaciones de este método para devolver por referencia. Esto hace que las modificaciones indirectas a las dimensiones de los arreglos sobrecargados de objetos ArrayAccess posibles.

Una modificación directa es aquella que reemplaza completamente el valor de la dimensión de el arreglo, como en $obj[6] = 7. Una modificación indirecta, por el contrario, sólo una parte los cambios de la dimensión, o los intentos de asignar la dimensión en función de otra variable, como en $obj[6][7] = 7 o $var =& $obj[6]. Con incrementos ++ y disminye con -- también se aplican de una manera que requiere la modificación indirecta.

Si bien la modificación directa desencadena una llamada a ArrayAccess::offsetSet(), modificación indirecta provoca una llamada a ArrayAccess::offsetGet(). En ese caso, la aplicación de ArrayAccess::offsetGet() debe ser capaz de volver por la referencia, de lo contrario un E_NOTICE mensaje es elevado..

Valores devueltos

Puede devolver todos los tipos de valor.

Ver también



ArrayAccess::offsetSet

(PHP 5 >= 5.0.0)

ArrayAccess::offsetSetInicializa un offset

Descripción

abstract public void ArrayAccess::offsetSet ( mixed $offset , mixed $value )

Asigna un valor a un offset determinado.

Parámetros

offset

El offset al que se asigna el valor.

value

El valor a asignar.

Valores devueltos

No devuelve ningún valor.

Notas

Nota:

El parámetro offset será inicializado a NULL si otro valor no está disponible, como en el siguiente ejemplo.

<?php
$arrayaccess
[] = "primer valor";
$arrayaccess[] = "segundo valor";
print_r($arrayaccess);
?>

El resultado del ejemplo sería:

Array
(
    [0] => primer valor
    [1] => segundo valor
)

Nota:

Esta función no es invocada al realizar asignaciones por referencias y por tanto en los cambios de dimensiones en arrays sobrecargados con ArrayAccess (indirecto en el sentido de que no se hace cambiando la dimensión directamente, sino cambiando una sub-dimensión o sub-propiedad o asignando la dimensión del array por referencia en otra variable). En su lugar, se llama a ArrayAccess::offsetGet(). La operación tendrá éxito si devuelve el valor por referencia, lo cuál sólo es posible desde PHP 5.3.4.



ArrayAccess::offsetUnset

(PHP 5 >= 5.0.0)

ArrayAccess::offsetUnsetDestruye un offset

Descripción

abstract public void ArrayAccess::offsetUnset ( mixed $offset )

Destruye un offset.

Nota:

Este método no será llamado cuando se fuerza un tipo mediante (unset)

Parámetros

offset

El offset a destruir.

Valores devueltos

No devuelve ningún valor.


Tabla de contenidos



La interfaz Serializable

(PHP 5 >= 5.1.0)

Introducción

Interfaz para personalizar la serialización.

Las clases que implementan esta interfaz no soportan __sleep() ni __wakeup(). El método serialize se llama cuando una instancia requiere ser serializada. Esto no invoca __destruct() ni tiene ningún efecto adicional a menos que se programe dentro del método. Cuando los datos son deserializados, la clase es conocida y el correspondiente método unserialize() es llamado como constructor en lugar de llamar al método __construct(). Se puede ejecutar el constructor estándar en el método si fuera necesario.

Sinopsis de la Interfaz

Serializable {
/* Métodos */
abstract public string serialize ( void )
abstract public void unserialize ( string $serialized )
}

Ejemplo #1 Uso básico

<?php
class obj implements Serializable {
    private 
$data;
    public function 
__construct() {
        
$this->data "Mis datos privados";
    }
    public function 
serialize() {
        return 
serialize($this->data);
    }
    public function 
unserialize($data) {
        
$this->data unserialize($data);
    }
    public function 
getData() {
        return 
$this->data;
    }
}

$obj = new obj;
$ser serialize($obj);

var_dump($ser);

$newobj unserialize($ser);

var_dump($newobj->getData());
?>

El resultado del ejemplo sería algo similar a:

string(38) "C:3:"obj":23:{s:15:"Mis datos privados";}"
string(15) "Mis datos privados"

Serializable::serialize

(PHP 5 >= 5.1.0)

Serializable::serializeRepresentación en formato cadena de un objeto

Descripción

abstract public string Serializable::serialize ( void )

Devuelve la representación de un objeto en formato string.

Nota:

Este método actúa como el destructor del objeto. El método __destruct() no será llamado después de usar este método.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve la representación de un objeto o NULL

Errores/Excepciones

Lanza una Exception cuando de devuelen otros tipos de string y NULL

Ver también



Serializable::unserialize

(PHP 5 >= 5.1.0)

Serializable::unserializeConstruye el objeto

Descripción

abstract public void Serializable::unserialize ( string $serialized )

Es llamado durante la unserialización del objeto.

Nota:

Este método actua como el constructor del objeto. El método __construct() no será llamado después de este método.

Parámetros

serialized

La representación en formato string de un objeto.

Valores devueltos

El valor devuelto por este método es ignorado.

Ver también


Tabla de contenidos



La clase Closure

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Clase usada para representar funciones anónimas.

Las funciones anónimas, implementadas en PHP 5.3, producían objetos de este tipo. Este hecho solía ser considerado como un detalle de implementación, pero ahora puede confiarse en él. Desde PHP 5.4, esta clase tiene métodos que permiten más control de las funciones anónimas después de que hayan sido creadas.

Además de los métodos listados aquí, esta clase también posse un método __invoke. Esto es por consistencia con otras clases que implementan la llamada mágica, ya que este método no se usa para llamar a la función.

Sinopsis de la Clase

Closure {
/* Métodos */
__construct ( void )
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
}

Closure::__construct

(No hay información de versión disponible, podría estar únicamente en SVN)

Closure::__constructConstructor que anula la instanciación

Descripción

Closure::__construct ( void )

Este método sólo existe para anular la instanciación de la clase Closure. Los objetos de esta clase se crean del modo descrito en la página funciones anónimas.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Este método no tiene un valor de retorno; simplemente emite un error (de tipo E_RECOVERABLE_ERROR).

Ver también



Closure::bind

(No hay información de versión disponible, podría estar únicamente en SVN)

Closure::bind Duplicar un cierre con un objeto vinculado y ámbito de clase especificados

Descripción

public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )

Este método es una versión estática de Closure::bindTo(). Véase la documentación de ese método para más información.

Parámetros

closure

La función anónima a vincular.

newthis

El objeto al que la función anónima dada debería ser vinculado, o NULL para que el cierre sea desvinculado.

newscope

El ámbito de clase a la que asociar el cierre, o 'static' para mantener el actual. Si se da un objeto, el tipo del objeto se usará en su lugar. Esto determina la visibilidad de métodos protegidos y privados del objeto vinculado.

Valores devueltos

Devuelve un nuevo objeto Closure o FALSE en caso de error

Ejemplos

Ejemplo #1 Ejemplo de Closure::bind()

<?php
class {
    private static 
$sfoo 1;
    private 
$ifoo 2;
}
$cl1 = static function() {
    return 
A::$sfoo;
};
$cl2 = function() {
    return 
$this->ifoo;
};

$bcl1 Closure::bind($cl1null'A');
$bcl2 Closure::bind($cl2, new A(), 'A');
echo 
$bcl1(), "\n";
echo 
$bcl2(), "\n";
?>

El resultado del ejemplo sería algo similar a:

1
2

Ver también



Closure::bindTo

(No hay información de versión disponible, podría estar únicamente en SVN)

Closure::bindTo Duplicar el cierre con un objeto vinculado y ámbito de clase nuevos

Descripción

public Closure Closure::bindTo ( object $newthis [, mixed $newscope = 'static' ] )

Crea y devuelve una nueva función anónima con el cuerpo y variables vinculadas como ésta, pero posiblemente con un objeto vinculado diferente y un nuevo ámbito de clase.

El "objeto vinculado" determina el valor que $this tendrá en el cuerpo de la función, y el "ámbito de clase" representa una clase que determina los miembros privados y protegidos a los que será capaz de acceder la función anónima. Concretamente, los miembros que serán visibles son los mismos que si la función anónima fuese un método de la clase dada como valor del parámetro newscope.

Los cierres estáticos no pueden tener ningún objeto vinculado (el valor del parámetro newthis debería ser NULL), pero esta función puede, no obstante, usarse para cambiar su ámbito de clase.

Esta función se asegurará de que un cierre no estático que tenga una instancia vinculada se le aplique un ámbito y viceversa. En este punto, los cierres no estáticos que le son dados un ámbito, excepto una instancia NULL, son hechos estáticos, y los cierres no estáticos y sin ámbito que le son dados una instancia no nula se les aplica un ámbito de clase no especificada.

Nota:

Si solamente se quieren duplicar las funciones anónimas, se puede usar cloning en su lugar.

Parámetros

newthis

El objeto al que la función anónima dada debería ser vinculado, o NULL para que el cierre sea desvinculado.

newscope

El ámbito de clase a la que asociar el cierre, o 'static' para mantener el actual. Si se da un objeto, el tipo del objeto se usará en su lugar. Esto determina la visibilidad de métodos protegidos y privados del objeto vinculado.

Valores devueltos

Devuelve el objeto Closure recién creado o FALSE en caso de error

Ejemplos

Ejemplo #1 Ejemplo de Closure::bindTo()

<?php

class {
    function 
__construct($val) {
        
$this->val $val;
    }
    function 
getClosure() {
        
//devuelve el cierre vinculado a este objeto y el ámbito
        
return function() { return $this->val; };
    }
}

$ob1 = new A(1);
$ob2 = new A(2);

$cl $ob1->getClosure();
echo 
$cl(), "\n";
$cl $cl->bindTo($ob2);
echo 
$cl(), "\n";
?>

El resultado del ejemplo sería algo similar a:

1
2

Ver también


Tabla de contenidos

  • Closure::__construct — Constructor que anula la instanciación
  • Closure::bind — Duplicar un cierre con un objeto vinculado y ámbito de clase especificados
  • Closure::bindTo — Duplicar el cierre con un objeto vinculado y ámbito de clase nuevos



Opciones de contexto y parámetros

PHP ofrece varias opciones y parámetros de contexto que pueden ser usados con todas las envolturas del sistema de archivos y las secuencias. El contexto es creado con stream_context_create(). Las opciones son definidas con stream_context_set_option() y los parámetros con stream_context_set_params().


Opciones de contexto de sockets

Opciones de contexto de socketsListado de opciones de contexto de sockets

Descripción

Las opciones de contexto de sockets están disponibles para todas las envolturas que trabajan sobre sockets, como tcp, http y ftp.

Opciones

bindto

Usada para especificar la dirección IP (ya sea IPv4 o IPv6) y/o el número de puerto que PHP usará para acceder a la red. La sintaxis es ip:puerto. Definir el número IP o de puerto como 0 producirá que el sistema lo elija por usted.

Nota:

Dado que FTP crea dos conexiones de socket durante la operación normal, no es posible especificar el número de puerto con esta opción.

backlog

Usado para limitar el número de conexiones pendientes en la cola de escucha del socket.

Nota:

Solamente se aplica a stream_socket_server().

Historial de cambios

Versión Descripción
5.1.0 Se agregó bindto.
5.3.3 Se agregó backlog.

Ejemplos

Ejemplo #1 Ejemplo de uso básico de bindto

<?php
// conectarse a internet usando la IP '192.168.0.100'
$opciones = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// conectarse a internet usando la IP '192.168.0.100' y el puerto '7000'
$opciones = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// conectarse a internet usando el puerto '7000'
$opciones = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// crear el contexto...
$contexto stream_context_create($opciones);

// ...y usarlo para recuperar los datos
echo file_get_contents('http://www.example.com'false$contexto);

?>



Opciones de contexto de HTTP

Opciones de contexto de HTTPLista de opciones de contexto de HTTP

Descripción

Opciones de contexto para los transports http:// y https://.

Opciones

method string

GET, POST, o cualquier otro método HTTP que soporte el servidor remoto.

Por omisión, GET.

header string

Cabeceras adicionales que se envían en la petición. Los valores sobrescribirán los existentes (como por ejemplo User-agent:, Host:, o Authentication:).

user_agent string

Valor de la cabecera User-Agent:. Sólo se utilizará si el user-agent no se ha especificado en la opción de contexto header vista arriba.

por omisión se utiliza el valor del ajuste user_agent en php.ini.

content string

Datos adicionales a enviar tras las cabeceras. Típicamente se utiliza con peticiones POST o PUT.

proxy string

URI que define la dirección de un servidor proxy (p.ej. tcp://proxy.example.com:5100).

request_fulluri boolean

Si vale TRUE, se utilizará toda la URI para construir la petición. (es decir, GET http://www.example.com/path/to/file.html HTTP/1.0). A pesar de que es un formato de petición no estándar, algunos servidores proxy requieren que sea así.

Defaults to FALSE.

follow_location integer

Seguir la redirecciones Location: ...

Por omisión TRUE.

max_redirects integer

Número máximo de redirecciones a seguir. Un valor igual o menor a 1 indica que no se siga ninguna redirección.

Por omisión 20.

protocol_version float

Versión del protocolo HTTP.

Por omisión 1.0.

Nota:

Las versiónes de PHP anteriores a la 5.3.0 no implementa decodificación de transferencias fragmentadas. Si este valor es 1.1, es responsabilidad del programador cumplir con la versión 1.1.

timeout float

Tiempo de espera de lectura en segundos, especificado por un float (p.ej. 10.5).

Por omisión se utiliza el valor del ajuste default_socket_timeout de php.ini.

ignore_errors boolean

Captura el contenido incluso con códigos de estado de error.

Por omisión FALSE

Historial de cambios

Versión Descripción
5.3.4 Añadido follow_location.
5.3.0 La opción protocol_version soporta decodificación de transferencias fragmentadas en caso de valer 1.1.
5.2.10 Añadido ignore_errors.
5.2.10 El parámetro header puede ahora ser un array de índices numéricos.
5.2.1 Añadido timeout.
5.1.0 Añadido soporte para HTTPS mediante proxies HTTP.
5.1.0 Añadido max_redirects.
5.1.0 Añadido protocol_version.

Ejemplos

Ejemplo #1 Captura una página y envía datos POST

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'contenido',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>

Ejemplo #2 Ignora las redirecciones per captura las cabeceras y el contenido

<?php

$url 
"http://www.example.org/header.php";

$opts = array('http' =>
    array(
        
'method' => 'GET',
        
'max_redirects' => '0',
        
'ignore_errors' => '1'
    
)
);

$context stream_context_create($opts);
$stream fopen($url'r'false$context);

// información de cabeceras y meta datos
// sobre el flujo
var_dump(stream_get_meta_data($stream));

// datos reales en $url
var_dump(stream_get_contents($stream));
fclose($stream);
?>

Notas

Nota: Opciones de contexto del flujo de socket subyacente
Hay soporte para opciones de contexto adicionales en el transporte subyacente Para flujos http://, deben consultarse las opciones de contexto del transporte tcp://. Para flujos https://, deben consultarse las opciones de contexto del transporte ssl://.

Nota: Línea de estado HTTP
Cuando esta envultura sigue una redirección, el wrapper_data devuelto por stream_get_meta_data() no contiene necesariamente la línea de estado HTTP que realmente se aplica al contenido del índice 0.

array (
  'wrapper_data' =>
  array (
    0 => 'HTTP/1.0 301 Moved Permantenly',
    1 => 'Cache-Control: no-cache',
    2 => 'Connection: close',
    3 => 'Location: http://example.com/foo.jpg',
    4 => 'HTTP/1.1 200 OK',
    ...
La primera petición devolvió un 301 (redirección permanente), de manera que la envoltura automáticamente sigue la redirección para obtener una respuesta con código 200 (índice = 4).



Opciones de contexto para FTP

Opciones de contexto para FTPListado de opciones de contexto para FTP

Descripción

Opciones de contexto para transportes ftp:// y ftps://

Opciones

overwrite boolean

Permite sobrescribir archivos ya existentes en el servidor remoto. Se aplica sólo al modo de escritura (subida).

Defaults to FALSE.

resume_pos integer

Desplazamiento de archivo en donde iniciar la transferencia. Se aplica sólo al modo de lectura (descarga).

Por defecto es 0 (inicio del archivo).

proxy string

Petición FTP al proxy por medio de un servidor proxy http. Se aplica sólo a operaciones de lectura de archivos. Ejemplo: tcp://squid.example.com:8000.

Historial de cambios

Versión Descripción
5.1.0 Se añadió proxy.
5.0.0 Se añadió overwrite y resume_pos.

Notas

Nota: Opciones subyacentes del contexto del flujo del socket
Opciones adicionales de contexto pueden se soportadas por el transporte subyacente Para flujos ftp://, remitirse a las opciones de contexto para el transporte tcp://. Para flujos ftps://, remitirse a las opciones de contexto para el transporte ssl://.



Opciones de contexto para SSL

Opciones de contexto para SSLListado de opciones de contexto para SSL

Descripción

Opciones de contexto para transportes ssl:// y tls://

Opciones

verify_peer boolean

Requiere verificación del certificado SSL utilizado.

Por defecto es FALSE.

allow_self_signed boolean

Permite certificados auto-firmados. Requiere verify_peer.

Por defecto es FALSE

cafile string

Ubicación del archivo de la entidad emisora de certificados en el sistema de archivos local, la cual debe ser utilizada con la opción de contexto verify_peer para autenticar la identidad del par remoto.

capath string

Si no se específica cafile o si no se encuentra el certificado, el directorio al que apunta capath sera explorado en busca de un certificado apropiado. capath debe ser un directorio con el hash correcto.

local_cert string

Ruta hacia el archivo del certificado local en el sistema de archivos. Debe ser un archivo codificado con PEM el cual contenga el certificado y la llave privada. Puede, opcionalmente, contener la cadena de los emisores del certificado.

passphrase string

La frase de contraseña con la cual el archivo local_cert fue codificado.

CN_match string

El nombre común que se está esperando. PHP realizará comparaciones limitadas de comodines. Si el nombre común no coincide con esto, el intento de conexión fallará.

verify_depth integer

Abortar si la cadena de certificados es demasiado profunda.

Por defecto es no verificarlo.

ciphers string

Establece la lista de sistemas de cifrado disponibles. El formato de la cadena se describe en » ciphers(1).

Por defecto es DEFAULT.

capture_peer_cert boolean

Si se establece en TRUE, una opción de contexto peer_certificate será creada, conteniendo el certificado par.

capture_peer_cert_chain boolean

Si se establece en TRUE, una opción de contexto peer_certificate_chain será creada, conteniendo la cadena del certificado.

SNI_enabled boolean

Si se establece en TRUE, la indicación del nombre del servidor se activará. Activando SNI se permiten múltiples certificados en la misma dirección IP.

SNI_server_name string

Si se establece, entonces este valor se utilizará como nombre del servidor para la indicación de nombre de servidor. Si este valor no está establecido, entonces el nombre del servidor se supone basado en el nombre de host utilizado cuando se abre el flujo.

Historial de cambios

Versión Descripción
5.3.2 Se agregó SNI_enabled y SNI_server_name.
5.0.0 Se agregó capture_peer_cert, capture_peer_chain and ciphers.

Notas

Nota: Debido a que ssl:// el es transporte subyacente para las envolturas https:// y ftps://, cualquier opción de contexto que aplique para ssl:// también aplica para https:// y ftps://.

Nota: Para que SNI (Server Name Indication) esté disponible, entonces PHP se debe compilar con OpenSSL 0.9.8j o superior. Se utiliza OPENSSL_TLSEXT_SERVER_NAME para determinar si SNI está soportado.



Opciones de contexto para CURL

Opciones de contexto para CURLListado de opciones de contexto para CURL

Descripción

Las opciones de contexto para CURL están disponibles cuando la extensión CURL fue compilada usando la opción de configuración --with-curlwrappers .

Opciones

method string

GET, POST, o cualquier otro método HTTP soportado por el servidor remoto.

Por defecto es GET.

header string

Cabeceras adicionales a ser enviadas durante la petición. Los valores de esta opción sobrescribirán otros valores (como por ejemplo User-agent:, Host:, y Authentication:).

user_agent string

Valor a ser enviado con la cabecera User-Agent:.

Por defecto se usa la configuración user_agent de php.ini.

content string

Datos adicionales para ser enviados después de las cabeceras. Esta opción no se utiliza para peticiones GET o HEAD.

proxy string

URI que especifica la dirección del servidor proxy. (Por ejemplo tcp://proxy.example.com:5100).

max_redirects integer

El número máximo de redirecciones a seguir. Un valor de 1 o menos significa que no se siguen la redirecciones.

Por defecto es 20.

curl_verify_ssl_host boolean

Verifica el host.

Por defecto es FALSE

Nota:

Esta opción está disponible tanto para envolturas del protocolo http como del ftp.

curl_verify_ssl_peer boolean

Requiere verificación del certificado SSL utilizado.

Por defecto es FALSE

Nota:

Esta opción está disponible tanto para envolturas del protocolo http como del ftp.

Ejemplos

Ejemplo #1 Obtener una página y enviar datos POST

<?php

$postdata 
http_build_query(
    array(
        
'var1' => 'some content',
        
'var2' => 'doh'
    
)
);

$opts = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postdata
    
)
);

$context stream_context_create($opts);

$result file_get_contents('http://example.com/submit.php'false$context);

?>



Opciones de contexto Phar

Opciones de contexto PharListado de opciones de contexto Phar

Descripción

Opciones de contexto para phar:// envoltura.

Opciones

comprimir int

Uno de Constantes de compresión Phar.

metadata mixed

Metadatos Phar. Ver Phar::setMetadata().



Contexto parámetros

Contexto parámetrosContexto lista de parámetros

Descripción

Estos parametros se puede establecer en un contexto usando el la función stream_context_set_params().

Parámetros

notification callable

Una callable que se llamará cuando se produce un evento en una secuencia.

Véase stream_notification_callback() para más detalles.


Tabla de contenidos



Protocolos y Envolturas soportados

PHP incorpora de serie envolturas para distintos protocolos tipo URL para trabajar junto con funciones del sistema de ficheros, como fopen(), copy(), file_exists() y filesize(). Además de estas envolturas, se pueden definir por el usuario utilizando la función stream_wrapper_register().

Nota: La sintaxis de URL que se utiliza para describir una envoltura solo puede ser scheme://.... Las sintaxis scheme:/ y scheme: no están soportadas.


file://

file://Acceso al sistema de ficheros local

Descripción

El Sistema de Ficheros es la envoltura por omisión de PHP y representa al sistema de ficheros local. Cuando se proporciona una ruta relativa (esto es, no comienza con /, \, \\, ni con la letra de un dispositivo Windows) ésta se hará usando el directorio de trabajo actual. En muchos casos, se trata del directorio en el que se aloja el script, a no ser que se haya cambiado explicitamente. Si se utiliza la sapi CLI, apuntará al directorio desde el que se ejecutó el script.

En algunas funciones, como por ejemplo fopen() o file_get_contents(), puede usarse también include_path para localizar ficheros con rutas relativas.

Opciones

  • /ruta/al/fichero.ext
  • ruta/relativa/al/fichero.ext
  • ficheroEnDta.ext
  • C:/ruta/a/ficherowindows.ext
  • C:\ruta\a\ficherowindows.ext
  • \\servidorsmb\ruta\compartida\a\ficherowindows.ext
  • file:///ruta/al/fichero.ext

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permite Lecturas
Permite Escrituras
Permite Añadir contenidos
Permite Lecturas y Escrituras Simultáneas
Permite usar la función stat()
Permite usar la función unlink()
Permite usar la función rename()
Permite usar la función mkdir()
Permite usar la función rmdir()

Historial de cambios

Versión Descripción
5.0.0 Añadido file://.



http://

https://

http:// -- https://Acceso a URLS en HTTP(s)

Descripción

Permite acceso de lectura a ficheros/recursos mediante HTTP 1.0, utilizando el método GET de HTTP. Junto con la petición, se envía una cabecera Host: para así poder usar hosts virtuales basados en nombres. Si se ha definido un user_agent en el fichero php.ini o en el contexto del flujo, éste se incluirá también en la petición.

El flujo proporciona acceso al cuerpo del recurso; las cabeceras se guardan en la variable $http_response_header.

Si fuera importante conocer la URL del recurso del que procede el documento (tras procesar todas las redirecciones), se deberán procesar todas las cabeceras de respuesta devueltas por el flujo.

Se usará la directiva from en la cabecera From: siempre que esté asignado y no se sobrescriba por Opciones de contexto y parámetros.

Opciones

  • http://ejemplo.com
  • http://ejemplo.com/fichero.php?var1=val1&var2=val2
  • http://usuario:contraseña@ejemplo.com
  • https://ejemplo.com
  • https://ejemplo.com/fichero.php?var1=val1&var2=val2
  • https://usuario:contraseña@ejemplo.com

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen
Permite Lecturas
Permite Escrituras No
Permite Añadir contenidos No
Permite Lecturas y Escrituras Simultáneas N/A
Permite usar la función stat() No
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Historial de cambios

Versión Descripción
4.3.7 Detectado errores en servidores IIS para evitar "SSL: Fatal Protocol Error".
4.3.0 Añadido https://.
4.0.5 Añadido soporte para las redirecciones.

Ejemplos

Ejemplo #1 Detectar la URL en la que se finaliza tras las redirecciones

<?php
$url 
'http://www.example.com/redirecting_page.php';

$fp fopen($url'r');

$meta_data stream_get_meta_data($fp);
foreach (
$meta_data['wrapper_data'] as $response) {

    
/* Were we redirected? */
    
if (strtolower(substr($response010)) == 'location: ') {

        
/* update $url with where we were redirected to */
        
$url substr($response10);
    }

}

?>

Ejemplo #2 Enviando cabeceras personalizadas en una petición HTTP

Pueden enviarse cabeceras personalizadas usando opciones de contexto. También es posible usar este hack: Pueden enviarse cabeceras personalizadas en una petición HTTP aprovechando un efecto colateral de la directiva INI user_agent. Establezca un string válido en user_agent (como el valor por omisión de PHP/versión) seguido de un par retorno de carro/salto de línea y cualquier otra cabecera adicional.

<?php
ini_set
('user_agent'"PHP\r\nX-MyCustomHeader: Foo");

$fp fopen('http://www.example.com/index.php''r');
?>

Como resultado se envía la siguiente cabera:

GET /index.php HTTP/1.0
Host: www.example.com
User-Agent: PHP
X-MyCustomHeader: Foo

Notas

Nota: Sólo habrá soporte para HTTPS cuando la extensión openssl esté habilitada.

Las conexiones HTTP son de sólo lectura; no hay soporte para escribir o copiar datos a un recurso HTTP.

Se pueden enviar peticiones POST y PUT, por ejemplo, con ayuda de los Contextos HTTP.

Ver también



ftp://

ftps://

ftp:// -- ftps://Acceso a URLs por FTP(s)

Descripción

Permite tanto lectura de ficheros existentes como la creación de nuevos ficheros vía FTP. La conexión fallará si el servidor no soporta FTP en modo pasivo.

Se puede tanto leer como escribir ficheros, pero no las dos cosas simultáneamente. Si el fichero remoto ya existiera en el servidor ftp, y se quisiera abrir en modo escritura sin especificar la opción de contexto overwrite, también fallará la conexión. Si fuera necesario sobrescribir un fichero ya existente en ftp, se tendrá que especificar la opción de contexto overwrite antes de abrir el fichero para su escritura. Alternativamente, puede usarse la extensión FTP.

Si se ha establecido la directiva from en php.ini, se enviará como contraseña para conexiones de FTP anónimo.

Opciones

  • ftp://ejemplo.com/pub/fichero.txt
  • ftp://usuario:contraseña@example.com/pub/fichero.txt
  • ftps://ejemplo.com/pub/fichero.txt
  • ftps://usuario:contraseña@ejemplo.com/pub/fichero.txt

Opciones

Resumen de la Envoltura
Atributos PHP 4 PHP 5
Restringido por allow_url_fopen
Permite Lecturas
Permite Escrituras Sí (sólo en ficheros nuevos) Sí (ficheros nuevos. En los existentes con overwrite)
Permite Añadir contenidos No
Permite Lecturas y Escrituras Simultáneas No No
Permite usar la función stat() No Desde PHP 5.0.0: sólo los elementos filesize(), filetype(), file_exists(), is_file(), y is_dir(). Desde PHP 5.1.0: filemtime().
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Historial de cambios

Versión Descripción
4.3.0 Added ftps://.

Notas

Nota:

Hay soporte para FTPS desde PHP 4.3.0, siempre y cuando se haya compilado con soporte para openssl.

Si el servidor no soporta SSL, entonces la conexión se restablece a una conexión ftp regular sin encriptación.

Nota: Añadiendo contenido
Desde PHP 5.0.0 se puede añadir contenido a los ficheros mediante la envoltura de URL ftp://. Si se tratara de añadir contenido a un fichero con ftp:// en versiones anteriores, se provocaría un fallo.



php://

php://Acceso a distintos flujos de E/S

Descripción

PHP ofrece una serie de flujos de E/S generales que permite acceder tanto a los flujos de entrada y salida de PHP, a la entrada estándar, a descriptores de ficheros de salida y de errores, a flujos de ficheros temporales en memoria y en disco, y a filtros para poder manipular otros recursos de ficheros según se lee o se escribe en ellos.

php://stdin, php://stdout y php://stderr

php://stdin, php://stdout y php://stderr permiten acceder directamente al correspondiente flujo de entrada o salida del proceso PHP. El flujo hace referencia a un descriptor de fichero duplicado, de modo que si se abre php://stdin y más tarde se cierra, sólo se cerraría la copia del descriptor; el flujo real al que referencia STDIN no se vería afectado. Tenga en cuenta que PHP mostraba un comportamiento irregular en este aspcto hasta PHP 5.2.1. Se recomienda utilizar simplemente las constantes STDIN, STDOUT y STDERR en lugar de abrir flujos manualmente usando estas envolturas.

php://stdin es de sólo lectura, mientras que php://stdout y php://stderr son de sólo escritura.

php://input

php://input es un flujo de sólo lectura que permite leer datos del cuerpo solicitado. En el caso de peticiones POST, es preferible usar php://input en vez de $HTTP_RAW_POST_DATA ya que no depende de diretivas php.ini especiales. Sin embargo, cuando no se genera automáticamente $HTTP_RAW_POST_DATA, se trata de una alternativa que hace un uso menos intensivo de memoria que activando always_populate_raw_post_data. php://input no está disponible con enctype="multipart/form-data".

Nota: Los flujos que se abren con php://input sólo pueden leerse una vez; no hay soporte para operaciones de búsqueda. Pero, dependiendo de la SAPI, podría ser posible abrir otro flujo php://input para reiniciar la lectura. Esto sólo es posible si los datos de la petición se han guardado. Este caso es típico en peticiones POST, pero no en otros métodos de petición, como por ejemplo PUT o PROPFIND.

php://output

php://output es un flujo de sólo lectura que permite escribir en el buffer de salida tal como lo hacen print y echo.

php://fd

php://fd permite el acceso directo al descriptor de archivo dado. Por ejemplo, php://fd/3 refiere al descriptor de archivo 3.

php://memory y php://temp

php://memory y php://temp son flujos de lectura-escritura que permiten almacenar datos temporales en una envoltura similar a un fichero. La única diferencia entre las dos es que php://memory siempre almacenará sus datos en memoria, mientras que php://temp utilizará un fichero temporal cuando la cantidad de datos almacenados superen el límite predefinido (por omisión, 2 MB). La ubicación de este fichero temporal está determinada de la misma manera que la funciónsys_get_temp_dir(),

El límite de memoria de php://temp se puede controlar añadiendo /maxmemory:NN, donde NN es la cantidad en bytes máxima de datos a almacenar en memoria antes de recurrir a un fichero temporal.

php://filter

php://filter es una especie de meta-envoltura diseñada para permitir aplicar filtros a los flujos en las aperturas. Esto es muy útil en las funciones todo en uno, como readfile(), file(), y file_get_contents() donde, por otra parte, no se pueden aplicar filtros a los flujos antes de que se lea su contenido.

php://filter acepta los siguientes parámetros como parte de su ruta. Revise los ejemplos para ver casos de uso de estos específicos parámetros.

parámetros de php://filter
Nombre Descripción
resource=<flujo a filtrar> Este parámetro es obligatorio. Especifica el flujo que se desea filtrar.
read=<listra de filtros a aplicar a la cadena de lectura> Este parámetro es opcional. Se pueden enumerar uno o más filtros, separados por el carácter |.
write=<lista de filtros a aplicar a la cadena de escritura> Este parámetro es opcional. Se puedene enumerar uno o más filtros, separados por el carácter |.
<lista de filtros a aplicar a las dos cadenas> Cualquier listra de filtros que no esté precedida ni por read= ni por write= se aplicará tanto a las cadenas de lectura como de escritura según proceda.

Opciones

Resumen de la Envoltura (Para php://filter, consúltese el resumen de la envoltura que se filtra)
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include php://input, php://stdin, php://memory y php://temp solamente.
Permite Lecturas php://stdin, php://input, php://fd, php://memory y php://temp solamente.
Permite Escrituras php://stdout, php://stderr, php://output, php://fd, php://memory y php://temp solamente.
Permite Añadir contenidos php://stdout, php://stderr, php://output, php://fd, php://memory y php://temp solamente. (Equivalente a escrituras)
Permite Lecturas y Escrituras Simultáneas php://fd, php://memory y php://temp solamente.
Permite usar la función stat() php://memory y php://temp solamente.
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No
Permite usar la función stream_select() php://stdin, php://stdout, php://stderr, php://fd y php://temp solamente.

Historial de cambios

Versión Descripción
5.3.6 Se añadió php://fd.
5.1.0 Se añadió php://memory y php://temp.
5.0.0 Se añadió php://filter.

Ejemplos

Ejemplo #1 php://temp/maxmemory

Este parámetro opcional permite establecer el límite de memoria a partir del cual php://temp comienza a usar un fichero temporal.

<?php
// Establecer el límite a 5 MB.
$fiveMBs 1024 1024;
$fp fopen("php://temp/maxmemory:$fiveMBs"'r+');

fputs($fp"hello\n");

// Leer lo que hemos escrito.
rewind($fp);
echo 
stream_get_contents($fp);
?>

Ejemplo #2 php://filter/resource=<flujo a filtrar>

Este parámetro tiene que ubicarse al final de la especificación de php://filter y tiene que apuntar al flujo que se desea filtrar.

<?php
/* Esto es equivalente a:
  readfile("http://www.example.com");
  dado que no se especifica ningún filtro */

readfile("php://filter/resource=http://www.example.com");
?>

Ejemplo #3 php://filter/read=<lista de filtros a aplicar a la cadena de lectura>

Este parámetro contiene uno o más nombres de filtros separados por el caracter |.

<?php
/* Devolverá el contenido de
  www.example.com en mayúsculas */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* Hará lo mismo que el ejemplo de arriba
  pero además lo codificará en ROT13 */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
?>

Ejemplo #4 php://filter/write=<lista de filtros a aplicar a la cadena de escritura>

Este parámetro contiene uno o más nombres de filtros separados por el caracter |.

<?php
/* Filtrará el string "Hello World" con
  el filtro rot13, y después lo escribirá en
  example.txt dentro del directorio actual */
file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
?>


zlib://

bzip2://

zip://

zlib:// -- bzip2:// -- zip://Flujos de compresión

Descripción

zlib: PHP 4.0.4 - PHP 4.2.3 (sólo en sistemas con fopencookie)

compress.zlib:// and compress.bzip2:// PHP 4.3.0 y superior

zlib: funciona como gzopen(), solo que usando el flujo, se puede utilizar con fread() al igual que con otras funciones del sistema de ficheros. Esto quedó obsoleto en PHP 4.3.0 debido a la ambigüedad que surge con los nombres de fichero que contienen el caracter ':'; en su lugar, debe usarse compress.zlib://.

compress.zlib:// y compress.bzip2:// son equivalentes a gzopen() y a bzopen() respectivamente, y funcionan incluso en sistemas que no tienen soporte para fopencookie.

La extensión ZIP registra la envoltura zip:.

Opciones

  • zlib:
  • compress.zlib://
  • compress.bzip2://

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permite Lecturas
Permite Escrituras Sí (excepto zip://)
Permite Añadir contenidos Sí (excepto zip://)
Permite Lecturas y Escrituras Simultaneas No
Permite usar la función stat() No, utilice la envoltura file:// para consultar la información de un fichero.
Permite usar la función unlink() No, utilice la envoltura file:// para eliminar ficheros comprimidos.
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No



data://

data://Data (RFC 2397)

Descripción

La envoltura del flujo data: (» RFC 2397) está disponible desde PHP 5.2.0.

Opciones

  • data://text/plain;base64,

Opciones

Resumen de la envolutra
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include
Permite Lecturas
Permite Escrituras No
Permite Añadir contenido No
Permite Lectura y Escritura Simultanea No
Permite usar la función stat() No
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Ejemplos

Ejemplo #1 Mostrar contenidos de data://

<?php
// muestra "I love PHP"
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');
?>

Ejemplo #2 Obtener el Tipo de Medio

<?php
$fp   
fopen('data://text/plain;base64,''r');
$meta stream_get_meta_data($fp);

// muestra "text/plain"
echo $meta['mediatype'];
?>


glob://

glob://Encuentra las rutas que coincidan con el patrón

Descripción

La envoltura del flujo glob: está disponible desde PHP 5.3.0.

Opciones

  • glob://

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas No
Permite Escrituras No
Permite Añadir Contenidos No
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat() No
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Ejemplos

Ejemplo #1 Uso básico

<?php
// Recorrer todos los ficheros *.php del directorio ext/spl/examples/
// y mostrar sus nombres y tamaños
$it = new DirectoryIterator("glob://ext/spl/examples/*.php");
foreach(
$it as $f) {
    
printf("%s: %.1FK\n"$f->getFilename(), $f->getSize()/1024);
}
?>
tree.php: 1.0K
findregex.php: 0.6K
findfile.php: 0.7K
dba_dump.php: 0.9K
nocvsdir.php: 1.1K
phar_from_dir.php: 1.0K
ini_groups.php: 0.9K
directorytree.php: 0.9K
dba_array.php: 1.1K
class_tree.php: 1.8K


phar://

phar://Archivo PHP

Descripción

La envoltura de flujo phar:// está disponible desde PHP 5.3.0. Para consultar una descripción detallada, revise envoltura del flujo Phar.

Opciones

  • phar://

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas
Permite Escrituras
Permite Añadir contenidos No
Permite Lectura y Escritura Simultanea
Permite usar la función stat()
Permite usar la función unlink()
Permite usar la función rename()
Permite usar la función mkdir()
Permite usar la función rmdir()



ssh2://

ssh2://Secure Shell 2

Descripción

ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 y superior (PECL)

Nota: Esta envoltura no está habilitada por omisión
Para poder usarse la envoltura ssh2.*:// debe instalarase la extensión » SSH2 disponible en » PECL.

Además de permitir hacer un login tradicional en la URI, la envoltura ssh2 también puede reutilizar las conexiones ya abiertas, proporcionando el recurso de conexión en el apartado host de la URL.

Opciones

  • ssh2.shell://usuario:contraseña@ejemplo.com:22/xterm
  • ssh2.exec://usuario:contraseña@ejemplo.com:22/usr/local/bin/comando
  • ssh2.tunnel://usuario:contraseña@ejemplo.com:22/192.168.0.1:14
  • ssh2.sftp://usuario:contraseña@ejemplo.com:22/ruta/a/fichero

Opciones

Resumen de la Envoltura
Atributo ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restringido por allow_url_fopen
Permite Lecturas
Permite Escrituras No
Permite Añadir contenidos No No No Sí (cuando esté soportado por el servidor) No
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat() No No No No
Permite usar la función unlink() No No No No
Permite usar la función rename() No No No No
Permite usar la función mkdir() No No No No
Permite usar la función rmdir() No No No No

Opciones de contexto
Nombre Uso Valor por omisión
session Recurso ssh2 preconectado a utilizar  
sftp Recurso sftp preubicado a reutilizar  
methods métodos a usar de entre Key exchange, hostkey, cipher, compression, y MAC  
callbacks    
username Nombre de usuario con el que conectar  
password Contraseña a utilizar en autenticación con contraseña  
pubkey_file Nombre del fichero con la clave pública que se usará para autenticar  
privkey_file Nombre del fichero con la clave privada que se usará para autenticar  
env Array asociativo con las variables de entorno que se van a asignar  
term Tipo de emulación del terminal a solicitar cuando se asigne un pty (pseudo terminal)  
term_width Ancho del terminal solicitado cuando se asigne un pty  
term_height Altura del terminal solicitado cuando se asigne un pty  
term_units Unidades a usar con term_width y con term_height SSH2_TERM_UNIT_CHARS

Ejemplos

Ejemplo #1 Abriendo un flujo a partir de una conexión activa

<?php
$session 
ssh2_connect('example.com'22);
ssh2_auth_pubkey_file($session'username''/home/username/.ssh/id_rsa.pub',
                                            
'/home/username/.ssh/id_rsa''secret');
$stream fopen("ssh2.tunnel://$session/remote.example.com:1234"'r');
?>


rar://

rar://RAR

Descripción

Esta envoltura se compone de una ruta al fichero RAR (relativa o absoluta) codificada como URL, un asterisco opcional (*), un signo de número opcional (#) y un nombre de entrada codificado como URL que también es opcional, tal como se almacena en el fichero. Cuando se especifique un nombre de entrada, será necesario también especificar un signo de número; además, se puede añadir al final del nombre una barra.

Esta envoltura puede abrir tanto ficheros como directorios. Cuando se abre un directorio, el signo asterisco obliga a que los nombres de las entradas del directorio se devuelvan decodificados. Si no se especifica, se devolverán codificadas como URL – esto es así para permitir hacer un uso correcto de la envoltura con determinadas funcionalidades, como RecursiveDirectoryIterator cuando se está en presencia de nombres de ficheros que podrían parecen datos codificados como URL.

Si no se proporciona ni un signo de número ni tampoco un número de entrada, se mostrará la raíz del fichero. La diferencia respecto a directorios convencionales es que el flujo no contendrá determinada información, tal como la fecha de modificación, dado que el directorio raíz no se almacena dentro el fichero comprimido en de una entrada individual. Para usar la envoltura con RecursiveDirectoryIterator es necesario que al acceder al raíz se incluya el signo de número en la URL, para que así las URLs de los nodos hijo se puedan construir correctamente.

Nota: Esta envoltura no está habilitada por omisión
Para poder usar la envoltura rar://, debe instalarse la extensión » rar disponible en » PECL.

rar:// Disponible desde PECL rar 3.0.0

Opciones

  • rar://<nombre de archivo con codificación url>[*][#[<nombre de entrada con codificación url>]]

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas
Permite Escrituras No
Permite Añadir contenido No
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat()
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Opciones de contexto
Nombre Uso Valor por omisión
open_password Si la hubiera, contraseña utilizada para encriptar las cabeceras del archivo. WinRAR encriptará todos los ficheros con la misma contraseña que la cabecera siempre que ésta esté presente, por lo que se ignorará file_password en archivos que contengan cabeceras encriptadas.  
file_password Si la hubiera, contraseña utilizada para encriptar un fichero. Si las cabeceras estuvieran también encriptadas, se ignoraría esta opción en favor de open_password. El motivo por el que hay dos opciones es para así cubrir la posibilidad de que haya un archivo con contraseñas diferentes para la cabecera y los ficheros. Tenga en cuenta que si el archivo no tuviera sus cabeceras encriptadas, se ignoraría open_password y tendría que usarse en su lugar esta opción.  
volume_callback Llamada de retorno que determina la ruta de las partes que no se hayan podido capturar. Para más información, revise RarArchive::open().  

Ejemplos

Ejemplo #1 Recorriendo un archivo RAR

<?php

class MyRecDirIt extends RecursiveDirectoryIterator {
    function 
current() {
        return 
rawurldecode($this->getSubPathName()) .
            (
is_dir(parent::current())?" [DIR]":"");
    }
}

$f "rar://" rawurlencode(dirname(__FILE__)) .
    
DIRECTORY_SEPARATOR 'dirs_and_extra_headers.rar#';

$it = new RecursiveTreeIterator(new MyRecDirIt($f));

foreach (
$it as $s) {
    echo 
$s"\n";
}
?>

El resultado del ejemplo sería algo similar a:

|-allow_everyone_ni [DIR]
|-file1.txt
|-file2_אּ.txt
|-with_streams.txt
\-אּ [DIR]
  |-אּ\%2Fempty%2E [DIR]
  | \-אּ\%2Fempty%2E\file7.txt
  |-אּ\empty [DIR]
  |-אּ\file3.txt
  |-אּ\file4_אּ.txt
  \-אּ\אּ_2 [DIR]
    |-אּ\אּ_2\file5.txt
    \-אּ\אּ_2\file6_אּ.txt

Ejemplo #2 Abriendo un fichero encriptado (encriptación de cabeceras)

<?php
$stream 
fopen("rar://" .
    
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
    
'encrypted_headers.rar' '#encfile1.txt'"r"false,
    
stream_context_create(
        array(
            
'rar' =>
                array(
                    
'open_password' => 'samplepassword'
                
)
            )
        )
    );
var_dump(stream_get_contents($stream));
/* ni la fecha de creación ni la de último acceso es obligatoria WinRAR,
 * por esa razón la mayoría de ficheros no lo tendrán */
var_dump(fstat($stream));
?>

El resultado del ejemplo sería algo similar a:

string(34) "Contenido del fichero encriptado 1"
Array
(
    [0] => 0
    [1] => 0
    [2] => 33206
    [3] => 1
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 26
    [8] => 0
    [9] => 1259550052
    [10] => 0
    [11] => -1
    [12] => -1
    [dev] => 0
    [ino] => 0
    [mode] => 33206
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 0
    [size] => 26
    [atime] => 0
    [mtime] => 1259550052
    [ctime] => 0
    [blksize] => -1
    [blocks] => -1
)


ogg://

ogg://Flujos de audio

Descripción

Los ficheros que se abran para lectura usando la envoltura ogg:// se utilizan como codificaciones de audio comprimido usando el códec OGG/Vorbis. De forma similar, los ficheros abiertos para escritura o para añadir contenido usando la envoltura ogg:// se escriben como datos de audio comprimidos. Cuando se use la función stream_get_meta_data() con un fichero OGG/Vorbis abierto para lectura, se devolverán diversos detalles del flujo, incluyendo la etiqueta vendor, cualquier comments que se haya añadido, el número de canales channels, el ratio de muestreo, y el rango del ratio de codificación descrito por: bitrate_lower, bitrate_upper, bitrate_nominal, y bitrate_window.

ogg:// PHP 4.3.0 and up (PECL)

Nota: Esta envoltura no está habilitada por omisión
Para usar la envoltura ogg:// es necesario instalar la extensión » OGG/Vorbis disponible en » PECL.

Opciones

  • ogg://soundfile.ogg
  • ogg:///path/to/soundfile.ogg
  • ogg://http://www.example.com/path/to/soundstream.ogg

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permite Lecturas
Permite Escrituras
Permite Añadir contenido
Permite Lecturas y Escrituras Simultánea No
Permite usar la función stat() No
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Opciones de contexto
Nombre Uso Valor por omisión Modo
pcm_mode codificación PCM que se aplicará en las lecturas, de entre: OGGVORBIS_PCM_U8, OGGVORBIS_PCM_S8, OGGVORBIS_PCM_U16_BE, OGGVORBIS_PCM_S16_BE, OGGVORBIS_PCM_U16_LE, y OGGVORBIS_PCM_S16_LE. (8 o 16 bit, con o sin signo, big o little endian) OGGVORBIS_PCM_S16_LE Lectura
rate Ratio de muestreo en datos de entradas, expresado en Hz 44100 Escritura/Adición
bitrate Si es un entero, definirá el bitrate fijo al que se codificará. (de 16000 a 131072) Si es un real, definirá la calidad del bitrate variable a usar. (de -1.0 a 1.0) 128000 Escritura/Adición
channels El número de canales de audio a codificar, normalmente 1 (mono), o 2 (estéreo). Puede llegar a 16. 2 Escritura/Adición
comments Un array de strings a codificar en la cabecera de la pista.   Escritura/Adición

Ejemplos



expect://

expect://Flujos de Interacción de Procesos

Descripción

Los flujos que se hayan abierto con la envoltura expect://, darán acceso a stdio, stdout y stderr (entrada, salida y errores estándar respectivamente) de los procesos, vía PTY.

Nota: Esta envoltura no está habilitada por omisión
Para poder usar la envoltura expect:// se debe instalar la extensión » Expect disponible en » PECL.

expect:// PHP 4.3.0 y superior (PECL)

Opciones

  • expect://command

Opciones

Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permites Lecturas
Permite Escrituras No
Permite Añadir contenido
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat() No
Permite usar la función unlink() No
Permite usar la función rename() No
Permite usar la función mkdir() No
Permite usar la función rmdir() No

Ejemplos


Tabla de contenidos

  • file:// — Acceso al sistema de ficheros local
  • http:// — Acceso a URLS en HTTP(s)
  • ftp:// — Acceso a URLs por FTP(s)
  • php:// — Acceso a distintos flujos de E/S
  • zlib:// — Flujos de compresión
  • data:// — Data (RFC 2397)
  • glob:// — Encuentra las rutas que coincidan con el patrón
  • phar:// — Archivo PHP
  • ssh2:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — Flujos de audio
  • expect:// — Flujos de Interacción de Procesos



Seguridad


Introducción

PHP es un potente lenguaje, y su intérprete, bien como módulo del servidor web o bien como binario CGI, puede acceder a ficheros, ejecutar comandos o abrir conexiones de red desde el servidor. Estas propiedades hacen que, por omisión, sea inseguro todo lo que se ejecute en un servidor web. PHP está diseñado específicamente para ser un lenguaje más seguro para escribir aplicaciones CGI que Perl or C. Partiendo de un correcto ajuste de opciones de configuración para tiempo de ejecución y en tiempo de compilación, y el uso de prácticas de programación apropiadas, pueden proporcionarle la combinación de libertad y de seguridad que necesita.

Dado que hay muchas vías para ejecutar PHP, existen muchas opciones de configuración para controlar su comportamiento. Al haber una extensa selección de opciones se garantiza poder usar PHP para un gran número de propósitos, pero a la vez significa que existen combinaciones que conllevan una configuración menos segura.

La flexibilidad de configuración de PHP rivaliza igualmente con la flexibilidad de su código. PHP puede ser usado para construir completas aplicaciones de servidor, con toda la potencia de un usuario de consola, o se puede usar sólo desde el lado del servidor implicando un menor riesgo dentro de un entorno controlado. El cómo construir ese entorno, y cómo de seguro es, depende del desarrollador PHP.

Este capítulo comienza con algunos consejos generales de seguridad, explica las diferentes combinaciones de opciones de configuración y las situaciones en que pueden ser útiles, y describe diferentes consideraciones relacionadas con la programación de acuerdo a diferentes niveles de seguridad.



Consideraciones generales

Un sistema completamente seguro es prácticamente un imposible, de modo que el enfoque usado con mayor frecuencia en la profesión de seguridad es uno que busque el balance adecuado entre riesgo y funcionalidad. Si cada variable enviada por un usuario requiriera de dos formas de validación biométrica (como rastreo de retinas y análisis dactilar), usted contaría con un nivel extremadamente alto de confiabilidad. También implicaría que llenar los datos de un formulario razonablemente complejo podría tomar media hora, cosa que podría incentivar a los usuarios a buscar métodos para esquivar los mecanismos de seguridad.

La mejor seguridad con frecuencia es lo suficientemente razonable como para suplir los requerimientos dados sin prevenir que el usuario realice su labor de forma natural, y sin sobrecargar al autor del código con una complejidad excesiva. De hecho, algunos ataques de seguridad son simples recursos que aprovechan las vulnerabilidades de este tipo de seguridad sobrecargada, que tiende a erosionarse con el tiempo.

Una frase que vale la pena recordar: Un sistema es apenas tan bueno como el eslabón más débil de una cadena. Si todas las transacciones son registradas copiosamente basándose en la fecha/hora, ubicación, tipo de transacción, etc. pero la verificación del usuario se realiza únicamente mediante una cookie sencilla, la validez de atar a los usuarios al registro de transacciones es mermada severamente.

Cuando realice pruebas, tenga en mente que no será capaz de probar todas las diferentes posibilidades, incluso para las páginas más simples. Los datos de entrada que usted puede esperar en sus aplicaciones no necesariamente tendrán relación alguna con el tipo de información que podría ingresar un empleado disgustado, un cracker con meses de tiempo entre sus manos, o un gato doméstico caminando sobre el teclado. Es por esto que es mejor observar el código desde una perspectiva lógica, para determinar en dónde podrían introducirse datos inesperados, y luego hacer un seguimiento de cómo esta información es modificada, reducida o amplificada.

Internet está repleto de personas que tratan de crearse fama al romper la seguridad de su código, bloquear su sitio, publicar contenido inapropiado, y por lo demás haciendo que sus días sean más interesantes. No importa si usted administra un sitio pequeño o grande, usted es un objetivo por el simple hecho de estar en línea, por tener un servidor al cual es posible conectarse. Muchas aplicaciones de cracking no hacen distinciones por tamaños, simplemente recorren bloques masivos de direcciones IP en busca de víctimas. Trate de no convertirse en una.



Installed as CGI binary

Tabla de contenidos


Ataques posibles

Usar PHP como un binario CGI es una opción para configuraciones que por alguna razón no desean integrar PHP como un módulo dentro del software de servidor (como Apache), o usarán PHP con diferentes tipos de envoltorios CGI para crear entornos seguros chroot y setuid para scripts. Esta configuración usualmente involucra la instalación del binario ejecutable de PHP en el directorio cgi-bin del servidor web. La recomendación » CA-96.11 del CERT recomienda que está en contra de colocar cualquiera de los intérpretes dentro de cgi-bin. Aún si el binario de PHP puede ser usado como un intérprete independiente, PHP está diseñado para prevenir los ataques que esta configuración hace posible:

  • Accediendo a los ficheros del sistema: http://mi.servidor/cgi-bin/php?/etc/passwd La consulta de información en una URL después del signo de interrogación (?) es pasado como argumento de la línea de comandos al intérprete por la interface del CGI. Usualmente los intérpretes abren y ejecutan el fichero especificado como el primer argumento en la línea de comandos. Cuando es invocado como un binario de CGI, PHP se rehusa a interpretar los argumentos de línea de comandos.
  • Accediendo a cualquier documento web en el servidor: http://mi.servidor/cgi-bin/php/directorio/secreto/doc.html Parte de la ruta de información de la URL después del nombre del binario de PHP, /directorio/secreto/doc.html es convencionalmente utilizado para especificar el nombre del fichero a ser abierto e interpretado por el programa CGI. Usualmente las directivas de configuración de algunos servidores web (Apache: Acción) son utilizados para redirigir peticiones a los documentos como http://mi.servidor/directorio/secreto/script.php al intérprete de PHP. Con esta configuración, el servidor web revisa primero los permisos de acceso a los directorios /directorio/secreto, y después crea la petición redirigida http://mi.servidor/cgi-bin/php/directorio/secreto/script.php. Desafortunadamente, si la petición es proporcionada originalmente en esta forma, no se revisan los accesos a los directorios hechos por el servidor web /directorio/secreto/script.php, sino solamente al fichero /cgi-bin/php. De esta forma /cgi-bin/php cualquier usuario está habilitado a acceder a cualquier documento protegido en el servidor web. En PHP, las directivas de configuración en tiempo de ejecución cgi.force_redirect, doc_root y user_dir pueden ser utilizadas para prevenir este ataque, si el árbol de documentos del servidor tiene cualquiera de estos directorios con restricciones de acceso. Véase más abajo para una explicación completa de las diferentes combinaciones.


Caso 1: Ficheros públicos servidos solamente

Si su servidor no tiene ningún contenido que no esté restringido por contraseña o control de acceso basado en IP, no hay necesidad de estas opciones de configuración. Si su servidor web no le permite hacer redirecciones, o el servidor no tiene una forma de comunicar al binario de PHP que la petición es una forma segura de petición de redireccionamiento, puede especificar la opción --enable-force-cgi-redirect para el script de configuración. Usted todavía tiene que asegurarse que sus scripts de PHP no confían en una forma o en otra para llamar el script, ni directamente http://my.host/cgi-bin/php/dir/script.php ni por redirección http://my.host/dir/script.php.

La redirección puede ser configurada en Apache utilizando directivas Action y AddHandler (vea más abajo).



Caso 2: utilizando cgi.force_redirect

La directiva de configuración cgi.force_redirect previene a cualquiera que llame a PHP directamente por medio de una URL como esta http://mi.servidor/cgi-bin/php/directoriosecreto/script.php. En cambio, PHP solamente lo analizará en este modo si éste se ha ido a través de una regla directa del servidor web. Las versiones de PHP antiguas a la versión 4.2.0 utilizaban --enable-force-cgi-redirect en opción de tiempo de compilación para esto.

Usualmente la redirección en la configuración de Apache se hace con las siguientes directivas:

Action php-script /cgi-bin/php
AddHandler php-script .php

Esta opción ha sido probada solamente con el servidor web Apache, y se basa en que en Apache se configure en una variable de entorno no-estándar de CGI REDIRECT_STATUS para peticiones de redirección. Si su servidor web no soporta ninguna forma de decirle si la petición es directa o redirigida, usted no puede utilizar esta opción y debe usar una de las otras formas de ejecutar la versión CGI aquí documentadas.



Caso 3: Configurando doc_root o user_dir

Para incluir contenido activo, como scripts y ejecutables, en los directorios de documentos del servidor web es algunas veces considerado una práctica insegura. Si, por el hecho del algún error de configuración, los scripts no se ejecutan y son mostrados como documentos HTML regulares, esto podría resultar en una fuga de información de propiedad intelectual o de información de seguridad como las contraseñas. Por lo tanto muchos Administradores de Sistemas preferirán configurar otra estructura de directorios para scripts que sean accesibles solamente a través del CGI de PHP, y por lo tanto siempre interpretado y no desplegado como tal.

También si el método para asegurar las peticiones no es redirigido, como se describió en la sección anterior, no está disponible, es necesario configurar un script doc_root que sea diferente de la raíz del documento web.

Usted puede configurar el script de la raíz de documento de PHP en la directiva de configuración doc_root en el fichero de configuración, o puede configurar la variable de entorno PHP_DOCUMENT_ROOT. Si éste es configurado, la versión del CGI de PHP siempre construirá el nombre del fichero para abrir con este doc_root y la ruta de información en la petición, de tal forma que pueda estar seguro que ningún script será ejecutado fuera de este directorio (excepto por user_dir que se encuentra más abajo).

Otra opción utilizable es esta user_dir. Cuando user_dir no está configurado, lo único que controla el fichero abierto es doc_root. Al abrir una URL como http://mi.servidor/~usuario/documento.php no resulta en la apertura de un fichero bajo el directorio personal de los usuarios, pero si un fichero llamado ~usuario/documento.php debajo de doc_root (si, un nombre de directorio que inicia con una a tilde [~]).

Si user_dir es configurado, por ejemplo public_php, una petición como http://mi.servidor/~usuario/doc.php abrirá un fichero llamado doc.php bajo el directorio llamado public_php debajo de el directorio personal del usuario. Si el directorio personal del usuario es /home/usuario, el fichero ejecutado será /home/user/public_php/doc.php.

La expansión de user_dir sucede sin tomar en cuenta la configuración de doc_root, así que usted puede controlar el acceso a la raíz de los documentos y el directorio de los usuarios separadamente.



Caso 4: El analizador de PHP fuera del árbol de la web

Una opción muy segura es poner el binario analizador de PHP en algún lugar fuera del árbol de ficheros de la web. En /usr/local/bin, por ejemplo. El único inconveniente real con esta opción es que ahora tendrá que poner una línea similar a:

#!/usr/local/bin/php
como la primera línea de cualquier fichero que contenga etiquetas de PHP. También necesitará hacer que el fichero sea ejecutable. Eso significa, tratarlo exactamente como trataría cualquier otro script de CGI escrito en Perl, sh, bash, o cualquier otro lenguaje común de script el cual utilice #! como mecanismo de ejecución de si mismo.

Para que PHP maneje la información correctamente de PATH_INFO y PATH_TRANSLATED con esta configuración, el analizador de PHP debería ser compilado con la opción de configuración --enable-discard-path.




Instalado como módulo de Apache

Cuando PHP es usado como un módulo de Apache, hereda los permisos del usuario de Apache (generalmente los del usuario "nobody"). Este hecho representa varios impactos sobre la seguridad y las autorizaciones. Por ejemplo, si se está usando PHP para acceder a una base de datos, a menos que tal base de datos disponga de un control de acceso propio, se tendrá que hacer que la base de datos sea asequible por el usuario "nobody". Esto quiere decir que un script malicioso podría tener acceso y modificar la base de datos, incluso sin un nombre de usuario y contraseña. Es completamente posible que una araña(bot) web pudiera toparse con la página web de administración de una base de datos, y eliminar todo de la base de datos. Una protección ante este tipo de situaciones es mediante el uso del mecanismo de autorización de Apache, o con modelos de acceso de diseño propio usando LDAP, archivos .htaccess, etc. e incluir ese código como parte de los scripts PHP.

Con frecuencia, una vez la seguridad se ha establecido en un punto en donde el usuario de PHP (en este caso, el usuario de apache) tiene asociada muy poco riesgo, se descubre que PHP se encuentra ahora imposibilitado de escribir archivos en los directorios de los usuarios. O quizás se le haya desprovisto de la capacidad de acceder o modificar bases de datos. Se ha prevenido que pudiera escribir tanto archivos buenos como malos, o que pudiera realizar transacciones buenas o malas en la base de datos.

Un error de seguridad cometido con frecuencia en este punto es darle permisos de administrador (root) a apache, o incrementar las habilidades del usuario de apache de alguna otra forma.

Incrementar los permisos del usuario de Apache hasta el nivel de administrador es extremadamente peligroso y puede comprometer al sistema entero, así que el uso de entornos sudo, chroot, o cualquier otro mecanismo que sea ejecutado como root no debería ser considerado como una opción por aquellos que no son profesionales en seguridad.

Existen otras soluciones más simples. Mediante el uso de open_basedir se puede controlar y restringir qué directorios pueden ser usados por PHP. También se pueden definir áreas solo-Apache, para restringir todas las actividades basadas en web a archivos que no son de usuarios o del sistema.



Seguridad del Sistema de Archivos

Tabla de contenidos

PHP está sujeto a la seguridad integrada en la mayoría de sistemas de servidores con respecto a los permisos de archivos y directorios. Esto permite controlar qué archivos en el sistema de archivos se pueden leer. Se debe tener cuidado con los archivos que son legibles para garantizar que son seguros para la lectura por todos los usuarios que tienen acceso al sistema de archivos.

Desde que PHP fue diseñado para permitir el acceso a nivel de usuarios para el sistema de archivos, es perfectamente posible escribir un script PHP que le permita leer archivos del sistema como /etc/passwd, modificar sus conexiones de red, enviar trabajos de impresión masiva, etc. Esto tiene algunas implicaciones obvias, es necesario asegurarse que los archivos que se van a leer o escribir son los apropiados.

Considere el siguiente script, donde un usuario indica que quiere borrar un archivo en su directorio home. Esto supone una situación en la que una interfaz web en PHP es usada regularmente para gestionar archivos, por lo que es necesario que el usuario Apache pueda borrar archivos en los directorios home de los usuarios.

Ejemplo #1 Un control pobre puede llevar a ....

<?php
// eliminar un archivo del directorio personal del usuario
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";

unlink("$homedir/$userfile");

echo 
"El archivo ha sido eliminado!";
?>
Dado que el nombre de usuario y el nombre del archivo son enviados desde un formulario, estos pueden representar un nombre de archivo y un nombre de usuario que pertenecen a otra persona, incluso se podría borrar el archivo a pesar que se supone que no estaría permitido hacerlo. En este caso, usted desearía usar algún otro tipo de autenticación. Considere lo que podría suceder si las variables enviadas son "../etc/" y "passwd". El código entonces se ejecutaría efectivamente como:

Ejemplo #2 ... Un ataque al sistema de archivos

<?php
// elimina un archivo desde cualquier lugar en el disco duro al que
// el usuario de PHP tiene acceso. Si PHP tiene acceso de root:
$username $_POST['user_submitted_name']; // "../etc"
$userfile $_POST['user_submitted_filename']; // "passwd"
$homedir  "/home/$username"// "/home/../etc"

unlink("$homedir/$userfile"); // "/home/../etc/passwd"

echo "El archivo ha sido eliminado!";
?>
Hay dos medidas importantes que usted debe tomar para prevenir estas cuestiones.
  • Únicamente permisos limitados al usuario web de PHP.
  • Revise todas las variables que se envían.
Aquí está una versión mejorada del script:

Ejemplo #3 Comprobación más segura del nombre de archivo

<?php
// elimina un archivo del disco duro al que
// el usuario de PHP tiene acceso.
$username $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
$userfile basename($_POST['user_submitted_filename']);
$homedir  "/home/$username";

$filepath "$homedir/$userfile";

if (
file_exists($filepath) && unlink($filepath)) {
    
$logstring "Se ha eliminado $filepath\n";
} else {
    
$logstring "No se ha podido eliminar $filepath\n";
}
$fp fopen("/home/logging/filedelete.log""a");
fwrite($fp$logstring);
fclose($fp);

echo 
htmlentities($logstringENT_QUOTES);

?>
Sin embargo, incluso esto no está exento de defectos. Si la autenticación del sistema permite a los usuarios crear sus propios inicios de sesión de usuario, y un usuario eligió la entrada "../etc/", el sistema está expuesto una vez más. Por esta razón, puede que prefiera escribir un chequeo más personalizado:

Ejemplo #4 Comprobación más segura del nombre de archivo

<?php
$username     
$_SERVER['REMOTE_USER']; // usando un mecanismo de autenticación
$userfile     $_POST['user_submitted_filename'];
$homedir      "/home/$username";

$filepath     "$homedir/$userfile";

if (!
ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD'$userfile)) {
    die(
"nombre de usuario o nombre de archivo incorrecto");
}

//etc...
?>

Dependiendo de sus sistema operativo, hay una gran variedad de archivos a los que debe estar atento, esto incluye las entradas de dispositivos (/dev/ o COM1), archivos de configuracion (archivos /etc/ y archivos .ini), las muy conocidas carpetas de almacenamiento (/home/, Mis documentos), etc. Por esta razón, por lo general es más fácil crear una política en donde se prohíba todo excepto lo que expresamente se permite.


Cuestiones relacionadas a bytes nulos

Como PHP utiliza las funciones de C para operaciones relacionadas al sistema de archivos, se podría manejar bytes nulos de manera bastante inesperada. Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos no serán consideradas por completo, sino sólo hasta que ocurra un byte nulo. El siguiente ejemplo muestra un código vulnerable que presenta este problema:

Ejemplo #1 Script vulnerable a bytes nulos

<?php
$file 
$_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
    
// file_exists devolverá true si el archivo /home/wwwrun/../../etc/passwd existe
    
include '/home/wwwrun/'.$file.'.php';
    
// el archivo /etc/passwd se incluirá
}
?>

Por lo tanto, cualquier cadena que se utiliza en una operación de sistema de archivos siembre deben ser validados correctamente. He aquí una versión mejorada del ejemplo anterior:

Ejemplo #2 Validando correctamente la entrada

<?php
$file 
$_GET['file']; 

// Lista blanca de valores posibles
switch ($file) {
    case 
'main':
    case 
'foo':
    case 
'bar':
        include 
'/home/wwwrun/include/'.$file.'.php';
        break;
    default:
        include 
'/home/wwwrun/include/main.php';
}
?>



Seguridad de Bases de Datos

Tabla de contenidos

Hoy en día, las bases de datos son componentes cardinales de cualquier aplicación basada en la web permitiendo a los sitios web que provean una variedad de contenido dinámico. Esta información muy sensible o secreta puede ser almacenada en una base de datos, por lo que debe considerar fuertemente proteger su base de datos.

Para devolver o almacenar cualquier información usted necesita conectarse a la base de datos, enviar una consulta legítima, devolver el resultado, y cerrar la conexión. Hoy en día, el lenguaje de consultas comunmente utilizado en esta interacción es el Lenguaje Estructurado de Consultas (SQL, por sus siglas en inglés). Vea como un atacante puede entrometerse con una consulta maliciosa de SQL.

Como puede suponer, PHP no protege su base de datos por sí mismo. Las siguientes secciones piensan ser una introducción a lo más básico de cómo acceder y manipular base de datos dentro de scripts de PHP.

Tenga en mente esta simple regla: Protección en profundidad. En la mayoría de sitios tome la acción de incrementar la protección de su base de datos, para una menor probabilidad de que un atacante tenga éxito en exponer o abusar de cualquier información que tenga almacenada. El buen diseño del esquema de la base de datos y de la aplicación se ocupará de sus mayores temores.


Diseñando la base de datos

El primer paso es siempre crear una base de datos, a menos que quiera utilizar una de terceras personas. Cuando una base de datos es creada, ésta es asignada a un propietario, el que ha ejecutado la sentencia de creación. Usualmente, sólo el propietario (o un superusuario) puede hacer cualquier cosa con los objetos en esa base de datos, y para permitir a otros usuarios que puedan utilizarla, debe concederles privilegios.

Las aplicaciones nunca deberían conectarse a la base de datos como su propietario o como superusuario, porque estos usuarios pueden ejecutar cualquier consulta a su antojo, por ejemplo, modificar el esquema (Ej., eliminar tablas) o borrar su contenido entero.

Puede crear distintos usuarios de la base de datos para cada aspecto de su aplicación con permisos muy limitados a los objetos. La mayoría de privilegios que son requeridos deberían ser solamente otorgados, y así evitar que el mismo usuario pueda interactuar con la base de datos en diferentes casos y usos. Esto significa que si los intrusos ganan acceso a su base de datos utilizando las credenciales de la aplicación, solamente afecta a los cambios que su aplicación permita.

Usted está encarecido a no implementar toda la lógica del negocio en la aplicación web (Ej., sus scripts), en su lugar hágalo en el esquema de la base de datos utilizando vistas, disparadores o reglas. Si el sistema evoluciona, se pensará en abrir nuevos puertos a la base de datos, y usted tendrá que re-implementar la lógica en cada base de datos del cliente por separado. Al respecto de lo antes citado, los disparadores pueden ser utilizados para manerjar campos transparentes y automáticamente, lo cual a menudo provee un vistazo al interior cuando hay problemas de depuración con su programa o con el sistema de seguimientos de transacciones de su aplicación.



Conectándose a la base de datos

Puede ser que quiera establecer las conecciones sobre SSL para encriptar la comunicación cliente/servidor para incrementar la seguridad, o también puede usar ssh para encriptar la conexión de red entre los clientes y el servidor de base de datos. Si alguno de éstos es utilizado, el monitoreo de su tráfico y la obtención de información sobre su base de datos será difícil para un posible atacante.



Modelo de almacenamiento encriptado

SSL/SSH proteje los datos que viajan desde el cliente al servidor: SSL/SSH no proteje los datos persistentes almacenados en una base de datos. SSL es un protocolo para proteger los datos mientras viajan en el cable.

Una vez un atacante gana acceso directamente a su base de datos (sobre pasando el servidor web), los datos sencibles podrían ser divulgados o mal utilizados, a menos que la información esté protegida en la base de datos por sí misma. Encriptando los datos es una buena forma de mitigar esta amenaza, pero muy pocas bases de datos ofrecen este tipo de encripción de datos.

La forma más fácil para trabajar en este problema, es crear primero su propio paquete de encripción, y utilizarlo desde de sus scripts de PHP. PHP puede guiarle en esto con muchas extensiones, tales como Mcrypt y Mhash, cubriendo así, una amplia variedad de algoritmos de encripción. El script encripta los datos antes de insertarlos dentro de la base de datos, y los desencripta cuando los devuelve. Vea las referencias para ejemplos adicionales de como funciona la encripción.

En caso de datos que deben estar ocultos, si no fuera necesario usar su representación real (es decir, que no se mostrarán), quizás convenga utilizar hashing. El ejemplo más típico de hashing es cuando se almacena el hash MD5 de una contraseña en una base de datos, en lugar de almacenar la contraseña en sí misma. Vea también las funciones crypt() y md5().

Ejemplo #1 Utilizando campos de contraseña con hash

<?php

// Almacenando la contraseña con hash
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

// Consultando si el usuario envió la contraseña correcta
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            
pg_escape_string($username), crypt($password'$2a$07$usesomesillystringforsalt$'));
$result pg_query($connection$query);

if (
pg_num_rows($result) > 0) {
    echo 
'Bienvenido/a, $username!';
} else {
    echo 
'La autenticación ha fallado para $username.';
}

?>


Inyección de SQL

Muchos desarrolladores web son desprevendios de cómo las consultas SQL pueden ser manipuladas, y asumen que una consulta SQL es un comando confiable. Esto significa que las consultas SQL están expuestas a que sean malversadas en controles de acceso, y por lo tanto, sobrepasar las revisiones de autenticación y autorización estándar, y que algunas veces las consultas SQL aún podrían permitir el acceso de comandos a nivel de sistema operativo del ordenador.

Comandos directos de Inyección SQL es una técnica donde un atacante crea o altera comandos SQL existentes para exponer datos ocultos, sobreponerse a los que son importantes, o peor aún, ejecutar comandos peligrosos a nivel de sistema en el equipo donde se encuentra la base de datos. Esto se logra a través de la aplicación, tomando la entrada del usuario y combinándola con parámetros estáticos para elaborar una consuta SQL. Los siguientes ejemplos están basados en historias reales, desafortunadamente.

Debido a la falta de validación en la entrada de datos y conectándose a la base de datos con privilegios de super usuario o de alguien con privilegios que puede crear usuarios, el atacante podría crear un super usuario en su base de datos.

Ejemplo #1 Dividiendo el conjunto de resultados en páginas ... y haciendo super usuarios (PostgreSQL)

<?php

$offset 
$argv[0]; // Cuidado, no hay validación en la entrada de datos!
$query  "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
$result pg_query($conn$query);

?>
Los usuarios normales dan clic en los enlaces 'siguiente' o 'atras' donde $offset está codificado en la URL. El script espera que el $offset entrante sea un número décimal. Sin embargo, qué pasa si alguien intenta irrumpir añadiendo una función urlencode() al formulario de la siguiente URL
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--
Si esto sucedió, entonces el script podría presentarle un acceso de super usuario al atacante. Nótese que 0; es para proveer un offset válido a la consulta original y para finalizarla.

Nota:

Esta es una técnica común para forzar al analizador SQL a que ignore el resto de la consulta escrita por el desarrollador con dos guiónes: -- los cuales representan un comentario en SQL.

Una forma factible de obtener contraseñas es burlar las páginas de búsqueda de resultados. Lo único que el atacante necesita hacer es ver si hay variables que hayan sido enviadas y sean usadas en declaraciones SQL las cuales no sean manejadas apropiadamente. Esos filtros pueden ser puestos comunmente en un formulario anterior para personalizar las cláusulas WHERE, ORDER BY, LIMIT y OFFSET en las declaraciones SELECT. Si su base de datos soporta el constructor UNION, el atacante podría intentar añadir una consulta enetera a la consulta original para listar contraseñas de una tabla arbitraria. Utilizar campos de contraseña encriptadoslds es fuertemente recomendado.

Ejemplo #2 Listando nuestros artículos ... y algunas contraseñas (de cualquier servidor de base de datos)

<?php

$query  
"SELECT id, name, inserted, size FROM products
                  WHERE size = '
$size'
                  ORDER BY 
$order LIMIT $limit$offset;";
$result odbc_exec($conn$query);

?>
La parte estática de la consulta puede ser combinada con otra declaración SELECT la cual revela todas las contraseñas:
'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--
Si esta consulta (ejecutándose con ' y --) fuera asignada a una de las variables utilizadas en $query, la consulta reaccionará bestialmente.

Las consultas de actualización de SQL, también son susceptibles a ataques. Estas consultas también son amenazadas por acortamiento y adición en una consulta completamente nueva a esta. Sin embargo el atacante podría manipularla con la cláusula SET. En este caso, algunos esquemas de información deben ser procesados para manipular la consulta exitosamente. Este puede adquirirse examinando la forma de nombres de las variables, o simplemente forzarlo con un ataque de fuerza bruta. No hay muchas convenciones de nombres para campos que almacenan contraseñas o nombres de usuarios.

Ejemplo #3 Desde re-establecer una contraseña ... hasta ganar más privilegios (en cualquier servidor de bases de datos)

<?php
$query 
"UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>
Pero un usuario malicioso podría enviar el valor con ' or uid like'%admin%'; -- hacia $uid para cambiar la contraseña del administrador, o simplemente cambiar $pwd a "hehehe', admin='yes', trusted=100 " (con un espacio al final) para ganar más privilegios. Entonces la consulta será cambiada así:
<?php

// $uid == ' or uid like'%admin%'; --
$query "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%'; --";

// $pwd == "hehehe', admin='yes', trusted=100 "
$query "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100 WHERE
...;"
;

?>

Un ejemplo horrible de cómo pueden ser accedidos los comandos a nivel de sistema operativo en algunos hospedadores de bases de datos.

Ejemplo #4 Atacando el sistema operativo que hospeda la base de datos (Servidor MSSQL)

<?php

$query  
"SELECT * FROM products WHERE id LIKE '%$prod%'";
$result mssql_query($query);

?>
Si un atacante envía el valor a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- hacia $prod, la consulta $query será:
<?php

$query  
"SELECT * FROM products
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--"
;
$result mssql_query($query);

?>
El servidor MSSQL ejecuta la sentencia SQL en el lote que incluye un comando para añadir un usuario nuevo a la base de datos de cuentas locales. Si esta aplicación estuviera ejecutándose como sa, y el servicio MSSQLSERVER se está ejecutando con los privilegios suficientes, el atacante ahora podría tener una cuenta con la cual tendría acceso a esta máquina.

Nota:

Algunos de los ejemplos de citados arriba estan vinculados a un servidor de base de datos específico. Esto no significa que un ataque similar sea imposible en contra de otros productos. Su servidor de base de datos podría ser vulnerable de forma similar en otra manera.

Un ejemplo comprobado de los problemas con respecto a las inyecciones de SQL
Imagen cortesía de » xkcd

Técnicas de evitación

Pese a que pueda parecer obvio que un atacante debe tener al menos algún conocimiento de arquitecturas de bases de datos para poder realizar un ataque con éxito, el obtener esta información suele ser muy sencillo. Por ejemplo, cuando la base de datos forma parte de un paquete de software libre, o disponible públicamente, con una instalación predefinida, esta información se encuentra completamente libre y disponible. Esta información puede haber sido divulgada en proyectos de código cerrado - incluso si está codificad, ofuscada o compilada - incluso por el propio código mediante mensajes de error. Otros métodos incluyen el uso de nombres de tablas y columnas frecuentes. Por ejemplo, un formulario de inicio de sesión que utiliza una tabla 'users' con los nombres de columna 'id', 'username', y 'password'.

Esos ataques están principalmente basados en explotar el código que no ha sido escrito teniendo en mente la seguridad. Nunca confíes en ningún tipo de entrada, especialmente la que viene del lado del cliente, aún cuando esta venga de una caja de selección, un campo oculto o una cookie. El primer ejemplo muestra que una inofensiva consulta puede causar desastres.

  • Nunca se conecte como super usuario o como el propietario de la base de datos. Siempre utilice usuarios personalizados con privilegios muy limitados.
  • Revise si la entrada proporcionada tiene el tipo de datos que se espera. PHP tiene un rango amplio de funciones para validar la entrada de datos, desde las más simples encontradas en Funciones de variable y en Funciones de tipo Caracter (Ej. is_numeric(), ctype_digit() respectivamente) y siguiendo el apoyo con las Expresiones regulares compatibles con Perl.
  • Si la expresión espera una entrada numérica, considere verificar los datos con la función is_numeric(), o silenciosamente cambie su tipo utilizando settype(), o use su representación numérica por medio de sprintf().

    Ejemplo #5 Una forma más segura de redactar una consulta para paginación

    <?php

    settype
    ($offset'integer');
    $query "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";

    // Fíjese en %d en el formato de cadena, utilizar %s podría no tener un resultado significativo
    $query sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;",
                     
    $offset);

    ?>

  • Encierre entre comillas cada valor no-numérico provisto por el usuario que sea pasado a la base de datos filtrado con la función de cadena específica de la base de datos (Ej. mysql_real_escape_string(), sqlite_escape_string(), etc.). Si una función de escape (o de filtrado) de cadena específica de la base de datos, o un mecanismo similar no está disponible, las funciones addslashes() y str_replace() podrían ser útiles (dependiendo del tipo de la base de datos). Vea el primer ejemplo. Como lo muestra el ejemplo, agregar comillas a la parte estática de la consulta no es suficiente, lo que hace que esta consulta sea facilmente vulnerada.
  • No muestre ninguna información específica de la base de datos, especialmente sobre el esquema, por su correcto significado es como jugar sucio contra usted mismo. Vea también Reporte de errores y Manejo de errores y funciones de registro.
  • Podría utilizar procedimientos almacenados y previamente cursores definidos, para abstraer el acceso a datos para que los usuarios no tengan acceso directo a las tablas o vistas, para que esta solución tenga otros impactos.

Junto a esto, usted se beneficia de tener un registro de las consultas ya sea dentro de su script o de la base de datos en si misma, si es que esta soporta el registro. Obviamente, llevar un registro no le previene cualquier intento de daño, pero éste puede ser útil para hacer una retro revisión de cual aplicación ha sido intervenida. El registro no es útil por sí mismo, pero lo es debido a la información que contiene. Más detalles generalmente es mejor que los pocos.




Reportando errores

Con la seguridad de PHP, hay dos formas para reportar errores. Una es en beneficio, para incrementar la seguridad, y la otra es para perjudicar.

Una táctica estándar de ataque conlleva a perfilar un sistema; llenándolo de datos incorrectos, revisando los tipos y contextos de los errores que son devueltos. Esto le permite al atacante recolectar información acerca del servidor, para determinar posibles debilidades. Por ejemplo, si un atacante ha recogido información sobre una página basada en un envío previo, él podría intentar sobrescribir las variables, o modificarlas:

Ejemplo #1 Atacando variables con una página HTML personalizada

<form method="post" action="objetivodelataque?username=badfoo&amp;password=badfoo">
<input type="hidden" name="username" value="badfoo" />
<input type="hidden" name="password" value="badfoo" />
</form>

Los errores de PHP que normalmente son devueltos, pueden ser muy útiles para el desarrollador que está intentando depurar un script, indicando qué cosas, como por ejemplo, qué función o qué fichero de PHP falló, y el número de línea en donde la falla ocurrió. Toda esta es la información que puede ser explotada. Esto no es algo raro para un desarrollador de PHP que utilice las funciones show_source(), highlight_string(), o highlight_file() como una medida de depuración, pero en un sitio en escena, esto puede exponer variables ocultas, sintáxis sin revisar, y otra información peligrosa. Es especialmente peligroso el código en ejecución de fuentes conocidas con manejadores de depuración incluidos, o utilizar técnicas comunes de depuración. Si los atacantes pueden determinar qué técnica en general usted está utilizando, ellos podrían tratar de usar fuerza bruta en una página, enviando varias cadenas comunes de depuración:

Ejemplo #2 Explotando variables comunes de depuración

<form method="post" action="objetivodelataque?errors=Y&amp;showerrors=1&amp;debug=1">
<input type="hidden" name="errors" value="Y" />
<input type="hidden" name="showerrors" value="1" />
<input type="hidden" name="debug" value="1" />
</form>

Sin importar el método de manejo de errores, la capacidad de probar errores en un sistema conlleva a proveer a un atacante con mas información.

Por ejemplo, el estilo común de un error genérico de PHP indica que un sistema ciertamente está ejecutando PHP. Si un atacante está en una página .html, y quiere probar qué motor hay tras de ese servidor (para buscar debilidades en el sistema), lo alimenta con datos erróneos que lo podrían habilitar a que determine que ese sistema fue construido con PHP.

El error de una función puede indicar ya sea, un sistema que puede estar ejecutando un motor específico de base de datos, o dar las pistas de cómo una página web puede estar programada o diseñada. Esto permite una investigación más profunda dentro de los puertos abiertos de la base de datos, o buscar errores específicos o debilidades en una página web. Pasando diferentes porciones de datos erróneos, por ejemplo, un atacante puede determinar el orden de autenticación en un script, (por medio del número de línea de los errores) como también probar exploits que pueden ser utilizados en diferentes ubicaciones del script.

Un error del sistema de archivos o un error general de PHP puede indicar qué permisos tiene el servidor web, así también la estructura y organización de ficheros en el servidor web. El código de error escrito por el desarrollador puede agravar este problema, conllevando a la explotación fácil de la, hasta entonces, información "oculta".

Hay tres grandes soluciones a este problema. La primera consiste en examinar todas las funciones, e intentar arreglar la mayoría de los errores. La segunda es deshabilitar completamente la notificación de errores de el código en ejecución. La tercera es utilizar las funciones de manejo de error propias de PHP para crear su propio manejador de errores. Dependiendo de su política de seguridad, puede ser que encuentre que las tres sean aplicables a su situación.

Una forma de detectar este problema por adelantado es hacer uso de la función propia de PHP error_reporting(), para ayudarle a asegurar su código y encontrar el uso de variables que podrían ser peligrosas. Al probar su código, antes de distribuirlo, con E_ALL, usted puede encontrar rapidamente áreas donde sus variables pueden ser abiertas para envenenamiento o modificación en otras maneras. Una vez usted está listo para distribuirlo, debería deshabilitar completamente el reporte de errores poniendo el valor de error_reporting() a 0, o apagar el visor de errores utilizando la opción display_errors del fichero php.ini para aislar su código de ataques. Si decide hacer esto último, también debería definir la ruta de acceso a su archivo de registros utilizando la directiva error_log, y poner log_errors en "on".

Ejemplo #3 Buscando variables peligrosas con E_ALL

<?php
if ($usuario) {  // No se ha inicializado o revisado antes de utilizar
    
$permitir_acceso 1;
}
if (
$permitir_acceso == 1) { // Si la prueba anterior falla, los que no estén inicializados o comprobados antes de utilizar, tendrán acceso
    
readfile("/ruta/hacia/datos/altamente/sensibles/index.html");
}
?>



Usando Register Globals

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Quizás el cambio más controversial en PHP fue cuando el valor predeterminado para la directiva de PHP register_globals pasó de ON a OFF en PHP » 4.2.0. La dependencia sobre esta directiva era bastante común y muchas personas ni siquiera sabía que existía y asumían sólo que ese era el modo como PHP funcionaba. Esta página explicará cómo se puede escribir código inseguro con esta directiva, pero tenga en cuenta que la directiva en si misma no es insegura sino el uso inapropiado de ella.

Cuando está activada, register_globals inyectará los scripts con todo tipo de variables, como las de peticiones provenientes de formularios HTML. Esto, unido al hecho de que PHP no requiere la inicialización de variables, significa que es muy fácil escribir código inseguro. Fue una decisión difícil, pero la comunidad de PHP decidió desactivar esta directiva por defecto. Cuando está activada, las personas usan variables que en realidad no se sabe a ciencia cierta de dónde provienen y solo queda asumir. Las variables internas que son definidas en el script mismo son mezcladas con los datos requeridos enviados por los usuarios y al deshabilitar register_globals se cambia esto. Vamos a demostrar con un ejemplo del uso incorrecto de register_globals:

Ejemplo #1 Ejemplo de uso incorrecto con register_globals = on

<?php
// $authorized = true Se define sólo si el usuario está autenticado
if (authenticated_user()) {
    
$authorized true;
}

// Debido a que no se inicializa $authorized como false, esta podría ser
// definida a través de register_globals, como desde GET auth.php?authorized=1
// ¡Por lo tanto, cualquier persona puede verse como autenticada!
if ($authorized) {
    include 
"/highly/sensitive/data.php";
}
?>

Cuando está register_globals = on, la lógica anterior podría verse comprometida. Cuando está deshabilitada, $authorized no puede definirse a través de peticiones, así que estará bien, aunque realmente en general es una buena práctica de programación inicializar las variables primero. Por ejemplo, en el ejemplo anterior se puede haber realizado primero algo como $authorized = false. Hacer esto primero significa que el código anterior podría funcionar con register_globals activado o desactivado ya que los usuarios de forma predeterminada no serían autorizados.

Otro ejemplo es aquel de las sesiones. Cuando está register_globals = on, se puede usar también $username en el siguiente ejemplo, pero nuevamente se debe notar que $username también puede provenir de otros medios, tal como GET (a través de la URL).

Ejemplo #2 Ejemplo de uso de sesiones con register_globals on u off

<?php
// No se sabría por dónde proviene $username, pero se sabe que $_SESSION es
// para datos de sesión.
if (isset($_SESSION['username'])) {

    echo 
"Hello <b>{$_SESSION['username']}</b>";

} else {

    echo 
"Hello <b>Guest</b><br />";
    echo 
"Would you like to login?";

}
?>

Incluso es posible tomar medidas preventivas para advertir cuando se haga un intento de falsificación. Si se sabe previamente con exactitud el lugar de donde una variable debería provenir, se puede verificar si los datos enviados provienen de una clase inapropiada de sumisión. Si bien no garantiza que los datos no han sido falsificados, esto requiere que un atacante adivine el medio apropiado para falsificar. Si no importa de donde provienen los datos requeridos, se puede usar $_REQUEST ya que contiene una mezcla de datos GET, POST y COOKIE. Ver también la sección del manual sobre el uso de variables desde fuentes externas sources.

Ejemplo #3 Detección de envenenamiento simple de variables

<?php
if (isset($_COOKIE['MAGIC_COOKIE'])) {

    
// MAGIC_COOKIE viene de una cookie.
    // ¡Asegúrese de validar la información de la cookie!

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {

   
mail("admin@example.com""Posible intento de ataque"$_SERVER['REMOTE_ADDR']);
   echo 
"Violación de seguridad, el administrador ha sido alertado.";
   exit;

} else {

   
// MAGIC_COOKIE no se establece a través de este REQUEST

}
?>

Por supuesto, simplemente deshabilitar register_globals no quiere decir que su código es seguro. Cada pieza de datos que es remitida, también debe ser verificada de otras formas. ¡Siempre valide los datos de los usuarios e inicialice sus variables! Para chequear por variables no inicializadas, se puede usar error_reporting() para mostrar errores de nivel E_NOTICE.

Para obtener información sobre la emulación de register_globals activado o desactivado, consulte este FAQ.

Nota: Nota de disponibilidad de Superglobals

Los arrays Superglobal como $_GET, $_POST y $_SERVER, etc. están disponibles desde PHP 4.1.0. Para más información, lea la sección del manual en superglobals



Datos Enviados por el Usuario

Las mayores debilidades de muchos programas PHP no son inherentes al lenguaje mismo, sino simplemente un problema generado cuando se escribe código sin pensar en la seguridad. Por esta razón, usted debería tomarse siempre el tiempo para considerar las implicaciones de cada pedazo de código, para averiguar el posible peligro involucrado cuando una variable inesperada es enviada.

Ejemplo #1 Uso Peligroso de Variables

<?php
// eliminar un archivo del directorio personal del usuario .. ¿o
// quizás de alguien más?

unlink ($variable_malvada);

// Imprimir el registro del acceso... ¿o quizás una entrada de /etc/passwd?
fwrite ($desc_archivo$variable_malvada);

// Ejecutar algo trivial.. ¿o rm -rf *?
system ($variable_malvada);
exec ($variable_malvada);

?>

Usted debería examinar siempre, y cuidadosamente su código para asegurarse de que cualquier variable siendo enviada desde un navegador web sea chequeada apropiadamente, y preguntarse a sí mismo:

  • ¿Este script afectará únicamente los archivos que se pretende?
  • ¿Puede tomarse acción sobre datos inusuales o indeseados?
  • ¿Puede ser usado este script en formas malintencionadas?
  • ¿Puede ser usado en conjunto con otros scripts en forma negativa?
  • ¿Serán adecuadamente registradas las transacciones?

Al preguntarse adecuadamente estas preguntas mientras escribe su script, en lugar de hacerlo posteriormente, usted previene una desafortunada re-implementación del programa cuando desee incrementar el nivel de seguridad. Al comenzar con esta mentalidad, no garantizará la seguridad de su sistema, pero puede ayudar a mejorarla.

Puede que también desee considerar la deshabilitación de register_globals, magic_quotes, u otros parámetros convenientes que pueden causar confusión sobre la validez, fuente o valor de una determinada variable. Trabajar con PHP en modo error_reporting(E_ALL) también puede ayudarle a advertir variables que están siendo usadas antes de ser chequeadas o inicializadas (de modo que puede prevenir que datos inusuales produzcan operaciones inadvertidas).



Comillas Mágicas

Tabla de contenidos

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Las comillas mágicas son un procedimiento que automágicamente limpian los datos de entrada de un script PHP. Es aconsejable trabajar con las comillas mágicas deshabilitadas y, en su lugar, hacer un filtrado en tiempo de ejecución y bajo demanda.


¿Qué son las Comillas Mágicas?

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Cuando están habilitadas, todos los caracteres ' (comillas simples), " (comillas dobles), \ (barras) y NULL son "escapados" automáticamente con una barra. Este comportamiento es equivalente al de la función addslashes().

Hay tres directivas para las comillas mágicas:

  • magic_quotes_gpc Afecta a los datos de peticiones HTTP (GET, POST, y COOKIE). No se puede habilitar en tiempo de ejecución, y por omisión vale on en PHP. Vea también get_magic_quotes_gpc().
  • magic_quotes_runtime Si está habilitada, la mayor parte de funciones que devuelve datos a partir de recursos externos, incluyendo bases de datos y ficheros de texto, tendrán las comillas escapadas con una barra. Puede habilitarse en tiempo de ejecución y por omisión vale off en PHP. Vea también set_magic_quotes_runtime() y get_magic_quotes_runtime().
  • magic_quotes_sybase Si está habilitada, se escapa cada comilla simple con otra comilla simple, en lugar de con un caracter barra. Si estuviera habilitada, anularía por completo a magic_quotes_gpc. Si se tuvieran habilitadas las dos directivas, sólo se escaparían las comillas simples, en la forma ''. Las comillas dobles, barras y caracteres NULL se mantendrían intactos y sin escapado. Vea también ini_get() para consultar su valor.


Por qué usarlas

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

  • Dado que se han declarado obsoletas PHP, no hay ninguna razón para usarlas. Sin embargo, todavía están ahí y ayudan a los programadores noveles a escribir un mejor código (más seguro). Sin embargo, si trabaja con código que dependa de este comportamiento, es preferible actualizar el código a tener que habilitar las comillas mágicas. ¿Entonces por qué existen? Sencillo, para ayudar a prevenir ataques de Inyección SQL. Hoy, los desarrolladores son más cuidadosos con la seguridad y acaban empleando los mecanismos de escapado específicos de cada base de datos y/o declaraciones preparadas en lugar de depender de funcionalidades como las comillas mágicas.


Por qué no usarlas

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

  • Portabilidad El asumir que están habilitadas, o no, afecta a su portabilidad. Para comprobarlo, utilice get_magic_quotes_gpc() para así programar como corresponda.
  • Rendimiento Dado que no todos los datos que se escapen se insertarán en una base de datos, existe un impacto negativo en el rendimiento escapando todos estos datos. Es más eficiente llamar a las funciones de escapado (como addslashes()) en tiempo de ejecución. A pesar de que en php.ini-development se habilitan por omisión estas directivas, en php.ini-production se deshabilitan. El motivo de esta recomendación es sobre todo debido a motivos de rendimiento.
  • Inconvenientes Dado que no todos los datos necesitan escapado, a menudo resulta molesto ver datos escapados cuando no deberían. Por ejemplo, al enviar un correo electrónico desde un formulario, y comprobar que hay varios \' en el correo. Para corregirlo, se necesitará hacer un uso intensivo de stripslashes().


Deshabilitar las comillas mágicas

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.

La directiva magic_quotes_gpc sólo puede deshabilitarse en el sistema, y no en tiempo de ejecución. En otras palabras, no se puede utilizar ini_set().

Ejemplo #1 Deshabilitar comillas mágicas en el servidor

Ejemplo que establece un Off a estas directivas en php.ini. Para más detalles, lea la sección del manual titulada Cómo cambiar los ajustes de configuración.

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

Si no es posible acceder a la configuración del servidor, también puede usar .htaccess. Por ejemplo:

php_flag magic_quotes_gpc Off

Si tuviera interés en implementar código portable (aquél que funciona en cualquier entorno), y no pudiera modificar la configuración en el servidor, aquí hay un ejemplo de cómo deshabilitar magic_quotes_gpc en tiempo de ejecución. Este método es ineficiente por lo que se recomienda establecer los valores apropiados para las directivas en otro lugar.

Ejemplo #2 Deshabilitar las comillas mágicas en tiempo de ejecución

<?php
if (get_magic_quotes_gpc()) {
    
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list(
$key$val) = each($process)) {
        foreach (
$val as $k => $v) {
            unset(
$process[$key][$k]);
            if (
is_array($v)) {
                
$process[$key][stripslashes($k)] = $v;
                
$process[] = &$process[$key][stripslashes($k)];
            } else {
                
$process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset(
$process);
}
?>




Ocultando PHP

En general, la seguridad por obscuridad es una de las formas más débiles de la seguridad. Pero en algunos casos, cada pequeño elemento extra de seguridad es deseable.

Unas cuantas técnicas simples pueden ayudar a ocultar PHP, posiblemente retrasando a un atacante que está tratando de descubrir debilidades en el sistema. Al configurar expose_php en off en el archivo php.ini, se reduce la cantidad de información disponible para ellos.

Otra táctica es configurar servidores web como Apache para interpretar diferentes tipos de archivos por medio de PHP, ya sea con una directiva .htaccess o en el propio archivo de configuración de Apache. Entonces se pueden utilizar extensiones de archivo engañosas:

Ejemplo #1 Ocultando PHP como si fuera otro lenguaje

# Hacer ver el código PHP como si fueran otros tipos de código
AddType application/x-httpd-php .asp .py .pl
U oscurecerlo completamente:

Ejemplo #2 Utilizando tipos desconocidos para extensiones de PHP

# Hacer ver el código PHP como si fueran tipos desconocidos
AddType application/x-httpd-php .bop .foo .133t
U ocultarlo como código HTML, lo cual tiene un pequeño impacto de rendimiento debido a que todos los archivos HTML serán procesados por el motor de PHP:

Ejemplo #3 Utilizando tipos HTML para extensiones de PHP

# Hacer ver el código PHP como si fueran HTML
AddType application/x-httpd-php .htm .html
Para que esto funcione eficazmente, se debe cambiar el nombre de los archivos PHP con las extensiones de arriba. Si bien es una forma de seguridad por oscuridad, es una medida preventiva menor con pocos inconvenientes.



Mantenerse al día

PHP, como cualquier otro sistema de tamaño considerable, está bajo constante escrutinio y remodelación. Cada nueva versión incluye con frecuencia cambios mayores y menores para mejorar la seguridad y reparar cualquier fallo, problemas de configuración, y otros asuntos que puedan afectar la seguridad y estabilidad global de su sistema.

Como cualquier lenguaje y programa de scripting del nivel del sistema, el mejor enfoque es el de actualizar con frecuencia, y mantenerse alerta sobre las últimas versiones y sus cambios.




Características


Autenticación HTTP con PHP

Es posible usar la función header() para enviar un mensaje "Authentication Required" al navegador del cliente causando que se abra una ventana para ingresar usuario y password. Una vez se ha llenado el usuario y password, la URL contenida dentro del script PHP será llamada nuevamente con las variables predefinidas PHP_AUTH_USER, PHP_AUTH_PW, y AUTH_TYPE puestas por el nombre del usuario, password y el tipo de autenticación respectivamente. Esas variables predefinidas son encontradas en los arrays $_SERVER y $HTTP_SERVER_VARS. Ambos métodos de autenticación "Basic" y "Digest" (desde PHP 5.1.0) son soportados. Ver la función header() para más información.

Nota: Nota de la versión de PHP

Superglobals, como $_SERVER, están disponibles en PHP » 4.1.0.

Un fragmento de ejemplo de un script el cual podría forzar la autenticación en una página es el siguiente:

Ejemplo #1 Ejemplo de Autenticación HTTP Basic

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Texto a enviar si el usuario pulsa el botón Cancelar';
    exit;
} else {
    echo 
"<p>Hola {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo 
"<p>Tu ingresaste {$_SERVER['PHP_AUTH_PW']} como tu password.</p>";
}
?>

Ejemplo #2 Ejemplo de Autenticación HTTP Digest

Este ejemplo muestra como implementar un script PHP de autenticación Digest. Para más información leer » RFC 2617.

<?php
$realm 
'Area restringida';

//user => password
$users = array('admin' => 'mypass''guest' => 'guest');


if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
    
header('HTTP/1.1 401 Unauthorized');
    
header('WWW-Authenticate: Digest realm="'.$realm.
           
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

    die(
'Texto a enviar si el usuario pulsa el botón Cancelar');
}


// analiza la variable PHP_AUTH_DIGEST
if (!($data http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset(
$users[$data['username']]))
    die(
'Datos Erroneos!');


// Generando una respuesta valida
$A1 md5($data['username'] . ':' $realm ':' $users[$data['username']]);
$A2 md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if (
$data['response'] != $valid_response)
    die(
'Datos Erroneos!');

// ok, usuario & password validos
echo 'Estas logueado como: ' $data['username'];


// function to parse the http auth header
function http_digest_parse($txt)
{
    
// proteger contra datos perdidos
    
$needed_parts = array('nonce'=>1'nc'=>1'cnonce'=>1'qop'=>1'username'=>1'uri'=>1'response'=>1);
    
$data = array();
    
$keys implode('|'array_keys($needed_parts));

    
preg_match_all('@(' $keys ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@'$txt$matchesPREG_SET_ORDER);

    foreach (
$matches as $m) {
        
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
        unset(
$needed_parts[$m[1]]);
    }

    return 
$needed_parts false $data;
}
?>

Nota: Nota de Compatibilidad

Hay que ser cuidadoso cuando se programan las líneas del HTTP header. Para garantizar la mayor compatibilidad con todos los clientes, la palabra "Basic" debe ser escrita con mayúsculas "B", el string real debe ser encerrado en comillas dobles (no simples), y exactamente un espacio debe preceder el código 401 en la línea del header HTTP/1.0 401. Los parámetros de autenticación deben ser separados por comas como se vió en el ejemplo resumido anterior.

En lugar de imprimir simplemente PHP_AUTH_USER y PHP_AUTH_PW, como se hizo en el ejemplo anterior, se debería chequear el usuario y password para validar. Talvez enviando una consulta a una base de datos, o buscando el usuario en un archivo dbm.

Cuidado con errores con el Internet Explorer. Parece ser muy quisquilloso con el orden de los headers. Enviando el header WWW-Authenticate antes que el header HTTP/1.0 401 parece ser un truco por ahora.

A partir de PHP 4.3.0, en orden de prevenir que alguien escriba un script el cual revele el password para una página que fué autenticada con un mecanismo externo tradicional, las variables PHP_AUTH no deberán ser colocadas si la autenticación externa esta habilitada para esa página en particular y si safe mode esta habilitado. Independientemente, REMOTE_USER puede ser usado para identificar al usuario autenticado externamente. Así, se podrá usar $_SERVER['REMOTE_USER'].

Nota: Nota de configuración

PHP usa la presencia de una directiva AuthType para determinar si una autenticación externa esta en uso.

Nótese, sin embargo, que lo anterior no impide que alguien quien controle una URL no autenticada pueda robar passwords de URL's autenticadas en el mismo servidor.

Tanto Netscape Navigator e Internet Explorer borrarán el caché de la ventana de autenticación del navegador local después de recibr una respuesta 401. Esto puede "desloguear" efectivamente a un usuario, forzandolo a reingresar su usuario y password. Algunas personas usan esto para "hacer esperar" logueos, o proveer un botón de "deslogueo".

Ejemplo #3 Ejemplo de Autenticación HTTP forzando a un nuevo usuario/password

<?php
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"Debes ingresar un login ID y password validos para accesar a este recurso\n";
    exit;
}
 
if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Bienvenido: " htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "<br />";
    echo 
"Anterior: " htmlspecialchars($_REQUEST['OldAuth']);
    echo 
"<form action='' method='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1' />\n";
    echo 
"<input type='hidden' name='OldAuth' value=\"" htmlspecialchars($_SERVER['PHP_AUTH_USER']) . "\" />\n";
    echo 
"<input type='submit' value='Re Authenticate' />\n";
    echo 
"</form></p>\n";
}
?>

Este comportamiento no es requerido por la autenticación HTTP Basic estandar, así que se debería depender de esto. Probando con Lynx mostrará que Lynx no limpia las credenciales de autenticación con una respuesta 401 del servidor, asi que presionando back y luego forward abrirá el recurso nuevamente si estos no han cambiado. Sin embarogo, el usuario puede presionar la tecla '_' para limpiar su información de autenticación.

También notese que hasta PHP 4.3.3, la autenticación HTTP no trabajaba usando Microsoft IIS con la versión CGI de PHP, una limitación de IIS. Para hacer funcionar PHP 4.3.3 o mayor, se debe editar la configuracion de IIS "Directory Security". Hacer click en "Edit" y solo chequear "Anonymous Access", todos los demas campos dejarlos sin chequear.

Otra limitación si se esta usando el módulo IIS (ISAPI) y PHP 4, no se debería usar las variables PHP_AUTH_* pero en su lugar, la variable HTTP_AUTHORIZATION esta disponible. Por ejemplo, considerar el siguiente código: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Nota: Nota de IIS:
Para que funcione la Autenticación HTTP con IIS, la directiva de PHP cgi.rfc2616_headers debe ser configurada a 0 (el valor por defecto).

Nota:

Si safe mode esta habilitado, el uid del script es agregado a la parte del reino del header WWW-Authenticate.



Cookies

PHP soporta cookies HTTP de forma transparente. Las Cookies son un mecanismo por el cuál se almacenan datos en el browser remoto y así rastrear o identificar a usuarios que vuelven. Se pueden configurar Cookies usando la función setcookie() o setrawcookie(). Las Cookies son parte del header HTTP, así es que setcookie() será llamada antes que cualquier otra salida sea enviada al browser. Esta es la misma limitación que tiene la función header(). Se pueden usar funciones del búffer de salida para retrasar la salida del script hasta que se halla decidido enviar o no cookies o enviar cualquier otro header.

Algunos envíos de cookies desde el cliente serán incluidos automáticamente en el Array auto-global $_COOKIE si variables_order contiene "C". Si se desea asignar múltiples valores a una cookie, solo se deben agregar [] al nombre de la cookie.

Dependiendo de register_globals, variables regulares de PHP pueden ser creadas a partir de las cookies. Sin embargo, no se recomienda esta práctica, esta característica es desactivada por temas de seguridad. $HTTP_COOKIE_VARS también es configurada en versiones anteriores de PHP cuando se configura la variable track_vars. (Esta configuración ésta desde PHP 4.0.3).

Para más detalles, incluyendo notas de bugs de los browsers, ver la función setcookie() y setrawcookie().



Sesiones

El soporte de sesiones en PHP consiste en una manera de guardar ciertos datos a través de diferentes accesos web. Esto permite crear aplicaciones más personalizadas y mejorar las características del sitio web. Toda la información está en la sección. Referencia de sesiones.



Manejo de XForms

» XForms define una variación de los webforms tradicionales los cuales permiten ser usados en una gran variedad de plataformas y navegadores o inclusive en medios no tradicionales como los documentos PDF.

La primera diferencia clave con XForms es la forma en que los formularios son enviados al cliente. » XForms for HTML Authors contiene una descripción detallada de como crear XForms, para el fin de este tutorial únicamente veremos un ejemplo simple.

Ejemplo #1 Un formulario simple de búsqueda con XForms

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

El formulario anterior muestra una caja de texto (llamada q), y un botón submit. Cuando el botón submit es presionado, el formulario será enviado a la página referenciada por action.

Aquí es donde comienza a verse diferente desde el punto de vista de la aplicación web. En un formulario normal HTML, los datos serían enviados como application/x-www-form-urlencoded, en el mundo XForms, esta información es enviada como datos formateados enXML.

Si se ha elegido trabajar con XForms, entonces probablemente se quiera esos datos como XML, en ese caso, ver en $HTTP_RAW_POST_DATA donde se puede encontrar el XML generado por el navegador el cual se puede pasar en el motor XSLT favorito o parseador.

Si no se esta interesado en formatear y solo se desea que la data sea cargada en la variable tradicional $_POST, se puede instruir al navegador del cliente para enviarlos como application/x-www-form-urlencoded cambiando el atributo method a urlencoded-post.

Ejemplo #2 Usando un Xform para rellenar $_POST

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Busqueda</h:title>
 <model>
  <submission action="http://example.com/search"
              method="urlencoded-post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Buscar</label></input>
  <submit submission="s"><label>Ir</label></submit>
 </h:p>
</h:body>
</h:html>

Nota: Así como esta escrito, muchos navegadores no soportan Xforms. Compruebe la versión de su navegador si el ejemplo falla.



Manejando la carga de archivos

Tabla de contenidos


Carga con el método POST

Esta característica permite que los usuarios envien tanto archivos de texto como binarios. Con la autenticación de PHP y las funciones de manipulación de archivos, se tiene completo control sobre quién está autorizado a cargar y que hay que hacer con el archivo una vez que se ha cargado.

PHP es capaz de recibir cargas de archivos de cualquier navegador compatible con RFC-1867.

Nota: Configuraciones Relacionadas

Ver también las directivas file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size y max_input_time en php.ini

PHP también soporta el método PUT para la carga como lo utilizan los clientes Netscape Composer y Amaya del W3C. Ver el soporte del método PUT para más detalles.

Ejemplo #1 Formulario para la carga de archivos

Una página de carga de archivos puede ser construida mediante la creación de un formulario especial el cual se vería algo como esto:

<!-- El tipo de codificación de datos, enctype, se DEBE especificar como a continuación -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE debe preceder el campo de entrada de archivo -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- El nombre del elemento de entrada determina el nombre en el array $_FILES -->
    Enviar este archivo: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

El __URL__ en el ejemplo anterior se debe sustituir y apuntar a un archivo PHP.

El campo oculto MAX_FILE_SIZE (medido en bytes) debe preceder al campo de entrada de archivo y su valor es el tamaño máximo de archivo aceptado por PHP. Este elemento del formulario se debe usar siempre, ya que evita a los usuarios la molestia de esperar a que un gran archivo sea transferido sólo para descubrir que era demasiado grande y falló la transferencia. Tener en cuenta: engañar a esta configuración en el lado del navegador es muy fácil, así que nunca se debe confiar en que archivos con un tamaño mayor serán bloqueados por esta característica. Es simplemente una característica de conveniencia para los usuarios en el lado cliente de la aplicación. Sin embargo, la configuración de PHP (en el lado del servidor) para un máximo de tamaño, no puede ser engañada.

Nota:

Asegúrese de que el formulario de subida de archivos tiene el atributo enctype="multipart/form-data" de lo contrario la carga de archivos no funcionará.

El $_FILES global existe a partir de PHP 4.1.0 (Usar $HTTP_POST_FILES en su lugar si se utiliza una versión anterior). Este array contendrá toda la información sobre el archivo cargado.

El contenido de $_FILES del formulario de ejemplo es el siguiente. Tenga en cuenta que esto asume la utilización del nombre del archivo cargado userfile, tal como se utiliza en el script de ejemplo anterior. Este puede ser cualquier nombre.

$_FILES['userfile']['name']

El nombre original del archivo en la máquina cliente.

$_FILES['userfile']['type']

El tipo mime del archivo, si el navegador proporciona esta información. Un ejemplo podría ser "image/gif". Este tipo mime, sin embargo no se verifica en el lado de PHP y por lo tanto no se garantiza su valor.

$_FILES['userfile']['size']

El tamaño, en bytes, del archivo subido.

$_FILES['userfile']['tmp_name']

El nombre temporal del archivo en el cual se almacena el archivo cargado en el servidor.

$_FILES['userfile']['error']

El código de error asociado a esta carga de archivo. Este elemento fue añadido en PHP 4.2.0

Los archivos, por defecto se almacenan en el directorio temporal por defecto del servidor, a menos que otro lugar haya sido dado con la directiva upload_tmp_dir en php.ini. El directorio por defecto del servidor puede ser cambiado mediante el establecimiento de la variable de entorno TMPDIR en el entorno en el cual se ejecuta PHP. Configurarlo usando putenv() desde un script PHP no funcionará. Esta variable de entorno también se puede utilizar para asegurarse de que las demás operaciones están trabajando sobre los archivos cargados.

Ejemplo #2 Validación de la carga de archivos

Ver también las entradas para las funciones is_uploaded_file() y move_uploaded_file() para más información. El siguiente ejemplo procesaría la carga de archivo que vendría de un formulario.

<?php
// En versiones de PHP anteriores a 4.1.0, $HTTP_POST_FILES debe utilizarse en lugar
// de $_FILES.

$uploaddir '/var/www/uploads/';
$uploadfile $uploaddir basename($_FILES['userfile']['name']);

echo 
'<pre>';
if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo 
"El archivo es válido y fue cargado exitosamente.\n";
} else {
    echo 
"¡Posible ataque de carga de archivos!\n";
}

echo 
'Aquí hay más información de depurado:';
print_r($_FILES);

print 
"</pre>";

?>

El script PHP que recibe el archivo cargado, debe implementar cualquier lógica que sea necesaria para determinar qué se debe hacer con el archivo subido. Se puede, por ejemplo, utilizar la variable $_FILES['userfile']['size'] para descartar cualquier archivo que sea demasiado pequeño o demasiado grande. Se podría utilizar la variable $_FILES['userfile']['type'] para descartar cualquier archivo que no corresponda con un cierto criterio de tipo, pero usando esto sólo como la primera de una serie de verificaciones, debido a que este valor está completamente bajo el control del cliente y no se comprueba en el lado de PHP. A partir de PHP 4.2.0, se puede usar $_FILES['userfile']['error'] y el planear la lógica de acuerdo con los códigos de error. Cualquiera que sea la lógica, se debe borrar el archivo del directorio temporal o moverlo a otra parte.

Si ningún archivo es seleccionado para realizar la carga en el formulario, PHP devolverá $_FILES['userfile']['size'] como 0, y $_FILES['userfile']['tmp_name'] como ninguno.

El archivo será borrado del directorio temporal al final de la solicitud si no se ha movido o renombrado.

Ejemplo #3 Cargando un array de archivos

PHP soporta las funcionalidades array de HTML incluso con archivos.

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if (
$error == UPLOAD_ERR_OK) {
        
$tmp_name $_FILES["pictures"]["tmp_name"][$key];
        
$name $_FILES["pictures"]["name"][$key];
        
move_uploaded_file($tmp_name"data/$name");
    }
}
?>

Una barra de progreso de carga de archivos puede ser implementada mediante Session Upload Progress.



Explicación de los mensajes de error

A partir de PHP 4.2.0, PHP devuelve un código de error apropiado, junto con el array del archivo. El código de error se puede encontrar en el segmento error del array del archivo que PHP crea durante la subida del archivo. En otras palabras, el error podría encontrarse en $_FILES['userfile']['error'].

UPLOAD_ERR_OK

Valor: 0; No hay error, archivo subido con éxito.

UPLOAD_ERR_INI_SIZE

Valor: 1; El archivo subido excede la directiva upload_max_filesize en php.ini.

UPLOAD_ERR_FORM_SIZE

Valor: 2; El archivo subido excede la directiva MAX_FILE_SIZE que fue especificada en el formulario HTML.

UPLOAD_ERR_PARTIAL

Valor: 3; El archivo subido fue sólo parcialmente cargado.

UPLOAD_ERR_NO_FILE

Valor: 4; Ningún archivo fue subido.

UPLOAD_ERR_NO_TMP_DIR

Valor: 6; Falta la carpeta temporal. Introducido en PHP 4.3.10 y PHP 5.0.3.

UPLOAD_ERR_CANT_WRITE

Valor: 7; No se pudo escribir el archivo en el disco. Introducido en PHP 5.1.0.

UPLOAD_ERR_EXTENSION

Valor: 8; Una extensión de PHP detuvo la carga de archivos. PHP no proporciona una forma de determinar cual extensión causó la parada de la subida de archivos; el examen de la lista de extensiones cargadas con phpinfo() puede ayudar. Introducido en PHP 5.2.0.

Nota:

Estas se convirtieron en constantes de PHP en PHP 4.3.0.



Dificultades comunes

El item MAX_FILE_SIZE no puede especificar un tamaño de archivo mayor que el que ha sido configurado en el upload_max_filesize en el archivo php.ini. Por defecto es 2 megabytes.

Si hay un límite de memoria activado, un memory_limit más grande puede ser necesario. Asegurarse de configurar un memory_limit lo suficientemente grande.

Si el max_execution_time es demasiado pequeño, la ejecución del script puede excederse de este valor. Asegurarse de configurar un max_execution_time lo suficientemente grande.

Nota: max_execution_time sólo afecta al plazo de ejecución del propio script. Todo el tiempo gastado en actividades que tengan lugar por fuera de la ejecución del script, tales como las llamadas al sistema usando system(), la función sleep(), las consultas a base de datos, el tiempo que tarda el proceso de subida de archivos, etc., no se incluye cuando se determina el tiempo máximo que el script ha estado funcionando.

Advertencia

max_input_time establece el tiempo máximo, en segundos, al script se le permite recibir información, esto incluye la subida de archivos. Para archivos grandes o múltiples, o usuarios con conexiones más lentas, el valor predeterminado de 60 segundos puede ser excedido.

Si post_max_size se establece demasiado pequeño, los archivos grandes no pueden ser cargados. Asegurarse de configurar post_max_size lo suficientemente grande.

A partir de PHP 5.2.12, la configuración max_file_uploads controla el número máximo de archivos que se pueden cargar en una petición. Si más archivos que ese límite son subidos, entonces $_FILES parará de procesar archivos una vez se alcanza el límite. Por ejemplo, si max_file_uploads se establece en 10, entonces $_FILES nunca contendrá más de 10 elementos.

No validar sobre cual archivo se opera puede significar que los usuarios pueden acceder a información sensible en otros directorios.

Por favor tener en cuenta que el CERN httpd parece quitar todo lo que empieza con primer espacio en blanco en la cabecera de tipo de contenido mime que recibe desde el cliente. Mientras este sea el caso, el CERN httpd no soportará la funcionalidad de carga de archivos.

Debido a la gran cantidad de estilos de lista de directorios, no podemos garantizar que los archivos con nombres exóticos (como el que contiene espacios en blanco) se manejen adecuadamente.

Un desarrollador no debe mezclar los campos input normales con los de carga de archivos en la misma variable de formulario (mediante un nombre de input como foo[]).



Subida de múltiples archivos

Múltiples archivos pueden ser subidos utilizando diferentes name para los input.

También es posible subir múltiples archivos simultáneamente y tener la información organizada automáticamente en arrays. Para ello, es necesario utilizar la misma sintaxis de sumisión de array en el formulario HTML como se hace con múltiples selects y checkboxes:

Ejemplo #1 Subida de múltiples archivos

<form action="file-upload.php" method="post" enctype="multipart/form-data">
  Enviar estos archivos:<br />
  <input name="userfile[]" type="file" /><br />
  <input name="userfile[]" type="file" /><br />
  <input type="submit" value="Send files" />
</form>

Cuando el formulario de arriba se remite, los arrays $_FILES['userfile'], $_FILES['userfile']['name'] y $_FILES['userfile']['size'] serán inicializados (así como en $HTTP_POST_FILES para las versiones de PHP anteriores a 4.1.0). Cuando register_globals está activado, globales para los archivos subidos también se inicializan. Cada uno de estos será un array indexado numéricamente de los valores correspondientes a los archivos remitidos.

Por ejemplo, suponga que los nombres de archivo /home/test/review.html y /home/test/xwp.out son remitidos. En este caso,$_FILES['userfile']['name'][0] contendría el valor review.html, y $_FILES['userfile']['name'][1] contendría el valor xwp.out. De manera similar, $_FILES['userfile']['size'][0] contendría el tamaño del archivo review.html y así sucesivamente.

$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0], y $_FILES['userfile']['type'][0] también son establecidos.

Advertencia

A partir de PHP 5.2.12, la configuración max_file_uploads actúa como un límite en el número de archivos que se pueden subir en una petición. Se necesita asegurar que el formulario no intenta cargar más archivos que este límite en una petición.



Soporte del método PUT

PHP ofrece soporte para el método HTTP PUT utilizado por algunos clientes para almacenar archivos en un servidor. Las peticiones PUT son mucho más simples que una carga de archivos mediante solicitudes POST y se ven algo como esto:

PUT /path/filename.html HTTP/1.1

Esto normalmente significa que el cliente remoto quiere guardar el contenido que sigue como: /path/filename.html en el árbol web. Obviamente no es una buena idea para Apache o PHP dejar automáticamente a todo el mundo que pueda sobrescribir cualquier archivo del árbol web. Para manejar esta solicitud se debe primero decir al servidor web que se desea que cierto script de PHP maneje la petición. En Apache se hace esto con la directiva de Script. Se puede colocar casi en cualquier parte del archivo de configuración de Apache. Un lugar común es dentro de un bloque <Directory> o tal vez dentro de un bloque <VirtualHost>. Una línea como ésta haría el truco:

Script PUT /put.php

Esto le dice a Apache que envíe todas peticiones PUT para URIs que coincidan con el contexto en el cual se pone esta línea en el script put.php. Esto asume, por supuesto, que se tiene habilitado PHP para la extensión .php y que PHP está activo. El recurso de destino para todas las solicitudes PUT a este script tiene que ser en propio script, el archivo subido no debe tener un nombre de archivo.

Con PHP entonces se haría algo como lo siguiente en el put.php. Esto copiaría el contenido del archivo subido al archivo myputfile.ext en el servidor. Es probable que se deseen realizar algunas verificaciones y/o autenticar al usuario antes de realizar esta copia de archivo.

Ejemplo #1 Guardando archivos HTTP PUT

<?php
/* datos PUT vienen en en el flujo de entrada estándar  */
$putdata fopen("php://input""r");

/* Abre un archivo para escribir */
$fp fopen("myputfile.ext""w");

/* Leer los datos de 1 KB a la vez
   y escribir en el archivo */
while ($data fread($putdata1024))
  
fwrite($fp$data);

/* Cerrar los flujos */
fclose($fp);
fclose($putdata);
?>




Usando archivos remotos

Siempre que allow_url_fopen este habilitado en php.ini, se pueden usar URLs HTTP y FTP con la mayoría de las funciones que toman un nombre de archivo como parámetro. Además, las URLs pueden ser usadas con las declaraciones include, include_once, require y require_once (desde PHP 5.2.0, allow_url_include debe ser habilitado para esto). Ver Protocolos y Envolturas soportados para más información de los protocolos soportados por PHP.

Nota:

En PHP 4.0.3 y anteriores, con el fin de usar capas de URL, se requirió de configurar PHP usando la opción de configuración --enable-url-fopen-wrapper .

Nota:

Las versiones Windows de PHP más nuevas a la PHP 4.3 no soportan acceso remoto a los archivos por las siguientes funciones: include, include_once, require, require_once, y las funciones imagecreatefromXXX en la extensión Funciones de GD e Imágenes

Por ejemplo, se puede usar esto para abrir un archivo en un web server remoto, analizar la salida de los datos que se quieren, y entonces usar esos datos en una consulta a la base de datos, o simplemente para mostrarlos en un estilo que coincida con el resto del sitio web.

Ejemplo #1 Obteniendo el titulo de una página remota

<?php
$file 
fopen ("http://www.example.com/""r");
if (!
$file) {
    echo 
"<p>Imposible abrir el archivo remoto.\n";
    exit;
}
while (!
feof ($file)) {
    
$line fgets ($file1024);
    
/* Esto solo trabaja si el titulo y sus tags estan en una línea */
    
if (preg_match ("@\<title\>(.*)\</title\>@i"$line$out)) {
        
$title $out[1];
        break;
    }
}
fclose($file);
?>

También se pueden escribir archivos en un servidor FTP (considerando que se esta conectado como un usuario con los permisos de acceso correctos). Se pueden crear únicamente archivos nuevos usando este método. Si se intenta sobreescribir un archivo que ya existe, la llamada a la función fopen() fallará.

Para conectarse como un usuario diferente a 'anonymous', se necesita especificar el usuario (y posiblemente el password) con la URL, tal como 'ftp://user:password@ftp.example.com/path/to/file'. (Se puede usar la misma sintaxis para accesar archivos vía HTTP cuando se requiere autenticación básica).

Ejemplo #2 Almacenando datos en un servidor remoto

<?php
$file 
fopen ("ftp://ftp.example.com/incoming/outputfile""w");
if (!
$file) {
    echo 
"<p>Imposible abrir el archivo remoto para escritura.\n";
    exit;
}
/* Escribir los datos aqui. */
fwrite ($file$_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>

Nota:

Se podría tener la idea del ejemplo anterior que se esta usando esta técnica para escribir un archivo de log remoto. Desafortunadamente esto no funcionaría porque la función fopen() llamada fallará si el archivo remoto ya existe. Para hacer logs distribuidos como ese, se debería dar un vistazo a syslog().



Manejo de Conexiones

Internamente en PHP se mantiene un estatus de la conexión. Hay 3 posibles estados:

  • 0 - NORMAL
  • 1 - ABORTED
  • 2 - TIMEOUT

Cuando un script en PHP esta ejecutándose, normalmente esta activo el estado NORMAL. Si el cliente remoto se desconecta, el flag ABORTED es activado. Un cliente remoto se desconecta usualmente porque el usuario presiona su botón STOP. Si el tiempo limite PHP-imposed (ver set_time_limit()) es activado, el flag TIMEOUT se activa.

Se puede decidir si se desea que un cliente se desconecte o no a causa de que se aborte el script. Algunas veces es útil que los scripts se ejecuten inclusive si ya no hay un navegador recibiendo la salida. El comportamiento por defecto es que el script sea abortado cuando el cliente remoto se desconecte. Este comportamiento puede ser establecido a través de la directiva ignore_user_abort en php.ini así como a través de la directiva correspondiente de Apache en httpd.conf php_value ignore_user_abort o con la función ignore_user_abort(). Si se decide no decirle a PHP que ignore abortar al usuario y el usuario aborta, el script terminará. La única excepción es si se tiene registrada una función de cierre usando register_shutdown_function(). Con una función de cierre, cuando el usuario remoto activa el botón STOP, la próxima vez que el script intente mostrar algo, PHP detectará que la conexión fue abortada y la función de cierre es llamada. Esta función de cierre también es llamada al final del script cuando termina normalmente, así que para hacer algo diferente en el caso de que un cliente se desconecte usar la función connection_aborted(). Esta función retornará TRUE si la conexión fue abortada.

El script puede ser terminado también por el temporizador incorporado en los scripts. El tiempo por defecto es de 30 segundos. Puede ser cambiado usando la directiva max_execution_time de php.ini o la correspondiente directiva php_value max_execution_time de Apache httpd.conf así como con la función set_time_limit(). Cuando el temporizador expira el script será abortado y así como el caso del cliente anterior que se desconecto, si la función de cierre ha sido registrada ésta será llamada. Dentro de esta función de cierre se puede comprobar para ver si el timeout causa la función de cierre llamando a la función connection_status(). Esta función retornará 2 si el timeout causo la llamada a la función de cierre.

Una cosa a notar es que ambos estados ABORTED y TIMEOUT pueden ser activados al mismo tiempo. Esto es posible si se le dice a PHP que ignore el aborto del usuario. PHP notará de hecho que un usuario podría haber roto la conexión, pero el script se mantendrá ejecutándose. Si este activa el limite de tiempo será abortado y la función de cierre, si existe, será llamada. A este punto, se encontrará que connection_status() retorna 3.



Conexiones Persistentes a Bases de Datos

Las conexiones persistentes son enlaces que no se cierran cuando la ejecución del script termina. Cuando una conexión persistente es solicitada, PHP chequea si ya existe una conexión persistente idéntica (que fuera abierta antes) - y si existe, la usa. Si no existe, crea el enlace. Una conexión "Idéntica" es una conexión que fue abierta por el mismo host, con el mismo usuario y el mismo password (donde sea aplicable).

Las personas que no estan completamente familiarizadas con como trabajan los web servers y la distribución de carga podrían equivocarse en usar conexiones persistentes para lo que no son. En particular, no le da la habilidad de abrir "sesiones de usuario" en el mismo enlace, no le da la habilidad de construir una transacción eficiente, pero no hacen muchas otras cosas más. De hecho, para ser extremadamente claros acerca de esto, las conexiones persistentes no dan cualquier otra funcionalidad que no fuera posible hacerse con sus hermanas no-persistentes.

¿Por qué?

Esto tiene que ver con la forma en que los web servers trabajan. Hay 3 formas en las cuales el web server puede generar paginas web usando PHP.

El primer método es usar PHP como una "capa" CGI. Cuando se ejecuta de esta forma, una instancia del interprete PHP es creado y destruido por cada solicitud de la página (para una página PHP) al web server. Porque es destruido después de cada solicitud, cualquier recurso que se necesite (como un enlace a un servidor de base de datos SQL) son cerradas cuando son destruidas. En este caso, no se gana nada intentando usar conexiones persistentes -- simplemente no persisten.

La segunda, y mas popular, es ejecutar PHP como un modulo en un servidor multiproceso, el cual actualmente solo incluye a Apache. Un servidor multiproceso normalmente tiene un proceso (el padre) el cual coordina un grupo de procesos (los hijos) los cuales no trabajan sirviendo páginas web. Cuando una solicitud viene desde el cliente, es manejada por uno de los hijos el cual no este sirviendo a otro cliente. Esto significa que cuando el mismo cliente hace una segunda solicitud al servidor, podría ser servido por un proceso hijo diferente a la primera vez. Cuando se abre una conexión persistente, cada petición siguiente de servicios SQL puede reusar la misma conexión establecida al servidor SQL.

El último método es usar PHP como un plug-in para un servidor web multihilos. Actualmente PHP 4 tiene soporte para ISAPI, WSAPI, y NSAPI (en Windows), los cuales permiten usar PHP como un plug-in multihilo en servidores como Nestcape FastTrack (iPlanet), Microsoft Internet Information Server (IIS), y O'Reilly's WebSite Pro. El comportamiento es esencialmente el mismo para el modelo multiproceso descrito antes.

Si las conexiones persistentes no tienen ninguna funcionalidad adicional, ¿Para que son buenas?

La respuesta es extremadamente simple -- eficiencia. Las conexiones persistentes son buenas si la sobrecarga para crear enlaces al servidor SQL son altas. Que hallan o no sobrecargas depende de muchos factores. Como, cual base de datos se usa, que sea o no la misma computadora en que esta el servidor web, así como la carga de la maquina que tiene el servidor SQL y así por el estilo. Lo esencial es que si la sobrecarga de conexiones es alta, las conexiones persistentes ayudan considerablemente. Podrían causar que los procesos hijos únicamente se conecten una vez en todo lo que duran, en lugar de que se haga cada vez que se procese una página que se conecte a un servidor SQL. Esto significa que por cada hijo que abrió una conexión persistente mantendrá una conexión persistente al servidor. Por ejemplo, si se tienen 20 procesos hijos diferentes que ejecutaran un script que hace una conexión persistente al servidor SQL, se tendrían 20 conexiones diferentes al servidor SQL, una por cada hijo.

Nótese, sin embargo, que esto puede tener algunos inconvenientes si se esta usando una base de datos con un limite de conexiones que sean excedidas por las conexiones persistentes hijas. Si la base de datos tiene un limite de 16 conexiones simultaneas, y en el curso de una sesión ocupada del servidor, 17 hilos intentan conectarse, uno no sera posible de hacerse. Si hay bugs en los scripts los cuales no contemplen los cierres de las conexiones (como un loop infinito), la base de datos con los 16 conexiones podría rápidamente hundida. Chequear la documentación de la base de datos para obtener información de como manejar conexiones abandonadas u ociosas.

Advertencia

Hay un par de advertencias mas que tener en mente cuando se usan conexiones persistentes. Una es que cuando se usan bloqueos de tablas con una conexión persistente, si el script por alguna razón no puede soltar el bloqueo, entonces los scripts subsecuentes que usan la misma conexión serán bloqueadas indefinidamente y podría ser necesario reiniciar el servidor httpd o el servidor de la base de datos. Otra cosa es que cuando se usan transacciones, una transacción bloqueada también podría llevar al siguiente script el cual usa la conexión si la ejecución del script termina antes que el bloqueo lo haga. En ese caso, se puede usar register_shutdown_function() para registrar una función de limpieza para desbloquear las tablas o deshacer la transacción. Mejor aún es evitar este problema por completo no usando conexiones persistentes en scripts los cuales usan bloqueo de tablas o transacciones (se pueden usar en otros lugares).

Un resumen importante. Las conexiones persistentes fueron diseñadas para tener conexiones normales uno a uno. Esto significa siempre que se podría ser capaz de reemplazar conexiones persistentes con conexiones no-persistentes, y no cambiaría la forma en que este se comporte. Esto podría (y probablemente lo hará) cambiar la eficiencia del script, pero no su comportamiento!.

Ver también fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), ingres_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), ociplogon(), odbc_pconnect(), oci_pconnect(), pfsockopen(), pg_pconnect(), and sybase_pconnect().



Safe Mode

Tabla de contenidos

The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren't very realistic, many people, especially ISP's, use safe mode for now.

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Changelog for safe mode
Versión Descripción
5.4.0 Removed from PHP, and generates a fatal E_CORE_ERROR level error when enabled.
5.3.0 Deprecated, and E_DEPRECATED errors were added.


Security and Safe Mode

Security and Safe Mode Configuration Directives
Nombre Por defecto Cambiable Historial de cambios
safe_mode "0" PHP_INI_SYSTEM Removed in PHP 5.4.0.
safe_mode_gid "0" PHP_INI_SYSTEM Available since PHP 4.1.0. Removed in PHP 5.4.0.
safe_mode_include_dir NULL PHP_INI_SYSTEM Available since PHP 4.1.0. Removed in PHP 5.4.0.
safe_mode_exec_dir "" PHP_INI_SYSTEM Removed in PHP 5.4.0.
safe_mode_allowed_env_vars "PHP_" PHP_INI_SYSTEM Removed in PHP 5.4.0.
safe_mode_protected_env_vars "LD_LIBRARY_PATH" PHP_INI_SYSTEM Removed in PHP 5.4.0.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

safe_mode boolean

Whether to enable PHP's safe mode. If PHP is compiled with --enable-safe-mode then defaults to On, otherwise Off.

Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

safe_mode_gid boolean

By default, Safe Mode does a UID compare check when opening files. If you want to relax this to a GID compare, then turn on safe_mode_gid. Whether to use UID (FALSE) or GID (TRUE) checking upon file access.

safe_mode_include_dir string

UID/GID checks are bypassed when including files from this directory and its subdirectories (directory must also be in include_path or full path must including).

As of PHP 4.2.0, this directive can take a colon (semi-colon on Windows) separated path in a fashion similar to the include_path directive, rather than just a single directory. The restriction specified is actually a prefix, not a directory name. This means that "safe_mode_include_dir = /dir/incl" also allows access to "/dir/include" and "/dir/incls" if they exist. When you want to restrict access to only the specified directory, end with a slash. For example: "safe_mode_include_dir = /dir/incl/" If the value of this directive is empty, no files with different UID/GID can be included in PHP 4.2.3 and as of PHP 4.3.3. In earlier versions, all files could be included.
safe_mode_exec_dir string

If PHP is used in safe mode, system() and the other functions executing system programs refuse to start programs that are not in this directory. You have to use / as directory separator on all environments including Windows.

safe_mode_allowed_env_vars string

Setting certain environment variables may be a potential security breach. This directive contains a comma-delimited list of prefixes. In Safe Mode, the user may only alter environment variables whose names begin with the prefixes supplied here. By default, users will only be able to set environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).

Nota:

If this directive is empty, PHP will let the user modify ANY environment variable!

safe_mode_protected_env_vars string

This directive contains a comma-delimited list of environment variables that the end user won't be able to change using putenv(). These variables will be protected even if safe_mode_allowed_env_vars is set to allow to change them.

See also: open_basedir, disable_functions, disable_classes, register_globals, display_errors, and log_errors.

When safe_mode is on, PHP checks to see if the owner of the current script matches the owner of the file to be operated on by a file function or its directory. For example:

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php 
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd
Running script.php:
<?php
 readfile
('/etc/passwd'); 
?>
results in this error when safe mode is enabled:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not 
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2

However, there may be environments where a strict UID check is not appropriate and a relaxed GID check is sufficient. This is supported by means of the safe_mode_gid switch. Setting it to On performs the relaxed GID checking, setting it to Off (the default) performs UID checking.

If instead of safe_mode, you set an open_basedir directory then all file operations will be limited to files under the specified directory. For example (Apache httpd.conf example):

<Directory /docroot>
  php_admin_value open_basedir /docroot 
</Directory>
If you run the same script.php with this open_basedir setting then this is the result:
Warning: open_basedir restriction in effect. File is in wrong directory in 
/docroot/script.php on line 2 

You can also disable individual functions. Note that the disable_functions directive can not be used outside of the php.ini file which means that you cannot disable functions on a per-virtualhost or per-directory basis in your httpd.conf file. If we add this to our php.ini file:

disable_functions = readfile,system
Then we get this output:
Warning: readfile() has been disabled for security reasons in 
/docroot/script.php on line 2 

Advertencia

These PHP restrictions are not valid in executed binaries, of course.



Functions restricted/disabled by safe mode

This is a still probably incomplete and possibly incorrect listing of the functions limited by safe mode.

Safe mode limited functions
Function Limitations
dbmopen() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
dbase_open() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
filepro() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
filepro_rowcount() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
filepro_retrieve() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
ifx_* sql_safe_mode restrictions, (!= safe mode)
ingres_* sql_safe_mode restrictions, (!= safe mode)
mysql_* sql_safe_mode restrictions, (!= safe mode)
pg_lo_import() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
posix_mkfifo() Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
putenv() Obeys the safe_mode_protected_env_vars and safe_mode_allowed_env_vars ini-directives. See also the documentation on putenv()
move_uploaded_file() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
chdir() Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
dl() Esta función no está disponible cuando PHP está corriendo en safe mode.
backtick operator Esta función no está disponible cuando PHP está corriendo en safe mode.
shell_exec() (functional equivalent of backticks) Esta función no está disponible cuando PHP está corriendo en safe mode.
exec() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
system() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
passthru() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
popen() You can only execute executables within the safe_mode_exec_dir. For practical reasons it's currently not allowed to have .. components in the path to the executable. escapeshellcmd() is executed on the argument of this function.
fopen() Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
mkdir() Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
rmdir() Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
rename() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
unlink() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
copy() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (on source and target)
chgrp() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
chown() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.
chmod() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. In addition, you cannot set the SUID, SGID and sticky bits
touch() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado.
symlink() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (note: only the target is checked)
link() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (note: only the target is checked)
apache_request_headers() In safe mode, headers beginning with authorization (case-insensitive) will not be returned.
header() In safe mode, the uid of the script is added to the realm part of the WWW-Authenticate header if you set this header (used for HTTP Authentication).
PHP_AUTH variables In safe mode, the variables PHP_AUTH_USER, PHP_AUTH_PW, and AUTH_TYPE are not available in $_SERVER. Regardless, you can still use REMOTE_USER for the USER. (note: only affected since PHP 4.3.0)
highlight_file(), show_source() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (note: only affected since PHP 4.2.1)
parse_ini_file() Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (note: only affected since PHP 4.2.1)
set_time_limit() Has no effect when PHP is running in safe mode.
max_execution_time Has no effect when PHP is running in safe mode.
mail() In safe mode, the fifth parameter is disabled. (note: only affected since PHP 4.2.3)
session_start() The owner of a script must be the same as owner of a session.save_path directory if the default files session.save_handler is used.
All filesystem and stream functions. Comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado. Comprueba si el directorio en el que el script está operando tiene el mismo UID (propietario) que el script que está siendo ejecutado. (see the safe_mode_include_dir php.ini option.




Usando PHP desde la línea de comandos

Tabla de contenidos


Introducción

Desde PHP 4.3.0, hay soporte para CLI SAPI. El principal objetivo de esta SAPI es el desarrollo de aplicaciones de consola en PHP. En este capítulo se explica las diferencias que hay entre CLI SAPI y otras SAPIs. Vale la pena aclarar que CLI y CGI son SAPIs diferentes pese a que compartan la mayoría de características.

Para que CLI SAPI esté activa por omisión, debe usarse --enable-cli , pero puede deshabilitarse usando la opción --disable-cli al ejecutar ./configure.

Tanto el nombre, ubicación y presencia del binario CLI/CGI depende de cómo se instale PHP en el sistema. Por omisión, al ejecutar make, tanto CGI como CLI se construyen y ubican como sapi/cgi/php-cgi y sapi/cli/php respectivamente, en el directorio fuente de PHP. Debe tenerse en cuenta que los dos se llaman php. Dependiendo de la configuración, sucederá una cosa u otra al ejecutar make install. Si durante la configuración se elige un módulo SAPI, como por ejemplo apxs, o bien se usa la opción --disable-cgi , se copia CLI a {PREFIX}/bin/php al ejecutar make install a no ser que CGI ya esté ahí. Por ejemplo, si se utiliza --with-apxs en la configuración, entonces CLI se copiaría a {PREFIX}/bin/php durante make install. Si se deseara sobrescribir la instalación del binario de CGI, debe usarse make install-cli tras make install. Adicionalmente, se puede especificar --disable-cgi en la configuración.

Nota:

Ya que tanto --enable-cli como --enable-cgi se habilitan por omisión, el simple hecho de tener --enable-cli en la configuración no implica que CLI se instale en {PREFIX}/bin/php durante make install.

Desde PHP 5, en sistemas Windows el binario CLI se instala en el directorio principal con el nombre de php.exe. La versión CGI se instala como php-cgi.exe. Además, se instalaría php-win.exe si PHP se hubiera configurado usando --enable-cli-win32 . Funciona igual que la versión CLI, solo que no muestra ninguna salida, por lo que no sirve para la consola.

Nota: ¿Qué SAPI tengo?

Desde la consola, al escribir php -v sabremos si php es un CGI o CLI. Revise, asimismo, la función php_sapi_name() y la constante PHP_SAPI.

Nota:

En Unix hay disponible una página del manual escribiendo man php en la terminal.



Diferencias respecto a otras SAPIs

Principales diferencias de CLI SAPI respecto a otras SAPIs:

  • A diferencia de CGI SAPI, no se envía ninguna cabecera a la salida.

    Pese a que CGI SAPI tiene un mecanismo para desactivar las cabeceras HTTP, no existe un equivalente para habilitarlas en CLI SAPI.

    Por omisión, CLI se inicia en modo silencioso, si bien se mantienen las opciones -q y --no-header por motivos de compatibilidad, de forma que pueda ser posible utilizar antigüos scripts CGI.

    No se cambia el directorio de trabajo al del script (las opciones -C y --no-chdir se mantiene por compatibilidad).

    Mensajes de error en texto plano (no se formatean en HTML).

  • Hay ciertas directivas php.ini que se ignoran en CLI SAPI ya que no tienen sentido en un entorno de consola:

    Directivas php.ini anuladas
    Directiva Valor por omisión en CLI SAPI Comentario
    html_errors FALSE Siendo FALSE de forma predeterminada, puede resultar complicado leer mensajes de error en la consola cuando éstos están mezclados con etiquetas HTML no interpretadas.
    implicit_flush TRUE En un ambiente de línea de comandos, es preferible que las salidas que procedan de print, echo y y similares se muestren inmediatamente y no se mantenga en memoria intermedia. Aun así, es posible utilizar output buffering si se desea postergar o manipular la salida estándar.
    max_execution_time 0 (ilimitado) PHP en un entorno de shell tiende a ser utilizado para una gama mucho más amplia de los propósitos típicos basados en scripts de la Web, y como éstos pueden ser de muy larga duración, el tiempo de ejecución máximo se establece a ilimitado.
    register_argc_argv TRUE

    Establecer esta directiva a TRUE significa que los scripts ejecutados vía la SAPI CLI siempre tienen acceso a argc (número de argumentos que se le pasan a la aplicación) y argv (array con el contenido de los argumentos reales).

    Las variables de PHP $argc y $argv se establecen automáticamente al valor apropiado cuando se utiliza CLI SAPI. Esos valores también pueden ser encontrados en el array $_SERVER, por ejemplo: $_SERVER['argv']

    output_buffering FALSE

    Aunque la directiva php.ini está codificada como FALSE, las funciones del buffer de salida sí están habilitadas.

    max_input_time FALSE

    CLI no tiene soporte ni para GET, ni para POST ni para subidas de ficheros.

    Nota:

    Estas directivas no pueden ser inicializadas con otro valor desde el fichero de configuración php.ini o con un valor personalizado (si se especifica). Esta limitación se debe a que los valores son aplicados después que todos los ficheros de configuración han sido analizados. Sin embargo, sus valores pueden ser cambiados en tiempo de ejecución (aunque esto no es aplicable a todas ellas, por ejemplo register_argc_argv).

    Nota:

    Se recomienda habilitar ignore_user_abort en scripts de línea de comandos. Para más información, consulte ignore_user_abort().

  • Para facilitar el trabajo en entornos de consola, se definen unas determinadas constantes para flujos de Entrada/Salida.

  • CLI SAPI no cambia el directorio actual a aquel en el que se encuentra el script ejecutado.

    Ejemplo #1 Ejemplo que muestra las diferencias respecto a CGI SAPI:

    <?php
    // Aplicación de pruebas llamada test.php
    echo getcwd(), "\n";
    ?>

    Al usar la versión CGI, la salida es:

    $ pwd
    /tmp
    
    $ php -q otro_directorio/test.php
    /tmp/otro_directorio
    

    Esto muestra claramente que PHP cambia el directorio actual a aquél en que se encuentre el script ejecutado.

    Al usar CLI SAPI obtenemos:

    $ pwd
    /tmp
    
    $ php -f otro_directorio/test.php
    /tmp
    

    Esto ofrece una gran flexibilidad a la hora de escribir herramientas de consola en PHP.

    Nota:

    CGI SAPI puede funcionar con este comportamiento propio de CLI SAPI usando la opción -C al ejecutarlo desde la línea de comandos.



Opciones de la línea de comandos

Se puede consultar en cualquier momento la lista de opciones de línea de comandos en el binario de PHP con el modificador -h :

Usage: php [opciones] [-f] <fichero> [--] [args...]
   php [opciones] -r <código> [--] [args...]
   php [opciones] [-B <código_inicial>] -R <código> [-E <código_final>] [--] [args...]
   php [opciones] [-B <código_inicial>] -F <fichero> [-E <código_final>] [--] [args...]
   php [opciones] -- [args...]
   php [opciones] -a

  -a                      Se ejecuta interactivamente.
  -c <ruta>|<fichero>     Busca el fichero php.ini en este directorio.
  -n                      No se usará el fichero php.ini.
  -d foo[=bar]            Define la entrada INI de foo con el valor 'bar'
  -e                      Generate información extendida para el depurador/perfilador.
  -f <fichero>            Analiza y ejecuta el <fichero>.
  -h                      Esta ayuda.
  -i                      Información de PHP.
  -l                      Solamente revisa la sintáxis (lint).
  -m                      Muestra lo compilado en módulos.
  -r <code>               Ejecuta el <código> PHP sin utilizar las etiquetas del script <?..?>.
  -B <código_inicial>     Ejecuta el <código_inicial> antes de procesar las líneas de entrada.
  -R <code>               Ejecuta el <código> PHP por cada línea de entrada.
  -F <file>               Analiza y ejecuta el <fichero> por cada línea de entrada.
  -E <código_final>       Ejecuta el <código_final> después de procesar todas las líneas de entrada.
  -H                      Oculta los argumentos pasados desde cualquier herramienta externa.
  -S <dirección>:<puerto> Ejecuta con el servidor web interno.
  -t <raíz_documento>     Especifica la raíz del documento <raíz_documento> para el servidor web interno.
  -s                      Salida de la fuente en sintáxis HTML resaltada.
  -v                      Número de versión.
  -w                      Salida de la fuente con espacios en blanco y comentarios subrayados.
  -z <fichero>            Carga un <fichero> con extensión de Zend.

  args...                 Argumentos pasados al script. Utilice argumentos con -- cuando el primer argumento
                          inicie con - o el script sea leído desde la entrada estándar stdin

  --ini                   Muestra los nombres de fichero de configuración.

  --rf <nombre>           Muestra información sobre la función <nombre>.
  --rc <nombre>           Muestra información acerca de la clase <nombre>.
  --re <nombre>           Muestra información acerca de la extensión <nombre>.
  --rz <nombre>           Muestra información acerca de la extensión Zend <nombre>.
  --ri <nombre>           Muestra la configuración para la extensión <nombre>.

Opciones de línea de comandos
Opción Opción Larga Descripción
-a --interactive

Ejecutar PHP de forma interactiva. Para más información, consúltese la sección Consola interactiva.

-b --bindpath

Ruta Ligada en modo de servidor FASTCGI externo (sólo en CGI).

-C --no-chdir

No cambiar el directorio del script (sólo en CGI).

-q --no-header

Modo silencioso. Elimina la salida de cabeceras HTTP (sólo en CGI).

-T --timing

Calcula el tiempo de ejecución del script un número de veces (sólo en CGI).

-c --php-ini

Especifica ya sea un directorio en el que se busca a php.ini o bien un fichero INI personalizado (que no tiene porqué llamarse php.ini necesariamente), p.ej.:

$ php -c /directorio/propio/mi_script.php

$ php -c /directorio/propio/fichero-propio.ini mi_script.php

Si no se especifica esta opción, se busca el fichero php.ini en las localizaciones predeterminadas.

-n --no-php-ini

Ignorar por completo el fichero php.ini.

-d --define

Establecer un valor predeterminado para cualquiera de las directivas de configuración permitidas en php.ini. Ésta es la sintaxis:

 -d directiva_de_configuracion[=valor]
 

# Si se omite el valor, se establecerá un "1" a la directiva
$ php -d max_execution_time
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Si se pasa un valor vacío, se establecerá "" a la directiva
php -d max_execution_time=
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# Se pasará lo que haya tras el caracter '=' a la directiva de configuración
$  php -d max_execution_time=20
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php
        -d max_execution_time=doesntmakesense
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"

-e --profile-info

Activa el modo de información expandida, para usar con un depurador/perfilador.

-f --file

Analiza y ejecuta el fichero proporcionado. El modificador -f es opcional y puede ser omitido - es suficiente con solo poner el nombre del fichero a ejecutar.

Nota:

Para pasar argumentos a un script, el primer argumento debe ser --, sino PHP los interpretará como opciones de PHP.

-h y -? --help y --usage Muestra una lista de opciones de línea de comandos, con descripciones de una línea sobre lo que hace.
-i --info Invoca a phpinfo(), y muestra el resultado. Si PHP no funcionara correctamente, es aconsejable utilizar php -i para ver donde se muestre cualquier mensaje de error antes o en el lugar de las tablas de información. Tenga en cuenta que al usarse en modo CGI la salida es en HTML y por lo tanto muy larga.
-l --syntax-check

Provee un método conveniente para realizar solamente una revisión de sintáxis del código proporcionado de PHP. En caso de éxito, se muestra el texto No syntax errors detected in <filename> en la salida estándar y se devuelve un código de retorno 0. Si fallara, se mostraría el texto Errors parsing <filename>, además del mensaje de error de análisis correspondiente en la salida estándar, y se retornaría el código -1.

Esta opción no encuentra errores fatales (como funciones no definidas). Utilice el modificador -f si se desea también comprobar errores fatales.

Nota:

Esta opción no funciona junto con la opción -r .

-m --modules

Ejemplo #1 Muestra los módulos PHP y Zend incorporados (y habilitados)

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

Permite ejecutar PHP desde la línea de comandos. Las etiquetas de inicio y fin (<?php y ?>) no son necesarias y provocarán un error sintáctico si estuvieran presentes.

Nota:

Debe tenerse cuidado al usar PHP de esta forma para no colisionar con sustituciones de variables de línea de comandos hechas por la propia consola.

Ejemplo #2 Obteniendo un error sintáctico usando comillas dobles

$ php -r "$foo = get_defined_constants();"
PHP Parse error:  syntax error, unexpected '=' in Command line code on line 1

Parse error: syntax error, unexpected '=' in Command line code on line 1

El problema aquí es que sh/bash lleva a cabo una sustitución de variables incluso si estamos usando comillas dobles ". Puesto que la variable $foo no está definida, no se sustituye por nada, haciendo que el código real que se le pasa a la ejecución de PHP sea:

$ php -r " = get_defined_constants();"

La forma correcta sería usar comillas simples '. Las variables de texto en comillas simples no se sustituyen en sh/bash.

Ejemplo #3 Usando comillas simples para prevenir la sustitución de variables de la consola

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]

Si se está usando una consola diferente de sh/bash, es posible experimentar otros errores. Le animamos a enviar un informe de error a » http://bugs.php.net/. Tenga en cuenta que es muy fácil verse en problemas al tratar de utilizar variables (de la consola o de PHP) en código de línea de comandos, o al usar el caracter de barra invertida (\) para escapar caracteres, así que tome mucho cuidado haciendo eso. Ha sido advertido!

Nota:

-r está disponible en CLI SAPI, pero no en CGI SAPI.

Nota:

Esta opción está pensada unicamente para código muy básico, así que algunas directivas de configuración (tales como auto_prepend_file y auto_append_file) se ignoran en este modo.

-B --process-begin

Código PHP a ejecutar antes de procesar la entrada. Añadido en PHP 5.

-R --process-code

Código PHP a ejecutar por cada línea de entrada. Añadido en PHP 5.

Hay dos variables especiales disponibles en este modo: $argn y $argi. $argn contendrá la línea que PHP está procesando en un momento dado, mientras que $argi contendrá el número de línea.

-F --process-file

Fichero PHP a ejecutar por cada línea de entrada. Añadido en PHP 5.

-E --process-end

Código PHP a ejecutar tras procesar cada línea. Añadido en PHP 5.

Ejemplo #4 Usando las opciones -B , -R y -E para contar el número de líneas de un proyecto.

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
Total Lines: 37328

-S --server

Inicia el servidor web interno. Disponible a partir de PHP 5.4.0.

-t --docroot Especifiva la raíz del documento para el servidor web interno. Disponible a partir de PHP 5.4.0.
-s --syntax-highlight y --syntax-highlighting

Mostrar el código fuente destacando la sintaxis en color.

Esta opción utiliza los mecanismos internos de análisis del ficheros y escribe una versión HTML coloreada y la muestra en la salida estándar. Tenga en cuenta que todo lo que hace es generar un bloque de etiquetas HTML <code> [...] </code>, sin cabeceras HTML.

Nota:

Esta opción no puede funcionar junto con la opción -r .

-v --version

Ejemplo #5 Al usar -v obtenemos el nombre de la SAPI y la versión de PHP y Zend

$ php -v
PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

-w --strip

Mostrar código fuente sin comentarios ni líneas en blanco.

Nota:

Esta opción no puede usarse junto con la opción -r .

-z --zend-extension

Carga una extensión Zend. Si sólo se proporciona un nombre de fichero, PHP trata de cargar la extensión en el directorio de bibliotecas por defecto de su sistema (normalmente se especifica en /etc/ld.so.conf en sistemas Linux, por ejemplo). Si se proporciona un nombre de fichero con la ruta absoluta no se usarán las rutas de bibliotecas del sistema. Un nombre de fichero relativo que incluya algún directorio le indicará a PHP que sólo trate de cargar la extensión a partir del directorio actual.

  --ini

Mostrar el nombre del fichero de configuración y de los directorios analizados. Disponible desde PHP 5.2.3.

Ejemplo #6 Ejemplo de --ini

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

--rf --rfunction

Mostrar información de la función o método proporcionado (p.ej. número y nombre de los parámetros). Disponible desde PHP 5.1.2.

Esta opción sólo está disponible si se compiló PHP con soporte para Reflection.

Ejemplo #7 Uso básico de --rf

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <requerido> $var ]
    Parameter #1 [ <opcional> $... ]
  }
}

--rc --rclass

Muestra información de la clase dada (lista de constantes, propiedades y métodos). Disponible desde PHP 5.1.2.

Esta opción sólo está disponible si se compiló PHP con soporte para Reflection.

Ejemplo #8 Ejemplo de --rc

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Muestra información de la extensión dada (lista de opciones en php.ini, funciones definidas, constantes y clases). Disponible desde PHP 5.1.2.

Esta opción sólo está disponible si se compiló PHP con soporte para Reflection .

Ejemplo #9 Ejemplo de --re

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--rz --rzendextension

Mostrar la información de configuración para la extensión Zend proporcionada (la misma información que es devuelta por la función phpinfo()). Disponible como parte de PHP 5.4.0.

--ri --rextinfo

Mostrar información de configuración de la extensión dada (la misma información que muestra phpinfo()). Disponible desde PHP 5.2.2. La información relevante está disponible usando "main" como nombre de extensión.

Ejemplo #10 Ejemplo de --ri

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2009.20
Timezone Database => internal
Default timezone => Europe/Oslo

Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.930972 => 59.930972
date.default_longitude => 10.776699 => 10.776699
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

Nota:

Las opciones -rBRFEH, --ini y --r[fcezi] sólo están disponibles en CLI.



Ejecutando ficheros PHP

Hay tres formas distintas de proveer a la CLI SAPI con código PHP para que sea ejecutado:

  1. Decirle a PHP que ejecute un determinado fichero.

    $ php mi_script.php
    
    $ php -f mi_script.php
    

    Ambas formas (usando o no el modificador -f ) ejecutan el fichero mi_script.php. Nótese que no hay restricción sobre cuales ficheros puede ser ejecutado; en particular, el nombre del fichero no es necesario que tenga una extensión .php.

    Nota:

    Si se necesita proporcionar argumentos al script, utilizando el modificador -f , el primer argumento debe ser --.

  2. Pasar el código PHP para ejecutarlo directamente en la línea de comandos.

    $ php -r 'print_r(get_defined_constants());'
    

    Debe tomarse especial cuidado con respecto al uso de comillas y la sustitución de variables de la consola.

    Nota:

    Lea cuidadosamente el ejemplo: No hay etiquetas de inicio y fin. El modificador -r simplemente no lo necesita. Si se usare, provocaría un error sintáctico.

  3. Proporcionar el código PHP a ejecutar a través de la entrada estándar (stdin).

    Esto ofrece la posibilidad de crear código PHP dinámicamente para pasárselo al binario, tal y como se ve en este ejemplo (ficticio):

    $ alguna_aplicacion | algun_filtro | php | sort -u > salida_final.txt
    
No se pueden combinar las tres formas para ejecutar código.

Como todas las aplicaciones de consola, el binario de PHP acepta un determinado número de argumentos, sin embargo un script PHP también puede recibirlos. El número de argumentos que pueden ser pasados a su script no está limitado por PHP (aunque la consola tiene un determinado número de caracteres límite; usualmente usted no alcanzará este límite). Los argumentos pasados al script están disponibles en el array global $argv. El primer índice (cero) siempre contiene el nombre del script como se llamó desde la línea de comandos. Nótese que, si el código es ejecutado en la línea utilizando el modificador de consola -r , el valor de $argv[0] será simplemente un guión medio -). Lo mismo aplica si el código es ejecutado por medio de una tubería desde la entrada estándar STDIN.

Una segunda variable global, $argc, contiene el número de elementos en el arreglo $argv (pero no el número de argumentos pasados al script).

Dado que los argumentos que se pasan a un script no comienzan con el caracter -, no hay nada especial a tener en cuenta. Si se pasa a un script un argumento que comience por - provocará errores porque el intérprete de PHP pensará que debe manejarlo él, aún antes de ejecutar el script. Para prevenir esto, utilice el separador de lista de argumentos --. Una vez que PHP lea este separador, todos los argumentos que lo sigan se pasarán intactos al script.

# Esto no ejecutará el código dado, sino que mostrará el uso de PHP
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Esto pasrá el argumento '-h' al script, impidiendo que PHP muestre su uso
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Sin embargo, en sistemas Unix, hay otra forma de usar PHP para scripts de consola. Se puede escribir un script en el que la primera línea comience con #!/usr/bin/php (sustitúyalo por la ruta a su CLI binario de PHP si es diferente). El resto del fichero debería contener código PHP normal con las etiquetas usuales de inicio y fin de PHP. Una vez que se otorguen permisos de ejecución al fichero apropiadamente (p.ej. chmod +x test) el script podrá ejecutarse como cualquier otro script de consola o perl:

Ejemplo #1 Ejecutando un script PHP como un script de consola

#!/usr/bin/php
<?php
var_dump
($argv);
?>

Asumiendo que este fichero se llama test y que está en el directorio actual, es posible hacer lo siguiente:

$ chmod +x test
$ ./test -h -- foo
array(4) {
  [0]=>
  string(6) "./test"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}

Tal y como puede verse, en este caso no hace falta tener cuidado al pasar al script parámetros que comienzan con -.

El ejecutable de PHP puede ser utilizado para ejecutar scripts de PHP que sean absolutamente independientes del servidor web. En sistemas Unix, los caracteres especiales #! (o conocido como "shebang") deben añadirse en la primera línea del script seguido de la ruta hacia el binario de PHP para que le indique autom[aticamente al sistema cual es el programa que debería ejecutar al script. En plataformas Windows puede asociar php.exe para que funcione al hacer doble clic en ficheros con extensión .php, o se puede hacer un fichero por lotes para ejecutar el script mediante PHP. La primera línea especial "shebang" que se añade a un script para que funcione en Unix no interferirá en Windows (ya que está formateado como un comentario de PHP), así que pueden escribirse programas para plataformas independientes incluyéndose sin ningún problema. Más abajo puede encontrarse un ejemplo sencillo de cómo escribir un programa de línea de comandos en PHP.

Ejemplo #2 Script destinado a ejecutarse desde la línea de comandos (script.php)

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>

Éste es un script PHP de línea de comandos con un parámetro.

  Uso:
  <?php echo $argv[0]; ?> <parámetro>

  <parámetro> puede ser alguna palabra que desee
  mostrar en pantalla. Con las opciones --help, -help, -h,
  o -?, puede mostrarse esta ayuda.

<?php
} else {
    echo 
$argv[1];
}
?>

El script de arriba, incluye la primera línea especial "shebang" de Unix para indicar que este fichero debería ejecutarse por PHP. Puesto que aquí estamos trabajando con una versión CLI, no se mostrarán cabeceras HTTP.

El programa comprueba primero que hay más de un parámetro (adicionalmente al nombre del script, el cual también es contado). Si no lo hay, o si el parámetro fuese --help , -help , -h o -? , se imprime el mensaje de ayuda, utilizando $argv[0] para escribir el nombre del script dinámicamente tal como se escribió en la línea de comandos. De otra manera, el parámetro es mostrado exactamente como se recibió.

Para ejecutar el script superior en Unix, debe otorgarle permisos de ejecución al fichero para hacerlo ejecutable, y llamarlo simplemente como script.php mostrar_esto o script.php -h. En Windows, se puede crear un fichero por lotes para lograr esta tarea:

Ejemplo #3 Fichero por lotes para ejecutar un script PHP en línea de comandos (script.bat)

@echo OFF
"C:\php\php.exe" script.php %*

Asumiendo que el programa superior se llamara script.php, y CLI php.exe estuviera en C:\php\php.exe , este fichero por lotes lo ejecutaría automáticamente con los parámetros que se le hayan pasado: script.bat mostrar_esto o script.bat -h.

Vea también la documentación de extensión Readline para conocer más funciones que pueden ser utilizadas para mejorar las aplicaciones de línea de comandos en PHP.

Si está en Windows, puede configurar PHP para que no sea necesario añadir ni C:\php\php.exe ni la extensión .php, tal como se describe en PHP en Línea de Comandos en Microsoft Windows.



Flujos de entrada/salida

CLI SAPI define algunas constantes para flujos de E/S que simplifican la programación en línea de comandos.

Constantes específicas de CLI
Constante Descripción
STDIN

Flujo abierto a stdin. Ahorra tener que abrirlo con

<?php
$stdin 
fopen('php://stdin''r');
?>
Si se desea leer una sola línea de stdin, puede usarse
<?php
$line 
trim(fgets(STDIN)); // lee una línea de STDIN
fscanf(STDIN"%d\n"$number); // lee un número de STDIN
?>

STDOUT

Flujo abierto a stdout. Ahorra tener que abrirlo con

<?php
$stdout 
fopen('php://stdout''w');
?>

STDERR

Flujo abierto a stderr. Ahora tener que abrirlo con

<?php
$stderr 
fopen('php://stderr''w');
?>

Teniendo esto en cuenta, no es necesario abrir por ejemplo un flujo a stderr, sino que puede usarse la constante en lugar del recurso de tipo flujo:

php -r 'fwrite(STDERR, "stderr\n");'
No es necesario cerrar explícitamente estos flujos, ya que se cierra automáticamente por PHP al finalizar el script.

Nota:

Estas constantes no están disponibles si se leyera el script PHP a partir de stdin.



Consola interactiva

Desde PHP 5.1.0, CLI SAPI ofrece una consola interactiva si se usa con el modificador -a y PHP está compilado con la opción --with-readline .

Al usar la consola interactiva, se puede escribir directamente código PHP que se ejecuta al momento.

Ejemplo #1 Ejecutando código desde la consola interactiva

$ php -a
Interactive shell

php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >

La consola interactiva, además, proporciona autocompletado mediante el tabulador de funciones, constantes, nombres de clases, variables, llamadas a métodos estáticos y constantes de clases.

Ejemplo #2 Autocompletado con el tabulador

Al pulsar dos veces la tecla tabulador habiendo múltiples opciones de completados, se mostrará una lista con éstas:

php > strp[TAB][TAB]
strpbrk   strpos    strptime  
php > strp

Cuando sólo hay una posible opción, sólo con pulsar una vez el tabulador se completará el resto de la línea:

php > strpt[TAB]ime(

También funciona el autocompletado para nombres que se han definido durante la sesión de consola interactiva:

php > $fooEsteEsUnNombreDeVariableMuyLargo = 42;
php > $foo[TAB]EsteEsUnNombreDeVariableMuyLargo

La consola interactiva almacena tu historial, al que se puede acceder usando las teclas arriba y abajo. El historial se almacena en el fichero ~/.php_history.

Ya en PHP 5.4.0, la CLI SAPI provee las configuraciones de php.ini, cli.pager y cli.prompt. La configuración de cli.pager permite a un programa externo (tal como less) para que funcione como un paginador para la salida en lugar de se desplegado directamente en la pantalla. Las configuraciones de cli.prompt permite cambiar el indicador de ingreso de órdenes php >.

In PHP 5.4.0 también fue posible establecer las configuraciones de php.ini en la shell interactiva utilizando una notación abreviada.

Ejemplo #3 Estableciendo configuraciones de php.ini en la shell interactiva

La configuración de cli.prompt:

php > #cli.prompt=hola mundo :> 
  hola mundo :>

Usando comillas simples inclinadas es posible ejecutar código PHP en el indicador de órdenes:

php > #cli.prompt=`echo date('H:i:s');` php > 
  15:49:35 php > echo 'hola';
  hola
  15:49:43 php > sleep(2);
  15:49:45 php >

Establecer el paginador a less:

php > #cli.pager=less
  php > phpinfo();
  (salida desplegada en less)
  php >

La configuración de cli.prompt soporta unas cuantas secuencias de escape:

Secuencias de escape de cli.prompt
Sequence: Description:
\e Utilizado para agregar colores al ingreso de órdenes. Un ejemplo podría ser \e[032m\v \e[031m\b \e[34m\> \e[0m
\v La versión de PHP.
\b Indica cual bloque de PHP está dentro. Por ejemplo /* se usa para indicar que está dentro de un comentario multilineal. El alcance externo es denotado por php.
\> Indica el caracter de ingreso de órdenes. El caracter predeterminado es >, pero cambia cuando la shell está dentro de un bloque indeterminado o una cadena. Los caracteres posibles son: ' " { ( >

Nota:

Los ficheros que se han incluido en este modo mediante auto_prepend_file y auto_append_file se analizan con algunas restricciones - p.ej. las funciones deben estar definidas antes de que se carguen.

Nota:

La auto-carga no está disponible al usar PHP en modo interactivo en CLI.



Servidor web embebido

Desde PHP 5.4.0, la CLI SAPI provee un servidor web embebido.

Este servidor web está diseñado solamente para propósitos de desarrollo, y no debería ser utilizado en ambientes en producción.

Las peticiones de URI se sirven desde el actual directorio de trabajo donde PHP se inició, a menos que la opción -t sea utilizada para especificar una raíz de documentos explícita.

Si una petición de URI no especifica un fichero, entonces index.php o index.html se devuelven en el directorio proporcionado. Si ninguno de los ficheros existen, entonces se devuelve una respuesta con código 404.

Si un fichero PHP proporcionado en la línea de comandos cuando el servidor web es iniciado este es tratado como un script "enrutador" por el servidor web. El script es ejecutado al inicio de cada petición HTTP. Si este script devuelve FALSE, entonces el recurso requerido es devuelto tal cual está. De otra manera la salida del script es devuelta al navegador.

Ejemplo #1 Iniciando el servidor web

$ cd ~/public_html
$ php -S localhost:8000

La terminal mostrará:

PHP 5.4.0 Servidor de desarrollo iniciado en Jueves Julio 21 10:43:28 2011
Escuchando en localhost:8000
La raíz de documentos es /home/usuario/html_público
Presione Ctrl-C para salir

Después de una petición de una URI para http://localhost:8000/ y http://localhost:8000/mi_script.html la terminal mostrará algo similar a:

PHP 5.4.0 Servidor de desarrollo iniciado en Jueves Julio 21 10:43:28 2011
Escuchando en localhost:8000
La raíz de documentos es /home/usuario/html_público
Presione Ctrl-C para salir.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Petición leída
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Petición leída
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Petición leída
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /mi_script.html - Petición leída
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Petición leída

Ejemplo #2 Iniciando con una raíz de documentos específica

$ cd ~/html_público
$ php -S localhost:8000 -t foo/

La terminal mostrará:

PHP 5.4.0 Servidor de desarrollo iniciado en Jueves Julio 21 10:50:26 2011
Escuchando en localhost:8000
La raíz de documentos es /home/usuario/html_público/foo
Presione Ctrl-C para salir

Ejemplo #3 Utilizando un Script enrutador

Las peticiones a las imágenes se mostrarán, pero las peticiones a ficheros HTML mostrarán "Bienvenido a PHP"

<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/'$_SERVER["REQUEST_URI"]))
    return 
false;    // servir la petición tal cual es.
else {
    echo 
"<p>Bienvenido a PHP</p>";
}

?>
$ php -S localhost:8000 router.php

Después de varias peticiones de URI la terminal mostrará algo similar a:

PHP 5.4.0 Servidor de desarrollo iniciado en Jueves Julio 21 10:53:19 2011
Escuchando en localhost:8000
La raíz de documentos es /home/usuario/html_público
Presione Ctrl-C para salir.
[Thu Jul 21 10:53:45 2011] ::1:55801 GET /mi_logo.jpg - Petición leída
[Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Petición leída
[Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Petición leída


Configuración INI

Opciones de configuración de la SAPI CLI
Nombre Por defecto Cambiable Historial de cambios
cli_server.color "0" PHP_INI_ALL Disponible desde PHP 5.4.0.

He aquí una breve explicación de las directivas de configuración.

cli_server.color boolean

Habilita el servidor web de desarrollo interno para usa la codificación de color ANSI en la salida del terminal.




Recolección de Basura

Tabla de contenidos

Esta sección explica los méritos del nuevo mecanismo del Recolector de Basuras (o también conocido como GC) de la versión 5.3 de PHP.


Introducción a la Cuenta de Referencias

Una variable en PHP se almacena en un contender llamado "zval". Un contenedor zval contiene, además del tipo de la variable y su valor, dos bits de información adicional. Al primero se le llama "is_ref" y contiene un boolean que indica si la variable es parte o no de con "conjunto de referencias". Con este bit, el motor de PHP sabe diferenciar entre variables normales y referencias. Puesto que PHP permite las referencias definidas por el usuario, tal y como se crean con el operador &, un contenedor zval tiene también un mecanismo contador de referencias para optimizar el uso de memoria. Esta segunda pieza adicional de información, llamada "refcount", contiene el número de variables (también llamadas símbolos) que apuntan a este contenedor zval. Todos los símbolos se almacenan en una tabla de símbolos, de las cuales hay una por cada ámbito. Hay un ámbito para el script principal (es decir, al que el navegador realizó la petición), además de uno por cada función o método.

Se crea un contenedor zval cuando se crea una variable con un valor constante, como por ejemplo:

Ejemplo #1 Creación de un nuevo contenedor zval

<?php
$a 
"nuevo string";
?>

En este caso, el nuevo nombre de símbolo, a, se crea en el ámbito actual, y se crea un nuevo contenedor de variable con el tipo string y el valor nuevo string. El bit "is_ref" por omisión contiene FALSE dado que no se ha creado ninguna referencia. "refcount" contiene 1 pues sólo hay un símbolo que haga uso de este contenedor de variables. Tenga en cuenta que si "refcount" es 1, "is_ref" siempre valdrá FALSE. Si tiene » Xdebug instalado, puede mostrar esta información llamando a xdebug_debug_zval().

Ejemplo #2 Mostrar información zval

<?php
xdebug_debug_zval
('a');
?>

El resultado del ejemplo sería:

a: (refcount=1, is_ref=0)='nuevo string'

Al asignar esta variable a otra, se incrementará refcount.

Ejemplo #3 Incremento del refcount de zval

<?php
$a 
"nuevo string";
$b $a;
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería:

a: (refcount=2, is_ref=0)='nuevo string'

Aquí refcount vale 2, pues el mismo contenedor de variables está vinculado tanto por a como por b. PHP es lo suficiente inteligente para no copiar el contenedor de la variable cuando no es necesario. Los contenedores de variables se destruyen cuando el "refcount" se queda a cero. "refcount" se decrementa en uno cuando alguno de los símbolos que lo vinculan, abandona su ámbito (p.ej. cuando finaliza una función) o cuando se llama a unset(). El siguiente ejemplo muestra esto:

Ejemplo #4 Decremento del refcount de zval

<?php
$a 
"nuevo string";
$c $b $a;
xdebug_debug_zval'a' );
unset( 
$b$c );
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería:

a: (refcount=3, is_ref=0)='nuevo string'
a: (refcount=1, is_ref=0)='nuevo string'

Si ahora llamáramos a unset($a);, el contenedor de variable, incluyendo tanto el tipo como el valor, se eliminarían de la memoría.

Tipos Compuestos

Las cosas se complican con tipos compuestos tales como arrays o objects. En lugar de un valor de tipo scalar, los arrays y objects almacenan sus propiedades en su propia tabla de símbolos. Esto significa que el siguiente ejemplo crea tres contenedores zval:

Ejemplo #5 Creando un zval de tipo array

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería algo similar a:

a: (refcount=1, is_ref=0)=array (
   'meaning' => (refcount=1, is_ref=0)='life',
   'number' => (refcount=1, is_ref=0)=42
)

O gráficamente

Zvals de un array simple

Los tres contenedores zval son: a, meaning, y number. Se aplican reglas similares a la hora de incrementar y decrementar "refcounts". Abajo, añadimos otro elemento al array, y fijamos su valor al contenido de un elemento ya existente:

Ejemplo #6 Añadiendo un elemento existente a un array

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería algo similar a:

a: (refcount=1, is_ref=0)=array (
   'meaning' => (refcount=2, is_ref=0)='life',
   'number' => (refcount=1, is_ref=0)=42,
   'life' => (refcount=2, is_ref=0)='life'
)

O gráficamente

Zvals de un array simple con una referencia

A partir de la salida de Xdebug, vemos que tanto el antiguo como el nuevo elemento del array apuntan a un contenedor cuyo "refcount" vale 2. Pese a que Xdebug muestra dos contenedores zval con valor 'life', son el mismo. La función xdebug_debug_zval() no muestra esto, pero puede comprobarse mostrando el puntero de memoria.

Eliminar un elemento del array es como eliminar un símbolo de un determinado ámbito. Al hacerlo, el "refcount" del contenedor al que apunta el elemento del array se decrementa. De nuevo, cuando "refcount" alcanza cero, el contenedor de la variable se elimina de memoria. Un ejemplo que muestra esto:

Ejemplo #7 Eliminar un elemento de un array

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
unset( 
$a['meaning'], $a['number'] );
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería algo similar a:

a: (refcount=1, is_ref=0)=array (
   'life' => (refcount=1, is_ref=0)='life'
)

Ahora, las cosas se vuelven interesantes si añadimos al propio array como elemento del array, como veremos en el siguiente ejemplo, en el que usaremos el operador de referencia, ya que sino PHP crearía una copia:

Ejemplo #8 Añadiendo al propio array como elemento de sí mismo

<?php
$a 
= array( 'one' );
$a[] =& $a;
xdebug_debug_zval'a' );
?>

El resultado del ejemplo sería algo similar a:

a: (refcount=2, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)='one',
   1 => (refcount=2, is_ref=1)=...
)

O gráficamente

Zvals para un array que contiene una referencia circular

Puede verse que tanto la variable de tipo array (a) como el segundo elemento (1) apuntan ahora a un contenedor de variables que tiene un "refcount" de 2. Los "..." mostrados arriba, indican que hay una referencia cíclica, lo cual, por supuesto, significa que en este caso los "..." apuntan al original. array.

Al igual que antes, al eliminar una variable se elimina el símbolo, y el contador de referencias del contenedor de variables al que apunte se decrementa en uno. De modo que, si eliminamos la variable $a después de ejecutar el código anterior, el contador de referencias del contenedor de variables al que apuntan tanto $a como el elemento "1" se decrementa en uno, de "2" a "1". Se puede representar así:

Ejemplo #9 Eliminando $a

(refcount=1, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)='one',
   1 => (refcount=1, is_ref=1)=...
)

O gráficamente

Zvals después de eliminar un array con referencia circular mostrando la fuga de memoria

Problemas de limpieza

Pese a que ya no hay ningún símbolo en ningún ámbito que apunte a esta estructura, no se puede limpiar ya que el elemento "1" del array todavía apunta al mismo array. Al no haber ningún símbolo externo que apunte a e´l, no hay ninguna forma por la que el usuario pueda eliminar esta estructura; por tanto tenemos una fuga de memoria. Afortunadamente, PHP limpiará esta estructura de datos al finalizar la petición, pero antes de entonces, ocupará un valioso espacio en memoria. Esta situación ocurre a menudo si se está implementando un algoritmo de análisis o en otras situaciones en las que un nodo hijo apunte de nuevo al elemento "padre". Por supuesto, esta situación también puede suceder con objetos, donde es más frecuente que ocurra, ya que los objetos siempre se usan implícitamente por referencia.

Esto no debería ser un problema si sólo ocurre una o dos veces, pero si sucede miles, o incluso millones, de estas fugas de memoria, lógicamente esto comenzaría a ser un problema. Es especialmente problemático en scripts de larga duración, tales como demonios donde en resumen nunca terminan las peticiones, o en un largo conjunto de pruebas unitarias. Esto último causó problemas al ejecutar las pruebas unitarias de la biblioteca de Componentes eZ. En algunos casos, pueden ser necesarios 2 GB de memoria, que quizás no los tenga el servidor de pruebas.



Recolección de referencias Cíclicas

Tradicionalmente, los mecanismos que contabilizan las referencias en memoria, tal como el que usaba PHP anteriormente, fallaban al manejar las fugas de memoria en referencias cíclicas. Sin embargo, desde PHP 5.3.0 implementa el algoritmo síncrono del artículo » Recolección de Ciclos Concurrentes en Sistemas de Contabilidad de Referencias que resuelve este asunto.

Una explicación detallada del funcionamiento del algoritmo queda más allá del objetivo de esta sección, pero aquí explicaremos el mecanismo básico. Antes de nada, debemos establecer unas reglas del juego. Si se incrementa un refcount, entonces sigue en uso, no es basura. Si se decrementa el refcount, y alcanza a cero, el zval puede eliminarse. Esto significa que la recolección de ciclos sólo puede llevarse a cabo cuando un parámetro refcount se decrementa a un valor que no sea cero. En segundo lugar, en la recolección de ciclos de basura, es posible averiguar qué partes son basura comprobando si se puede decrementar en uno sus refcount, para después comprobar cuáles han alcanzado a cero.

Algoritmo de recolección de basura

Para evitar llamar al comprobador de ciclos de basura en cada decremento de un refcount, el algoritmo lo que hace es pasar todas las posibles raíces (zvals) al "buffer raíz" (marcándolos en "púrpura"). También se asegura de que cada raíz de basura sólo finaliza una vez en el buffer. Únicamente cuando el buffer raíz está completo, comienza el mecanismo de recolección en los zval que haya en su interior. Ver paso A en la figura anterior.

En el paso B, el algoritmo inicia una primera búsqueda en profundidad de todas las posibles raíces en las que decrementa por uno los refcount de los zval que encuentra, asegurándose de que no decrementa dos veces el mismo zval (marcándolo en "gris"). En el paso C, el algoritmo vuelve a llevar a cabo una búsqueda en profundidad dentro de cada nodo raíz, para volver a comprobar el refcount de cada zval. Si ve que el refcount es cero, se marca al zval en "blanco" (azul en la figura). Si es mayor que cero, deshace el decremento con una búsqueda en profundidad partiendo de ese punto, y se le vuelve a marcar en "negro". En el último paso (D), el algoritmo recorre el buffer raíz eliminando las raíces zval que haya, y a la vez, comprueba qué zvals se han marcado en "blanco" en el paso anterior. Todos los zval marcados en "blanco" se eliminarán.

Ahora que ya tiene un conocimiento básico de cómo funciona el algoritmo, volveremos atrás para ver cómo se integra esto en PHP. Por omisión, el recolector de basuras de PHP está habilitado. Hay, sin embargo, una directiva en php.ini que permite cambiar est: zend.enable_gc .

Cuando el recolector de basura está habilitado, el algoritmo que busca ciclos, tal y como se ha descrito arriba, se ejecuta cada vez que se llena el buffer raíz. Éste tiene un tamaño fijo de 10.000 raíces posibles (se puede modificar esto cambiando la contante GC_ROOT_BUFFER_MAX_ENTRIES en Zend/zend_gc.c del código fuente de PHP, y recompilando PHP). Cuando el recolector de basuras se deshabilita, no se ejecutará el algoritmo que busca ciclos. Sea como fuere, las posibles raíces seguirían registrándose en el buffer raíz, sin importar si el mecanismo recolector de basuras está habilitado en la configuración o no.

Si estando deshabilitado el mecanismo recolector de basuras se llenara el buffer raíz de posibles raíces, no se registraría al resto de raíces posibles, por lo que no llegarían a ser analizadas por el algoritmo. Si fueran parte de un ciclo de referencia circular, nunca se liberarían y podrían provocar una fuga de memoria.

La razón por la que se registran las posibles raíces estando deshabilitado el mecanismo es porque es más rápido registrarlas que comprobar en cada una de ellas si el mecanismo está habilitado. Sin embargo, el recolector de basuras y el propio mecanismo de análisis, sí puede conllevar una cantidad de tiempo considerable.

Ademas de poder cambiar la configuración de zend.enable_gc , también es posible habilitar o deshabilitar el mecanismo recolector de basura llamando a gc_enable() o gc_disable() respectivamente. La llamada a estas funciones tiene el mismo efecto que habilitar o deshabilitar el mecanismo en la propia configuración. También es posible forzar la recolección de ciclos incluso sin que esté lleno el buffer raíz. Para hacer esto, se puede usar la función gc_collect_cycles(). Esta función devuelve el número de ciclos que fueron recolectados por el algoritmo.

El motivo por el que es posible habilitar o deshabilitar el mecanismo, o iniciar los ciclos de recolección a mano, es porque podría haber determinadas partes de una aplicación que necesiten mucha precisión de tiempo. En estos casos, quizás no se desee que funcione el mecanismo recolector de basuras. Por supuesto, al deshabilitar el recolector de basuras en algunas partes del código, se corre el riesgo de provocar fugas de memoria, ya que algunas raíces podrían no caber en el buffer raíz. Por tanto, lo mas prudente sería llamar a gc_collect_cycles() justo después de llamar a gc_disable() para que libere la memoria ocupada por posibles raíces ya registradas en el buffer raíz. Esto deja por tanto un buffer vacío, de modo que queda más espacio para almacenar posibles raíces en el tiempo en que el mecanismo recolector de ciclos está deshabilitado.



Consideraciones acerca del Rendimiento

Como mencionamos en la sección anterior, la recolección de raíces tiene muy bajo impacto en el rendimiento, pero aquí es cuando comparamos PHP 5.2 contra PHP 5.3. Si bien la recolección de posibles raíces comparado con la no recolección, como en PHP 5.2, es más lenta, hay otras modificaciones en tiempo de ejecución en PHP 5.3 que impiden que esta pérdida de rendimiento en particular pueda siquiera apreciarse.

Hay dos principales sectores en los que el rendimiento se ve afectado. El primero es el uso reducido de memoria, y mientras que el segunda es la reducción en tiempo de ejecución cuando el mecanismo recolector de basura lleva a cabo la limpieza de memoria. Revisaremos estos dos asuntos.

Uso Reducido de Memoria

Antes de nada, la razón por la que se implementa el mecanismo recolector de basuras es para reducir el uso de memoria limpiando, una vez que se cumplen las condiciones, las variables de referencias circulares. En la implementación de PHP, esto sucede cuando el buffer raíz está lleno, o cuando se invoca la función gc_collect_cycles(). En el gráfico mostrado abajo, se muestra el uso de memoria tanto en PHP 5.2 como en 5.3, excluyendo la memoria base que el propio PHP ocupa al arrancar.

Ejemplo #1 Ejemplo de uso de memoria

<?php
class Foo
{
    public 
$var '3.1415962654';
}

$baseMemory memory_get_usage();

for ( 
$i 0$i <= 100000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
    if ( 
$i 500 === )
    {
        echo 
sprintf'%8d: '$i ), memory_get_usage() - $baseMemory"\n";
    }
}
?>
Comparación de uso de memoria entre PHP 5.2 y PHP 5.3

En este ejemplo didáctico, estamos creando un objeto en el que una propiedad enlaza de nuevo al propio objeto. Cuando la variable $a del script se reasigna en la siguiente iteración del bucle, típicamente ocurriría una fuga de memoria. En este caso, se fugan dos contenedores zval (el zval del objeto, y el zval de la propiead), pero sólo se encuentra una posible raíz: la variable que se desasignó. Tras 10.000 iteraciones, el buffer se llena (con un total de 10.000 posibles raíces), y se lanza el mecanismo recolector de basura y libera la memoria asociada con esas posibles raíces. Puede apreciarse claramente en el uso de memoria "dentado" de la gráfica para PHP 5.3. Tras las 10.000 iteraciones, el mecanismo libera la memoria asociada a las variables con referencias cíclicas. En este ejemplo, el propio mecanismo no debe hacer un gran trabajo, puesto que la estructura que produce la fuga es extremadamente sencilla. A partir del diagrama, se puede comprobar que el uso máximo de memoria en PHP 5.3 es en torno a 9 Mb, mientras que en PHP 5.2 el uso de memoria no para de aumentar.

Reducción en Tiempo de Ejecución

El segundo sector en el que el mecanismo recolector de basura influye en el rendimiento es en el tiempo que lleva a éste liberar la memoria "fugada". Para comprobar de cuánto estamos hablando, modificaremos ligeramente el script anterior para permitir un mayor número de iteraciones, y eliminaremos las figuras de uso de memoria intermedio. Este es el segundo script:

Ejemplo #2 Influencia en rendimiento de Recolector de Basuras

<?php
class Foo
{
    public 
$var '3.1415962654';
}

for ( 
$i 0$i <= 1000000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
}

echo 
memory_get_peak_usage(), "\n";
?>

Ejecutaremos dos veces este script, una con el ajuste zend.enable_gc habilitado, y en la otra deshabilitado:

Ejemplo #3 Ejecutando el script anterior

time php -dzend.enable_gc=0 -dmemory_limit=-1 -n example2.php
# and
time php -dzend.enable_gc=1 -dmemory_limit=-1 -n example2.php

En la máquina de ejemplo, el primer comando parece llevar en torno a 10,7 segundos, mientras que al segundo comando le lleva 11,4. Esto es un incremento de en torno al 7%. Sin embargo, el uso máximo de memoria del script se ha reducido en un 98%, pasando de 931Mb a 10Mb. Esta prueba no es muy científica, ni siquiera representativa de aplicaciones reales, pero demuestra que el uso de memoria se beneficia del mecanismo recolector de basuras. Lo interesante es que para este script en particular el incremento es siempre del 7%, mientras que el ahorro de memoria aumenta a medida que se encuentran más referencias cíclicas en la ejecución del script.

Estadísticas Internas de PHP del Recolector de Basuras

Todavía es posible dar más información sobre cómo funciona el mecanismo recolector de basuras dentro de PHP. Pero para hacerlo, será necesario recompilar PHP para habilitar el código de análises y de recopilación de datos. Se tendrá que asignar a la variable de entorno CFLAGS el valor -DGC_BENCH=1 antes de ejecutar ./configure con las opciones deseadas. La siguiente secuencia muestra cómo hacerlo:

Ejemplo #4 Recompilando PHP para habilitar el análisis del Recolector de Basuras

export CFLAGS=-DGC_BENCH=1
./config.nice
make clean
make

Al ejecutar el ejemplo que vimos arriba con el nuevo binario de PHP que hemos creado, veremos que se muestra el siguiente resultado tras la ejecución de PHP:

Ejemplo #5 Estadísticas de Recolección de Basuras

GC Statistics
-------------
Runs:               110
Collected:          2072204
Root buffer length: 0
Root buffer peak:   10000

      Possible            Remove from  Marked
        Root    Buffered     buffer     grey
      --------  --------  -----------  ------
ZVAL   7175487   1491291    1241690   3611871
ZOBJ  28506264   1527980     677581   1025731

Las estadísticas más informativas son las que se muestran en el primer bloque. Puede comprobarse que el mecanismo recolector de basuras se ejecutó 110 veces, y en total, se liberaron más de 2 millones de ubicaciones en memoria durante esas 110 ejecuciones. Puesto que el mecanismo recolector de ciclos se ha ejecutado al menos una vez, el "pico del buffer raíz" es siempre 10.000.

Conclusión

En general el recolector de basuras de PHP sólo provocará un retraso cuando el algoritmo recolector de ciclos funcione, mientras que en scripts normales (más pequeños) no habrá un impacto real en el rendimiento.

Sin embargo, en el caso en el que el mecanismo recolector de ciclos se ejecute para scripts normales, la reducción de memoria permitirá que puedan funcionar más scripts concurrentemente en el servidor, ya que en total no utilizarán mucha memoria.

Los beneficios son más evidentss en scripts de larga duración, tales como grandes suits de pruebas o scripts demonios. También en las aplicaciones » PHP-GTK, que generalmente suelen ejecutarse durante más tiempo que scripts para la Web; el nuevo mecanismo marcará la diferencia en cuanto a las fugas de memoria progresivas en el tiempo.





Referencia de funciones

Sugerencia

Ver también Categorización de Extensiones.


Afecta el comportamiento de PHP


Caché Alternativo de PHP


Introducción

El APC, o caché alternativo de PHP (por sus siglas en inglés de Alternative PHP Cache), es un código de operación de caché libre y abierto para PHP. Su objetivo es el de proporcionar un marco robusto, libre y abierto para optimizar código de PHP intermedio mediante el almacenamiento en caché.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/apc.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .

Nota: En Windows, APC necesita una ruta temporal para existir, y ser modificable por el servidor web. Comprueba las variables de entorno TMP, TEMP y USERPROFILE, en ese orden, y finalmente intenta el directorio WINDOWS si ninguna de ésas está establecida.

Nota: Para detalles de implementación más exhaustivos, altamente técnicos, véase el »  archivo TECHNOTES para desarrolladores .



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Aunque la configuración predeterminada de APC está bien para la mayoría de las instalaciones, los usuarios dedicados deberían considerar ajustar los siguientes parámetros.

Hay dos decisiones principales a tomar para configurar APC. Primero, cuánta memoria va a ser asignada a APC; y segundo, si APC debe comprobar si un archivo ha sido modificado en cada petición. Las dos directivas ini que controlan estos ajustes son apc.shm_size y apc.stat, respectivamente. Lea detenidamente las secciones sobre estas dos directivas más abajo.

Una vez que el servidor está ejecutándose, el script apc.php que está incluido con la extensión debería ser copiado a algún lugar dentro del directorio raíz de documentos y visualizarlo con un navegador, ya que porporciona un análisis detallado del funcionamiento interno de APC. Si GD está habilitado en PHP, también mostrará algunos gráficos interesantes. Lo primero que se debe asegurar es, por supuesto, que se están manejando realmente archivos en caché. Si APC está funcionando, el número dado por Cache full count (a la izquierda) mostrará el número de veces que la caché ha alcanzado su máxima capacidad y ha tenido que limpiar forzosamente cualquier entrada a la que no se haya accedido en los últimos apc.ttl segundos. Este número está minimizado en una caché bien configurada. Si la caché está siendo llenada constantemente, y de este modo liberada forzosamente, el revoltijo resultante tendrá efectos negativos en el rendimiento del script. La forma más sencilla de minimizar este número es asignar más memoria a APC. A menos que se haga esto, debería usarse apc.filters para almacenar en caché menos scripts.

Cuando APC es compilado con soporte para mmap (Memory Mapping - Mapeo de Memoria), sólo usará u segmento de memoria, a diferencia de cuandom APC es construido con soporte para SHM (SysV Shared Memory - Memoria Compartida de SysV), que usa múltiples segmentos de memeria. MMAP no tiene un límite máximo como lo tiene SHM en /proc/sys/kernel/shmmax. En general, se recomienda el soporte para MMAP ya que reclamará la memoria más rápido cuando el servidor web sea reiniciado y a fin de cuentas reduce el impacto de asignacion de memoria al inicio.

Opciones de configuración de APC
Nombre Por defecto Cambiable Historial de cambios
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM en APC 2. PHP_INI_ALL en APC <= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM en APC 2. Eliminada en APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM en APC <= 3.0.12. Disponible a partir de APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0. Anterior a APC 3.1.4, el valor por defecto era "0" (deshabilitado).
apc.file_update_protection "2" PHP_INI_SYSTEM Disponible a partir de APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Disponible a partir de APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.include_once_override "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.14.
apc.localcache.size "512" PHP_INI_SYSTEM Disponible a partir de APC 3.0.14.
apc.coredump_unmap "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

apc.enabled boolean

apc.enabled se puede establecer a 0 para deshabilitar APC. Esto es útil principalmente cuando APC está compilado estáticamente en PHP, ya que no hay otra forma de deshabilitarlo (cuando se compila como un DSO, la línea extension en php.ini debe ser descomentada).

apc.shm_segments integer

El número de segmentos de memoria compartida a asignar a la caché del compilador. Si APC está agotando la memoria compartida pero apc.shm_size está establecido tan alto como el sistema lo permita, aumentar este valor podría prevenir que APC agote su propia memoria.

apc.shm_size integer

El tamaño de cada segmento de memoria compartida en MB. Por defecto, algunos sistemas (incluidos la mayoría de variantes de BSD) tienen límites muy bajos del tamaño de un segmento de memoria compartida.

apc.optimization integer

El nivel de optimización. Cero deshabilita el optimizador, y valores mayores usan optimizaciones más agresivas. Se esperan mejoras de velocidad muy modestas. Esto es experimental.

apc.num_files_hint integer

Un "consejo" sobre el número de distintos archivos fuente que serán incluidos o solicitados en su servidor web. Establézcalo a cero u omítalo si no está seguro; este ajuste es útil principalmente para sitios que tienen miles de archivos fuente.

apc.user_entries_hint integer

Al igual que apc.num_files_hint, un "consejo" sobre el número de distintas variables de caché de usuario a almacenar. Estblézcalo a cero u omítalo si no está seguro.

apc.ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.user_ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.gc_ttl integer

El número de segundos que una entrada de caché puede permanecer en la lista de recolección de basura. Este valor proporciona un seguro en el caso de que un proceso del servidor muera mientras se ejecuta un archivo fuente en caché; si este archivo fuente es modificado, la memoria asignada para la versión antigua no será reclamada hasta que se alcance este TTL. Estabézcalo a cero para deshabilitar esta característica.

apc.cache_by_default boolean

Activado por defecto, pero se puede desactivar y usarlo junto con un filtro positivo en apc.filters para que sólo sean almacenados en caché los archivos que coincidan con un filtro positivo.

apc.filters string

Una lista de expresiones regulares POSIX extendido separadas por comas. Si cualquier patrón coincide con el nombre de archivo fuente, el archivo no será almacenado en caché. Observe que el nombre de archivo usado para la comparación es pasado para incluirlo/requerirlo, no la ruta absoluta. Si el primer carácter de una expresión es +, la expresión será aditiva en el sentido de que cualquier archivo comparado por la expresión será almacenado en caché, y si el primer carácter es -, entonces cualquier cosa que coincida no será almacenada en caché. El caso predeterminado es -, por lo que se puede dejar así.

apc.mmap_file_mask string

Si se compiló con soporte para MMAP usando --enable-mmap, ésta es la máscara de archivo estilo mktemp a pasar al módulo mmap para determinar si la región de memoria de mmap va a ser para gestión de archivos o para gestión de memoria compartida. Para gestión directa de archivos, establézcalo a algo como /tmp/apc.XXXXXX (exactamente 6 X). Para usar shm_open/mmap al estilo POSIX ponga .shm en algún lugar de su máscara, p.ej. /apc.shm.XXXXXX También se puede establecer a /dev/zero para usar la interfaz /dev/zero de kernel a una memoria de mmap anónima. Dejándolo indefinido forzará un mmap anónimo.

apc.slam_defense integer

En servidores muy concurridos cuando se inicia el sercidor o se modifican archivos, se puede crear una competición para todos los procesos que intentén almacenar el mismo archivo al mismo tiempo. Esta opción establece el porcentaje de procesos que se saltan el intentar almacenar en caché un archivo que no lo esté. O piense en ello como la probabilidad de saltarse el almacenamiento en caché de un proceso. Por ejemplo, establecer apc.slam_defense a 75 siginifica que hay un 75% de probabilidad de que el proceso no almacene en caché un archivo que no lo está. Así, cuanto mayor sea el valor mayor será la defensa contra los ataques a la caché. Establecer esto a 0 deshabilita esta característica.

Obsoleto por apc.write_lock.

apc.file_update_protection integer

Cuando un archivo es modificado en un servidor web debería hacerse realmente de una forma atómica. Es decir, escribir en un archivo temporal y renombrar (mv) el archivo a su posición permanente cuando esté listo. Muchos editores de texto, Many text editors, cp, tar y otros programas similares no lo hacen. Esto significa que hay una posibilidad de que se acceda al archivo (y se almacene en caché) mientras está todavía siendo escrito. apc.file_update_protection pone un retardo en la marca de almacenamiento en caché de nuevos archivos. Lo predeterminado es 2 segundos, lo que significa qeu si marca de tiempo de modificación (mtime) de un archivo muestra que es menor que 2 segundo de atigüedad cuando se acceda a él, no será almacenado en caché. La persona desafortunada que acceda a este archivo a medio escribir aún lo verá de forma extraña, pero por lo menos no persistirá. Si todos los archivos del servidor web se actualizan atómicamente mediante algún método como rsync (el cuál actuliza correctamente), se puede deshabilitar esta protección estableciendo esta directiva a 0. Si el sistema se inunda de entradas/salidas y algunos procesos de actualización toman más de 2 segundos, este ajuste debería ser aumentado para habilitar la protección en las operaciones de actualizacón más lentas.

apc.enable_cli integer

Mayormente para probar y depurar. Estableciendo esto habilita APC para la versión CLI de PHP. Bajo circunstancias normales, no es ideal crear, llenar y destruir la caché de APC en cada petición CLI, pero para varios escenarios de pruebas es útil para ser capaz de habilitar APC para la versión CLI de PHP de manera sencilla.

apc.max_file_size integer

Previene que los archivos más grandes que este valor sean almacenados en caché. Por defecto es 1M.

apc.stat integer

Tenga cuidado al cambiar este ajuste. Por defecto está activado, forzando a APC a realizar estadísticas (comprobar) del script en cada petición para determinar si ha sido modificado. Si ha sido modificado será recompilado y se almacenará en caché la nueva versión. Si este ajuste está desactivado, APC no hará ninguna comprobación, lo que normalmente significa que al forzar a APC a recomprobar archivos, el sevidor web tendrá que ser reiniciado o la caché tendrá que ser limpiada manualmente. Observe que la configuración de FastCGI del servidor web puede no limpiar la caché al reinicio. En un servidor de producción donde los archivos de script raramente cambian, se puede lograr aumentar el redimiento significativamente deshabilitando las estadísticas.

Para archivos incluidos/requeridos también se aplica esta opción, pero observe que para inclusiones de rutras relativas (cualquier ruta que no empiece con / en Unix), APC tiene que realizar una verificación para identificar de manera única un arcivo. Si se usan inclusiones de rutas absolutas, APC puede saltarse las estadísticas y usar esa ruta absoluta como el identificador único del archivo.

apc.write_lock boolean

En servidores concurridos, cuando el servidor se inicia primero, o cuando muchos archivos han sido modificados al mismo tiempo, APC puede intentar compilar y almacenar en caché el mismo archivo múltiples veces. Write_lock garantiza que sólo un proceso intentará compilar y almacenar en caché un script que no lo ésta. Los demás procesos que intenten usar el script se ejecutarán sin usar la caché de código de operaciones, en vez de mirar y esperar a que la caché se prepare.

apc.report_autofilter boolean

Registra cualquier script que fue automáticamente excluído de ser almacenado en caché debido a cuestiones de enlaces precoces/tardíos.

apc.include_once_override boolean

Optimiza las llamadas a include_once y require_once y evita las caras llamadas al sistema utilizadas.

Advertencia

Esta característica es EXPERIMENTAL. El comportamiento de esta directiva, su nombre, y la documentación pertinente puede cambiar sin previo aviso en una versión futura de APC. El uso de esta característica está bajo su responsabilidad.

apc.rfc1867 boolean

El gestor de enganche de Progreso de Subidas de Archivo RFC1867 sólo está disponible si APC fue compilado con PHP 5.2.0 o posterior. Cuando está habilitado, cualquier subida de archivo que incluya un campo llamado APC_UPLOAD_PROGRESS antes del campo file en un formulario de subidas hará que APC cree automáticamente una entrada de caché de usuario upload_key donde key es el valor de la entrada APC_UPLOAD_PROGRESS del formulario.

Observe que el campo oculto especificado por APC_UPLOAD_PROGRESS debe ir antes del campo file, si no el progreso de subida no funcionará correctamente.

Observe que el rastreo de subidas de archivos no es seguro a nivel de hilos en este momento, por lo que las nuevas subidas que ocurran mientras se está realizando una anterior deshabilitará el rastreo para la anterior.

Observe que rate sólo está disponible una vez que todas las tranferencias de ficheros estén completadas.

Ejemplo #1 Un ejemplo de apc.rfc1867

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

El prefijo de clave a usar para la entrada de caché de usuario generada por la funcionalidad de progreso de subida rfc1867.

apc.rfc1867_name string

Especifica el nombre de la entrada oculta del formulario que activa el progreso de subida de APC y especifica el sufijo de clave de la caché de usuario.

apc.rfc1867_freq string

La frecuencia con la que se debería hacer la actualización de la entrada de la caché de usuario para el progreso de subida. Puede tomar la forma de un porcentaje del total del tamaño del archivo o un tamaño en bytes opcionalmente con el sufijo "k", "m", o "g" para kilobytes, megabytes, o gigabytes respectivamente (insensible a mayúsculas-minúsculas). Un valor de 0 actualiza tan a menudo como se pueda, lo que puede causar subidar más lentas.

apc.rfc1867_ttl bool

TTL para las entradas de rfc1867.

apc.localcache boolean

Habilita un cierre libre de la caché de seguimiento de procesos locales que reduce las disputas de cierre cuando la caché está siendo escrita.

apc.localcache.size integer

El tamaño de la caché de seguimiento de procesos locales, debería ser establecido a un valor suficientemente grande, aproximadamente la mitad de apc.num_files_hint.

apc.coredump_unmap boolean

Habilita a APC para el manejo de señales, como SIGSEGV, que escriben archivos de núcleo cuando se indican. Cuando estas señales son recibidas, APC intentará desmapear el segmento de memoria compartida para excluirlo del archivo de núcleo. Este ajuste puede mejorar la estabilidad del sistema cuando son recibidas señales fatales y se configura un segmento grande de memoria compartida de APC.

Advertencia

Esta característica es potencialmente peligrosa. Desmapear el segmento de memoria compartida en un gestro de señal fatal puede causar un comportamiento indefinido si ocurriera un error fatal.

Nota:

Aunque algunos kernels pueden proporcionar una utilidad para ignorar varios tipos de memoria compartida cuando se genera un archivo de copia de núcleo, estas implementaciones pueden también ignorar segmentos de memoria compartida tales como el marcador de Apache.

apc.stat_ctime integer

La verificación con ctime evitará problemas causados por programas como svn o rsync asegurándose que los i-nodos no han cambiado desde la úlima estadística. APC normalmente sólo verificará mtime.

apc.canonicalize bool

Si está activado, las rutas relativas son canonizadas al modo sin estadísticas. En tal caso, los ficheros importados a partir de envolturas de flujos, no se almacerán dado que realpath() no soporta las envolutras de flujos.

apc.preload_path string

apc.use_request_time bool

Usa el tiempo de inicio de la petición SAPI para TTL.

apc.file_md5 bool

Graba un hash de archivos md5.

apc.lazy_functions integer

Habilita la carga lenta de funciones.

apc.lazy_classes integer

Habilita la carga lenta de clases.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

APC_BIN_VERIFY_CRC32 (integer)
APC_BIN_VERIFY_MD5 (integer)
APC_ITER_ALL (integer)
APC_ITER_ATIME (integer)
APC_ITER_CTIME (integer)
APC_ITER_DEVICE (integer)
APC_ITER_DTIME (integer)
APC_ITER_FILENAME (integer)
APC_ITER_INODE (integer)
APC_ITER_KEY (integer)
APC_ITER_MD5 (integer)
APC_ITER_MEM_SIZE (integer)
APC_ITER_MTIME (integer)
APC_ITER_NONE (integer)
APC_ITER_NUM_HITS (integer)
APC_ITER_REFCOUNT (integer)
APC_ITER_TTL (integer)
APC_ITER_TYPE (integer)
APC_ITER_VALUE (integer)
APC_LIST_ACTIVE (integer)
APC_LIST_DELETED (integer)



Funciones de APC


apc_add

(PECL apc >= 3.0.13)

apc_add Poner una nueva variable en caché en el almacén de datos

Descripción

bool apc_add ( string $key [, mixed $var [, int $ttl = 0 ]] )
array apc_add ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Pone una variable en caché en el almacén de datos, sólo si no está ya almacenada.

Nota: A diferencia de otros mecanismos de PHP, las variables almacenadas al usar apc_add() persistirán entre peticiones (hasta que el valor sea eliminado de la caché).

Parámetros

key

Almacena la variable usando este nombre. Las claves (keys) son únicas en la caché, por lo que intentar usar apc_add() para almacenar información con una clave que ya existe no sobrescribirá la información existente, en su lugar devolverá FALSE. (Esta es la única diferencia entre apc_add() y apc_store().)

var

La variable a almacenar

ttl

Time To Live (Tiempo de Vida); almacena var en la caché durante ttl segundos. Después de que pase ttl, la variable almacenada será expurgada de la caché (en la siguiente solicitud). Si no se proporciona ttl (o si ttl es 0), el valor persistirá hasta que sea eliminado de la caché manualmente, o si no dejará de existir (al limpiar, reiniciar, etc.).

values

Nombres en clave, variables en valor.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. La segunda sintaxis devuelve un array con las claves de errores.

Ejemplos

Ejemplo #1 Un ejemplo de apc_add()

<?php
$bar 
'BAR';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
$bar 'NUNCA SE ESTABLECE';
apc_add('foo'$bar);
var_dump(apc_fetch('foo'));
echo 
"\n";
?>

El resultado del ejemplo sería:

string(3) "BAR"
string(3) "BAR"

Ver también

  • apc_store() - Guardar una variable en caché en el almacén de datos
  • apc_fetch() - Traer una variable almacenada desde la caché
  • apc_delete() - Elimina una variable almacenada de la caché



apc_bin_dump

(PECL apc >= 3.1.4)

apc_bin_dumpObtener una copia binaria de los archivos y variables de usuario dados

Descripción

string apc_bin_dump ([ array $files [, array $user_vars ]] )

Devuelve una copia binaria de los archivos y variables de usuario dados desde la caché de APC. NULL para cada parámetro files o user_vars indica una copia de cada entrada, mientras que array() no hará copia de nada.

Parámetros

files

Los archivos. Pasar NULL indica una copia de cada entrada, mientras que pasar array() no hará copia de nada.

user_vars

Las variables de usuario. Pasar NULL indica una copia de cada entrada, mientras que pasar array() no hará copia de nada.

Valores devueltos

Devuelve una copia binaria de los archivos y variables de usuario dados desde la caché de APC, FALSE si APC no está habilitado, o NULL si se produjo un error desconocido.

Ver también

  • apc_bin_dumpfile() - Imprimir a un archivo una copia binaria de los archivos y variables de usuario almacenados en caché
  • apc_bin_load() - Cargar una copia binaria en la caché de archivo/usuario de APC


apc_bin_dumpfile

(PECL apc >= 3.1.4)

apc_bin_dumpfileImprimir a un archivo una copia binaria de los archivos y variables de usuario almacenados en caché

Descripción

int apc_bin_dumpfile ( array $files , array $user_vars , string $filename [, int $flags = 0 [, resource $context ]] )

Imprime una copia binaria de los archivos y variables de usuario dados desde la caché de APC al archivo nominado.

Parámetros

files

Los nombres de los archivos que van a ser copiados.

user_vars

Las variables de usuario que van a ser copiadas.

filename

El nombre de archivo donde la copia va a ser guardada.

flags

Banderas pasadas al flujo de filename. Véase la documentación de file_put_contents() para más detalles.

context

El contexto pasado al flujo de filename. Véase la documentación de file_put_contents() para más detalles.

Valores devueltos

El número de bytes escritos en el archivo, o si no FALSE si APC no está habilitado, filename no es un nombre de archivo válido, filename no se puede abrir, el archivo copia no puede ser completado (p.ej., el disco duro se ha quedado sin espacio), o si se produjo un error desconocido.

Ver también

  • apc_bin_dump() - Obtener una copia binaria de los archivos y variables de usuario dados
  • apc_bin_load() - Cargar una copia binaria en la caché de archivo/usuario de APC


apc_bin_load

(PECL apc >= 3.1.4)

apc_bin_loadCargar una copia binaria en la caché de archivo/usuario de APC

Descripción

bool apc_bin_load ( string $data [, int $flags = 0 ] )

Cargar la copia binaria dada en la caché de archivo/usuario de APC.

Parámetros

data

La copia binaria que va a ser cargada, probablemente desde apc_bin_dump().

flags

APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5, o ambas.

Valores devueltos

Devuelve TRUE si la información de la copia binaria dada por data se cargó con éxito, si no se devuelve FALSE. También se devuelve FALSE si APC no está habilitado o si data no es una copia binaria válida de APC (p.ej., tamaño no esperado).

Ejemplos

Ejemplo #1 Ejemplo de apc_bin_load()

<?php
$data 
apc_bin_dump(NULLNULL);
apc_bin_load($dataAPC_BIN_VERIFY_MD5 APC_BIN_VERIFY_CRC32);
?>

Ver también

  • apc_bin_dump() - Obtener una copia binaria de los archivos y variables de usuario dados
  • apc_bin_loadfile() - Cargar una copia binaria desde un archivo a la caché de archivo/usuario de APC


apc_bin_loadfile

(PECL apc >= 3.1.4)

apc_bin_loadfileCargar una copia binaria desde un archivo a la caché de archivo/usuario de APC

Descripción

bool apc_bin_loadfile ( string $filename [, resource $context [, int $flags ]] )

Carga una copia binaria desde un archivo a la caché de archivo/usuario de APC.

Parámetros

filename

El nombre de archivo que contiene la copia, probablemente desde apc_bin_dumpfile().

context

El contexto de archivos.

flags

Puede ser APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5, o ambos.

Valores devueltos

Devuelve TRUE en caso de éxito, si no devuelve FALSE. Las razones por la que devuelve FALSE incluyen que APC no está habilitado, filename no es un nombre de archivo válido o está vacío, no se puede abrir filename, la copia del archivo no se puede completar, o si data no es una copia binaria de APC válida (p.ej., tamaño no esperado).

Ver también

  • apc_bin_dumpfile() - Imprimir a un archivo una copia binaria de los archivos y variables de usuario almacenados en caché
  • apc_bin_load() - Cargar una copia binaria en la caché de archivo/usuario de APC


apc_cache_info

(PECL apc >= 2.0.0)

apc_cache_info Recupera información que hay en caché del almacén de datos de APC

Descripción

array apc_cache_info ([ string $cache_type [, bool $limited = false ]] )

Recupera información que hay en caché y meta-datos del almacén de datos de APC.

Parámetros

cache_type

Si cache_type es "user", será devuelta la información acerca de la caché de usuario.

Si cache_type es "filehits", será devuelta la información acerca de qué archivos han sido servidos desde la caché de código de bytes para la solicitud actual. Esta característica debe ser habilitada en la compilación usando --enable-filehits .

Si cache_type no es válido o no se especifica, será devuelta la información sobre la caché del sistema (archivos en caché).

limited

Si limited es TRUE, el valor devuelto excluirá la lista individual de entradas de caché. Esto es útil cuando se intenta optimizar llamadas para reunión de estadísticas.

Valores devueltos

Un array de datos en caché (y metadatos) o FALSE en caso de error

Nota: apc_cache_info() emitirá una advertencia si no es capaz de recuperar datos en caché de APC. Esto normalmente ocurre cuando APC no está habilitado.

Historial de cambios

Versión Descripción
3.0.11 Se introdujo el parámetro limited.
3.0.16 Se introdujo la opción "filehits" del parámetro cache_type.

Ejemplos

Ejemplo #1 Un ejemplo de apc_cache_info()

<?php
print_r
(apc_cache_info());
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [num_slots] => 2000
    [ttl] => 0
    [num_hits] => 9
    [num_misses] => 3
    [start_time] => 1123958803
    [cache_list] => Array
        (
            [0] => Array
                (
                    [filename] => /path/to/apc_test.php
                    [device] => 29954
                    [inode] => 1130511
                    [type] => file
                    [num_hits] => 1
                    [mtime] => 1123960686
                    [creation_time] => 1123960696
                    [deletion_time] => 0
                    [access_time] => 1123962864
                    [ref_count] => 1
                    [mem_size] => 677
                )
            [1] => Array (...itera para cada archivo en caché)
)

Ver también



apc_cas

(PECL apc >= 3.1.1)

apc_casActualiza un valor anterior por un nuevo valor

Descripción

bool apc_cas ( string $key , int $old , int $new )

apc_cas() actualiza un número entero existente si el parámetro old concuerda con el valor guardado actualmente con el valor del parámetro new.

Parámetros

key

La clave del valor a ser actualizado.

old

El valor anterior (el valor actualmente guardado).

new

El nuevo valor a actualizar.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de apc_cas()

<?php
apc_store
('foobar'2);
echo 
'$foobar = 2'PHP_EOL;
echo 
'$foobar == 1 ? 2 : 1 = ', (apc_cas('foobar'12) ? 'ok' 'fallo'), PHP_EOL;
echo 
'$foobar == 2 ? 1 : 2 = ', (apc_cas('foobar'21) ? 'ok' 'fallo'), PHP_EOL;

echo 
'$foobar = 'apc_fetch('foobar'), PHP_EOL;

echo 
'$f__bar == 1 ? 2 : 1 = ', (apc_cas('f__bar'12) ? 'ok' 'fallo'), PHP_EOL;

apc_store('perfección''xyz');
echo 
'$perfección == 2 ? 1 : 2 = ', (apc_cas('perfección'21) ? 'ok' 'fallo épico'), PHP_EOL;

echo 
'$foobar = 'apc_fetch('foobar'), PHP_EOL;
?>

El resultado del ejemplo sería algo similar a:

$foobar = 2
$foobar == 1 ? 2 : 1 = fallo
$foobar == 2 ? 1 : 2 = ok
$foobar = 1
$f__bar == 1 ? 2 : 1 = fallo
$perfección == 2 ? 1 : 2 = fallo épico
$foobar = 1

Ver también

  • apc_dec() - Disminuye un número almacenado
  • apc_store() - Guardar una variable en caché en el almacén de datos


apc_clear_cache

(PECL apc >= 2.0.0)

apc_clear_cache Limpia la caché de APC

Descripción

bool apc_clear_cache ([ string $cache_type ] )

Limpiar la caché de usuario/sistema.

Parámetros

cache_type

Si cache_type es "user", se limpiará la caché de usuario; de otro modo, se limpiará la caché del sistema (archivos almacenados en caché).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también

  • apc_cache_info() - Recupera información que hay en caché del almacén de datos de APC



apc_compile_file

(PECL apc >= 3.0.13)

apc_compile_file Almacena un archivo en la caché de código de byte, evitando todos los filtros

Descripción

mixed apc_compile_file ( string $filename [, bool $atomic = true ] )

Almacena un archivo en la caché de código de byte, evitando todos los filtros.

Parámetros

filename

Ruta completa o relativa al archivo PHP que será compilado y almacenado en la caché de código de byte.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también

  • apc_bin_dumpfile() - Imprimir a un archivo una copia binaria de los archivos y variables de usuario almacenados en caché
  • apc_bin_loadfile() - Cargar una copia binaria desde un archivo a la caché de archivo/usuario de APC


apc_dec

(PECL apc >= 3.1.1)

apc_decDisminuye un número almacenado

Descripción

int apc_dec ( string $key [, int $step = 1 [, bool &$success ]] )

Disminuye un valor integer almacenado.

Parámetros

key

La clave del valor a ser disminuido.

step

El intervalo, o valor a disminuir.

success

Opcionalmente pasa el valor boolean de éxito o fracaso a esta variable referenciada.

Valores devueltos

Devuelve el valor actual de key en caso de éxito, o FALSE en caso de error

Ejemplos

Ejemplo #1 Ejemplo de apc_dec()

<?php
echo "Vamos a hacer algo con éxito"PHP_EOL;

apc_store('unnúmero'42);

echo 
apc_fetch('unnúmero'), PHP_EOL;

echo 
apc_dec('unnúmero'), PHP_EOL;
echo 
apc_dec('unnúmero'10), PHP_EOL;
echo 
apc_dec('unnúmero'10$éxito), PHP_EOL;

var_dump($éxito);

echo 
"Ahora, vamos a fracasar"PHP_EOLPHP_EOL;

apc_store('unacadena''foo');

$ret apc_dec('unacadena'1$fracaso);

var_dump($ret);
var_dump($fracaso);
?>

El resultado del ejemplo sería algo similar a:

Vamos a hacer algo con éxito
42
41
31
21
bool(true)

Ahora, vamos a fracasar
bool(false)
bool(false)

Ver también



apc_define_constants

(PECL apc >= 3.0.0)

apc_define_constants Define un conjunto de constantes para recuperación y definición en masa

Descripción

bool apc_define_constants ( string $key , array $constants [, bool $case_sensitive = true ] )

define() es notoriamente lenta. Ya que el principal beneficio de APC es aumentar el rendimiento de scripts/aplicaciones, se proporciona este mecanismo para hacer más eficiente el proceso de definición de constantes en masa. Sin embargo, esta función no lo realiza tan bien como se esperaba.

Para una solución de rendimiento mejor, pruebe la extensión » hidef de PECL.

Nota: Para eliminar un conjunto de constantes almacenadas (sin limpiar la caché por completo), se puede pasar un array vacío al parámetro constants, limpiando de manera eficaz los valores almacenados.

Parámetros

key

key sirve como el nombre del conjunto de constantes que va a ser almacenado. key se usa para recuperar las constantes almacenadas en apc_load_constants().

constants

Un array asociativo de pares nombre_constante => valor. nombre_constante debe seguir las reglas normales de nominación de constantes. valor debe evaluar un valor escalar.

case_sensitive

El comportamiento predeterminado para las constantes es ser declaradas sensibles a mayúsculas-minúsculas; es decir, CONSTANTE y Constante representan valores diferentes. Si este parámetro es FALSE las constantes serán declaradas como símbolos insensibles a mayúsculas-minúsculas.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de apc_define_constants()

<?php
$constantes 
= array(
    
'UNO'   => 1,
    
'DOS'   => 2,
    
'TRES' => 3,
);
apc_define_constants('números'$constantes);
echo 
UNODOSTRES;
?>

El resultado del ejemplo sería:

123

Ver también



apc_delete_file

(PECL apc >= 3.1.1)

apc_delete_fileBorra archivos de la caché del código de operación

Descripción

mixed apc_delete_file ( mixed $keys )

Borra los archivos dados de la caché del código de operación.

Parámetros

keys

Los archivos a ser borrados. Acepta un string, un array de strings, o un object APCIterator.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. O si keys es un array, se devuelve un array vacío en caso de éxito, o se devuelve un array con los archivos fallidos.

Ejemplos

Ejemplo #1 Ejemplo de apc_delete_file()

<?php
$nombrearchivo 
'archivo.php';

if (
apc_compile_file($nombrearchivo)) {

    if (
apc_delete_file($nombrearchivo)) {
        echo 
"Se borró con éxito el archivo $nombrearchivo de la caché de APC."PHP_EOL;
    }
}

if (
apc_compile_file($nombrearchivo)) {

    if (
$bien apc_delete_file(array($nombrearchivo'noexiste.php'))) {
        
var_dump($bien);
    }
}

$mal apc_delete_file('noexiste.php');
var_dump($mal);
?>

El resultado del ejemplo sería algo similar a:

Se borró con éxito el archivo $nombrearchivo de la caché de APC.
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file noexiste.php, unable to delete from cache. in /tmp/test.php on line 13.
array(1) {
  [0]=>
  string(14) "noexiste.php"
}
[Mon May 24 09:30:33 2010] [apc-warning] Could not stat file noexiste.php, unable to delete from cache. in /tmp/test.php on line 18.
bool(false)

Ver también



apc_delete

(PECL apc >= 3.0.0)

apc_delete Elimina una variable almacenada de la caché

Descripción

mixed apc_delete ( string $key )

Elimina una variable almacenada de la caché.

Parámetros

key

La clave dada por key usada para almacenar el valor (con apc_store()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo apc_delete()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
apc_delete('foo');
// esto es obviamente inútil de esta forma
?>

Ver también

  • apc_store() - Guardar una variable en caché en el almacén de datos
  • apc_fetch() - Traer una variable almacenada desde la caché



apc_exists

(PECL apc >= 3.1.4)

apc_existsComprobar si existe una clave de APC

Descripción

mixed apc_exists ( mixed $keys )

Comprueba si una o más claves de APC existen.

Parámetros

keys

Un string, o un array de strings, que contienen claves.

Valores devueltos

Devuelve TRUE si la clave existe, de otro modo devuelve FALSE. O si se pasó un array a keys, se devuelve un array que contiene todas las claves existentes, o un array vacío si no existe nada.

Ejemplos

Ejemplo #1 Ejemplo de apc_exists()

<?php
$fruta  
'manzana';
$vegetal 'zanahoria';

apc_store('foo'$fruta);
apc_store('bar'$vegetal);

if (
apc_exists('foo')) {
    echo 
"Foo existe: ";
    echo 
apc_fetch('foo');
} else {
    echo 
"Foo no existe";
}

echo 
PHP_EOL;
if (
apc_exists('baz')) {
    echo 
"Baz existe.";
} else {
    echo 
"Baz no existe";
}

echo 
PHP_EOL;

$ret apc_exists(array('foo''noexiste''bar'));
var_dump($ret);

?>

El resultado del ejemplo sería algo similar a:

Foo existe: manzana
Baz no existe
array(2) {
  ["foo"]=>
  bool(true)
  ["bar"]=>
  bool(true)
}

Ver también

  • apc_cache_info() - Recupera información que hay en caché del almacén de datos de APC
  • apc_fetch() - Traer una variable almacenada desde la caché


apc_fetch

(PECL apc >= 3.0.0)

apc_fetch Traer una variable almacenada desde la caché

Descripción

mixed apc_fetch ( mixed $key [, bool &$success ] )

Traer una variable almacenada desde la caché.

Parámetros

key

La clave dada por key usada para almacenar el valor (con apc_store()). Si se pasa un array cada elemento es traído y devuelto.

success

Se establece a TRUE para éxito y FALSE en caso de error.

Valores devueltos

La variable almacenada o una matriz de variables en caso de éxito; FALSE en caso de error

Ejemplos

Ejemplo #1 Un ejemplo de apc_fetch()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

El resultado del ejemplo sería:

string(3) "BAR"

Historial de cambios

Versión Descripción
3.0.17 Se añadio el parámetro success.

Ver también



apc_inc

(PECL apc >= 3.1.1)

apc_incAumentar un número almacenado

Descripción

int apc_inc ( string $key [, int $step = 1 [, bool &$success ]] )

Aumenta un número almacenado.

Parámetros

key

La clave del valor a ser aumentado.

step

El intervalo, o valor a aumentar.

success

Opcionalmente pasa el valor boolean de éxito o fracaso a esta variable referenciada.

Valores devueltos

Devuelve el valor actual de key en caso de éxito, o FALSE en caso de error

Ejemplos

Ejemplo #1 Ejemplo de apc_inc()

<?php
echo "Vamos a hacer algo con éxito"PHP_EOL;

apc_store('unnúmero'42);

echo 
apc_fetch('unnúmero'), PHP_EOL;

echo 
apc_inc('unnúmero'), PHP_EOL;
echo 
apc_inc('unnúmero'10), PHP_EOL;
echo 
apc_inc('unnúmero'10$éxito), PHP_EOL;

var_dump($éxito);

echo 
"Ahora, vamos a fracasar"PHP_EOLPHP_EOL;

apc_store('unacadena''foo');

$ret apc_inc('unacadena'1$fracaso);

var_dump($ret);
var_dump($fracaso);
?>

El resultado del ejemplo sería algo similar a:

Vamos a hacer algo con éxito

42
43
53
63
bool(true)
Ahora, vamos a fracasar

bool(false)
bool(false)

Ver también

  • apc_dec() - Disminuye un número almacenado


apc_load_constants

(PECL apc >= 3.0.0)

apc_load_constants Carga un conjunto de constantes de la caché

Descripción

bool apc_load_constants ( string $key [, bool $case_sensitive = true ] )

Carga un conjunto de constantes de la caché.

Parámetros

key

El nombre del conjunto de constantes (que fue almacenado con apc_define_constants()) que se va a recuperar.

case_sensitive

El comportamiento predeterminado para las constantes es ser declaradas sensibles a mayúsculas-minúsculas; es decir, CONSTANTE y Constante representan valores diferentes. Si este parámetro es FALSE las constantes serán declaradas como símbolos insensibles a mayúsculas-minúsculas.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de apc_load_constants()

<?php
$constantes 
= array(
    
'UNO'   => 1,
    
'DOS'   => 2,
    
'TRES' => 3,
);
apc_define_constants('números'$constantes);
apc_load_constants('números');
echo 
UNODOSTRES;
?>

El resultado del ejemplo sería:

123

Ver también



apc_sma_info

(PECL apc >= 2.0.0)

apc_sma_info Recupera la información de la Asignación de Memoria Compartida de APC

Descripción

array apc_sma_info ([ bool $limited = false ] )

Recupera la información de la Asignación de Memoria Compartida de APC.

Parámetros

limited

Cuando se establece a FALSE (predeterminado) apc_sma_info() devolverá información detallada sobre cada segmento.

Valores devueltos

Un array de información de Asignación de Memoria Compartida; FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de apc_sma_info()

<?php
print_r
(apc_sma_info());
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [num_seg] => 1
    [seg_size] => 31457280
    [avail_mem] => 31448408
    [block_lists] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [size] => 31448408
                            [offset] => 8864
                        )

                )

        )

)



apc_store

(PECL apc >= 3.0.0)

apc_store Guardar una variable en caché en el almacén de datos

Descripción

bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )
array apc_store ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Guarda una variable en caché en el almacén de datos.

Nota: A diferencia de otros mecanismos de PHP, las variables almacenadas al usar apc_store() persistirán entre peticiones (hasta que el valor sea eliminado de la caché).

Parámetros

key

Almacena la variable usando este nombre. Las claves (keys) son únicas en la caché, por lo que almacenar un segundo valor con la misma clave dada por key sobrescribirá el valor original.

var

La variable a almacenar

ttl

Time To Live (Tiempo de Vida); almacena var en la caché durante ttl segundos. Después de que pase ttl, la variable almacenada será expurgada de la caché (en la siguiente solicitud). Si no se proporciona ttl (o si ttl es 0), el valor persistirá hasta que sea eliminado de la caché manualmente, o si no dejará de existir (al limpiar, reiniciar, etc.).

values

Nombres en clave, variables en valor.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. La segunda sintaxis devuelve un array con claves de errores.

Ejemplos

Ejemplo #1 Un ejemplo de apc_store()

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

El resultado del ejemplo sería:

string(3) "BAR"

Ver también

  • apc_add() - Poner una nueva variable en caché en el almacén de datos
  • apc_fetch() - Traer una variable almacenada desde la caché
  • apc_delete() - Elimina una variable almacenada de la caché


Tabla de contenidos

  • apc_add — Poner una nueva variable en caché en el almacén de datos
  • apc_bin_dump — Obtener una copia binaria de los archivos y variables de usuario dados
  • apc_bin_dumpfile — Imprimir a un archivo una copia binaria de los archivos y variables de usuario almacenados en caché
  • apc_bin_load — Cargar una copia binaria en la caché de archivo/usuario de APC
  • apc_bin_loadfile — Cargar una copia binaria desde un archivo a la caché de archivo/usuario de APC
  • apc_cache_info — Recupera información que hay en caché del almacén de datos de APC
  • apc_cas — Actualiza un valor anterior por un nuevo valor
  • apc_clear_cache — Limpia la caché de APC
  • apc_compile_file — Almacena un archivo en la caché de código de byte, evitando todos los filtros
  • apc_dec — Disminuye un número almacenado
  • apc_define_constants — Define un conjunto de constantes para recuperación y definición en masa
  • apc_delete_file — Borra archivos de la caché del código de operación
  • apc_delete — Elimina una variable almacenada de la caché
  • apc_exists — Comprobar si existe una clave de APC
  • apc_fetch — Traer una variable almacenada desde la caché
  • apc_inc — Aumentar un número almacenado
  • apc_load_constants — Carga un conjunto de constantes de la caché
  • apc_sma_info — Recupera la información de la Asignación de Memoria Compartida de APC
  • apc_store — Guardar una variable en caché en el almacén de datos


La clase APCIterator

(PECL apc >= 3.1.1)

Introducción

La clase APCIterator hace que sea más sencillo iterar sobre grandes cachés de APC. Esto es útilya que permite iterar sobre grandes cachés por pasos, mientras aprovecha un número definido de entradas por instancia de cierre, por lo que libera los cierres de caché para otras actividades, en vez de mantener la caché completa para aprovechar 100 (por defecto) entradas. También, usar comparaciones con expresiones regulares es más eficiente ya así se traslada al nivel de C.

Sinopsis de la Clase

APCIterator implements Iterator , Traversable {
/* Methods */
public __construct ( string $cache [, mixed $search = null [, int $format [, int $chunk_size = 100 [, int $list ]]]] )
public mixed current ( void )
public int getTotalCount ( void )
public int getTotalHits ( void )
public int getTotalSize ( void )
public string key ( void )
public void next ( void )
public void rewind ( void )
public void valid ( void )
}

APCIterator::__construct

(PECL apc >= 3.1.1)

APCIterator::__constructConstruye un objeto iterador APCIterator

Descripción

public APCIterator::__construct ( string $cache [, mixed $search = null [, int $format [, int $chunk_size = 100 [, int $list ]]]] )

Construye un object APCIterator .

Parámetros

cache

El tipo de caché, que será user o file.

search

Una expresión regular de PCRE que se compara con nombres de claves de APC, como string para una única expresión regular, o como un array de expresiones regulares. O, opcionalmente, pase NULL para saltar la búsquda.

format

El formato deseado, como se configuró con una o más de las constantes APC_ITER_*.

chunk_size

El tamaño de trozo. Debe ser un valor mayor que 0. El valor predeterminado es 100.

list

El tipo a listar. Se puede pasar APC_LIST_ACTIVE o APC_LIST_DELETED.

Valores devueltos

Un object APCIterator en caso de éxito, o NULL en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de APCIterator::__construct()

<?php
foreach (new APCIterator('user''/^counter\./') as $counter) {
    echo 
"$counter[key]$counter[value]\n";
    
apc_dec($counter['key'], $counter['value']);
}
?>

Ver también

  • apc_exists() - Comprobar si existe una clave de APC
  • apc_cache_info() - Recupera información que hay en caché del almacén de datos de APC


APCIterator::current

(PECL apc >= 3.1.1)

APCIterator::currentObtener el elemento actual

Descripción

public mixed APCIterator::current ( void )

Obtiene el elemento acutal de la pila de APCIterator.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el elemento actual en caso de éxito, o FALSE si no existen más elementos, o en caso de fallo.

Ver también



APCIterator::getTotalCount

(PECL apc >= 3.1.1)

APCIterator::getTotalCountObtener la cuenta total

Descripción

public int APCIterator::getTotalCount ( void )

Obtiene la cuenta total.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

La cuenta total..

Ver también



APCIterator::getTotalHits

(PECL apc >= 3.1.1)

APCIterator::getTotalHitsObtener el total de éxitos de la caché

Descripción

public int APCIterator::getTotalHits ( void )

Obtiene el número total de éxitos de la caché.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

El número de éxitos en caso de éxito, o FALSE en caso de fallo.

Ver también



APCIterator::getTotalSize

(PECL apc >= 3.1.1)

APCIterator::getTotalSizeObtener el tamaño total de la caché

Descripción

public int APCIterator::getTotalSize ( void )

Obtiene el tamaño total de la caché.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

El tamaño total de la caché.

Ver también



APCIterator::key

(PECL apc >= 3.1.1)

APCIterator::keyObtener la clave del iterador

Descripción

public string APCIterator::key ( void )

Obtiene la clave actual del iterador.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve la clave en caso de éxito, o FALSE en caso de error.

Ver también



APCIterator::next

(PECL apc >= 3.1.1)

APCIterator::nextMover el puntero al siguiente elemento

Descripción

public void APCIterator::next ( void )

Mueve el puntero del iterador al siguiente elemento.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



APCIterator::rewind

(PECL apc >= 3.1.1)

APCIterator::rewindRebobina el iterator

Descripción

public void APCIterator::rewind ( void )

Rebobina el iterador hasta el primer elemento.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.

Ver también



APCIterator::valid

(PECL apc >= 3.1.1)

APCIterator::validComprueba si la posición acutal es válida

Descripción

public void APCIterator::valid ( void )

Comprueba si la posición actual del iterador es válida.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE si la posición actual del iterador es válida, si no FALSE.

Ver también


Tabla de contenidos




Depurador Avanzado de PHP


Introducción

APD (por sus siglas en Inglés Advanced PHP Debugger) es el depurador avanzado de PHP. Fue escrito para brindar capacidades de análisis de performance y depurado para el código de PHP, así como para proveer la habilidad de mostrar un rastreo completo. APD soporta el depurado interactivo, pero por defecto escribe datos para rastrear los archivos. También ofrece un registro basado en eventos en el cual varios niveles de información (incluyendo llamados a funciones, argumentos pasados, tiempos, etc.) pueden ser activados o inactivados para scripts individuales.

Precaución

APD es una extensión de Zend que modifica la forma en que PHP maneja internamente el llamado a funciones y puede ser o no ser compatible con otras extensiones de Zend (por ejemplo Zend Optimizer).



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/apd.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .

En el archivo INI agregue las siguientes líneas:

zend_extension = /absolute/path/to/apd.so
apd.dumpdir = /absolute/path/to/trace/directory
apd.statement_tracing = 0

Dependiendo de la compilación de PHP, la directiva zend_extension puede ser una de las siguientes:

zend_extension              (non ZTS, non debug build)
zend_extension_ts           (    ZTS, non debug build)
zend_extension_debug        (non ZTS,     debug build)
zend_extension_debug_ts     (    ZTS,     debug build)



Compilando en Win32

Para compilar APD bajo Windows se necesita un ambiente de compilado de PHP que funcione tal como está descrito en http://php.net/ -- básicamente se requiere tener Microsoft Visual C++, win32build.zip, bison/flex y algún conocimiento sobre como logar que todo esto funcione. También se debe asegurar que adp.dsp tenga fines de línea tipo DOS; si son de tipo unix, Microsoft Visual C++ no lo reconocerá correctamente.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de APD
Nombre Por defecto Cambiable Historial de cambios
apd.dumpdir NULL PHP_INI_ALL  
apd.statement_tracing "0" PHP_INI_ALL Disponible desde APD 0.9.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

apd.dumpdir string

Configura el directorio en el cual APS escribe los archivos de volcado del performance. Se puede especificar una ruta absoluta o una relativa.

Se puede especificar un directorio diferente como un argumento de apd_set_pprof_trace().

apd.statement_tracing boolean

Especifica si se hacen o no rastreos por línea. Activar esto (1) impactará en el desempeño de la aplicación.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

Constantes APD
Constante Valor Descripción
FUNCTION_TRACE (integer) 1  
ARGS_TRACE (integer) 2  
ASSIGNMENT_TRACE (integer) 4  
STATEMENT_TRACE (integer) 8  
MEMORY_TRACE (integer) 16  
TIMING_TRACE (integer) 32  
SUMMARY_TRACE (integer) 64  
ERROR_TRACE (integer) 128  
PROF_TRACE (integer) 256  
APD_VERSION (string) ejemplo: 1.0.2-dev  


Ejemplos

Tabla de contenidos


Como usar PHP-APD en los scripts

  1. Como primera línea del script PHP, llamar la función apd_set_pprof_trace() para iniciar el rastreo.

    <?php
    apd_set_pprof_trace
    ();
    ?>

    Se puede insertar la línea en cualquier parte del script, pero si no se inicia el rastreo al comienzo, se descartarán los datos de depurado que pudieran llevar a determinar un cuello de botella del desempeño.

  2. Ahora se corre el script. La salida será escrita a apd.dumpdir/pprof_pid.ext.

    Sugerencia

    Si está corriendo la versión CGI de PHP, es necesario agregar la opción '-e' para activar la información extendida que APD requiere para trabajar apropiadamente. Por ejemplo: php -e -f script.php

  3. Para mostrar formateados los datos de performance, se envía el comando pprofp con las opciones de ordenado y presentación. La salida formateada se verá algo como esto:

    bash-2.05b$ pprofp -R /tmp/pprof.22141.0
    
    Trace for /home/dan/testapd.php
    Total Elapsed Time = 0.00
    Total System Time  = 0.00
    Total User Time    = 0.00
    
    
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
    56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
    28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
    14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace
    

    La opción –R usada en este ejemplo, ordena la tabla del performance por la cantidad de tiempo real que el script gasta ejecutando una función dada. La columna "cumm call" revela cuantas veces cada función es llamada y la columna "s/call" muestra cuantos segundos requiere en promedio cada llamada a la función.

  4. Para generar un archivo de árbol de llamados que se pueda importar en la aplicación de análisis de perfil KCacheGrind, enviar el comando pprof2calltree.




Funciones de APD

Información de contacto

Si tiene comentarios, correcciones, mejoras o quiere ayudar a desarrollar esta bestia, puede enviar un correo a » apd@mail.communityconnect.com. Cualquier ayuda será muy bienvenida.


apd_breakpoint

(PECL apd >= 0.2)

apd_breakpointDetiene el interpretador y espera en un CR desde el socket

Descripción

bool apd_breakpoint ( int $debug_level )

Esto puede ser usado para detener el corrido del script y esperar respuestas en el socket conectado. Para dar un paso en el programa, sólo se envía enter (una línea en blanco) o se entra un comando php para ser ejecutado.

Parámetros

debug_level

Un entero que es formado agregando al lado las constantes XXX_TRACE.

No se recomienda usar MEMORY_TRACE. Es muy lenta y no parece ser precisa. ASSIGNMENT_TRACE todavía no esta implementada.

Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS SUMMARY (como strace -c)) use el valor 99

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Sesión típica usando tcplisten

bash#tcplisten localhost 7777

APD - Advanced PHP Debugger Trace File
---------------------------------------------------------------------------
Process Pid (6118)
Trace Begun at Sun Mar 10 23:13:12 2002
---------------------------------------------------------------------------
(  0.000000): apd_set_session_trace called at /home/alan/Projects/project2/test. 
php:5
(  0.074824): apd_set_session_trace_socket() at /home/alan/Projects/project2/tes 
t.php:5 returned.  Elapsed (0.074824)
(  0.074918): apd_breakpoint() /home/alan/Projects/project2/test.php:7
              ++ argv[0] $(??) = 9
apd_breakpoint() at /home/alan/Projects/project2/test.php:7 returned.  Elapsed ( 
-2089521468.1073275368)
>\n 
statement: /home/alan/Projects/project2/test.php:8
>\n 
statement: /home/alan/Projects/project2/test.php:8
>\n 
statement: /home/alan/Projects/project2/test.php:10
>apd_echo($i);
EXEC: apd_echo($i);
0
>apd_echo(serialize(apd_get_active_symbols()));
EXEC:  apd_echo(serialize(apd_get_active_symbols()));
a:47:{i:0;s:4:"PWD";i:1;s:10:"COLORFGBG";i:2;s:11:"XAUTHORITY";i:3;s:14:"
COLORTERM_BCE";i:4;s:9:"WINDOWID";i:5;s:14:"ETERM_VERSION";i:6;s:16:"SE
SSION_MANAGER";i:7;s:4:"PS1";i:8;s:11:"GDMSESSION";i:9;s:5:"USER";i:10;s:5:"
MAIL";i:11;s:7:"OLDPWD";i:12;s:5:"LANG";i:13;s:10:"COLORTERM";i:14;s:8:"DISP
LAY";i:15;s:8:"LOGNAME";i:16;s:6:"
>apd_echo(system('ls /home/mydir'));
........
>apd_continue(0);



apd_callstack

(PECL apd 0.2-0.4)

apd_callstackRetorna la actual pila de llamado como una matriz

Descripción

array apd_callstack ( void )

Retorna la actual pila de llamado como una matriz

Valores devueltos

Una matriz que contiene la actual pila de llamado.

Ejemplos

Ejemplo #1 apd_callstack() ejemplo

<?php
print_r
(apd_callstack());
?>



apd_clunk

(PECL apd 0.2-0.4)

apd_clunkLanza una advertencia y una pila de llamado

Descripción

void apd_clunk ( string $warning [, string $delimiter ] )

Se comporta como el Carp::cluck de perl. Lanza una advertencia y una pila de llamado.

Parámetros

warning

La advertencia a lanzar.

delimiter

El delimitador. Por defecto es <BR />.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 apd_clunk() ejemplo

<?php
apd_clunk
("Alguna advertencia""<br/>");
?>

Ver también

  • apd_croak() - Lanza un error, una pila de lamado y entonces sale



apd_continue

(PECL apd >= 0.2)

apd_continueReinicia el interpretador

Descripción

bool apd_continue ( int $debug_level )

Usualmente enviado vía el socket para reiniciar el interpretador.

Parámetros

debug_level

Un entero que es formado agregando al lado las constantes XXX_TRACE.

No se recomienda usar MEMORY_TRACE. Es muy lenta y no parece ser precisa. ASSIGNMENT_TRACE todavía no esta implementada.

Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS SUMMARY (como strace -c)) use el valor 99

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 apd_continue() ejemplo

<?php
apd_continue
(0);
?>



apd_croak

(PECL apd 0.2-0.4)

apd_croakLanza un error, una pila de lamado y entonces sale

Descripción

void apd_croak ( string $warning [, string $delimiter ] )

Se comporta como el Carp::croak de perl. Lanza un error, una pila de lamado y entonces sale.

Parámetros

warning

La advertencia a lanzar.

delimiter

El delimitador. Por defecto es <BR />.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 apd_croak() ejemplo

<?php
apd_croak
("Alguna advertencia","<P>");
?>

Ver también

  • apd_clunk() - Lanza una advertencia y una pila de llamado



apd_dump_function_table

(Unknown)

apd_dump_function_tableMuestra la tabla de funciones actual

Descripción

void apd_dump_function_table ( void )

Muestra la tabla de funciones actual.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 apd_dump_function_table() ejemplo

<?php
apd_dump_function_table
();
?>



apd_dump_persistent_resources

(PECL apd 0.2-0.4)

apd_dump_persistent_resourcesRetorna todos los recursos persistentes como una matriz

Descripción

array apd_dump_persistent_resources ( void )

Retorna todos los recursos persistentes como una matriz.

Valores devueltos

Una matriz conteniendo la pila de llamada actual.

Ejemplos

Ejemplo #1 apd_dump_persistent_resources() ejemplo

<?php
print_r
(apd_dump_persistent_resources());
?>

Ver también



apd_dump_regular_resources

(PECL apd 0.2-0.4)

apd_dump_regular_resourcesRetorna todos los recursos regulares actuales como una matriz

Descripción

array apd_dump_regular_resources ( void )

Retorna todos los recursos regulares actuales como una matriz.

Valores devueltos

Una matriz conteniendo los recursos regulares actuales.

Ejemplos

Ejemplo #1 apd_dump_regular_resources() ejemplo

<?php
print_r
(apd_dump_regular_resources());
?>

Ver también



apd_echo

(PECL apd >= 0.2)

apd_echoEcho hacia el socket de depurado

Descripción

bool apd_echo ( string $output )

Usualmente es enviado por medio del socket para requerir información acerca del script que esta corriendo.

Parámetros

output

La variable depurada.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 apd_echo() ejemplo

<?php
apd_echo
($i);
?>



apd_get_active_symbols

(PECL apd 0.2)

apd_get_active_symbolsObtener una matriz con los nombres de las variables actuales en el ámbito local

Descripción

array apd_get_active_symbols ( void )

Devuelve los nombres de todas las variables definidas en el ámbito activo, (no sus valores).

Valores devueltos

Una matriz multidimensional con todas las variables.

Ejemplos

Ejemplo #1 apd_get_active_symbols() ejemplo

<?php
apd_echo
(apd_get_active_symbols());
?>



apd_set_pprof_trace

(PECL apd >= 0.2)

apd_set_pprof_traceInicia la sesión de depurado

Descripción

string apd_set_pprof_trace ([ string $dump_directory [, string $fragment = "pprof" ]] )

Inicia el depurado al archivo pprof_{process_id} en el directorio de volcado.

Parámetros

dump_directory

El directorio en el cual el archivo del volcado del análisis es escrito. Si no se especifica, la configuración apd.dumpdir del archivo php.ini será usada.

fragment

Valores devueltos

Retorna la ruta del archivo de destino.

Ejemplos

Ejemplo #1 apd_set_pprof_trace() ejemplo

<?php
apd_set_pprof_trace
();
?>

Ver también



apd_set_session_trace_socket

(PECL apd >= 0.2)

apd_set_session_trace_socketInicia la sesión remota de depurado

Descripción

bool apd_set_session_trace_socket ( string $tcp_server , int $socket_type , int $port , int $debug_level )

Conecta al servidor tcp_server especificado (p.ej. tcplisten) y envía los datos de depurado al socket.

Parámetros

tcp_server

Socket IP o Unix Domain (como un archivo) del servidor TCP.

socket_type

Puede ser AF_UNIX para sockets basados en archivos o APD_AF_INET para tcp/ip estándar.

port

Se puede usar cualquier puerto, pero números más altos son mejores dado que la mayoría de los números bajos pueden estar siendo usados por otros servicios del sistema.

debug_level

Un entero que es formado agregando al lado las constantes XXX_TRACE.

No se recomienda usar MEMORY_TRACE. Es muy lenta y no parece ser precisa. ASSIGNMENT_TRACE todavía no esta implementada.

Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS SUMMARY (como strace -c)) use el valor 99

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 apd_set_session_trace_socket() ejemplo

<?php
  apd_set_session_trace_socket
("127.0.0.1",APD_AF_INET,7112,0);
?>



apd_set_session_trace

(PECL apd 0.2-0.4)

apd_set_session_traceInicia la sesión de depurado

Descripción

void apd_set_session_trace ( int $debug_level [, string $dump_directory ] )

Inicia el depurado al archivo apd_dump_{process_id} en el directorio de volcado.

Parámetros

debug_level

Un entero que es formado agregando al lado las constantes XXX_TRACE.

No se recomienda usar MEMORY_TRACE. Es muy lenta y no parece ser precisa. ASSIGNMENT_TRACE todavía no esta implementada.

Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS SUMMARY (como strace -c)) use el valor 99

dump_directory

El directorio en el cual el archivo del volcado del análisis es escrito. Si no se especifica, la configuración apd.dumpdir del archivo php.ini será usada.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 apd_set_session_trace() ejemplo

<?php
apd_set_session_trace
(99);
?>



apd_set_session

(PECL apd 0.2-0.4)

apd_set_sessionCambia o configura el nivel actual de depurado

Descripción

void apd_set_session ( int $debug_level )

Esto puede ser usado para incrementar o disminuir el depurado en un área diferente de la aplicación.

Parámetros

debug_level

Un entero que es formado agregando al lado las constantes XXX_TRACE.

No se recomienda usar MEMORY_TRACE. Es muy lenta y no parece ser precisa. ASSIGNMENT_TRACE todavía no esta implementada.

Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS SUMMARY (como strace -c)) use el valor 99

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 apd_set_session() ejemplo

<?php
apd_set_session
(9);
?>



override_function

(PECL apd >= 0.2)

override_functionPasa por alto funciones integradas

Descripción

bool override_function ( string $function_name , string $function_args , string $function_code )

Pasa por alto funciones integradas al reemplazarlas en la tabla de símbolos.

Parámetros

function_name

La función para pasar por alto.

function_args

Los argumentos de la función, como una cadena separada por comas.

Usualmente se pasa este parámetro así como el parámetro function_code, como una sola cadena entre comillas simples. La razón para usar cadenas entre comillas simples es para proteger los nombres de variables del análisis sintáctico, de otra manera, si se utilizan comillas dobles sería necesario usar secuencias de escape en los nombres de las variables, como por ejemplo: \$your_var.

function_code

El nuevo código para la función.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 override_function() ejemplo

<?php
override_function
('test''$a,$b''echo "DOING TEST"; return $a * $b;');
?>



rename_function

(PECL apd >= 0.2)

rename_functionRenombra original_name como new_name en la tabla global de funciones

Descripción

bool rename_function ( string $original_name , string $new_name )

Renombra original_name como new_name en la tabla global de funciones. Es útil para temporalmente pasar por alto funciones integradas.

Parámetros

original_name

El nombre original de la función.

new_name

El nuevo nombre para la función original_name.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 rename_function() ejemplo

<?php
rename_function
('mysql_connect''debug_mysql_connect' );
?>


Tabla de contenidos




Compilador de código de bytes de PHP (bcompiler)


Introducción

Advertencia

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombre de sus funciones y en definitiva TODO lo documentado sobre esta extensión, puede cambiar en una futura versión de PHP SIN AVISO. La advertencia queda hecha, y utilizar esta extensión queda bajo su propia responsabilidad.

Bcompiler ha sido escrito por varias razones:

  • Para codificar un script completamente en una aplicación PHP propietaria
  • Para codificar algunas clases y/o funciones en una aplicación PHP propietaria
  • Para habilitar la producción de aplicaciones php-gtk que podrían usarse en escritorios clientes, sin la necesidad de un php.exe.
  • Para hacer el estudio de viabilidad para un convertidor de PHP a C
La primera de las metas se alcanza usando las funciones bcompiler_write_header(), bcompiler_write_file() y bcompiler_write_footer(). Los archivos de códgio de bytes pueden ser escritos como no comprimidos o planos. Para usar el código de bytes generado simplemente debe incluirlo con sentencias include o require.

La segunda de estas metas se alcanza usando las funciones bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), y bcompiler_load(). Los archivos de código de bytes pueden ser escritos como no comprimidos o planos. bcompiler_load() Lee un archivo de código de bytes bzip comprimido, el cuál tiende a ser 1/3 del tamaño del archivo original.

Para crear archivos tipo EXE, bcompiler tiene que usarse con un archivo sapi modificado o una versión de PHP que haya sido compilada como un biblioteca compartida. En este escenario, bcompiler lee el código de bytes comprimido del final del archivo exe.

Bcompiler puede mejorar el rendimiento en un 30% cuando se usa solamente con código de bytes sin comprimir. Pero tenga en cuenta que el código de byte sin comprimir puede ser hasta 5 veces más largo que el código fuente original. Usar la comprensión de código de bytes puede ahorrar espacio, pero la descompresión requiere mucho más tiempo que analizar una fuente. bcompiler tampoco realiza ninguna optimización de código de byte, esto podría añadirse en el futuro...

En términos de protección de código es seguro decir que sería imposible recrear el código fuente exacto desde donde se construyó, y sin los comentarios que acompañan al código fuente. Sería inútil usar los códigos de bytes de bcompiler para recrear y modificar una clase. Sin embargo, es posible recuperar información de un archivo de código de bytes contruido con bcompiler - por lo que no ponga sus contraseñas privadas o similares en él.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/bcompiler.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Funciones de bcompiler

Información de Contacto

Si tiene algún comentario, alguna corrección de un error, alguna mejora o quiere ayudar a desarrollar esta bestia, puede mandarme un mail a » alan_k@php.net. Cualquier ayuda es siempre bienvenida.


bcompiler_load_exe

(PECL bcompiler >= 0.4)

bcompiler_load_exeLee y crea clases desde un archivo exe de bcompiler

Descripción

bool bcompiler_load_exe ( string $filename )

Lee la información de un archivo exe de bcompiler y crea clases desde el código de bytes.

Parámetros

filename

La ruta al archivo exe, como cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_load_exe()

<?php

bcompiler_load_exe
("/tmp/ejemplo.exe");
print_r(get_defined_classes());

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también



bcompiler_load

(PECL bcompiler >= 0.4)

bcompiler_loadLee y crea clases desde un archivo comprimido con bz

Descripción

bool bcompiler_load ( string $filename )

Lee la información de un archivo bz comprimido y crear clases desde el código de bytes.

Parámetros

filename

La ruta al archivo bz comprimido, como cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_load()

<?php

bcompiler_load
("/tmp/ejemplo");

print_r(get_defined_classes());

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Nota:

Por favor, use las sentencias include o require para analizar el código de bytes, es una manera más portable y conveniente que usar esta función.

Por favor, observe que esta función no ejecutará código del cuerpo de un script que contenido en el archivo de código de bytes.

Ver también



bcompiler_parse_class

(PECL bcompiler >= 0.4)

bcompiler_parse_classLee el código de bytes de una clase y realiza una llamada de retorno a una función de usuario

Descripción

bool bcompiler_parse_class ( string $class , string $callback )

Lee el código de bytes de una clase y realiza una llamada de retorno a una función de usuario.

Parámetros

class

El nombre de la clase, como cadena.

callback

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_parse_class()

<?php

function leerCódigoBytes($datos) {
    
print_r($datos);
}

bcompiler_parse_class("DB","leerCódigoBytes");

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Nota:

Esta función ha sido eliminada de bcompiler y ya no está disponible a partir de bcompiler 0.5.



bcompiler_read

(PECL bcompiler >= 0.4)

bcompiler_readLee y crea clases ded un gestor de archivo

Descripción

bool bcompiler_read ( resource $filehandle )

Lee información desde un gestor de archivo abierto y crea clases desde el código de bytes.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_read()

<?php
$fh 
fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Nota:

Por favor, use las sentencias include o require para analizar el código de bytes, es una manera más portable y conveniente que usar esta función.

Por favor, observe que esta función no ejecutará código del cuerpo de un script que contenido en el archivo de código de bytes.



bcompiler_write_class

(PECL bcompiler >= 0.4)

bcompiler_write_classEscribe una clase definida como código de bytes

Descripción

bool bcompiler_write_class ( resource $filehandle , string $className [, string $extends ] )

Lee el código de bytes de una clase existente de PHP y lo escribe en el gestor de archivo abierto.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

className

El nombre de la clase, como cadena.

extends

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_class()

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
// debe escribir DB_common antes de DB_mysql, ya que DB_mysql extiende DB_common.
bcompiler_write_class($fh,"DB_common");
bcompiler_write_class($fh,"DB_mysql");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Nota:

Esta función no realiza una comprobación de dependencia, por lo que asegúrese de escribir las clases en un orden que no resulte en un error undefined class cuando lo cargue.

Ver también



bcompiler_write_constant

(PECL bcompiler >= 0.5)

bcompiler_write_constantEscribe una constante definida como código de bytes

Descripción

bool bcompiler_write_constant ( resource $filehandle , string $constantName )

Lee el código de bytes de una constante existente de PHP y lo escribe al gestor de archivo abierto.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

constantName

El nombre de la constante definida, como cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_constant()

<?php
define
("MODULE_MAX"30);

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_constant($fh,"MODULE_MAX");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también




bcompiler_write_file

(PECL bcompiler >= 0.6)

bcompiler_write_fileEScribe un archivo fuente de php como código de bytes

Descripción

bool bcompiler_write_file ( resource $filehandle , string $filename )

Esta función compila el archivo fuente especificado en código de bytes y lo escribe al gestor de archivo abierto.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

filename

La ruta al archivo fuente, como cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_file()

<?php
$fh 
fopen("ejemplo.phb""w");
bcompiler_write_header($fh);
bcompiler_write_file($fh"ejemplo.php");
bcompiler_write_footer($fh);
fclose($fh);
/* lo siguiente debería ser equivalente:
include "ejemplo.php";
   y
include "ejemplo.phb";
*/
?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también




bcompiler_write_function

(PECL bcompiler >= 0.5)

bcompiler_write_functionEscribe una función definida como código de bytes

Descripción

bool bcompiler_write_function ( resource $filehandle , string $functionName )

Lee el código de bytes de una función existente de PHP y lo escribe al gestor de archivo abierto. El orden no es importante, (p.ej. si la función b utiliza la función a, y se compila como en el ejemplo de abajo, funcionará perfectamente).

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

functionName

El nombre de la función, como cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_function()

<?php
$fh 
fopen("/tmp/ejemplo","w");
bcompiler_write_header($fh);
bcompiler_write_function($fh,"mi_función_a");
bcompiler_write_function($fh,"mi_función_b");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también



bcompiler_write_functions_from_file

(PECL bcompiler >= 0.5)

bcompiler_write_functions_from_fileEscribe todas las funciones definidas en un archivo como código de bytes

Descripción

bool bcompiler_write_functions_from_file ( resource $filehandle , string $fileName )

Busca todas las funciones declaradas en el archivo dado y escribe sus códigos de bytes correspondientes a un gestor de archivo abierto.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

fileName

El archivo a compilar. Se debe usar siempre include o require para el archivo que se intenta compilar.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_functions_from_file()

<?php
require('module.php');

$fh fopen("/tmp/ejemplo","w");
bcompiler_write_header($fh);
bcompiler_write_functions_from_file($fh,'module.php');
bcompiler_write_footer($fh);
fclose($fh);

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también



bcompiler_write_header

(PECL bcompiler >= 0.3)

bcompiler_write_headerEscribe la cabecera de bcompiler

Descripción

bool bcompiler_write_header ( resource $filehandle [, string $write_ver ] )

Escribe la parte de la cabecera de una archivo bcompiler.

Parámetros

filehandle

Un gestor de archivo como el devuelto por fopen().

write_ver

Se puede usar para escribir código de bytes en un formato usado anteriormente, por lo que lo puede usar con versiones anteriores de bcompiler.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bcompiler_write_header()

<?php
$fh 
fopen("/tmp/ejemplo","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Ver también



bcompiler_write_included_filename

(PECL bcompiler >= 0.5)

bcompiler_write_included_filenameEscribe un archivo incluido como código de bytes

Descripción

bool bcompiler_write_included_filename ( resource $filehandle , string $filename )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Notas

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.


Tabla de contenidos




Control y registro de errores


Introducción

Estas funciones tratan sobre el control y registro de errores. Permiten definir sus propias reglas de control de errores, así como modificar la manera en que los errores pueden ser registrados. Esto le permite cambiar y mejorar la notificación de errores para acomodarla a sus necesidades.

Con las funciones de registro se pueden enviar mensajes directamente a otras máquinas, a un e-mail (¡o un e-mail a un busca!), al registro del sistema, etc., por lo que puede registrar y monitorizar selectivamente las partes más importantes de sus aplicaciones y sitios web.

Las funciones de notificación de errores le permiten personalizar a qué nivel y qué tipo de errores se dan, abarcando desde simples avisos hasta funciones personalizadas devueltas al originarse un error.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

No se requiere de ninguna instalación para utilizar estas funciones; forman parte del núcleo de PHP.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de Errores y Registro
Nombre Por defecto Cambiable Historial de cambios
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "0" PHP_INI_ALL  
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL Disponible a partir de PHP 4.3.0.
ignore_repeated_errors "0" PHP_INI_ALL Disponible a partir de PHP 4.3.0.
ignore_repeated_source "0" PHP_INI_ALL Disponible a partir de PHP 4.3.0.
report_memleaks "1" PHP_INI_ALL Disponible a partir de PHP 4.3.0.
track_errors "0" PHP_INI_ALL  
html_errors "1" PHP_INI_ALL PHP_INI_SYSTEM en PHP <= 4.2.3.
xmlrpc_errors "0" PHP_INI_SYSTEM Disponible a partir de PHP 4.1.0.
xmlrpc_error_number "0" PHP_INI_ALL Disponible a partir de PHP 4.1.0.
docref_root "" PHP_INI_ALL Disponible a partir de PHP 4.3.0.
docref_ext "" PHP_INI_ALL Disponible a partir de PHP 4.3.2.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

error_reporting integer

Establece el nivel de notificación de errores. El parámetro es un valor de tipo integer que representa un campo de bits, o constantes nominadas. Los niveles de error_reporting y constantes están descritos en Constantes Predefinidas, y en php.ini. Para establecerlo en tiempo de ejecución, use la función error_reporting(). Vea también la directiva display_errors.

En PHP 4 y PHP 5 el valor predeterminado es E_ALL & ~E_NOTICE. Esta configuración no muestra los errores de nivel E_NOTICE. Puede querer mostrarlos durante el desarrollo.

Nota:

Habilitar E_NOTICE durante el desarrollo tiene algunos beneficios. Para depuración: los mensajes NOTICE le avisarán de posibles errores en su código. Por ejemplo, se avisa del uso de valores no asignados. Es extremadamente útil para encontrar errartas y ahorrar tiempo de depuración. Los mensajes NOTICE le avisarán sobre un estilo malo. Por ejemplo, $arr[item] es mejor que sea escrito como $arr['item'] ya que PHP intenta tratar "item" como una constante. Si no es una constante, PHP asume que es un índice de cadena del array.

Nota:

En PHP 5 está disponible el nuevo nivel de error E_STRICT. Ya que E_STRICT no está incluido dentro de E_ALL tiene que habilitar explícitamente este tipo de nivel de error. Habilitar E_STRICT durante el desarrollo tiene algunos beneficios. Los mensajes STRICT le ayudarán a usar el último y más sugerente método de codificación, por ejemplo le advertirá del uso de funciones obsoletas.

Nota: Constantes de PHP fuera de PHP

Usar constantes de PHP fuera de PHP, como en httpd.conf, no tendrá un propósito útil por lo que en tales casos se requerirán los valores de tipo integer. Y ya que se añadirán más niveles de error con el tiempo, el valor máximo (para E_ALL) cambiará igualmente. Por lo que en lugar de E_ALL considere usar un valor grande para cubrir todos los campos de bits desde ahora hasta bien entrado en el futuro, un valor numérico como 2147483647 (incluye todos los errores, no sólo E_ALL).

display_errors string

Determina si los errores deberían ser impresos en pantalla como parte de la salida o si deberían ocultarse al usuario.

El valor "stderr" envía los errores a stderr en vez de a stdout. El valor está disponible a partir de PHP 5.2.4. En versiones anteriores esta directiva era de tipo boolean.

Nota:

Esta es una característica para apoyar su desarrollo y nunca debería usarse es sistemas de producción (p.ej. sistemas conectados a internet).

Nota:

Aunque display_errors puede ser establecido en tiempo de ejecución (con ini_set ()), no tendrá ningún efecto si el script tiene errores fatales. Esto es porque la acción en tiempo de ejecución deseada no se ejecuta.

display_startup_errors boolean

Incluso cuando display_errors está activado, los errores que ocurren durante la secuencia de arranque de PHP no se muestran. Se recomienda encarecidamente mantener desactivado display_startup_errors, excepto para depuración.

log_errors boolean

Indica si los mensajes de error del script deberían de registrarse en el registro del servidor o en error_log. Esta opción es, por lo tanto, específica para servidores.

Nota:

Se aconseja encarecidamente usar el registro de errores en lugar de mostrar los errores en sitios web de producción.

log_errors_max_len integer

Establece la longitud máxima de log_errors en bytes. En error_log se añade información acerca de la fuente. El valor predeterminado es 1024 y 0 permite no aplicar ninguna longitud máxima en absoluto. Esta longitud se aplica a los errores registrados, a los errores mostrados y también a $php_errormsg.

Cuando se usa un número entero, el valor del mismo es medido en bytes. También se puede usar la notación reducida tal como se describe en esta FAQ.
ignore_repeated_errors boolean

No registra mensajes repetidos. Los mensajes repetidos deben ocurrir en el misma línea del mismo archivo a menos que ignore_repeated_source esté establecido a true.

ignore_repeated_source boolean

Ignora la fuente del mensaje cuando se ignoran mensajes repetidos. Cuando este ajuste está activado (On) no se registrarán errores con mensajes repetidos de diferentes archivos o líneas fuente.

report_memleaks boolean

Si este parámetro está activado (On) (por defecto), este parámetro mostrará un informe de pérdidas de memoria detectado por el gestor de memoria Zend. Este informe Será enviado al stderr en las plataformas Posix. En Windows, será enviado al depurador usando OutputDebugString(), y podrá ser visto con herramientas como » DbgView. Este parámetro solo tiene efecto en una versión de depuración, y si error_reporting incluye E_WARNING en la lista permitida.

track_errors boolean

Si está habilitado, el último mensaje de error siempre estará presente en la variable $php_errormsg.

html_errors boolean

Desactiva las etiquetas HTML en los mensajes de error. El nuevo formato para errores HTML producen mensajes clicables que dirigen al usuario a una página describiendo el error o a la función que causa el error. Estas referencias son afectadas por docref_root y docref_ext.

xmlrpc_errors boolean

Desactiva la notificación de errores normal y fortamea los errores como mensajes de error XML-RPC.

xmlrpc_error_number integer

Usado como el valor del elemento faultCode de XML-RPC.

docref_root string

El nuevo formato de error contiene una referencia a la página describiendo el error o a la función que causa el error. En caso de páginas de manual puede descargar el manual en su idioma y establecer esta directiva ini a la URL de su copia local. Si su copia local del manual se puede alcanzar mediante "/manual/" puede usar simplemente docref_root=/manual/. Además tiene que establecer docref_ext para que coincida con las extensiones de archivo de su copia docref_ext=.html. Es posbile usar referencias externas. Por ejemplo puede usar docref_root=http://manual/en/ o docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

La mayoría de las veces querrá que el valor de docref_root termine con una barra "/". Pero vea el segundo ejemplo de arriba, el cuál no la tiene ni la necesita.

Nota:

Esta es una característica para apoyar su desarrollo ya que hace más fácil buscar una descripción de una función. Sin embargo, nunca debería usarse en sistemas de producción (p.ej. sistemas conectados a internet).

docref_ext string

Véase docref_root.

Nota:

El valor de docref_ext debe comenzar con un punto ".".

error_prepend_string string

Cadena a imprimir antes de un mensaje de error.

error_append_string string

Cadena a imprimir después de un mensaje de error.

error_log string

Nombre del archivo donde los errores del script deberían ser registrados. El archivo debería ser modificable por el usuario del servidor web. Si se usa el valor especial syslog, los errores son enviados en su lugar al registro del sistema. En Unix, esto quiere decir syslog(3) y en Windows NT quiere decir el registro de sucesos. El registro de sistema no está soportado en Windows 95. Vea también: syslog(). Si esta directiva no está establecida los errores se enviarán al registro de error de SAPI. Por ejemplo, un registro de error en Apache o stderr en CLI.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están disponibles siempre ya que forman parte del núcleo de PHP.

Nota: Se pueden usar estos nombres de constantes en php.ini pero no fuera de PHP, como en httpd.conf, donde se deberían usar en su lugar valores de máscara de bits.

Errores y Registro
Valor Constante Descripción Nota
1 E_ERROR (integer) Errores Fatales en tiempo de ejecución. Éstos indican errores que no se pueden recuperar, tales como un problema de asignación de memoria. La ejecución del script se interrumpe.  
2 E_WARNING (integer) Advertencias en tiempo de ejecución (errores no fatales). La ejecución del script no se interrumpe.  
4 E_PARSE (integer) Errores de análisis en tiempo de compilación. Los errores de análisis deberían ser generados únicamente por el analizador.  
8 E_NOTICE (integer) Avisos en tiempo de ejecución. Indican que el script encontró algo que podría señalar un error, pero que también podría ocurrir en el curso normal al ejecutar un script.  
16 E_CORE_ERROR (integer) Errores fatales que ocurren durante el arranque incial de PHP. Son como un E_ERROR, excepto que son generados por el núcleo de PHP.  
32 E_CORE_WARNING (integer) Advertencias (errores no fatales) que ocurren durante el arranque inicial de PHP. Son como un E_WARNING, excepto que son generados por el núcleo de PHP.  
64 E_COMPILE_ERROR (integer) Errores fatales en tiempo de compilación. Son como un E_ERROR, excepto que son generados por Motor de Script Zend.  
128 E_COMPILE_WARNING (integer) Advertencias en tiempo de compilación (errores no fatales). Son como un E_WARNING, excepto que son generados por Motor de Script Zend.  
256 E_USER_ERROR (integer) Mensaje de error generado por el usuario. Es como un E_ERROR, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().  
512 E_USER_WARNING (integer) Mensaje de advertencia generado por el usuario. Es como un E_WARNING, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().  
1024 E_USER_NOTICE (integer) Mensaje de aviso generado por el usuario. Es como un E_NOTICE, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error().  
2048 E_STRICT (integer) Habilítelo para que PHP sugiera cambios en su código, lo que asegurará la mejor interoperabilidad y compatibilidad con versiones posteriores de PHP de su código. Desde PHP 5 pero no incluidoen E_ALL hasta PHP 5.4.0
4096 E_RECOVERABLE_ERROR (integer) Error fatal capturable. Indica que ocurrió un error probablemente peligroso, pero no dejó al Motor en un estado inestable. Si no se captura el error mediante un gestor definido por el usuario (vea también set_error_handler()), la aplicación se abortará como si fuera un E_ERROR. Desde PHP 5.2.0
8192 E_DEPRECATED (integer) Avisos en tiempo de ejecución. Habilítelo para recibir avisos sobre código que no funcionará en futuras versiones. Desde PHP 5.3.0
16384 E_USER_DEPRECATED (integer) Mensajes de advertencia generados por el usuario. Son como un E_DEPRECATED, excepto que es generado por código de PHP mediante el uso de la función de PHP trigger_error(). Desde PHP 5.3.0
32767 E_ALL (integer) Todos los errores y advertencias soportados, excepto del nivel E_STRICT antes de PHP 5.4.0. 32767 en PHP 5.4.x, 30719 en PHP 5.3.x, 6143 en PHP 5.2.x, 2047 anteriormente

Los valores de arriba (numéricos o simbólicos) se usan para construir una máscara de bits que especifica qué errores notificar. Se pueden usar los operadores a nivel de bit para combinar estos valores o para enmascarar ciertos tipos de errores. Observe que sólo serán interpretados '|', '~', '!', '^' y '&' dentro de php.ini.



Ejemplos

Abajo podemos ver un ejemplo del uso de las capacidades del manejo de errores de PHP. Definimos una función de gestión de errores que registra la información en un archivo (usado un foramto XML), y envía un e-mail a los desarrolladores en caso de que suceda un error crítico en la lógica.

Ejemplo #1 Usar el manejo de errores en un script

<?php
// haremos nuestro propio manejo de errores
error_reporting(0);

// función de gestión de errores definida por el usuario
function gestorErrores($númerr$menserr$nombrearchivo$númlínea$vars
{
    
// marca de tiempo para la entrada del error
    
$fh date("Y-m-d H:i:s (T)");

    
// definir una matriz asociativa de cadena de error
    // en realidad las únicas entradas que deberíamos
    // considerar son E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING y E_USER_NOTICE
    
$tipoerror = array (
                
E_ERROR              => 'Error',
                
E_WARNING            => 'Warning',
                
E_PARSE              => 'Parsing Error',
                
E_NOTICE             => 'Notice',
                
E_CORE_ERROR         => 'Core Error',
                
E_CORE_WARNING       => 'Core Warning',
                
E_COMPILE_ERROR      => 'Compile Error',
                
E_COMPILE_WARNING    => 'Compile Warning',
                
E_USER_ERROR         => 'User Error',
                
E_USER_WARNING       => 'User Warning',
                
E_USER_NOTICE        => 'User Notice',
                
E_STRICT             => 'Runtime Notice',
                
E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
                
);
    
// conjunto de errores por el cuál se guardará un seguimiento de una variable
    
$errores_usuario = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
    
    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $fh "</datetime>\n";
    
$err .= "\t<errornum>" $númerr "</errornum>\n";
    
$err .= "\t<errortype>" $tipoerror[$númerr] . "</errortype>\n";
    
$err .= "\t<errormsg>" $menserr "</errormsg>\n";
    
$err .= "\t<scriptname>" $nombrearchivo "</scriptname>\n";
    
$err .= "\t<scriptlinenum>" $númlínea "</scriptlinenum>\n";

    if (
in_array($númerr$errores_usuario)) {
        
$err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";
    }
    
$err .= "</errorentry>\n\n";
    
    
// para probar
    // echo $err;

    // guardar al registro de errores, y enviarme un e-mail si hay un error crítico de usuario
    
error_log($err3"/usr/local/php4/error.log");
    if (
$númerr == E_USER_ERROR) {
        
mail("phpdev@example.com""Error Crítico de Usuario"$err);
    }
}


function 
distancia($vect1$vect2
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Parámetros incorrectos, se esperaba una matriz"E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Los vectores necesitan ser del mismo tamaño"E_USER_ERROR);
        return 
NULL;
    }

    for (
$i=0$i<count($vect1); $i++) {
        
$c1 $vect1[$i]; $c2 $vect2[$i];
        
$d 0.0;
        if (!
is_numeric($c1)) {
            
trigger_error("La coordenada $i del vector 1 no es un número, se usará cero"
                            
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error("La coordenada $i del vector 2 no es un número, se usará cero"
                            
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$gestor_error_antiguo set_error_handler("gestorErrores");

// constante no definida, genera una advertencia
$t NO_ESTOY_DEFINIDA;

// definir algunos "vectores"
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// generar un error de usuario
$t1 distancia($c$b) . "\n";

// generar otro error de usuario
$t2 distancia($b"no soy una matriz") . "\n";

// generar una advertencia
$t3 distancia($a$b) . "\n";

?>



Funciones de Manejo de Errores

Ver también

Véase también syslog().


debug_backtrace

(PHP 4 >= 4.3.0, PHP 5)

debug_backtraceGenera un rastreo

Descripción

array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )

debug_backtrace() genera un rastreo de PHP.

Parámetros

options

Desde 5.3.6, este parámetro es una mascara de bits para las siguientes opciones:

debug_backtrace() options
DEBUG_BACKTRACE_PROVIDE_OBJECT Completar el índice "object" o no.
DEBUG_BACKTRACE_IGNORE_ARGS Omitir el índice "args" y por lo tanto todos los argumentos de las funciones/métodos para ahorrar memoria o no.
Antes de 5.3.6, el único valor reconocido es TRUE o FALSE, que es lo mismo que establecer y desestablecer la opción DEBUG_BACKTRACE_PROVIDE_OBJECT.

limit

Desde 5.4.0, este parámetro puede ser usado para limitar el número de stack frames que se muestran. Por defecto (limit=0) imprime todos los stack frames.

Valores devueltos

Devuelve un array de array asociativos. Los posibles elementos devueltos son los siguientes:

Posibles elementos devueltos por debug_backtrace()
Nombre Tipo Descripción
function string El nombre de la función actual. Véase también __FUNCTION__.
line integer El número de línea actual. Véase también __LINE__.
file string El nombre de archivo actual. Véase también __FILE__.
class string El nombre de la clase actual. Véase también __CLASS__
object object El objeto actual.
type string El tipo de llamada actual. Si es una llamada a un método devuelve "->". Si es una llamada a un método estático devuelve "::". Si es una llamada a una función no se devuelve nada.
args array Dentro de una función se lista los argumentos de la función. Dentro de un archvo incluido se lista el nombre (o nombres) del archivo incluido.

Historial de cambios

Versión Descripción
5.4.0 Añadido el parámetro opcional limit.
5.3.6 Se cambió el parámetro provide_object a options y se añadió la opción adicional DEBUG_BACKTRACE_IGNORE_ARGS.
5.2.5 Se añadió el parámetro opcional provide_object.
5.1.1 Se añadió el object actual como posible elemento devuelto.

Ejemplos

Ejemplo #1 Ejemplo de debug_backtrace()

<?php
// nombre de archvio: /tmp/a.php

function una_prueba($str)
{
    echo 
"\nHola: $str";
    
var_dump(debug_backtrace());
}

una_prueba('amigo');
?>

<?php
// nombre de archvio: /tmp/b.php
include_once '/tmp/a.php';
?>

El resultado es similar al siguiente cuando se ejecuta /tmp/b.php:

Hola: amigo
array(2) {
[0]=>
array(4) {
    ["file"] => string(10) "/tmp/a.php"
    ["line"] => int(10)
    ["function"] => string(10) "una_prueba"
    ["args"]=>
    array(1) {
      [0] => &string(5) "amigo"
    }
}
[1]=>
array(4) {
    ["file"] => string(10) "/tmp/b.php"
    ["line"] => int(2)
    ["args"] =>
    array(1) {
      [0] => string(10) "/tmp/a.php"
    }
    ["function"] => string(12) "include_once"
  }
}

Ver también



debug_print_backtrace

(PHP 5)

debug_print_backtrace Muestra un rastreo

Descripción

void debug_print_backtrace ([ int $options = 0 [, int $limit = 0 ]] )

debug_print_backtrace() muestra un rastreo PHP. muestra las llamadas a función, archivos incluídos y el material evaluado mediante eval().

Parámetros

options

Desde 5.3.6, este parámetro es una máscara de bits para las siguientes opciones:

Opciones de debug_print_backtrace()
DEBUG_BACKTRACE_IGNORE_ARGS Omitir el índice "args" y por lo tanto todos los argumentos de las funciones/métodos para ahorrar memoria o no.

limit

Desde 5.4.0, este parámetro puede ser usado para limitar el número de stack frames que se muestran. Por defecto (limit=0) imprime todos los stack frames.

Valores devueltos

No devuelve ningún valor.

Historial de cambios

Versión Descripción
5.4.0 Añadido el parámetro opcional limit.
5.3.6 Añadido el parámetro opcional options.

Ejemplos

Ejemplo #1 Ejemplo de debug_print_backtrace()

<?php
// archivo include.php
function a() {
    
b();
}

function 
b() {
    
c();
}

function 
c(){
    
debug_print_backtrace();
}

a();

?>
<?php
// archivo prueba.php
// este es el archivo que debe ejecutar

include 'include.php';
?>

El resultado del ejemplo sería algo similar a:

#0  c() called at [/tmp/include.php:10]
#1  b() called at [/tmp/include.php:6]
#2  a() called at [/tmp/include.php:17]
#3  include(/tmp/include.php) called at [/tmp/prueba.php:3]

Ver también



error_get_last

(PHP 5 >= 5.2.0)

error_get_lastObtener el último error que ocurrió

Descripción

array error_get_last ( void )

Obtiene información sobre el último error que ocurrió.

Valores devueltos

Devuelve una matriz asociativa describiendo el último error con las claves "type" (tipo), "message" (mensaje), "file" (archivo) y "line" (línea). Si el error ha sido causado por una función interna de PHP, el "message" (mensaje) comienza con su nombre. Devuelve NULL si no ha habido aún un error.

Ejemplos

Ejemplo #1 Un ejemplo de error_get_last()

<?php
echo $a;
print_r(error_get_last());
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)



error_log

(PHP 4, PHP 5)

error_logEnviar un mensaje de error a algún lugar

Descripción

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

Envía un mensaje de error al registro de errores del servidor web o a un archivo.

Parámetros

message

El mensaje de error que debería ser registrado.

message_type

Indica dónde debería ir el error. Lo tipos de mensaje posibles son:

Tipos de registro de error_log()
0 message es enviado al registro del sistema de PHP, usando el mecanismo de registro del Sistema Operativo o un archivo, dependiendo de qué directiva de configuración esté establecida en error_log. Esta es la opción predeterminada.
1 message es enviado por email a la dirección del parámetro destination. Este es el único tipo de mensaje donde se usa el cuarto parámetro extra_headers.
2 Ya no es una opción.
3 message es añadido al inicio del archivo destination. No se añade automáticamente una nueva línea al final de la cadena message.
4 message es enviado directamente al gestor de registro de SAPI.

destination

El destino. Su significado depende del parámetro message_type tal como se describió arriba.

extra_headers

Las cabeceras extra. Se usa cuando el parámetro message_type está establecido a 1. Este tipo de mensaje usa la misma función interna que mail().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.2.7 El valor posible de 4 se añadió a message_type.

Ejemplos

Ejemplo #1 Ejemplos de error_log()

<?php
// Enviar una notificación al registro del servidor si no podemos
// conectarnos a la base de datos.
if (!Ora_Logon($username$password)) {
    
error_log("¡Base de datos Oracle no disponible!"0);
}

// Notificar al administrador mediante un email si agotamos FOO
if (!($foo allocate_new_foo())) {
    
error_log("Problema serio, nos hemos quedado sin FOOs!"1,
               
"operator@example.com");
}

// otra manera de llamar a error_log():
error_log("¡Lo echaste a perder!"3"/var/tmp/my-errors.log");
?>



error_reporting

(PHP 4, PHP 5)

error_reportingEstablece cuáles errores de PHP son notificados

Descripción

int error_reporting ([ int $level ] )

La función error_reporting() establece la directiva error_reporting en tiempo de ejecución. PHP tiene varios niveles de errores para notificar, al utilizar ésta función se define el nivel de duración (tiempo de ejecución) de sus scripts. Si el parámetro opcional level no se define, la función error_reporting() sólo devolverá el nivel actual de notificación de error.

Parámetros

level

El nuevo nivel de error_reporting. Este nivel toma una máscara de bit o constantes nominadas. Al utilizar constantes nominadas se recomienda encarecidamente asegurar la compatibilidad para versiones futuras. Según se añaden niveles de error, el rango de los enteros incrementa, por lo que los niveles antiguos de errores basados en enteros no siempre se comportarán como se esperaba.

Las constantes de niveles de error disponibles, y los significados actuales de esos niveles de error están descritos en constantes predefinidas.

Valores devueltos

Devuelve el nivel antiguo de error_reporting o el nivel actual si el parámetro level no se proporciona.

Historial de cambios

Versión Descripción
5.4.0 Ahora E_STRICT es parte de E_ALL.
5.3.0 Se introdujo E_DEPRECATED y E_USER_DEPRECATED.
5.2.0 Se introdujo E_RECOVERABLE_ERROR.
5.0.0 Se introdujo E_STRICT (no es parte de E_ALL).

Ejemplos

Ejemplo #1 Ejemplos de error_reporting()

<?php

// Desactivar toda notificación de error
error_reporting(0);

// Notificar solamente errores de ejecución
error_reporting(E_ERROR E_WARNING E_PARSE);

// Notificar E_NOTICE también puede ser bueno (para informar de variables
// no inicializadas o capturar errores en nombres de variables ...)
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// Notificar todos los errores excepto E_NOTICE
// Este es el valor predeterminado establecido en php.ini
error_reporting(E_ALL E_NOTICE);

// Notificar todos los errores de PHP (ver el registro de cambios)
error_reporting(E_ALL);

// Notificar todos los errores de PHP
error_reporting(-1);

// Lo mismo que error_reporting(E_ALL);
ini_set('error_reporting'E_ALL);

?>

Notas

Advertencia

La mayoría de errores E_STRICT son evaluados en tiempo de compilación por lo que tales errores no se notifican en el fichero donde error_reporting se mejora al incluir los errores de E_STRICT (y viceversa).

Sugerencia

Al pasar el valor -1 se mostrarán todos los errores posibles, incluso cuando se añadan nuevos niveles y constantes en futuras versiones de PHP. La constante E_ALL también se comporta de esta forma en PHP 5.4.

Ver también



restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handlerRecupera la función de gestión de errores previa

Descripción

bool restore_error_handler ( void )

Usada después de modificar la función de gestión de errores usando set_error_handler(), para revertir al gestor de errores previo (el cual puede ser el incorporado o una función definida por el usuario).

Valores devueltos

Esta función siempre devuelve TRUE.

Ejemplos

Ejemplo #1 Ejemplo de restore_error_handler()

Decidir si unserialize() causó un error, entonces recuperar el gestor de errores original.

<?php
function gestor_unserialize($errno$errstr)
{
    echo 
"Valor seriado inválido.\n";
}

$seriado 'foo';
set_error_handler('gestor_unserialize');
$original unserialize($seriado);
restore_error_handler();
?>

El resultado del ejemplo sería:

Valor seriado inválido.

Notas

Nota:

Llamar restore_error_handler() desde la función error_handler es ignorado.

Ver también



restore_exception_handler

(PHP 5)

restore_exception_handler Restaura la función de gestión de excepciones previamente definida

Descripción

bool restore_exception_handler ( void )

Usada después de cambiar la función de gestión de excepciones al utilizar set_exception_handler(), para volver al gestor de excepciones anterior (el cuál puede ser la función interna o una definida por el usuario).

Valores devueltos

Esta función siempre devuelve TRUE.

Ejemplos

Ejemplo #1 Ejemplo de restore_exception_handler()

<?php
    
function gestor_excepciones_1(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    function 
gestor_excepciones_2(Exception $e)
    {
        echo 
'[' __FUNCTION__ '] ' $e->getMessage();
    }

    
set_exception_handler('gestor_excepciones_1');
    
set_exception_handler('gestor_excepciones_2');

    
restore_exception_handler();

    throw new 
Exception('Esto dispara el primer gestor de excepciones...');
?>

El resultado del ejemplo sería:

[gestor_excepciones_1] Esto dispara el primer gestor de excepciones...

Ver también



set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handlerEstablecer una función de gestión de errores definida por el usuario

Descripción

mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )

Establece una función de usuario (error_handler) para manejar los errores de un script.

Esta función se puede usar para definir su propia forma de manejar los errores en tiempo de ejecución, por ejemplo en aplicaciones en las que se neceista hacer una limpieza de datos/archivos cuando ocurre un error crítico, o cuando se necesita provocar un error bajo ciertas condiciones (usando trigger_error()).

Es importante recordar que el gestor de errores estándar de PHP es completamente evitado por los tipos de errores especificados por error_types a menos que la función de llamada de retorno devuelva FALSE. La configuración de error_reporting() no tendrá efecto y su gestor de errores será llamado de todas formas - aunque aún es capaz de leer el valor actual de error_reporting y actuar de manera apropiada. En particular, observe que este valor será 0 si a la sentencia que causó el error se le añadió al principio el operador de control de errores @ .

También observe que es su responsabilidad realizar un die() si fuera necesario. Si la función de gestión de errores devuelve, la ejecución del script continuará con la siguiente sentencia después de la que causó el error.

Los siguientes tipos de errores no pueden ser manejados con una función definida por el usuario: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, y la mayoría de E_STRICT ocasionados en el archivo desde donde se llamó a set_error_handler().

Si sucede algún error antes de que el script sea ejecutado (p.ej. en la carga de archivos) el gestor de errores personalizado no podrá ser llamado ya que no está registrado en ese momento.

Parámetros

error_handler

La función de usuario necesita aceptar dos parámetros: el código del error, y una cadena describiendo el error. Hay tres parámetros opcionales que pueden ser proporcionados: el nombre de archivo en el que ocurrió el error, el número de línea en el que ocurrió el error, y el contexto en el que ocurrió el error (una matriz que apunta a la tabla de símbolos activa en el punto donde ocurrió el error). La función se puede mostrar como:

handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
errno
El primer parámetro, errno, contiene el nivel del error ocasionado, como un valor de tipo integer.
errstr
El segundo parámetro, errstr, contiene el mensaje de error, como cadena.
errfile
El tercer parámetro es opcional, errfile, que contiene el nombre de archivo que ocasionó el error, como cadena.
errline
El cuarto parámetro es opcional, errline, que contiene el número de línea donde ocurrió el error, como valor de tipo integer.
errcontext
El quinto parámetro es opcional, errcontext, el cuál es una matriz que apunta a la tabla de símbolos activa en el punto donde ocurrió el error. En otras palabras, errcontext contendrá una matriz con cada variable que existe en el ámbito donde el error fue provocado. El gestor de errores de usuario no debe modificar el contexto del error.

Si la función devuelve FALSE se continúa con el gestor de errores normal.

error_types

Se puede usar para enmascarar la provocación de la función error_handler al igual que la configuración error_reporting ini controla los errores que se muestran. Sin esta máscara establecida error_handler será llamada para cada error sin tener en cuenta la configuración de error_reporting.

Valores devueltos

Devuelve una cadena que contiene el gestor de errores definido anteriormente (si lo hay). Si se usa el gestor de errores interno se devuelve NULL. NULL también es devuelto en caso de un error como una llamada de retorno no válida. Si el gestor de errores anterior era un método de una clase, esta función devolverá una matriz indexada con los nombres de las clases y métodos.

Historial de cambios

Versión Descripción
5.2.0 El gestor de errores debe devolver FALSE para rellenar $php_errormsg.
5.0.0 Se introdujo el parámetro error_types.
4.3.0 También se puede proporcionar una matriz que contiene una referencia a un objeto y un nombre de método, en vez el nombre de una función, como error_handler.
4.0.2 Se introdujeron tres parámetros opcionales para la función de usuario error_handler. Son el nombre de archivo, el número de línea, y el contexto.

Ejemplos

Ejemplo #1 Manejo de errores con set_error_handler() y trigger_error()

El ejemplo de abajo muestra el manejo de excepciones internas mediante la provocación de errores y tratándolos con una función definida por el usuario:

<?php
// función de gestión de errores
function miGestorDeErrores($errno$errstr$errfile$errline)
{
    if (!(
error_reporting() & $errno)) {
        
// Este código de error no está incluido en error_reporting
        
return;
    }

    switch (
$errno) {
    case 
E_USER_ERROR:
        echo 
"<b>Mi ERROR</b> [$errno$errstr<br />\n";
        echo 
"  Error fatal en la línea $errline en el archivo $errfile";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Abortando...<br />\n";
        exit(
1);
        break;

    case 
E_USER_WARNING:
        echo 
"<b>Mi WARNING</b> [$errno$errstr<br />\n";
        break;

    case 
E_USER_NOTICE:
        echo 
"<b>Mi NOTICE</b> [$errno$errstr<br />\n";
        break;

    default:
        echo 
"Tipo de error desconocido: [$errno$errstr<br />\n";
        break;
    }

    
/* No ejecutar el gestor de errores interno de PHP */
    
return true;
}

// función para probar el manejo de errores
function scale_by_log($vect$scale)
{
    if (!
is_numeric($scale) || $scale <= 0) {
        
trigger_error("log(x) para x <= 0 no está definido, usó: scale = $scale"E_USER_ERROR);
    }

    if (!
is_array($vect)) {
        
trigger_error("Vector de entrada incorrecto, se esperaba una matriz de valores"E_USER_WARNING);
        return 
null;
    }

    
$temp = array();
    foreach(
$vect as $pos => $valor) {
        if (!
is_numeric($valor)) {
            
trigger_error("El valor en la posición $pos no es un número, usando 0 (cero)"E_USER_NOTICE);
            
$valor 0;
        }
        
$temp[$pos] = log($scale) * $valor;
    }

    return 
$temp;
}

// establecer el gestro de errores definido por el usuario
$gestor_errores_antiguo set_error_handler("miGestorDeErrores");

// provocar algunos errores, primero definimos una matriz mixta con un elemento no numérico
echo "vector a\n";
$a = array(23"foo"5.543.321.11);
print_r($a);

// ahora generamos una segunda matriz
echo "----\nvector b - a notice (b = log(PI) * a)\n";
/* Value at position $pos is not a number, using 0 (zero) */
$b scale_by_log($aM_PI);
print_r($b);

// esto es un problema, pasamos una cadena en vez de una matriz
echo "----\nvector c - a warning\n";
/* Vector de entrada incorrecto, se esperaba una matriz de valores */
$c scale_by_log("no array"2.3);
var_dump($c); // NULL

// esto es un error crítico, log de cero o de un número negativo es indefinido
echo "----\nvector d - fatal error\n";
/* log(x) para x <= 0 no está definido, usó: scale = $scale */
$d scale_by_log($a, -2.5);
var_dump($d); // Nunca se alcanza
?>

El resultado del ejemplo sería algo similar a:

vector a
Array
(
    [0] => 2
    [1] => 3
    [2] => foo
    [3] => 5.5
    [4] => 43.3
    [5] => 21.11
)
----
vector b - a notice (b = log(PI) * a)
<b>Mi NOTICE</b> [1024] El valor en la posición 2 no es un número, usando 0 (cero)<br />
Array
(
    [0] => 2.2894597716988
    [1] => 3.4341896575482
    [2] => 0
    [3] => 6.2960143721717
    [4] => 49.566804057279
    [5] => 24.165247890281
)
----
vector c - a warning
<b>Mi WARNING</b> [512] Vector de entrada incorrecto, se esperaba una matriz de valores<br />
NULL
----
vector d - fatal error
<b>Mi ERROR</b> [256] log(x) para x <= 0 no está definido, usó: scale = -2.5<br />
  Error fatal en la línea 35 en el archivo trigger_error.php, PHP 5.2.1 (FreeBSD)<br />
Abortando...<br />

Ver también



set_exception_handler

(PHP 5)

set_exception_handler Establece una función de gestión de excepciones definida por el usuario

Descripción

callable set_exception_handler ( callable $exception_handler )

Establece el gestor de excepciones predeterminado si una excepción no es capturada dentro de un bloque try/catch. La ejecución se detendrá después de la llamada a exception_handler.

Parámetros

exception_handler

Nombre de la función a llamar cuando ocurra una excepción no capturada. Esta función debe ser definida antes de llamar a set_exception_handler(). Esta función de gestión necesita aceptar un parámetro, que será el objeto de excepción que fue lanzado.

Nota:

En su lugar se puede pasar NULL para reiniciar este gestor a su estado predeterminado.

Valores devueltos

Devuelve el nombre del gestor de excepciones definido anteriormente, o NULL en caso de error. Si no se definió un gestor anterior también devolverá NULL. Si se le pasa NULL, reiniciando el gestor a su estado predeterminado, devuelve TRUE.

Ejemplos

Ejemplo #1 Ejemplo de set_exception_handler()

<?php
function gestor_excepciones($excepción) {
  echo 
"Excepción no capturada: " $excepción->getMessage(), "\n";
}

set_exception_handler('gestor_excepciones');

throw new 
Exception('Excepción No Capturada');
echo 
"No Ejecutado\n";
?>

Ver también



trigger_error

(PHP 4 >= 4.0.1, PHP 5)

trigger_errorGenerar un mensaje error/warning/notice de nivel de usuario

Descripción

bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )

Se usa para provocar una condición de error de usuario, se puede utilizar junto con el gestor de errores interno o con una función definida por el usuario que ha sido establecida como el nuevo gestor de errores (set_error_handler()).

Esta función es útil cuando se necesita generar una respuesta en particular a una excepción en tiempo de ejecución.

Parámetros

error_msg

El mensaje de error designado para este error. Está limitado a 1024 caracteres de longitud. Cualquier carácter más allá de los 1024 será truncado.

error_type

El tipo de error designado para este error. Sólo funciona con la familia de constantes E_USER, y por defecto es E_USER_NOTICE.

Valores devueltos

Esta función devuelve FALSE si se especifica un error_type erróneo, si no TRUE.

Ejemplos

Ejemplo #1 Ejemplo de trigger_error()

Véase set_error_handler() para un ejemplo más extenso.

<?php
if ($divisor == 0) {
    
trigger_error("No se puede dividir por cero"E_USER_ERROR);
}
?>

Notas

Advertencia

Las entidades HTML en error_msg no son escapadas. Use htmlentities() en el mensaje si el error se va a mostrar en un navegador.

Ver también



user_error

(PHP 4, PHP 5)

user_errorAlias de trigger_error()

Descripción

Esta función es un alias de: trigger_error().


Tabla de contenidos




Soporte similar a los archivos htaccess para todos los SAPIs


Introducción

La extensión htscanner proporciona el uso de archivos similares a htaccess en la configuración de PHP por directorio, como si tratase de los archivos htaccess de Apache. Esto es útil con fastcgi (ISS5/6/7, lighttpd, etc.).



Instalación/Configuración

Tabla de contenidos


Requerimientos

PHP versión 5.2.0 o superior.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/htscanner



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración de htscanner
Nombre Por defecto Cambiable Changelog
htscanner.config_file ".htscanner" PHP_INI_SYSTEM  
htscanner.default_docroot "/" PHP_INI_SYSTEM  
htscanner.default_ttl "300" PHP_INI_SYSTEM  
htscanner.stop_on_error "Off" PHP_INI_SYSTEM  
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

htscanner.config_file string

Nombre para el archivo de configuración.

htscanner.default_docroot string

Documentación de root por omisión.

htscanner.default_ttl int

Tiempo de cache para la configuración de los datos, en segundos.

htscanner.stop_on_error int

Parar los errores (parse error, no puede ser establecido en ini).



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.





Visor de la jerarquía de inclusión


Introducción

Hace un seguimiento y copia la jerarquía de las inclusiones de archivos y la herencia de clases en tiempo de ejecución.

Los archivos pueden haber sido incluidos usando include, include_once, require, o require_once.

Las dependencias de la herencia de clases también son comunicadas.



Instalación/Configuración

Tabla de contenidos


Requerimientos

PHP versión 5.1.0 o posterior.

El archivo gengraph.php incluido utiliza la biblioteca » graphviz, aunque no es necesaria.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/inclued



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración de inclued
Nombre Por defecto Cambiable Historial de cambios
inclued.enabled Off PHP_INI_SYSTEM  
inclued.dumpdir NULL PHP_INI_SYSTEM  
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

inclued.enabled bool

Si habilitar o no inclued.

inclued.dumpdir string

Ubicación (ruta) del directorio que almacena archivos inclued. Si está establecido, cada petición de PHP creará un archivo. Estos archivos son versiones serializadas de lo que inclued_get_data() produciría, por lo que pueden ser deserializados con unserialize().

Precaución

Ya que cada petición crea un archivo, ¡este directorio se puede llenar rápidamente!



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

Esta extensión no tiene ninguna constante definida.



Ejemplos

Tabla de contenidos


Ejemplo que implementa inclued en una aplicación

Este ejemplo muestra el proceso de implementar inclued en una apliación existente, viendo los resultados.

Ejemplo #1 Obtener la información dentro de la aplicación misma de PHP (función)

<?php
// Archivo donde almacenar la información de inclued
$fp fopen('/tmp/wp.ser''w');
if (
$fp) {
    
$clue inclued_get_data();
    if (
$clue) {
        
fwrite($fpserialize($clue));
    }
    
fclose($fp);
}
?>

Ahora que existe alguna información es hora de hacer que tenga sentido en la forma de un gráfico. La extension inclued incluye un archivo PHP llamado gengraph.php que crea un archivo dot que requiere la biblioteca » graphviz. Sin embargo, en esta forma no se requiere.

Ejemplo #2 Ejemplo de uso de gengraph.php

Este ejemplo crea una imagen llamada inclued.png que muestra la información de inclued.

# Primero, creamos el archivo dot
$ php graphviz.php -i /tmp/wp.ser -o wp.dot

# Lo siguiente, creamos la imagen
$ dot -Tpng -o inclued.png wp.dot

Ejemplo #3 Listar información mediante volcados (configuración)

Cuando se usa la directiva inclued.dumpdir, los archivos (incluidos rastros) son volcados con cada petición. Aquí hay una manera de listar esos archivos, y deserializarlos (unserialize()).

<?php
$ruta 
ini_get('inclued.dumpdir');
if (
$ruta && is_dir($ruta)) {

    echo 
"Ruta: $ruta"PHP_EOL;

    
$inclues = new GlobIterator($ruta DIRECTORY_SEPARATOR 'inclued*');

    if (
$inclues->count() === 0) {
        echo 
'No hay rastros hoy'PHP_EOL;
        exit;
    }

    foreach (
$inclues as $inclue) {

        echo 
'Archivo inclued: '$inclue->getFilename(), PHP_EOL;

        
$data file_get_contents($inclue->getPathname());
        if (
$data) {
            
$inc unserialize($data);
            echo 
' -- nombre de archivo: '$inc['request']['SCRIPT_FILENAME'], PHP_EOL;
            echo 
' -- número de inclusiones: 'count($inc['includes']), PHP_EOL;
        }
        echo 
PHP_EOL;
    }
} else {
    echo 
'Hoy estoy lleno de rastros.'PHP_EOL;
}
?>

El resultado del ejemplo sería algo similar a:

Ruta: /tmp/inclued
Archivo inclued: inclued.56521.1
 -- nombre de archivo: /Users/philip/test.php
 -- número de inclusiones: 1

Archivo inclued: inclued.56563.1
 -- nombre de archivo: /tmp/none.php
 -- número de inclusiones: 0

Archivo inclued: inclued.56636.1
 -- nombre de archivo: /tmp/three.php
 -- número de inclusiones: 3




Funciones de inclued


inclued_get_data

(PECL inclued >= 0.1.0)

inclued_get_dataObtener la información de inclued

Descripción

array inclued_get_data ( void )

Obtiene la información de inclued.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

La información de inclued.

Ejemplos

Ejemplo #1 Ejemplo de inclued_get_data()

Véase la sección ejemplos de inclued para obtener maneras de crear gráficos con esta información.

<?php 
include 'x.php';

$clue inclued_get_data();

print_r($clue);
?>

El resultado del ejemplo sería algo similar a:

Array
(
  [includes] => Array
    (
      [0] => Array
        (
          [operation] => include
          [op_type] => 2
          [filename] => x.php
          [opened_path] => /tmp/x.php
          [fromfile] => /tmp/z.php
          [fromline] => 2
        )
    )
)

Ver también


Tabla de contenidos




Memtrack


Introducción

El propósito de esta extensión es detectar los scripts y las funciones más ávidos de memoria.

memtrack rastrea el consumo de memoria de los scripts de PHP y produce informes (warnings) cuando el consumo alcanza ciertos niveles establecidos por el usuario. Esto se lleva a cabo reemplazando la función ejecutora predeterminada por una función especial que compara el uso de memoria antes y después de ejecutar el ejecutor original - de esta manera se puede indicar cuánto ha cambiado el uso de memoria durante la ejecución de la parte actual del código.

El Motor Zend ejecuta su ejecutor para cada matriz de código de operaciones (op_array), que normalmente significa una función, un script plano, y tal, por lo que memtrack no tiene ningún efecto notable en el rendimiento.

memtrack no proporciona ninguna función, sólo existen directivas INI que permiten configurar la forma de su funcionamiento.

Advertencia

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombre de sus funciones y en definitiva TODO lo documentado sobre esta extensión, puede cambiar en una futura versión de PHP SIN AVISO. La advertencia queda hecha, y utilizar esta extensión queda bajo su propia responsabilidad.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/memtrack



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de Memtrack
Nombre Por defecto Cambiable
memtrack.enabled "0" PHP_INI_SYSTEM
memtrack.soft_limit "0" PHP_INI_ALL
memtrack.hard_limit "0" PHP_INI_ALL
memtrack.vm_limit "0" PHP_INI_ALL
memtrack.ignore_functions "" PHP_INI_SYSTEM
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

memtrack.enabled boolean

Habilita o deshabilita la extensión. El valor predeterminado es 0, es decir, deshabilitado.

memtrack.soft_limit int

Límite suave de memoria.

La extensión verifica el consumo de memoria antes y después de la ejecución de un op_array y produce una advertencia si la diferencia entre los dos valores es igual o mayor que el límite suave, pero sólo si la función no es ignorada.

Al establecer esta opción a 0 también deshabilita las advertencias suaves y duras. El valor predeterminado es 0, es decir, no se producen advertencias.

memtrack.hard_limit int

Límite duro de memoria.

La extensión verifica el consumo de memoria antes y después de la ejecución de un op_array y produce una advertencia si la diferencia entre los dos valores es igual o mayor que el límite duro, incluso si la función es ignorada. EStablecer esta opción a 0 deshabilita las advertencias de límite duro completamente. El valor predeterminado es 0, es decir, no se porducen advertencias de límite duro.

memtrack.vm_limit int

Límite de memoria virtual (establecido en un proceso).

Este límite sólo se comprueba al cierre y se produce una advertencia si el valor es mayor o igual que el límite.

Esta función sólo está soportada actualmente en sistemas operativos donde está disponible la función mallinfo() (esto es, Linux).

memtrack.ignore_functions string

Una lista de funciones separada por comas o espacios en blanco que son ingoradas por soft_limit. Los valores son insensibles a mayúsculas-minúsculas, para métodos de clase use la sintasix clase::método.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Ejemplos

Tabla de contenidos


Uso básico

Ejemplo básico del uso de la extension memtrack:

Ejemplo #1 Crear una matriz grande en una función

<?php

/* /tmp/ejemplo1.php */

function foo() {
    
$a = array();
    for (
$i 0$i 10000$i++) $a[] = "test";
    return 
$a;
}
$arr foo();

?>

Ejecutar el ejemplo con el siguiente comando:

php -d memtrack.enabled=1 -d memtrack.soft_limit=1M -d memtrack.vm_limit=3M /tmp/ejemplo1.php

El resultado del ejemplo sería algo similar a:

Warning: [memtrack] [pid 26177] user function foo() executed in /tmp/ejemplo1.php on line 10 allocated 4194304 bytes in /tmp/ejemplo1.php on line 0
Warning: [memtrack] [pid 26177] virtual memory usage on shutdown: 32911360 bytes in Unknown on line 0




Output Buffering Control


Introducción

The Output Control functions allow you to control when output is sent from the script. This can be useful in several different situations, especially if you need to send headers to the browser after your script has began outputting data. The Output Control functions do not affect headers sent using header() or setcookie(), only functions such as echo and data between blocks of PHP code.

Nota:

When upgrading from PHP 4.1.x (and 4.2.x) to 4.3.x due to a bug in earlier versions you must ensure that implicit_flush is OFF in your php.ini, otherwise any output with ob_start() will not be hidden from output.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

No se requiere de ninguna instalación para utilizar estas funciones; forman parte del núcleo de PHP.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Output Control configuration options
Nombre Por defecto Cambiable Historial de cambios
output_buffering "0" PHP_INI_PERDIR  
output_handler NULL PHP_INI_PERDIR Available since PHP 4.0.4.
implicit_flush "0" PHP_INI_ALL PHP_INI_PERDIR in PHP <= 4.2.3.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

output_buffering boolean/integer

You can enable output buffering for all files by setting this directive to 'On'. If you wish to limit the size of the buffer to a certain size - you can use a maximum number of bytes instead of 'On', as a value for this directive (e.g., output_buffering=4096). As of PHP 4.3.5, this directive is always Off in PHP-CLI.

output_handler string

You can redirect all of the output of your scripts to a function. For example, if you set output_handler to mb_output_handler(), character encoding will be transparently converted to the specified encoding. Setting any output handler automatically turns on output buffering.

Nota:

You cannot use both mb_output_handler() with ob_iconv_handler() and you cannot use both ob_gzhandler() and zlib.output_compression.

Nota:

Only built-in functions can be used with this directive. For user defined functions, use ob_start().

implicit_flush boolean

FALSE by default. Changing this to TRUE tells PHP to tell the output layer to flush itself automatically after every output block. This is equivalent to calling the PHP function flush() after each and every call to print or echo and each and every HTML block.

When using PHP within an web environment, turning this option on has serious performance implications and is generally recommended for debugging purposes only. This value defaults to TRUE when operating under the CLI SAPI.

See also ob_implicit_flush().



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Ejemplos

Tabla de contenidos


Basic usage

Ejemplo #1 Output Control example

<?php

ob_start
();
echo 
"Hello\n";

setcookie("cookiename""cookiedata");

ob_end_flush();

?>

In the above example, the output from echo would be stored in the output buffer until ob_end_flush() was called. In the mean time, the call to setcookie() successfully stored a cookie without causing an error. (You can not normally send headers to the browser after data has already been sent.)




Output Control Funciones

Ver también

See also header() and setcookie().


flush

(PHP 4, PHP 5)

flushVaciar el búfer de salida

Descripción

void flush ( void )

Vacía los búferes de salida de PHP y de cualquiera que sea el motor que PHP esté usando (CGI, un servidor web, etc). Esto en efecto trata de enviar toda la salida acumulada hasta el momento al navegador del usuario.

flush() quizá no puede sobreescribir el esquema del búfer en su servidor web y no tiene efectos sobre el método de uso de búferes de su servidor web o del navegador en el lado del cliente. Por lo tanto es necesario llamar tanto a ob_flush() como a flush() para volcar los búferes de salida.

Varios servidores, especialmente en Win32, seguirán almacenando la salida de su script en búferes hasta que éste termine antes de transmitir los resultados al navegador.

Puede que algunos módulos de servidor para Apache como mod_gzip usen búferes propios que causarán que flush() no resulte en un envío inmediato de datos al cliente.

Incluso el navegador puede usar búferes de entrada antes de mostrar el resultado. Netscape, por ejemplo, almacena en búfer el texto hasta que recibe un final-de-línea o el comienzo de una etiqueta, y no renderiza las tablas hasta que la etiqueta </table> de la tabla más externa sea encontrada.

Algunas versiones de Microsoft Internet Explorer solo empezarán a mostrar la página después de que han recibido 256 bytes de salida, así que puede que sea necesario enviar espacios en blanco extra antes del volcado para lograr que se muestre la página en esos navegadores.

Valores devueltos

No devuelve ningún valor.



ob_clean

(PHP 4 >= 4.2.0, PHP 5)

ob_cleanLimpiar (eliminar) el búfer de salida

Descripción

void ob_clean ( void )

Esta función descarta los contenidos del búfer de salida.

Esta función no destruye el búfer de salida, como lo hace ob_end_clean().

Valores devueltos

No devuelve ningún valor.

Ver también

  • ob_flush() - Vaciar (enviar) el búfer de salida
  • ob_end_flush() - Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer
  • ob_end_clean() - Limpiar (eliminar) y deshabilitar los búferes de salida



ob_end_clean

(PHP 4, PHP 5)

ob_end_cleanLimpiar (eliminar) y deshabilitar los búferes de salida

Descripción

bool ob_end_clean ( void )

Esta función descarta los contenidos del búfer de salida en cola y lo deshabilita. Si desea continuar procesando los contenidos del búfer debe llamar ob_get_contents() antes de ob_end_clean() ya que los contenidos del búfer son descartados cuando se llama ob_end_clean().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. Entre las posibles razones de fallo se encuentra llamar la función sin un búfer activo, o que por algún motivo no se pueda eliminar un búfer (posible en el caso de búferes especiales).

Errores/Excepciones

Si la función falla, genera un error de nivel E_NOTICE.

Historial de cambios

Versión Descripción
4.2.0 El valor de retorno booleano fue agregado.

Ejemplos

El siguiente ejemplo muestra una forma sencilla de deshacerse de todos los búferes de salida:

Ejemplo #1 Ejemplo de ob_end_clean()

<?php
ob_start
();
echo 
'Texto que no será mostrado.';
ob_end_clean();
?>

Ver también



ob_end_flush

(PHP 4, PHP 5)

ob_end_flushVolcar (enviar) el búfer de salida y deshabilitar el uso del búfer

Descripción

bool ob_end_flush ( void )

Esta función enviará los contenidos del búfer de salida en cola (si existe) y deshabilita este búfer. Si desea procesar los contenidos del búfer es necesario que llame ob_get_contents() antes de ob_end_flush() ya que los contenidos del búfer son descartados después de llamar ob_end_flush().

Nota: Esta función es similar a ob_get_flush(), excepto que ob_get_flush() devuelve el búfer como una cadena.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. Entre las posibles razones de fallo se encuentra llamar la función sin un búfer activo, o que por algún motivo el búfer no pueda ser eliminado (posible en el caso de búferes especiales).

Errores/Excepciones

Si la función falla, genera un error de nivel E_NOTICE.

Historial de cambios

Versión Descripción
4.2.0 El valor de retorno booleano fue agregado.

Ejemplos

Ejemplo #1 Ejemplo de ob_end_flush()

El siguiente ejemplo muestra una forma sencilla de volcar y finalizar todos los búferes:

<?php
  
while (@ob_end_flush());
?>

Ver también

  • ob_start() - Turn on output buffering
  • ob_get_contents() - Devolver el contenido del búfer de salida
  • ob_get_flush() - Volcar el búfer de salida, devolverlo como una cadena y deshabilitar el uso de búferes de salida
  • ob_flush() - Vaciar (enviar) el búfer de salida
  • ob_end_clean() - Limpiar (eliminar) y deshabilitar los búferes de salida



ob_flush

(PHP 4 >= 4.2.0, PHP 5)

ob_flushVaciar (enviar) el búfer de salida

Descripción

void ob_flush ( void )

Esta función enviará los contenidos del búfer de salida (si los hay). Si desea continuar procesando los contenidos del búfer, tiene que llamar ob_get_contents() antes de ob_flush(), ya que los contenidos del búfer son descartados luego de que la función ob_flush() es llamada.

Esta función no destruye el búfer de salida, como lo hace ob_end_flush().

Valores devueltos

No devuelve ningún valor.

Ver también

  • ob_get_contents() - Devolver el contenido del búfer de salida
  • ob_clean() - Limpiar (eliminar) el búfer de salida
  • ob_end_flush() - Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer
  • ob_end_clean() - Limpiar (eliminar) y deshabilitar los búferes de salida



ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_cleanObtener los contenidos del búfer actual y eliminar el búfer de salida actual

Descripción

string ob_get_clean ( void )

Obtiene los contenidos del búfer actual y elimina el búfer de salida actual.

ob_get_clean() básicamente ejecuta tanto ob_get_contents() como ob_end_clean().

Valores devueltos

Devuelve los contenidos del búfer de salida y finaliza el control de salida mediante búferes. Si el control de salida con búferes no está activo, entonces se devuelve FALSE.

Ejemplos

Ejemplo #1 Un ejemplo simple de ob_get_clean()

<?php

ob_start
();

echo 
"Hola Mundo";

$salida ob_get_clean();
$salida strtolower($salida);

var_dump($salida);
?>

El resultado del ejemplo sería:


string(10) "hola mundo"

Ver también



ob_get_contents

(PHP 4, PHP 5)

ob_get_contentsDevolver el contenido del búfer de salida

Descripción

string ob_get_contents ( void )

Obtiene los contenidos del búfer de salida, sin borrarlo.

Valores devueltos

Devolverá los contenidos del búfer de salida o FALSE, si no está activo el uso del búfer de salida.

Ejemplos

Ejemplo #1 Un ejemplo sencillo de ob_get_contents()

<?php

ob_start
();

echo 
"Hola ";

$salida1 ob_get_contents();

echo 
"Mundo";

$salida2 ob_get_contents();

ob_end_clean();

var_dump($salida1$salida2);
?>

El resultado del ejemplo sería:

string(5) "Hola "
string(10) "Hola Mundo"

Ver también



ob_get_flush

(PHP 4 >= 4.3.0, PHP 5)

ob_get_flushVolcar el búfer de salida, devolverlo como una cadena y deshabilitar el uso de búferes de salida

Descripción

string ob_get_flush ( void )

ob_get_flush() vuelca el búfer de salida, lo devuelve como una cadena y deshabilita el uso de búferes de salida.

Nota: Esta función es similar a ob_end_flush(), excepto que esta función devuelve el búfer como una cadena.

Valores devueltos

Devuelve el búfer de salida o FALSE si el uso de búferes no está activo.

Ejemplos

Ejemplo #1 Ejemplo de ob_get_flush()

<?php
//usando output_buffering=On
print_r(ob_list_handlers());

//guardar búfer en un archivo
$bufer ob_get_flush();
file_put_contents('bufer.txt'$bufer);

print_r(ob_list_handlers());
?>

El resultado del ejemplo sería:

Array
(
    [0] => default output handler
)
Array
(
)

Ver también



ob_get_length

(PHP 4 >= 4.0.2, PHP 5)

ob_get_lengthDevolver la longitud del búfer de salida

Descripción

int ob_get_length ( void )

Esta función devolverá la longitud de los contenidos en el búfer de salida.

Valores devueltos

Devuelve la longitud de los contenidos del búfer de salida o FALSE si no está activo el uso de búferes de salida.

Ejemplos

Ejemplo #1 Un ejemplo sencillo de ob_get_length()

<?php

ob_start
();

echo 
"Hola ";

$lon1 ob_get_length();

echo 
"Mundo";

$lon2 ob_get_length();

ob_end_clean();

echo 
$lon1 ", ." $lon2;
?>

El resultado del ejemplo sería:

5, 10

Ver también



ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_levelDevolver el nivel de anidamiento del mecanismo de búferes de salida

Descripción

int ob_get_level ( void )

Devuelve el nivel de anidamiento del mecanismo de búferes de salida.

Valores devueltos

Devuelve el nivel de gestores de búferes de control anidados o cero si el uso de búferes de salida se encuentra desactivado.

Ver también



ob_get_status

(PHP 4 >= 4.2.0, PHP 5)

ob_get_statusObtener el status de los búferes de salida

Descripción

array ob_get_status ([ bool $full_status = FALSE ] )

ob_get_status() devuelve información sobre el búfer de salida de nivel superior, o sobre todos los niveles activos de búferes de salida si status_completo es definido como TRUE.

Parámetros

full_status

TRUE para devolver todos los niveles de búferes de salida activos. Si su valor es FALSE o no es definido, solo es devuelto el nivel más alto de búferes de salida.

Valores devueltos

Si esta función es llamada sin es parámetro status_completo, o con status_completo = FALSE, una simple matriz con los siguientes elementos es devuelta:

Array
(
    [level] => 2
    [type] => 0
    [status] => 0
    [name] => URL-Rewriter
    [del] => 1
)
Resultados simples de ob_get_status()
Clave:level
Valor:Nivel de anidamiento de la salida
Clave:type
Valor:PHP_OUTPUT_HANDLER_INTERNAL (0) o PHP_OUTPUT_HANDLER_USER (1)
Clave:status
Valor:Un valor entre PHP_OUTPUT_HANDLER_START (0), PHP_OUTPUT_HANDLER_CONT (1) o PHP_OUTPUT_HANDLER_END (2)
Clave:name
Valor:Nombre del gestor de salida activo, o 'default output handler' si no hay uno definido
Clave:del
Valor:Bandera de borrado, tal y como se define por ob_start()

Si se llama con status_completo = TRUE, se devuelve una matriz con un elemento por cada nivel de búfer de salida activo. El nivel de salida es usado como la clave de la matriz de nivel superior, y cada elemento como tal es otra matriz que contiene información de status sobre un nivel de salida activo.

Array
(
    [0] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 1
            [status] => 0
            [name] => default output handler
            [del] => 1
        )

    [1] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 0
            [buffer_size] => 0
            [status] => 0
            [name] => URL-Rewriter
            [del] => 1
        )

)

La salida completa contiene los siguientes elementos adicionales:

Resultados completos de ob_get_status()
Clave:chunk_size
Valor:Tamaño de segmento, tal y como se define en ob_start()
Clave:size
Valor:...
Clave:blocksize
Valor:...

Ver también



ob_gzhandler

(PHP 4 >= 4.0.4, PHP 5)

ob_gzhandlerob_start callback function to gzip output buffer

Descripción

string ob_gzhandler ( string $buffer , int $mode )

ob_gzhandler() is intended to be used as a callback function for ob_start() to help facilitate sending gz-encoded data to web browsers that support compressed web pages. Before ob_gzhandler() actually sends compressed data, it determines what type of content encoding the browser will accept ("gzip", "deflate" or none at all) and will return its output accordingly. All browsers are supported since it's up to the browser to send the correct header saying that it accepts compressed web pages. If a browser doesn't support compressed pages this function returns FALSE.

Parámetros

buffer

mode

Valores devueltos

Historial de cambios

Versión Descripción
4.0.5 The mode parameter was added.

Ejemplos

Ejemplo #1 ob_gzhandler() example

<?php

ob_start
("ob_gzhandler");

?>
<html>
<body>
<p>This should be a compressed page.</p>
</body>
</html>

Notas

Nota:

ob_gzhandler() requires the zlib extension.

Nota:

You cannot use both ob_gzhandler() and zlib.output_compression. Also note that using zlib.output_compression is preferred over ob_gzhandler().

Ver también

  • ob_start() - Turn on output buffering
  • ob_end_flush() - Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer



ob_implicit_flush

(PHP 4, PHP 5)

ob_implicit_flushHabilitar/deshabilitar el volcado implícito

Descripción

void ob_implicit_flush ([ int $flag = true ] )

ob_implicit_flush() habilitará o deshabilitará el volcado implícito. El volcado implícito resultará en una operación de volcado después de cada llamada que produzca salida, de modo que no son necesarias las llamadas explícitas a flush().

Parámetros

flag

TRUE para habilitar el volcado implícito, FALSE de lo contrario.

Valores devueltos

No devuelve ningún valor.

Ver también

  • flush() - Vaciar el búfer de salida
  • ob_start() - Turn on output buffering
  • ob_end_flush() - Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer



ob_list_handlers

(PHP 4 >= 4.3.0, PHP 5)

ob_list_handlersListar todos los gestores de salida en uso

Descripción

array ob_list_handlers ( void )

Lista todos los gestores de salida en uso.

Valores devueltos

Esta función devolverá una matriz con los gestores de salida en uso (si existen). Si output_buffering está habilitado o una función anónima fue usada con ob_start(), ob_list_handlers() devolverá "default output handler" (gestor de salida predeterminado).

Ejemplos

Ejemplo #1 Ejemplo de ob_list_handlers()

<?php
//usando output_buffering=On
print_r(ob_list_handlers());
ob_end_flush();

ob_start("ob_gzhandler");
print_r(ob_list_handlers());
ob_end_flush();

// funciones anónimas
ob_start(create_function('$cadena''return $cadena;'));
print_r(ob_list_handlers());
ob_end_flush();
?>

El resultado del ejemplo sería:

Array
(
    [0] => default output handler
)

Array
(
    [0] => ob_gzhandler
)

Array
(
    [0] => default output handler
)

Ver también

  • ob_end_clean() - Limpiar (eliminar) y deshabilitar los búferes de salida
  • ob_end_flush() - Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer
  • ob_get_flush() - Volcar el búfer de salida, devolverlo como una cadena y deshabilitar el uso de búferes de salida
  • ob_start() - Turn on output buffering



ob_start

(PHP 4, PHP 5)

ob_startTurn on output buffering

Descripción

bool ob_start ([ callable $output_callback [, int $chunk_size = 0 [, bool $erase = true ]]] )

This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer.

The contents of this internal buffer may be copied into a string variable using ob_get_contents(). To output what is stored in the internal buffer, use ob_end_flush(). Alternatively, ob_end_clean() will silently discard the buffer contents.

Advertencia

Some web servers (e.g. Apache) change the working directory of a script when calling the callback function. You can change it back by e.g. chdir(dirname($_SERVER['SCRIPT_FILENAME'])) in the callback function.

Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.

Parámetros

output_callback

An optional output_callback function may be specified. This function takes a string as a parameter and should return a string. The function will be called when the output buffer is flushed (sent) or cleaned (with ob_flush(), ob_clean() or similar function) or when the output buffer is flushed to the browser at the end of the request. When output_callback is called, it will receive the contents of the output buffer as its parameter and is expected to return a new output buffer as a result, which will be sent to the browser. If the output_callback is not a callable function, this function will return FALSE.

If the callback function has two parameters, the second parameter is filled with a bit-field consisting of PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT and PHP_OUTPUT_HANDLER_END.

If output_callback returns FALSE original input is sent to the browser.

The output_callback parameter may be bypassed by passing a NULL value.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() may not be called from a callback function. If you call them from callback function, the behavior is undefined. If you would like to delete the contents of a buffer, return "" (a null string) from callback function. You can't even call functions using the output buffering functions like print_r($expression, true) or highlight_file($filename, true) from a callback function.

Nota:

In PHP 4.0.4, ob_gzhandler() was introduced to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler() determines what type of content encoding the browser will accept and will return its output accordingly.

chunk_size

If the optional parameter chunk_size is passed, the buffer will be flushed after any output call which causes the buffer's length to equal or exceed chunk_size. The default value 0 means that the output function will only be called when the output buffer is closed.

Prior to PHP 5.4.0, the value 1 was a special case value that set the chunk size to 4096 bytes.

erase

If the optional parameter erase is set to FALSE, the buffer will not be deleted until the script finishes. This causes that flushing and cleaning functions would issue a notice and return FALSE if called.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.4.0 A chunk size of 1 now results in chunks of 1 byte being sent to the output buffer.
4.3.2 This function was changed to return FALSE in case the passed output_callback can not be executed.
4.2.0 Added the erase parameter.

Ejemplos

Ejemplo #1 User defined callback function example

<?php

function callback($buffer)
{
  
// replace all the apples with oranges
  
return (str_replace("apples""oranges"$buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

El resultado del ejemplo sería:

<html>
<body>
<p>It's like comparing oranges to oranges.</p>
</body>
</html>

Ver también



output_add_rewrite_var

(PHP 4 >= 4.3.0, PHP 5)

output_add_rewrite_varAdd URL rewriter values

Descripción

bool output_add_rewrite_var ( string $name , string $value )

This function adds another name/value pair to the URL rewrite mechanism. The name and value will be added to URLs (as GET parameter) and forms (as hidden input fields) the same way as the session ID when transparent URL rewriting is enabled with session.use_trans_sid. Please note that absolute URLs (http://example.com/..) aren't rewritten.

This function's behavior is controlled by the url_rewriter.tags php.ini parameter.

Nota: Calling this function will implicitly start output buffering if it is not active already.

Parámetros

name

The variable name.

value

The variable value.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 output_add_rewrite_var() example

<?php
output_add_rewrite_var
('var''value');

// some links
echo '<a href="file.php">link</a>
<a href="http://example.com">link2</a>'
;

// a form
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>'
;

print_r(ob_list_handlers());
?>

El resultado del ejemplo sería:

<a href="file.php?var=value">link</a>
<a href="http://example.com">link2</a>

<form action="script.php" method="post">
<input type="hidden" name="var" value="value" />
<input type="text" name="var2" />
</form>

Array
(
    [0] => URL-Rewriter
)

Ver también



output_reset_rewrite_vars

(PHP 4 >= 4.3.0, PHP 5)

output_reset_rewrite_varsReestablecer los valores del mecanismo de re-escritura de URLs

Descripción

bool output_reset_rewrite_vars ( void )

Esta función reestablece el mecanismo de re-escritura de URLs y remueve todas las variables de re-escritura definidas previamente por la función output_add_rewrite_var() o el mecanismo de sesiones (si session.use_trans_sid fue definido en session_start()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de output_reset_rewrite_vars()

<?php
session_start
();
output_add_rewrite_var('var''valor');

echo 
'<a href="archivo.php">enlace</a>';
ob_flush();

output_reset_rewrite_vars();
echo 
'<a href="archivo.php">enlace</a>';
?>

El resultado del ejemplo sería:

<a href="archivo.php?PHPSESSID=xxx&var=valor">enlace</a>
<a href="archivo.php">enlace</a>

Ver también


Tabla de contenidos

  • flush — Vaciar el búfer de salida
  • ob_clean — Limpiar (eliminar) el búfer de salida
  • ob_end_clean — Limpiar (eliminar) y deshabilitar los búferes de salida
  • ob_end_flush — Volcar (enviar) el búfer de salida y deshabilitar el uso del búfer
  • ob_flush — Vaciar (enviar) el búfer de salida
  • ob_get_clean — Obtener los contenidos del búfer actual y eliminar el búfer de salida actual
  • ob_get_contents — Devolver el contenido del búfer de salida
  • ob_get_flush — Volcar el búfer de salida, devolverlo como una cadena y deshabilitar el uso de búferes de salida
  • ob_get_length — Devolver la longitud del búfer de salida
  • ob_get_level — Devolver el nivel de anidamiento del mecanismo de búferes de salida
  • ob_get_status — Obtener el status de los búferes de salida
  • ob_gzhandler — ob_start callback function to gzip output buffer
  • ob_implicit_flush — Habilitar/deshabilitar el volcado implícito
  • ob_list_handlers — Listar todos los gestores de salida en uso
  • ob_start — Turn on output buffering
  • output_add_rewrite_var — Add URL rewriter values
  • output_reset_rewrite_vars — Reestablecer los valores del mecanismo de re-escritura de URLs



Sobrecarga de propiedades de objetos y llamadas a métodos


Introducción

El propósito de esta extensión es pertimir la sobrecarga de acceso a las propiedades de un objeto y llamádas a métodos. Sólo está definida una función en esta extensión, overload(), la cuál toma el nombre de la clase que debería tener esta funcionalidad habilitada. La clase nombrada tiene que definir métodos apropiados si se quiere tener esta funcionalidad: __get(), __set() y __call() respectivamente para obtener/establecer una propiedad, o llamar a un método. Esta manera de sobrecarga puede ser selectiva. Dentro de estas funciones de gestión la sobrecarga está deshabilitada, por lo que se puede acceder a la propiedades del objeto de forma normal.

Advertencia

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombre de sus funciones y en definitiva TODO lo documentado sobre esta extensión, puede cambiar en una futura versión de PHP SIN AVISO. La advertencia queda hecha, y utilizar esta extensión queda bajo su propia responsabilidad.

Advertencia

Esta extensión no es parte de PHP 5. PHP 5 soporta __get(), __set() y __call() de forma nativa. Véase la página Sobrecarga en PHP 5 para más información.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Para usar estas funciones se debe compilar PHP con la opción --enable-overload . Desde PHP 4.3.0 esta extensión está habilitada por defecto. Se puede deshabilitar el soporte para la sobrecarga con --disable--overload .

La versión de PHP para Windows tiene soporte nativo para esta extensión. No se requiere cargar extensiones adicionales para utilizar estas funciones.

Nota: El soporte interno para la sobrecarga está disponible con PHP 4.3.0.



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Ejemplos

Tabla de contenidos


Uso básico

Algunos ejemplos sencillos sobre el uso de la función overload():

Ejemplo #1 Sobrecargar una clase de PHP

<?php

class OO {
   var 
$a 111;
   var 
$elem = array('b' => 9'c' => 42);

   
// Método de llamada de retorno para obtener una propiedad
   
function __get($nombre_prop, &$valor_prop
   {
       if (isset(
$this->elem[$nombre_prop])) {
           
$valor_prop $this->elem[$nombre_prop];
           return 
true;
       } else {
           return 
false;
       }
   }

   
// Método de llamada de retorno para establecer una propiedad
   
function __set($nombre_prop$valor_prop
   {
       
$this->elem[$nombre_prop] = $valor_prop;
       return 
true;
   }
}

// Aquí sobrecargamos el objeto OO
overload('OO');

$o = new OO;
echo 
"\$o->a: $o->a\n"// imprime: $o->a: 111
echo "\$o->b: $o->b\n"// imprime: $o->b: 9
echo "\$o->c: $o->c\n"// imprime: $o->c: 42
echo "\$o->d: $o->d\n"// imprime: $o->d:

// añadir un nuevo elemento a la matriz $elem de OO
$o->56

// instanciar stdclass (está incluido en PHP 4)
// ¡$val no está sobrecargada!
$val = new stdclass;
$val->prop 555;

// Establecer "a" para que sea una matriz con el objeto $val en él
// Pero __set() pondrá esto en la matriz $elem
$o->= array($val);
var_dump($o->a[0]->prop);

?>




Funciones de sobrecarga de objetos


overload

(PHP 4 >= 4.3.0)

overloadHabilita la sobrecarga de una propiedad y una llamda a un método de una clase

Descripción

void overload ( string $class_name )

La función overload() habiltará la sobrecarga de una propiedad y una llamada a un método de una clase identificada mediante class_name.

Parámetros

class_name

El nombre de la clase sobrecargada, como cadena

Valores devueltos

No devuelve ningún valor.

Ejemplos

Vea un ejemplo en la sección de introducción de esta parte.


Tabla de contenidos

  • overload — Habilita la sobrecarga de una propiedad y una llamda a un método de una clase



Opciones de PHP e Información


Introducción

Estas funciones permiten obtener mucha información sobre PHP, por ej. configuración en tiempo de ejecución, extensiones en uso, versión y mucho más. También se pueden encontrar funciones para definir opciones al ejecutar PHP. Aquí se encuentra la función más conocida de PHP probablemente - phpinfo() -.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

No se requiere de ninguna instalación para utilizar estas funciones; forman parte del núcleo de PHP.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de PHP/Opciones de configuración Inf
Nombre Por defecto Cambiable Historial de cambios
assert.active "1" PHP_INI_ALL  
assert.bail "0" PHP_INI_ALL  
assert.warning "1" PHP_INI_ALL  
assert.callback NULL PHP_INI_ALL  
assert.quiet_eval "0" PHP_INI_ALL  
enable_dl "1" PHP_INI_SYSTEM Esta característica obsoleta será eliminada con certeza en el futuro.
max_execution_time "30" PHP_INI_ALL  
max_input_time "-1" PHP_INI_PERDIR Disponible desde PHP 4.3.0.
max_input_nesting_level "64" PHP_INI_PERDIR Disponible desde PHP 4.4.8. y PHP 5.2.3.
max_input_vars 1000 PHP_INI_PERDIR Available since PHP 5.3.9.
magic_quotes_gpc "1" PHP_INI_PERDIR PHP_INI_ALL en PHP <= 4.2.3. Eliminado en PHP 5.4.0
magic_quotes_runtime "0" PHP_INI_ALL Eliminado en PHP 5.4.0
zend.enable_gc "1" PHP_INI_ALL Disponible desde PHP 5.3.0.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

assert.active boolean

Activa evaluación de aserciones().

assert.bail boolean

Terminar la ejecución del script si falla una aserción.

assert.warning boolean

Lanza un PHP warning for cada aserción que falle.

assert.callback string

Función de usuario a llamar cuando fallen las aserciones.

assert.quiet_eval boolean

Usar la configuración actual de error_reporting() durante las expresiones de evaluación de aserciones. Si está habilitado, no se mostrarán errores (incondicional error_reporting(0)) durante evaluación. Si está deshabitado, se mostrarán errores según la configuración de error_reporting()

enable_dl boolean

Esta directiva es muy útil solamente en la versión PHP con el módulo Apache. Se puede activar o desactivar la carga dinámica de extensiones PHP con dl() por servidor virtual o directorio.

La razón principal para desactivar la carga dinámica es por seguridad. Con la carga dinámica, es posible ignorar todas las restricciones open_basedir. De forma predeterminada se permite la carga dinámica excepto cuando se usa safe mode. En safe mode, es imposible usar dl().

max_execution_time integer

Este valor establece el tiempo máximo en segundos que se permite ejecutar antes de que el analizador termine. Esto ayuda a prevenir que scripts mal escritos bloqueen el servidor. El valor por defecto es 30. Cuando se ejecuta PHP desde la línea de comandos el valor por defecto es 0.

El tiempo de ejecución máxima no está afectada por llamadas al sistema, operaciones de stream etc. Por favor véase la función set_time_limit() para más información.

No se puede cambiar esta opción con ini_set() cuando se ejecuta en safe mode. La única manera es desactivar safe mode o cambiando el límite en php.ini.

El servidor web puede tener otras configuraciones de tiempo de espera que quizá interrumpan la ejecución de PHP. Apache tiene la directiva Timeout y IIS tiene la función CGI timeout. Las dos de 300 segundos por omisión. Véase la documentación del servidor web para información específica.

max_input_time integer

Establece el tiempo máximo en segundos que se permite a un script analizar datos de entrada, como POST, GET. Se mide desde el momento de recepción de todos los datos en el servidor hasta el inicio de la ejecución del script.

max_input_nesting_level integer

Establece el máximo de profundidad de anidamiento para variables de entrada (p.ej. $_GET, $_POST..)

max_input_vars integer

Cuantas variables de entrada pueden ser aceptadas. El uso de esta directiva mitiga la posibilidad de ataques de denegación de servicio que utilizan colisiones de hash. Si hay más variables de entrada que las especificadas por la presente directiva, un E_WARNING es emitido, y otras variables entrada son truncadas a partir de la solicitud. Este límite sólo se aplica a cada nivel de anidamiento de un array de entrada multi-dimensional.

magic_quotes_gpc boolean
Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Establece las magic_quotes state para operaciones GPC (Get/Post/Cookie). Cuando las magic_quotes están activadas, todas las ' (comillas simples), " (comillas dobles), \ (barra invertida) y NUL's son escapados con una barra invertida de forma automática..

Nota:

En PHP 4, también las variables $_ENV son escapadas.

Nota:

Si la directiva magic_quotes_sybase también está activada sobrescribirá completamente magic_quotes_gpc. Tener las dos directivas habilitadas significa que solamente las comillas simples son escapadas como ''. Comillas dobles, barras invertidas y NUL's permanecerán igual sin ser escapadas.

Ver también get_magic_quotes_gpc()

magic_quotes_runtime boolean
Advertencia

Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.

Si magic_quotes_runtime está activado, la mayoría de funciones que devuelven datos desde cualquier tipo de recurso externo incluyendo bases de datos y ficheros de texto contendrán comillas escapadas con barras invertidas. Si magic_quotes_sybase también está habilidado, las comillas simples serán escapadas con comillas simples en lugar de barras invertidas.

Funciones afectadas por magic_quotes_runtime (no incluye funciones de PECL):

zend.enable_gc boolean

Habilita o deshabilita el colector de referencia circular.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están disponibles siempre ya que forman parte del núcleo de PHP.

Constantes predefinidas en phpcredits()
Constante Valor Descripción
CREDITS_GROUP 1 Lista de los desarrolladores del núcleo
CREDITS_GENERAL 2 Créditos generales: Diseño del lenguaje y concepto, autores de PHP y módulos SAPI.
CREDITS_SAPI 4 Lista de los módulos API para PHP y sus autores.
CREDITS_MODULES 8 Lista de los módulos de extensión para PHP y sus autores.
CREDITS_DOCS 16 Los créditos del equipo de documentación.
CREDITS_FULLPAGE 32 Normalmente se utiliza en combiación con otras opciones.Indica que una página HTML independiente debe ser mostrada incluyendo la información indicada por otras opciones.
CREDITS_QA 64 Los créditos del equipo de testers.
CREDITS_ALL -1 Todos los créditos, es equivalente a usar: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_QA CREDITS_FULLPAGE. Genera una página HTML independiente con las apropiadas etiquetas. Este es el valor por defecto.
Constantes de phpinfo()
Constante Valor Descripción
INFO_GENERAL 1 La línea de comandos de configuración, php.ini ruta, fecha del build, servidor Web, sistema y demás.
INFO_CREDITS 2 Créditos de PHP. Ver también phpcredits().
INFO_CONFIGURATION 4 Valores locales y maestros actuales para directivas PHP. Ver también ini_get().
INFO_MODULES 8 Módulos cargados y sus respectivas opciones.
INFO_ENVIRONMENT 16 Información de variables de entorno, también está disponible en $_ENV.
INFO_VARIABLES 32 Muestra todas las variables predefinidas desde EGPCS (Entorno, GET, POST, Cookie, Server).
INFO_LICENSE 64 Información de la licencia de PHP. Ver también » FAQ de la licencia.
INFO_ALL -1 Muestra todas las directivas que se han indicado hasta ahora. Este es el valor por defecto.
INI constants
Constante Valor Descripción
INI_USER 1 Sin uso
INI_PERDIR 2 Sin uso
INI_SYSTEM 4 Sin uso
INI_ALL 7 Sin uso

Constantes de aserción, estos valores se usan para definir opciones de aserción en assert_options().

Constantes assert()
Constante Opción INI Descripción
ASSERT_ACTIVE assert.active Habilita la evaluación de assert().
ASSERT_CALLBACK assert.callback Llamada de retorno a llamar en caso que falle la aserción.
ASSERT_BAIL assert.bail Terminar la ejecucción al finalizar aserciones.
ASSERT_WARNING assert.warning Genera un warning PHP por cada aserción que falle
ASSERT_QUIET_EVAL assert.quiet_eval Desactiva error_reporting durante la evaluación de expresiones de aserción.

Las siguientes constantes están disponibles únicamente si se está ejecutando el sistema operativo Windows y muestran información sobre las diferentes versiones. Esto hace posible el detectar determinadas características para poder hacer uso de ellas. Disponibles desde PHP 5.3.0.

Constantes específicas para Windows
Constante Descripción
PHP_WINDOWS_VERSION_MAJOR El número mayor de la versión de Windows, que puede tener el valor 4 (NT4/Me/98/95), 5 (XP/2003 R2/2003/2000) o 6 (Vista/2008).
PHP_WINDOWS_VERSION_MINOR El número menor de la versión de Windows, que puede tener el valor 0 (Vista/2008/2000/NT4/95), 1 (XP), 2 (2003 R2/2003/XP x64), 10 (98) o 90 (ME).
PHP_WINDOWS_VERSION_BUILD El número del build de Windows (por ejemplo, Windows Vista con SP1 sería el build número 6001)
PHP_WINDOWS_VERSION_PLATFORM La plataforma en la que PHP se está ejecutando, su valor es 2 en Windows Vista/XP/2000/NT4, Server 2008/2003 y en Windows ME/98/95 su valor es 1.
PHP_WINDOWS_VERSION_SP_MAJOR El número mayor de la versión del service pack instalado, su valor es 0 si no hay ningún service pack instalado. Por ejemplo, Windows XP con service pack 3 instalado hará que el valor sea 3.
PHP_WINDOWS_VERSION_SP_MINOR El número menor de la versión del service pack instalado, su valor es 0 si no hay ningún service pack instalado.
PHP_WINDOWS_VERSION_SUITEMASK El suitemask es una máscara de bits que puede indicar si determinadas características de Windows están instaladas, consulte la siguiente tabla para ver los diferentes valores del campo de bits.
PHP_WINDOWS_VERSION_PRODUCTTYPE Contiene el valor usado para determinar las constantes PHP_WINDOWS_NT_*. Este valor puede ser una de las constantes PHP_WINDOWS_NT_* que indica el tipo de sistema que se está usando.
PHP_WINDOWS_NT_DOMAIN_CONTROLLER El controlador de dominio
PHP_WINDOWS_NT_SERVER El servidor del sistema (ej. Server 2008/2003/2000), observe que si es un controlador de dominio será informado como PHP_WINDOWS_NT_DOMAIN_CONTROLLER.
PHP_WINDOWS_NT_WORKSTATION Es una estación de trabajo (pej. Vista/XP/2000/NT4)

Esta tabla muestra una lista de características que pueden ser comprobadas al usar la máscara de bits PHP_WINDOWS_VERSION_SUITEMASK.

Windows suitemask campos de bits
Bits Descripción
0x00000004 Los componentes de Microsoft BackOffice están instalados.
0x00000400 Windows Server 2003, Web Edition está instalado.
0x00004000 Windows Server 2003, Compute Cluster Edition está instalado.
0x00000080 Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition o Windows 2000 Datacenter Server está instalado.
0x00000002 Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, Windows 2000 Advanced Server, o Windows NT Server 4.0 Enterprise Edition está instalado.
0x00000040 Windows XP Embedded está instalado.
0x00000200 Windows Vista Home Premium, Windows Vista Home Basic, o Windows XP Home Edition está instalado.
0x00000100 Escritorio remoto habilitado, limitado a una sesión interactiva. Este valor está definido a no ser que el sistema se ejecute en modo de servidor de aplicaciones.
0x00000001 Microsoft Small Business Server fue instalado en el sistema, pero quizá ha sido actualizado a otra versión de Windows.
0x00000020 Microsoft Small Business Server está instalado con la restricción de licencia en vigor.
0x00002000 Windows Storage Server 2003 R2 o Windows Storage Server 2003 está instalado.
0x00000010 Terminal Services está instalado. Este valor siempre está definido. En caso que lo esté pero 0x00000100 no, entonces el sistema estará ejecutándose en modo de servidor de aplicaciones.
0x00008000 Windows Home Server está instalado.


Funciones de Opciones/Info de PHP


assert_options

(PHP 4, PHP 5)

assert_optionsEstablecer/obtener valores de las directivas relacionadas con las aserciones

Descripción

mixed assert_options ( int $what [, mixed $value ] )

Se utiliza para establecer el valor de las diferentes opciones de la función assert() o consultar su valor actual.

Parámetros

what

Assert Options
Opción Configuración inicial Valor predeterminado Descripción
ASSERT_ACTIVE assert.active 1 Activa la función assert()
ASSERT_WARNING assert.warning 1 Cada vez que una aserción falla se genera una advertencia
ASSERT_BAIL assert.bail 0 Termina la ejecución cuando falla una aserción
ASSERT_QUIET_EVAL assert.quiet_eval 0 Desactiva la directiva error_reporting durante la evaluación de la aserción
ASSERT_CALLBACK assert.callback (NULL) Función que se encargará de gestionar las aserciones cuando fallen

value

Nuevo valor para la directiva.

Valores devueltos

Devuelve el valor original de cualquiera de las opciones o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de assert_options()

<?php
// Esta es nuestra función manejadora 
// de los fallos en un aserción
function assert_failure()
{
    echo 
'Assert failed';
}

// Esta es nuestra función de test
function test_assert($parameter)
{
    
assert(is_bool($parameter));
}

// Establecemos nuestras propias opciones para gestionar las aserciones
// Activamos las aserciones
assert_options(ASSERT_ACTIVE,   true);
// Si una aserción falla se detiene la ejecución
assert_options(ASSERT_BAIL,     true);
// Si una aserción falla NO se genera una advertencia
assert_options(ASSERT_WARNING,  false);
// Establecemos la función 'assert_failure' como manejadora (callback) de las aserciones 
assert_options(ASSERT_CALLBACK'assert_failure');

// Creamos una aserción la cual queremos que falle
test_assert(1);

// Este código nunca se ejecuta porque ASSERT_BAIL 
// está a TRUE
echo 'Never reached';
?>

Ver también

  • assert() - Checks if assertion is FALSE



assert

(PHP 4, PHP 5)

assertChecks if assertion is FALSE

Descripción

bool assert ( mixed $assertion )

assert() will check the given assertion and take appropriate action if its result is FALSE.

If the assertion is given as a string it will be evaluated as PHP code by assert(). The advantages of a string assertion are less overhead when assertion checking is off and messages containing the assertion expression when an assertion fails. This means that if you pass a boolean condition as assertion this condition will not show up as parameter to the assertion function which you may have defined with the assert_options() function, the condition is converted to a string before calling that handler function, and the boolean FALSE is converted as the empty string.

Assertions should be used as a debugging feature only. You may use them for sanity-checks that test for conditions that should always be TRUE and that indicate some programming errors if not or to check for the presence of certain features like extension functions or certain system limits and features.

Assertions should not be used for normal runtime operations like input parameter checks. As a rule of thumb your code should always be able to work correctly if assertion checking is not activated.

The behavior of assert() may be configured by assert_options() or by .ini-settings described in that functions manual page.

The assert_options() function and/or ASSERT_CALLBACK configuration directive allow a callback function to be set to handle failed assertions.

assert() callbacks are particularly useful for building automated test suites because they allow you to easily capture the code passed to the assertion, along with information on where the assertion was made. While this information can be captured via other methods, using assertions makes it much faster and easier!

The callback function should accept three arguments. The first argument will contain the file the assertion failed in. The second argument will contain the line the assertion failed on and the third argument will contain the expression that failed (if any - literal values such as 1 or "two" will not be passed via this argument)

Parámetros

assertion

The assertion.

Valores devueltos

FALSE if the assertion is false, TRUE otherwise.

Ejemplos

Ejemplo #1 Handle a failed assertion with a custom handler

<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE1);
assert_options(ASSERT_WARNING0);
assert_options(ASSERT_QUIET_EVAL1);

// Create a handler function
function my_assert_handler($file$line$code)
{
    echo 
"<hr>Assertion Failed:
        File '
$file'<br />
        Line '
$line'<br />
        Code '
$code'<br /><hr />";
}

// Set up the callback
assert_options(ASSERT_CALLBACK'my_assert_handler');

// Make an assertion that should fail
assert('mysql_query("")');
?>

Ver también

  • assert_options() - Establecer/obtener valores de las directivas relacionadas con las aserciones



dl

(PHP 4, PHP 5)

dlCarga una extensión PHP en tiempo de ejecucción

Descripción

bool dl ( string $library )

Carga la extensión PHP dada por el parámetro library.

Utilice la función extension_loaded() para comprobar si la extensión ya está cargada o no. Funciona tanto para extensiones ya integradas en PHP o para extensiones que se han cargado dinámicamente (ya sea a través de php.ini o dl()).

Advertencia

Esta función ha sido eliminada en algunos módulos SAPI en PHP 5.3.

Parámetros

library

Este parámetro es solamente el fichero de la extensión a cargar el cual depende del sistema operativo. Por ejemplo, la extensión sockets (si se compila como librería, no como parte de PHP) Se llamará sockets.so en sistemas Unix mientras que en Windows se llamará php_sockets.dll.

El directorio desde donde la extensión será cargada también depende del sistema operativo:

En Windows - a no ser que se defina explicitamente en php.ini, la extensión será cargada por defecto desde C:\php4\extensions\ (PHP4) o C:\php5\ en (PHP 5).

Unix - a no ser que se defina en php.ini, el directorio de extensiones por defecto depende de

  • Si PHP fué compilado con la opción --enable-debug o no
  • Si PHP fué comiplado con soporte (experimental) ZTS (Zend Thread Safety) o no
  • El módulo interno actual ZEND_MODULE_API_NO (Número interno del API Zend, que es básicamente la fecha en que se produjo un cambio de versión, p.ej. 20010901)
Teniendo esto en cuenta el directorio por defecto será <install-dir>/lib/php/extensions/ <debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO, p.ej. /usr/local/php/lib/php/extensions/debug-non-zts-20010901 o /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error. Si la funcionalidad de cargar módulos no está disponible o ha sido deshabilitada (ya sea activando enable_dl off o habilitando el safe mode en php.ini) Se producirá un E_ERROR y se parará la ejecucción de PHP. Si dl() falló porque la librería especificacda no pudo cargarse a demás de FALSE se producirá un mensaje E_WARNING.

Ejemplos

Ejemplo #1 Ejemplos de dl()

<?php
// En este ejemplo se carga una extensión u otra dependiendo del sistema operativo
if (!extension_loaded('sqlite')) {
    if (
strtoupper(substr(PHP_OS03)) === 'WIN') {
        
dl('php_sqlite.dll');
    } else {
        
dl('sqlite.so');
    }
}

// O si la constante PHP_SHLIB_SUFFIX está disponible desde PHP 4.3.0
if (!extension_loaded('sqlite')) {
    
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' '';
    
dl($prefix 'sqlite.' PHP_SHLIB_SUFFIX);
}
?>

Historial de cambios

Versión Descripción
5.3.0 dl() está desactivado en algunos módulos SAPI por problemas de estabilidad. Los únicos modulos SAPI que permiten dl() son: CLI, CGI and Embed. En su lugar usar las directivas Directivas de carga de extensiones

Notas

Nota:

dl() no se soporta cuando PHP es compilado con soporte ZTS. Use en su lugar Directivas de carga de extensiones instead.

Nota:

dl() es sensible a mayúsculas en sistemas Unix.

Nota: Esta función no está disponible cuando PHP está corriendo en safe mode.

Ver también



extension_loaded

(PHP 4, PHP 5)

extension_loadedEncontrar si una extensión está cargada

Descripción

bool extension_loaded ( string $name )

Encuentra si la extensión está cargada.

Parámetros

name

El nombre de la extensión.

Es posible ver los nombres de varias extensiones usando phpinfo(), o si usted usa la versión CGI o CLI de PHP, puede usar la bandera -m para listar todas las extensiones disponibles:

$ php -m
[PHP Modules]
xml
tokenizer
standard
sockets
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

Valores devueltos

Devuelve TRUE si la extensión identificada por nombre está cargada, FALSE de lo contrario.

Ejemplos

Ejemplo #1 Ejemplo de extension_loaded()

<?php
if (!extension_loaded('gd')) {
    if (!
dl('gd.so')) {
        exit;
    }
}
?>

Historial de cambios

Versión Descripción
5.0.0 extension_loaded() usa el nombre interno de extensión para probar si una extensión determinada está disponible o no. La mayoría de nombres internos de extensión están escritos en minúsculas pero es posible que hayan extensiones disponibles que usen también letras mayúsculas. Antes de PHP 5, esta función comparaba los nombres sensible a mayúsculas.

Ver también

  • get_loaded_extensions() - Devuelve un array con los nombres de todos los módulos compilados y cargados
  • get_extension_funcs() - Devuelve una matriz con los nombres de funciones de un módulo
  • phpinfo() - Muestra información sobre la configuración de PHP
  • dl() - Carga una extensión PHP en tiempo de ejecucción
  • function_exists() - Devuelve TRUE si la función dada ha sido definida



gc_collect_cycles

(PHP 5 >= 5.3.0)

gc_collect_cyclesLas fuerzas de la colección de todos los ciclos de basura existentes

Descripción

int gc_collect_cycles ( void )

Recogida de las fuerzas de los ciclos de basura existentes.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el número de ciclos de recogida.

Ver también



gc_disable

(PHP 5 >= 5.3.0)

gc_disableDesactiva el recolector de referencia circular

Descripción

void gc_disable ( void )

Desactiva el recolector de referencia circular. zend.enable_gc a 0.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.

Ver también



gc_enable

(PHP 5 >= 5.3.0)

gc_enableActiva el colector de referencia circular

Descripción

void gc_enable ( void )

Activa el colector de referencia circular, estableciendo zend.enable_gc a 1.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.

Ver también



gc_enabled

(PHP 5 >= 5.3.0)

gc_enabledDevuelve el estado del colector de referencia circular

Descripción

bool gc_enabled ( void )

Devuelve el estado del colector de referencia circular.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE si el recolector de basura está activado, FALSE en caso contrario.

Ejemplos

Ejemplo #1 Ejemplo de gc_enabled()

<?php
if(gc_enabled()) gc_collect_cycles();
?>

Ver también



get_cfg_var

(PHP 4, PHP 5)

get_cfg_varObtiene el valor de una opción de configuración de PHP

Descripción

string get_cfg_var ( string $option )

Obtiene el valor de una opción de configuración de PHP.

Esta función no retornará información de configuración establecida cuando PHP fue compilado, o lee un fichero de configuración de Apache.

Para comprobar si el sistema está usando un fichero de configuración, intente recuperar el valor de la opción de configuración cfg_file_path. Si está disponible, un fichero de configuración está siendo utilizado.

Parámetros

option

El nombre de la opción de configuración.

Valores devueltos

Devuelve el valor actual de la variable de configuración de PHP especificada por option, o FALSE si se produce un error.

Historial de cambios

Versión Descripción
5.3.0 get_cfg_var() se fijó para ser capaz de retornar un "array" con las opciones ini.

Ver también

  • ini_get() - Devuelve el valor de una directiva de configuración
  • ini_get_all() - Obtiene todas las opciones de configuración



get_current_user

(PHP 4, PHP 5)

get_current_userObtiene el nombre del propietario del script PHP actual

Descripción

string get_current_user ( void )

Devuelve el nombre del propietario del script PHP actual.

Valores devueltos

Devuelve el nombre de usuario como un string.

Ejemplos

Ejemplo #1 get_current_user() ejemplo

<?php
echo 'Propietario script actual: ' get_current_user();
?>

El resultado del ejemplo sería algo similar a:

Propietario script actual: SYSTEM

Ver también

  • getmyuid() - Obtiene el UID del dueño del script PHP
  • getmygid() - Obtener el GID del dueño del script PHP
  • getmypid() - Obtiene el ID del proceso PHP
  • getmyinode() - Obtiene el inode del script actual
  • getlastmod() - Obtiene la hora de la última modificación de la página



get_defined_constants

(PHP 4 >= 4.1.0, PHP 5)

get_defined_constantsDevuelve un array asociativo con los nombres de todas las constantes y sus valores

Descripción

array get_defined_constants ([ bool $categorize = false ] )

Devuelve los nombres y valores de todas las constantes definidas actualmente. Esto incluye las creadas por las extensiones, así como las creadas con la función define().

Parámetros

categorize

Provoca que la función retorne un array multi-dimensional con categorias en las claves de la primera dimensión y constantes y sus valores en la segunda dimensión.

<?php
define
("MI_CONSTANTE"1);
print_r(get_defined_constants(true));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [Core] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [MI_CONSTANTE] => 1
        )

)

Valores devueltos

Historial de cambios

Versión Descripción
5.3.1 Sólo para Windows: las constantes fundamentales se clasifican en Core, previamente mhash.
5.3.0 Constantes fundamentales se clasifican en Core, antes interno. En Windows, las constantes fundamentales se clasifican en mhash.
5.2.11 El parámetro categorize ahora funciona correctamente. Anteriormente, el parámetro categorize fue interpretado como !is_null($categorize), por lo que cualquier valor distinto de NULL fuerza a las constantes a ser clasificadas.
5.0.0 El parámetro categorize fue agregado.

Ejemplos

Ejemplo #1 get_defined_constants() Ejemplo

<?php
print_r
(get_defined_constants());
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_CORE_ERROR] => 16
    [E_CORE_WARNING] => 32
    [E_COMPILE_ERROR] => 64
    [E_COMPILE_WARNING] => 128
    [E_USER_ERROR] => 256
    [E_USER_WARNING] => 512
    [E_USER_NOTICE] => 1024
    [E_ALL] => 2047
    [TRUE] => 1
)

Ver también



get_extension_funcs

(PHP 4, PHP 5)

get_extension_funcsDevuelve una matriz con los nombres de funciones de un módulo

Descripción

array get_extension_funcs ( string $module_name )

Esta función devuelve los nombres de todas las funciones definidas en el módulo indicado por nombre_modulo.

Parámetros

module_name

El nombre del módulo.

Nota:

Este parámetro debe estar en minúsculas.

Valores devueltos

Devuelve una matriz con todas las funciones, o FALSE si nombre_modulo no es una extensión válida.

Ejemplos

Ejemplo #1 Imprime las funciones XML

<?php
print_r
(get_extension_funcs("xml"));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [0] => xml_parser_create
    [1] => xml_parser_create_ns
    [2] => xml_set_object
    [3] => xml_set_element_handler
    [4] => xml_set_character_data_handler
    [5] => xml_set_processing_instruction_handler
    [6] => xml_set_default_handler
    [7] => xml_set_unparsed_entity_decl_handler
    [8] => xml_set_notation_decl_handler
    [9] => xml_set_external_entity_ref_handler
    [10] => xml_set_start_namespace_decl_handler
    [11] => xml_set_end_namespace_decl_handler
    [12] => xml_parse
    [13] => xml_parse_into_struct
    [14] => xml_get_error_code
    [15] => xml_error_string
    [16] => xml_get_current_line_number
    [17] => xml_get_current_column_number
    [18] => xml_get_current_byte_index
    [19] => xml_parser_free
    [20] => xml_parser_set_option
    [21] => xml_parser_get_option
    [22] => utf8_encode
    [23] => utf8_decode
)

Ver también



get_include_path

(PHP 4 >= 4.3.0, PHP 5)

get_include_pathObtiene la opción de configuración include_path actual

Descripción

string get_include_path ( void )

Obtiene el valor actual de la opción de configuración include_path.

Valores devueltos

Devuelve la ruta, como una cadena.

Ejemplos

Ejemplo #1 Ejemplo de get_include_path()

<?php
// Funciona a partir de PHP 4.3.0
echo get_include_path();

// Funciona en todas las versiones de PHP
echo ini_get('include_path');
?>

Ver también



get_included_files

(PHP 4, PHP 5)

get_included_filesDevuelve un array con los nombres de los archivos incluidos o requeridos

Descripción

array get_included_files ( void )

Obtiene los nombres de todos los archivos que han sido incluidos usando include, include_once, require o require_once.

Valores devueltos

Devuelve un array con los nombres de los archivos.

El script llamado originalmente es considerado un "archivo incluido", así que será listado junto con los archivos referenciados por la familia de funciones include.

Los archivos que son incluidos o requeridos múltiples veces solo aparecen una vez en el array devuelto.

Historial de cambios

Versión Descripción
4.0.1 En PHP 4.0.1 y versiones anteriores esta función asumía que los archivos requeridos finalizaban en la extensión .php; otras extensiones no serán devueltas. La array devuelto por get_included_files() era un array asociativo y solo listaba los archivos incluidos por include e include_once.

Ejemplos

Ejemplo #1 Ejemplo de get_included_files()

<?php
// Este archivo es abc.php

include 'test1.php';
include_once 
'test2.php';
require 
'test3.php';
require_once 
'test4.php';

$archivos_incluidos get_included_files();

foreach (
$archivos_incluidos as $nombre_archivo) {
    echo 
"$nombre_archivo\n";
}

?>

El resultado del ejemplo sería:

abc.php
test1.php
test2.php
test3.php
test4.php

Notas

Nota:

Los archivos incluidos usando la directiva de configuración auto_prepend_file no son incluidos en el array devuelta.

Ver también



get_loaded_extensions

(PHP 4, PHP 5)

get_loaded_extensionsDevuelve un array con los nombres de todos los módulos compilados y cargados

Descripción

array get_loaded_extensions ([ bool $zend_extensions = false ] )

Esta función devuelve los nombres de todos los módulos compilados y cargados en el intérprete de PHP.

Parámetros

zend_extensions

Sólo retorna extensiones Zend, si no, las extensiones regulares, como mysqli. El valor predeterminado es FALSE (retorna extensiones regulares).

Valores devueltos

Devuelve un array indexado de todos los nombres de los módulos.

Historial de cambios

Versión Descripción
5.2.4 Fue añadido el parámetro opcional zend_extensions

Ejemplos

Ejemplo #1 get_loaded_extensions()

<?php
print_r
(get_loaded_extensions());
?>

El resultado del ejemplo sería algo similar a:

Array
(
   [0] => xml
   [1] => wddx
   [2] => standard
   [3] => session
   [4] => posix
   [5] => pgsql
   [6] => pcre
   [7] => gd
   [8] => ftp
   [9] => db
   [10] => calendar
   [11] => bcmath
)

Ver también

  • get_extension_funcs() - Devuelve una matriz con los nombres de funciones de un módulo
  • extension_loaded() - Encontrar si una extensión está cargada
  • dl() - Carga una extensión PHP en tiempo de ejecucción
  • phpinfo() - Muestra información sobre la configuración de PHP



get_magic_quotes_gpc

(PHP 4, PHP 5)

get_magic_quotes_gpcObtiene el valor actual de configuración de magic_quotes_gpc

Descripción

bool get_magic_quotes_gpc ( void )

Devuelve el valor actual del parámetro de configuración magic_quotes_gpc

Tenga en cuenta que intentar establecer el parámetro magic_quotes_gpc no funcionará en tiempo de ejecución.

Para más información sobre magic_quotes, vea esta sección de seguridad.

Valores devueltos

Devuelve 0 si las comillas mágicas están deshabilitadas, 1 de lo contrario. O siempre devuelve FALSE a partir de PHP 5.4.0.

Historial de cambios

Versión Descripción
5.4.0 Siempre devuelve FALSE debido a que la característica de comillas mágicas ha sido eliminada de PHP.

Ejemplos

Ejemplo #1 Ejemplo de get_magic_quotes_gpc()

<?php
// Si las comillas mágicas están habilitadas
echo $_POST['apellido'];             // O\'reilly
echo addslashes($_POST['apellido']); // O\\\'reilly

// Uso en todas las versiones de PHP
if (!get_magic_quotes_gpc()) {
    
$apellido addslashes($_POST['apellido']);
}
else {
    
$apellido $_POST['apellido'];
}

// Si se está usando MySQL
$apellido mysql_real_escape_string($apellido);

echo 
$apellido// O\'reilly
$sql "INSERT INTO apellidos (apellido) VALUES ('$apellido')";
?>

Notas

Nota:

Si la directiva magic_quotes_sybase se encuentra habilitada (ON), sobrescribirá completamente magic_quotes_gpc. Así que aun cuando get_magic_quotes_gpc() devuelve TRUE, ni las comillas dobles, ni las barras invertidas o caracteres NUL serán escapados. Sólo las comillas sencillas serán escapadas. En este caso se verán de este modo: ''

Ver también



get_magic_quotes_runtime

(PHP 4, PHP 5)

get_magic_quotes_runtimeObtiene el valor de configuración activo actual de magic_quotes_runtime

Descripción

bool get_magic_quotes_runtime ( void )

Devuelve el valor de configuración activo actual de magic_quotes_runtime.

Valores devueltos

Devuelve 0 si magic_quotes_runtime está off, 1 en caso contrario. O siempre devuelve FALSE a partir de PHP 5.4.0.

Historial de cambios

Versión Descripción
5.4.0 Siempre devuelve FALSE debido a que la característica de comillas mágicas ha sido eliminada de PHP.

Ejemplos

Ejemplo #1 get_magic_quotes_runtime() ejemplo

<?php
// Comprueba si magic_quotes_runtime está activado
if(get_magic_quotes_runtime())
{
    
// Desactivar
    
set_magic_quotes_runtime(false);
}
?>

Ver también



get_required_files

(PHP 4, PHP 5)

get_required_filesAlias de get_included_files()

Descripción

Esta función es un alias de: get_included_files().



getenv

(PHP 4, PHP 5)

getenvObtiene el valor de una variable de entorno

Descripción

string getenv ( string $varname )

Obtiene el valor de una variable de entorno.

Se puede ver una lista de todas las variables de entorno usando phpinfo(). Muchas de estas variables están listadas bajo la especificación » RFC 3875, específicamente la sección 4.1, "Request Meta-Variables".

Parámetros

varname

El nombre de variable.

Valores devueltos

Devuelve el valor de la variable de entorno varname, o FALSE si la variable entorno varname no existe.

Ejemplos

Ejemplo #1 Ejemplo de getenv()

<?php
// Ejemplo de uso de getenv()
$ip getenv('REMOTE_ADDR');

// O simplemente use una Superglobal ($_SERVER o $_ENV)
$ip $_SERVER['REMOTE_ADDR'];
?>

Ver también



getlastmod

(PHP 4, PHP 5)

getlastmodObtiene la hora de la última modificación de la página

Descripción

int getlastmod ( void )

Obtiene la hora de la última modificación de la página actual.

Si está interesado en obtener la hora de la última modificación de un archivo diferente, considere el uso de filemtime().

Valores devueltos

Devuelve la hora de la última modificación de la página actual. El valor devuelto es una marca de tiempo Unix, apropiada para ser pasada a date(). Devuelve FALSE en caso de fallo.

Ejemplos

Ejemplo #1 Ejemplo de getlastmod()

<?php
// imprime p.ej. 'Ultima modificación: March 04 1998 20:43:59.'
echo "Ultima modificación: " date ("F d Y H:i:s."getlastmod());
?>

Ver también

  • date() - Dar formato a la fecha/hora local
  • getmyuid() - Obtiene el UID del dueño del script PHP
  • getmygid() - Obtener el GID del dueño del script PHP
  • get_current_user() - Obtiene el nombre del propietario del script PHP actual
  • getmyinode() - Obtiene el inode del script actual
  • getmypid() - Obtiene el ID del proceso PHP
  • filemtime() - Obtiene el momento de la última modificación de un archivo



getmygid

(PHP 4 >= 4.1.0, PHP 5)

getmygidObtener el GID del dueño del script PHP

Descripción

int getmygid ( void )

Obtiene el ID de grupo del script actual.

Valores devueltos

Devuelve el ID de grupo del script actual, o FALSE en caso de error.

Ver también



getmyinode

(PHP 4, PHP 5)

getmyinodeObtiene el inode del script actual

Descripción

int getmyinode ( void )

Obtiene el inode del script actual.

Valores devueltos

Devuelve el inodo del script actual como un entero, o FALSE en caso de error.

Ver también

  • getmygid() - Obtener el GID del dueño del script PHP
  • getmyuid() - Obtiene el UID del dueño del script PHP
  • getmypid() - Obtiene el ID del proceso PHP
  • get_current_user() - Obtiene el nombre del propietario del script PHP actual
  • getlastmod() - Obtiene la hora de la última modificación de la página



getmypid

(PHP 4, PHP 5)

getmypidObtiene el ID del proceso PHP

Descripción

int getmypid ( void )

Obtiene el ID del proceso PHP actual.

Valores devueltos

Devuelve el ID del proceso PHP actual, o FALSE si ocurre un error.

Notas

Advertencia

Los IDs de proceso no son únicos, por lo tanto son una fuente débil de entropía. Es recomendable no depender en ids de proceso en contextos sujetos a consideraciones de seguridad.

Ver también



getmyuid

(PHP 4, PHP 5)

getmyuidObtiene el UID del dueño del script PHP

Descripción

int getmyuid ( void )

Obtiene el ID de usuario para el script actual.

Valores devueltos

Devuelve el ID de usuario del script actual, o FALSE en caso de error.

Ver también



getopt

(PHP 4 >= 4.3.0, PHP 5)

getoptObtiene las opciones de la lista de argumentos de la línea de comandos

Descripción

array getopt ( string $options [, array $longopts ] )

Analiza las opciones pasadas al script.

Parámetros

options
Cada carácter de esta cadena de texto se usará como un carácter de opción y se comparará con aquellas opciones pasadas al script que comiencen con un guión simple (-). Por ejemplo, el string de opciones "x" reconocerá la opción -x. Sólo se permiten a-z, A-Z y 0-9.
longopts
Matriz de opciones. Cada elemento de este array se usará como texto de opciones y se compararán con aquellas opciones pasadas al script que comiencen con dos guiones (--). Por ejemplo, longopts tuviera un elemento con "opt", reconocería la opción --opt.

El parámetro options puede contener los siguientes elementos:

  • Caracteres individuales (no acepta valores)
  • Caracteres seguidos por dos puntos (el parámetro exije un valor)
  • Caracteres seguidos dos veces por dos puntos (valor opcional)
Los valores de opción serán el primer argumento tras el string. No importa si el valor está rodeado de espacios o no.

Nota: Los valores opcionales no aceptan un " " (espacio) como separador.

Nota:

El formato de options y de longopts es casi igual. La única diferencia es que longopts contiene un array de opciones (donde cada elemento es la opción) mientras que options contiene un string (donde cada carácter es la opción).

Valores devueltos

Esta función devolverá un array de pares opciones / argumentos, o FALSE en caso de error.

Nota:

El análisis de opciones finalizará cuando se encuentre alguna no-opción. Todo lo que haya a continuación será descartado.

Historial de cambios

Versión Descripción
5.3.0 Añadido soporte para usar "=" como separador de argumento/valor.
5.3.0 Añadido soporte para valores opcionales (especificado mediante "::").
5.3.0 El parámetro longopts está disponible en todos los sistemas.
5.3.0 Esta función ya no depende del sistema y funciona también en Windows.

Ejemplos

Ejemplo #1 Ejemplo de getopt()

<?php
$options 
getopt("f:hp:");
var_dump($options);
?>

El ejecutar el script superior con php script.php -fvalue -h se mostrará:

array(2) {
  ["f"]=>
  string(5) "value"
  ["h"]=>
  bool(false)
}

Ejemplo #2 Ejemplo 2 de getopt()

<?php
$shortopts  
"";
$shortopts .= "f:";  // Valor obligatorio
$shortopts .= "v::"// Valor opcional
$shortopts .= "abc"// Estas opciones no aceptan valores

$longopts  = array(
    
"required:",     // Valor obligatorio
    
"optional::",    // Valor opcional
    
"option",        // Sin valores
    
"opt",           // Sin valores
);
$options getopt($shortopts$longopts);
var_dump($options);
?>

Al ejecutar el script superior con php script.php -f "value for f" -v -a --required value --optional="optional value" --option se obtendrá:

array(6) {
  ["f"]=>
  string(11) "value for f"
  ["v"]=>
  bool(false)
  ["a"]=>
  bool(false)
  ["required"]=>
  string(5) "value"
  ["optional"]=>
  string(14) "optional value"
  ["option"]=>
  bool(false)
}

Ejemplo #3 Ejemplo 3 de getopt()

Pasando múltiples opciones como una

<?php
$options 
getopt("abc");
var_dump($options);
?>

Al ejecutar el script superior con php script.php -aaac se obtendrá:

array(2) {
  ["a"]=>
  array(3) {
    [0]=>
    bool(false)
    [1]=>
    bool(false)
    [2]=>
    bool(false)
  }
  ["c"]=>
  bool(false)
}

Ver también



getrusage

(PHP 4, PHP 5)

getrusageObtiene el uso de los recursos actuales

Descripción

array getrusage ([ int $who = 0 ] )

Esta es una interfaz de getrusage(2). Obtiene datos devueltos de la llamada al sistema.

Parámetros

who

Si el parámetro who es 1, getrusage será llamado con RUSAGE_CHILDREN.

Valores devueltos

Devuelve un array asociativo que contiene los datos devueltos por la llamada al sistema. Todas las entradas son accesibles mediante el uso de sus nombres de campo documentado.

Ejemplos

Ejemplo #1 getrusage() ejemplo

<?php
$dat 
getrusage();
echo 
$dat["ru_nswap"];         // número de intercambios
echo $dat["ru_majflt"];        // número de fallos de página
echo $dat["ru_utime.tv_sec"];  // tiempo de usuario utilizado (segundos)
echo $dat["ru_utime.tv_usec"]; // tiempo de usuario usado (microsegundos)
?>

Notas

Nota: Esta función no está implementada en plataformas Windows.

Ver también

  • Página principal de sistema sobre getrusage(2)



ini_alter

(PHP 4, PHP 5)

ini_alterAlias de ini_set()

Descripción

Esta función es un alias de: ini_set().



ini_get_all

(PHP 4 >= 4.2.0, PHP 5)

ini_get_allObtiene todas las opciones de configuración

Descripción

array ini_get_all ([ string $extension [, bool $details = true ]] )

Devuelve todas las opciones de configuración registradas.

Parámetros

extension

Un nombre de extensión opcional. Si se establece, la función de retornará únicamente opciones específicas para esa extensión.

details

Recupera los detalles de configuración o sólo el valor actual de cada configuración. Por omisión es TRUE (recuperar detalles).

Valores devueltos

Devuelve un array asociativo con el nombre de la directiva como la clave del array.

Cuando el parámetro details es TRUE (por omisión) el array contendrá global_value (establecido en php.ini), local_value (tal vez establecido con ini_set() o .htaccess), y access (el nivel de acceso).

Cuando el parámetro details es FALSE el valor será el valor actual de la opción.

Vea la sección del manual para obtener información sobre lo que significan los niveles de acceso.

Nota:

Es posible que una directiva tenga múltiples niveles de acceso, por lo que el access muestra los valores de máscara de bits adecuado.

Historial de cambios

Versión Descripción
5.3.0 Se añadió details.

Ejemplos

Ejemplo #1 ini_get_all() ejemplos

<?php
print_r
(ini_get_all("pcre"));
print_r(ini_get_all());
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [pcre.backtrack_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

    [pcre.recursion_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

)
Array
(
    [allow_call_time_pass_reference] => Array
        (
            [global_value] => 0
            [local_value] => 0
            [access] => 6
        )

    [allow_url_fopen] => Array
        (
            [global_value] => 1
            [local_value] => 1
            [access] => 4
        )

    ...

)

Ejemplo #2 Disabling details

<?php
print_r
(ini_get_all("pcre"false)); // Se añadió en PHP 5.3.0
print_r(ini_get_all(nullfalse)); // Se añadió en PHP 5.3.0
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [pcre.backtrack_limit] => 100000
    [pcre.recursion_limit] => 100000
)
Array
(
    [allow_call_time_pass_reference] => 0
    [allow_url_fopen] => 1
    ...
)

Ver también



ini_get

(PHP 4, PHP 5)

ini_getDevuelve el valor de una directiva de configuración

Descripción

string ini_get ( string $varname )

En caso de éxito devuelve el valor de una directiva de configuración.

Parámetros

varname

Nombre de la directiva de configuración.

Valores devueltos

Devuelve el valor de la opción de configuración como cadena en caso de éxito, o una cadena vacía para valores null. Devuelve FALSE si la opción de configuración no existe.

Ejemplos

Ejemplo #1 Unos cuantos ejemplos de la función ini_get()

<?php
/*
Dentro del php.ini tenemos las siguientes directivas junto con sus valores iniciales:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' ini_get('display_errors') . "\n";
echo 
'register_globals = ' ini_get('register_globals') . "\n";
echo 
'post_max_size = ' ini_get('post_max_size') . "\n";
echo 
'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 
'post_max_size in bytes = ' return_bytes(ini_get('post_max_size'));

function 
return_bytes($val) {
    
$val trim($val);
    
$last strtolower($val[strlen($val)-1]);
    switch(
$last) {
        
// El modificador 'G' está disponble desde PHP 5.1.0
        
case 'g':
            
$val *= 1024;
        case 
'm':
            
$val *= 1024;
        case 
'k':
            
$val *= 1024;
    }

    return 
$val;
}

?>

El resultado del ejemplo sería algo similar a:


display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

Notas

Nota: Cuando se consultan valores booleanos

El valor booleano off será devuelto como una cadena vacía o "0", mientras que el valor booleano on será devuelto será devuelto como "1". Esta función también puede devolver valores iniciales como cadenas.

Nota: Cuando se consultan valores de tamaños de memoria

Muchos valores iniciales de tamaños de memoria, tales como upload_max_filesize, están almacenados en el archivo php.ini en notación abreviada. ini_get() devolverá la cadena exacta almacenada en el archivo php.ini, y NO su valor de tipo integer equivalente. Utilizar estos valores en funciones aritméticas puede provocar resultados inesperados. El ejemplo anterior muestra una manera de convertir la notación abreviada a bytes, muy similar a cómo lo hace el código fuente de PHP.

Ver también

  • get_cfg_var() - Obtiene el valor de una opción de configuración de PHP
  • ini_get_all() - Obtiene todas las opciones de configuración
  • ini_restore() - Restablece el valor de una opción de configuración
  • ini_set() - Establecer el valor de una directiva de configuración



ini_restore

(PHP 4, PHP 5)

ini_restoreRestablece el valor de una opción de configuración

Descripción

void ini_restore ( string $varname )

Restaura una opción de configuración dado su valor original.

Parámetros

varname

El nombre de la opción de configuración.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 ini_restore() ejemplo

<?php
$setting 
'y2k_compliance';

echo 
'Valor actual \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_set($settingini_get($setting) ? 1);
echo 
'Nuevo valor \'' $setting '\': ' ini_get($setting), PHP_EOL;

ini_restore($setting);
echo 
'Valor original \'' $setting '\': ' ini_get($setting), PHP_EOL;
?>

El resultado del ejemplo sería:

Valor actual 'y2k_compliance': 1
Nuevo valor 'y2k_compliance': 0
Valor original 'y2k_compliance': 1

Ver también

  • ini_get() - Devuelve el valor de una directiva de configuración
  • ini_get_all() - Obtiene todas las opciones de configuración
  • ini_set() - Establecer el valor de una directiva de configuración



ini_set

(PHP 4, PHP 5)

ini_setEstablecer el valor de una directiva de configuración

Descripción

string ini_set ( string $varname , string $newvalue )

Establece el valor de la directiva de configuración dada. El nuevo valor establecido se mantendrá durante la ejecución del script, y se restaurará cuando acabe el mismo.

Parámetros

varname

No todas las directivas pueden ser modificadas con ini_set(). Hay una lista de todas las directivas disponibles en el siguiente apéndice.

newvalue

Nuevo valor para la directiva.

Valores devueltos

Devuelve el valor anterior en caso de éxito, FALSE en caso de error.

Ejemplos

Ejemplo #1 Definir directiva ini

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
    
ini_set('display_errors'1);
}

echo 
ini_get('display_errors');
?>

Ver también



magic_quotes_runtime

(PHP 4, PHP 5)

magic_quotes_runtimeAlias de set_magic_quotes_runtime()

Descripción

Esta función es un alias de: set_magic_quotes_runtime()



main

mainFunción main() falsa

Descripción

No existe ninguna función main(), salvo en el código fuente de PHP. En PHP 4.3.0, se introdujo un nuevo tipo de manejador de errores en el código fuente de PHP (php_error_docref). Existe una opción que permite enlazar a páginas del manual de PHP en los errores de mensaje cuando las directivas de PHP html_errors (habilitado por omisión) y docref_root (hasta PHP 4.3.2, habilitado por omisión) están habilitadas.

Algunos mensajes de error apuntan a la página del manual para la función main(), que es por lo que esta página existe. Si descubre alguna referencia a esta página, por favor » reporte un informe de error, indicando la función PHP que provocó el error que apuntó a main(), para que sea corregido y documentado.

Errores conocidos que apuntaban a main()
Nombre de la función No apunta aquí desde
include 5.1.0
include_once 5.1.0
require 5.1.0
require_once 5.1.0



memory_get_peak_usage

(PHP 5 >= 5.2.0)

memory_get_peak_usageDevuelve el máximo de memoria asignada por PHP

Descripción

int memory_get_peak_usage ([ bool $real_usage = false ] )

Devuelve el máximo de memoria, en bytes, que se ha asignado a su script PHP.

Parámetros

real_usage

Si se deja en TRUE puede obtener el tamaño real de memoria asignada por el sistema. Si no se establece o es FALSE, la memoria utilizada por emalloc() es reportada.

Valores devueltos

Devuelve el máximo de memoria en bytes.

Historial de cambios

Versión Descripción
5.2.1 Compilar con --enable-memory-limit ya no es necesario para que esta función exista.
5.2.0 se añade real_usage.

Ver también



memory_get_usage

(PHP 4 >= 4.3.2, PHP 5)

memory_get_usageDevuelve la cantidad de memoria asignada a PHP

Descripción

int memory_get_usage ([ bool $real_usage = false ] )

Devuelve la cantidad de memoria, en bytes, que actualmente se asigna a su script PHP.

Parámetros

real_usage

Debe establecer esto a TRUE para obtener el tamaño real de memoria asignada por el sistema. Si no se establece o es FALSE sólo se reportará la memoria usada por emalloc().

Valores devueltos

Devuelve la cantidad de memoria en bytes.

Historial de cambios

Versión Descripción
5.2.1 Compilar con --enable-memory-limit ya no es necesario para que exista esta función.
5.2.0 Se añadió real_usage.

Ejemplos

Ejemplo #1 A memory_get_usage() ejemplo

<?php
// Este es sólo un ejemplo, los siguientes números
// serán diferentes dependiendo de su sistema

echo memory_get_usage() . "\n"// 36640

$a str_repeat("Hello"4242);

echo 
memory_get_usage() . "\n"// 57960

unset($a);

echo 
memory_get_usage() . "\n"// 36744

?>

Ver también



php_ini_loaded_file

(PHP 5 >= 5.2.4)

php_ini_loaded_fileRecupera la ruta de acceso al archivo php.ini cargado

Descripción

string php_ini_loaded_file ( void )

Comprueba si un archivo php.ini se ha cargado, y recupera su ruta de acceso.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

La ruta de php.ini cargado, o FALSE si uno no se ha cargado.

Ejemplos

Ejemplo #1 php_ini_loaded_file() ejemplo

<?php
$inipath 
php_ini_loaded_file();

if (
$inipath) {
    echo 
'archivo php.ini cargado: ' $inipath;
} else {
    echo 
'ningún archivo php.ini ha sido cargado';
}
?>

El resultado del ejemplo sería algo similar a:

Loaded php.ini: /usr/local/php/php.ini

Ver también



php_ini_scanned_files

(PHP 4 >= 4.3.0, PHP 5)

php_ini_scanned_filesDevuelve una lista de ficheros .ini procesados del directorio adicional ini dir

Descripción

string php_ini_scanned_files ( void )

php_ini_scanned_files() devuelve una lista separada por comas de los ficheros de configuración procesados por php.ini. Estos archivos se encuentran en un directorio definido por la opción --with-config-file-scan-dir que se establece durante la compilación.

Los archivos de configuración devueltos también incluyen la ruta como se declara en la opción --with-config-file-scan-dir .

Valores devueltos

Devuelve un string separado por comas de archivos .ini en caso de éxito. Cada coma es seguido por un salto de línea. Si la directiva --with-config-file-scan-dir no fué definida, devolverá FALSE. Si se trata de establecer y el directorio estaba vacío, un string vacío será retornado. Si un archivo es irreconocible, el archivo todavía hace que se devuelva un string pero un error de PHP también dará lugar. Este error de PHP se verá tanto en tiempo de compilación y durante el uso de php_ini_scanned_files().

Ejemplos

Ejemplo #1 Un ejemplo simple para listar los archivos ini devueltos

<?php
if ($filelist php_ini_scanned_files()) {
    if (
strlen($filelist) > 0) {
        
$files explode(','$filelist);

        foreach (
$files as $file) {
            echo 
"<li>" trim($file) . "</li>\n";
        }
    }
}
?>

Ver también

  • ini_set() - Establecer el valor de una directiva de configuración
  • phpinfo() - Muestra información sobre la configuración de PHP
  • php_ini_loaded_file() - Recupera la ruta de acceso al archivo php.ini cargado



php_logo_guid

(PHP 4, PHP 5)

php_logo_guidObtiene el valor guid del logo

Descripción

string php_logo_guid ( void )

Esta función devuelve el ID que puede ser usado para desplegar el logo de PHP usando la imagen integrada. El logo es desplegado únicamente si el valor de expose_php es On.

Valores devueltos

Devuelve PHPE9568F34-D428-11d2-A769-00AA001ACF42.

Ejemplos

Ejemplo #1 Ejemplo de php_logo_guid()

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' php_logo_guid() . '" alt="¡Logo de PHP!" />';

?>

Ver también



php_sapi_name

(PHP 4 >= 4.0.1, PHP 5)

php_sapi_nameDevuelve el tipo de interfaz que hay entre PHP y el servidor

Descripción

string php_sapi_name ( void )

Devuelve una cadena en minúsculas que describe el tipo de interfaz (la API de Servidor, SAPI) que está utilizando PHP. Por ejemplo, en PHP CLI esta cadena será "cli" mientras que en Apache podría tener varios valores diferentes dependiendo de la SAPI que se utilice. Más abajo se enumeran los posibles valores.

Valores devueltos

Devuelve el tipo de interfaz, como cadena de texto en minúsculas.

Pese a no ser una lista completa, los posibles valores incluyen aolserver, apache, apache2filter, apache2handler, caudium, cgi (hasta PHP 5.3), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, y webjames.

Ejemplos

Ejemplo #1 Ejemplo de php_sapi_name()

Este ejemplo comprueba si está la cadena cgi, ya que podría darse un nombre como cgi-fcgi.

<?php
$sapi_type 
php_sapi_name();
if (
substr($sapi_type03) == 'cgi') {
    echo 
"Está usando PHP CGI\n";
} else {
    echo 
"No está usando PHP CGI\n";
}
?>

Notas

Nota: Una forma alternativa

La constante de PHP PHP_SAPI contiene el mismo valor que php_sapi_name().

Sugerencia

Posible malentendido

Podría no ser evidente cuál es la SAPI en uso, ya que, por ejemplo, en lugar de apache podría aparecer definida como apache2handler o como apache2filter.

Ver también



php_uname

(PHP 4 >= 4.0.2, PHP 5)

php_unameDevuelve información sobre el sistema operativo en que se está ejecutando PHP

Descripción

string php_uname ([ string $mode = "a" ] )

php_uname() devuelve una descripción del sistema operativo en que se está ejecutando PHP. Esta misma información se muestra en la parte superior de phpinfo(). Para obtener solamente el nombre del sistema operativo, considere el uso de la constante PHP_OS, pero tenga en mente que la constante contendrá el sistema operativo en que PHP fue compilado.

En algunos sistemas más antigos de UNIX, es posible que no se pueda determinar la información del SO actual en cuyo caso se revertirá mostrando el SO en que PHP fue compilado. Esto solo sucederá si la llamada a la libreria uname() no existe o no funciona.

Parámetros

mode

mode es un caracter simple que define qué información es devuelta:

  • 'a': Elegida por defecto. Contiene todos los modos en la secuencia "s n r v m".
  • 's': Nombre del sistema operativo. ej. FreeBSD.
  • 'n': Nombre del Host. ej. localhost.example.com.
  • 'r': Nombre de la versión liberada. ej. 5.1.2-RELEASE.
  • 'v': Información de la versión. Varia mucho entre los sistemas operativos.
  • 'm': Tipo de máquina. ej. i386.

Valores devueltos

Devuelve la descripción, como una cadena de texto.

Ejemplos

Ejemplo #1 Algúnos ejemplos de php_uname()

<?php
echo php_uname();
echo 
PHP_OS;

/* Algúnos posibles resultados:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if (strtoupper(substr(PHP_OS03)) === 'WIN') {
    echo 
'Este un servidor usando Windows!';
} else {
    echo 
'Este es un servidor que no usa Windows!';
}

?>

También existen algunas constantes PHP predefinidas que pueden ser útiles, por ejemplo:

Ejemplo #2 Algunos ejemplos de las constantes relacionadas al SO

<?php
// *nix
echo DIRECTORY_SEPARATOR// /
echo PHP_SHLIB_SUFFIX;    // so
echo PATH_SEPARATOR;      // :

// Win*
echo DIRECTORY_SEPARATOR// \
echo PHP_SHLIB_SUFFIX;    // dll
echo PATH_SEPARATOR;      // ;
?>

Ver también

  • phpversion() - Obtiene la versión de PHP
  • php_sapi_name() - Devuelve el tipo de interfaz que hay entre PHP y el servidor
  • phpinfo() - Muestra información sobre la configuración de PHP



phpcredits

(PHP 4, PHP 5)

phpcreditsImprime los créditos de PHP

Descripción

bool phpcredits ([ int $flag = CREDITS_ALL ] )

Esta función imprime la lista de créditos de los desarrolladores de PHP, módulos, etc Genera los códigos HTML apropiados para insertar la información en una página.

Parámetros

flag

Para generar una página de créditos personalizada, puede utilizar el parámetro flag.

Pre-defined phpcredits() flags
name description
CREDITS_ALL Todos los créditos, equivalente a usar: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_FULLPAGE. Genera una completa e independiente, página HTML con las etiquetas apropiadas.
CREDITS_DOCS Los créditos para el equipo de documentación
CREDITS_FULLPAGE Por lo general se utiliza en combinación con las otras flags. Indica que es independiente de la página HTML debe ser impreso con la información indicada por las otras flags.
CREDITS_GENERAL Créditos generales: Diseño y concepto del lenguaje, autores de PHP y el módulo SAPI.
CREDITS_GROUP Una lista de los desarrolladores del núcleo.
CREDITS_MODULES Una lista de los módulos de extensión para PHP, y sus autores.
CREDITS_SAPI Una lista de los módulos de servidor API para PHP, y sus autores.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Imprimir los créditos generales

<?php
phpcredits
(CREDITS_GENERAL);
?>

Ejemplo #2 Imprimir los desarrolladores principales y el grupo de documentación

<?php
phpcredits
(CREDITS_GROUP CREDITS_DOCS CREDITS_FULLPAGE);
?>

Ejemplo #3 Imprimir todos los créditos

<html>
 <head>
  <title>Mi página de créditos</title>
 </head>
 <body>
<?php
// Algún código propio
phpcredits(CREDITS_ALL CREDITS_FULLPAGE);
// algo más de código
?>
 </body>
</html>

Ver también



phpinfo

(PHP 4, PHP 5)

phpinfoMuestra información sobre la configuración de PHP

Descripción

bool phpinfo ([ int $what = INFO_ALL ] )

Muestra gran cantidad de información sobre el estado actual de PHP. Incluye información sobre las opciones de compilación y extensiones de PHP, versión de PHP, información del servidor y entrono (si se compiló como módulo), entorno PHP, versión del OS, rutas, valor de las opciones de configuración locales y generales, cabeceras HTTP y licencia de PHP.

Como cada sistema se instala diferente phpinfo() se usa comúnmente para revisar opciones de configuración y variables predefinidas disponibles en un sistema dado

phpinfo() también es una valiosa herramienta de depuración ya que contiene todos valores EGPCS (Environment, GET, POST, Cookie, Server).

Parámetros

what

El resultado de salida puede ser personalizado al pasar una o más de las siguientes constantes sumadas juntas bit a bit en el parámetro opcional what. También se pueden combinar las respectivas constantes con el operador bit a bit or.

phpinfo() opciones
Nombre(constante) Valor Descripción
INFO_GENERAL 1 La línea de configuración, ubicación de php.ini, fecha de compilación, servidor Web, sistema y más.
INFO_CREDITS 2 Créditos de PHP. Ver también phpcredits().
INFO_CONFIGURATION 4 Valores Locales y Maestros actuales de las directivas PHP. Ver también ini_get().
INFO_MODULES 8 Módulos cargados y sus respectivos parámetros Ver también get_loaded_extensions().
INFO_ENVIRONMENT 16 Información de las variables de entorno. Tambien disponibles en $_ENV.
INFO_VARIABLES 32 Muestra todas las variables predefinidas de EGPCS (Environment, GET, POST, Cookie, Server).
INFO_LICENSE 64 Información de Licencia de PHP. Ver también el » FAQ de licencia.
INFO_ALL -1 Muestra toda la información anterior

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.2.2 Se añadió la información del "Fichero de configuración cargado", mientras que anteriormente solo existía "Ruta del fichero de configuración (php.ini).

Ejemplos

Ejemplo #1 Ejemplo de phpinfo()

<?php

// Muestra toda la información, por defecto INFO_ALL
phpinfo();

// Muestra solamente la información de los módulos.
// phpinfo(8) hace exactamente lo mismo.
phpinfo(INFO_MODULES);

?>

Notas

Nota:

Partes de la información que se muestra están deshabilidadas cuando la opción de configuración expose_php está off. Incluyendo los logos de PHP y Zend y los créditos.

Nota:

phpinfo() muestra texto plano en lugar de HTML cuando se utiliza en la línea de comandos.

Ver también



phpversion

(PHP 4, PHP 5)

phpversionObtiene la versión de PHP

Descripción

string phpversion ([ string $extension ] )

Devuelve una cadena que contiene la versión del analizador de PHP en ejecución o extensión.

Parámetros

extension

Un nombre de extensión opcional.

Valores devueltos

Si el parámetro opcional extension ha sido especificado, phpversion() devuelve la versión de la extensión, o FALSE si no hay información de versión asociada o la extensión no está habilitada.

Ejemplos

Ejemplo #1 phpversion() Ejemplo básico

<?php
// Imprime ejemplo 'Versión actual de PHP: 5.3.8'
echo 'Versión actual de PHP: ' phpversion();

// Imprime ejemplo '2.0' o nada si la extensión no está habilitada
echo phpversion('tidy');
?>

Ejemplo #2 PHP_VERSION_ID Ejemplo y uso

<?php
// PHP_VERSION_ID está disponible a partir de PHP 5.2.7, si nuestra 
// versión es inferior a eso, entonces emular
if (!defined('PHP_VERSION_ID')) {
    
$version explode('.'PHP_VERSION);

    
define('PHP_VERSION_ID', ($version[0] * 10000 $version[1] * 100 $version[2]));
}

// PHP_VERSION_ID se define como un número, donde el mayor número, 
// es la versión más reciente de PHP usada. Se define tal como se utiliza la
// expresión anterior.
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
//
// Ahora, con PHP_VERSION_ID podemos comprobar las características que la versión de 
// PHP pueda tener, esto no requiere el uso version_compare () cada vez que compruebe si la 
// versión de PHP no es compatible con una característica.
//
// Por ejemplo, aquí podemos definir las constantes PHP_VERSION_ * que 
// no están disponibles en las versiones anteriores a 5.2.7

if (PHP_VERSION_ID 50207) {
    
define('PHP_MAJOR_VERSION',   $version[0]);
    
define('PHP_MINOR_VERSION',   $version[1]);
    
define('PHP_RELEASE_VERSION'$version[2]);

    
// Y así sucesivamente, ...
}
?>

Notas

Nota:

Esta información también está disponible en la constante predefinida PHP_VERSION. Más información de versión está disponible utilizando las constantes PHP_VERSION_*

Ver también



putenv

(PHP 4, PHP 5)

putenvEstablece el valor de una variable de entorno

Descripción

bool putenv ( string $setting )

Agrega setting al entorno del servidor. La variable de entorno existirá únicamente durante la petición actual. Al final de la petición el entorno es recuperado a su estado original.

Definir ciertas variables de entorno puede representar una brecha de seguridad potencial. La directiva safe_mode_allowed_env_vars contiene una lista de prefijos delimitados por comas. En Modo Seguro, el usuario puede alterar únicamente variables de entorno cuyos nombres comiencen con los prefijos ofrecidos por esta directiva. Por omisión, los usuarios sólo podrán definir variables de entorno que comiencen con PHP_ (p.ej. PHP_FOO=BAR). Nota: si esta directiva se encuentra vacía, ¡PHP permitirá que el usuario modifique CUALQUIER variable de entorno!

La directiva safe_mode_protected_env_vars contiene una lista de variables de entorno delimitadas por comas, que el usuario final no podrá modificar usando putenv(). Estas variables serán protegidas incluso si safe_mode_allowed_env_vars se establece de tal modo que permita modificarlas.

Parámetros

setting

El parámetro, como p.ej. "FOO=BAR"

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Definición de una variable de entorno

<?php
putenv
("UNIQID=$uniqid");
?>

Notas

Advertencia

La directiva safe_mode_allowed_env_vars y safe_mode_protected_env_vars sólo tendrán efecto cuando safe_mode esté habilitado.

Ver también

  • getenv() - Obtiene el valor de una variable de entorno



restore_include_path

(PHP 4 >= 4.3.0, PHP 5)

restore_include_pathRestablece el valor de la opción de configuración include_path

Descripción

void restore_include_path ( void )

Restablece la opción de configuración include_path a su valor maestro original, tal y como se encuentre definido en php.ini

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Ejemplo de restore_include_path()

<?php

echo get_include_path();  // .:/usr/local/lib/php

set_include_path('/inc');

echo 
get_include_path();  // /inc

// Funciona a partir de PHP 4.3.0
restore_include_path();

// Funciona en todas las versiones de PHP
ini_restore('include_path');

echo 
get_include_path();  // .:/usr/local/lib/php

?>

Ver también



set_include_path

(PHP 4 >= 4.3.0, PHP 5)

set_include_pathEstablece la opción de configuración include_path

Descripción

string set_include_path ( string $new_include_path )

Establece la opción de configuración include_path durante la duración del script.

Parámetros

new_include_path

El nuevo valor para include_path

Valores devueltos

Devuelve el valor antiguo de include_path en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de set_include_path()

<?php
// Funciona a partir de PHP 4.3.0
set_include_path('/usr/lib/pear');

// Funciona en todas las versiones de PHP
ini_set('include_path''/usr/lib/pear');
?>

Ejemplo #2 Añadir a la ruta de inclusión

Haciendo uso de la constante PATH_SEPARATOR es posible extender la ruta de inclusión independientemente del sistema operativo.

En este ejemplo agregamos /usr/lib/pear al final del valor include_path actual.

<?php
$ruta 
'/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR $ruta);
?>

Ver también



set_magic_quotes_runtime

(PHP 4, PHP 5)

set_magic_quotes_runtimeEstablece el valor de configuración activo actual de magic_quotes_runtime

Descripción

bool set_magic_quotes_runtime ( bool $new_setting )

Establecer el ajuste de configuración activo actual de magic_quotes_runtime.

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.

Parámetros

new_setting

FALSE para off, TRUE para on.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 set_magic_quotes_runtime() ejemplo

<?php
// Crea un apuntador de archivo temporal
$fp tmpfile();

// Escribir algunos datos en el puntero
fwrite($fp'\'PHP\' es un acrónimo recursivo');

// Sin magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(false);

echo 
'Sin magic_quotes_runtime: ' fread($fp64), PHP_EOL;

// Con magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(true);

echo 
'Con magic_quotes_runtime: ' fread($fp64), PHP_EOL;

// Clean up
fclose($fp);
?>

El resultado del ejemplo sería:

Sin magic_quotes_runtime: 'PHP' es un acrónimo recursivo
Con magic_quotes_runtime: \'PHP\' es un acrónimo recursivo

Ver también



set_time_limit

(PHP 4, PHP 5)

set_time_limitLimita el tiempo máximo de ejecución

Descripción

void set_time_limit ( int $seconds )

Establece el número de segundos que se permite la ejecución de un script. Si esto se alcanza, el script devuelve un error fatal. El límite predeterminado es de 30 segundos o, si es que existe, el valor max_execution_time definido en el php.ini.

Cuando es llamado, set_time_limit() reinicia el contador de tiempo de espera de cero. En otras palabras, si el tiempo de espera por defecto es de 30 segundos, y 25 segundos en la ejecución del script se hace la llamada set_time_limit(20), el script se ejecutará durante un total de 45 segundos antes de que se agote el tiempo.

Parámetros

seconds

El tiempo de ejecución máximo, en segundos. Si se pone a cero se impone sin límite de tiempo.

Valores devueltos

No devuelve ningún valor.

Notas

Advertencia

Esta función no tiene efecto cuando PHP se ejecuta en safe mode. No hay ninguna solución más que deshabilitar el modo seguro o cambiar el tiempo límite en el php.ini.

Nota:

La función set_time_limit() y la directiva de configuración max_execution_time sólo afectan el tiempo de ejecución del script mismo. Todo el tiempo dedicado a la actividad que ocurre fuera de la ejecución del script, como las llamadas al sistema usando system(), operaciones de secuencia, consultas a la bases de datos, etc. No se incluyen cuando se determina el tiempo máximo del script en funcionamiento. Esto no es cierto en Windows, donde el tiempo medido es real.



sys_get_temp_dir

(PHP 5 >= 5.2.1)

sys_get_temp_dirDevuelve la ruta del directorio para archivos temporales

Descripción

string sys_get_temp_dir ( void )

Devuelve la ruta del directorio donde PHP almacena los archivos temporales por defecto.

Valores devueltos

Devuelve la ruta del directorio temporal.

Ejemplos

Ejemplo #1 sys_get_temp_dir() example

<?php
// Crear un fichero en el temporal 
// directorio de archivos utilizando sys_get_temp_dir()
$temp_file tempnam(sys_get_temp_dir(), 'Tux');

echo 
$temp_file;
?>

El resultado del ejemplo sería algo similar a:

C:\Windows\Temp\TuxA318.tmp

Ver también

  • tmpfile() - Crea un archivo temporal
  • tempnam() - Crea un archivo con un nombre de archivo único



version_compare

(PHP 4 >= 4.1.0, PHP 5)

version_compareCompara dos números de versiones estandarizados de PHP

Descripción

mixed version_compare ( string $version1 , string $version2 [, string $operator ] )

version_compare() compara dos números de versiones estandarizados de PHP. Puede ser de utilidad en caso de escribir programas que tan solo funcionen en determinadas versiones de PHP.

Esta función, en primer lugar reemplaza los _, - y + por puntos . y las cadenas de texto de versiones y añade puntos . antes y después de cualquier código no numérico, de manera que '4.3.2RC1' sería '4.3.2.RC.1'. Después, trocea el resultado tal como haría la función explode('.', $ver). Posteriormente compara cada una de las partes, de izquierda a derecha. Si alguna parte contuviera un texto especial de versión, se manejarían con el siguiente orden: cualquier texto que no se encuentre en esta lista < dev < alpha = a < beta = b < RC = rc < # < pl = p. De esta forma, no solo se pueden comparar versiones con diferentes niveles, como '4.1' y '4.1.2', sino que también se pueden comparar versiones específicas de PHP que contengan el estado de desarrollo en que se encuentran.

Parámetros

version1

Primer número de versión.

version2

Segundo número de versión.

operator

Si se especificara el argumento opcional operator, se podrían comprobar determinadas realciones. Los operadores posibles son: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectivamente.

Este parámetro es sensible a mayúsculas, por lo que debe introducirse en minúsculas.

Valores devueltos

Por omisión, version_compare() devuelve -1 si la primera versión es inferior a la segunda, 0 si son iguales, y 1 si la segunda es inferior.

Al usar el argumento opcional operator, la función de volverá TRUE si se cumpliera la relación especificada por el operador, o FALSE en caso contrario.

Ejemplos

Los siguientes ejemplos usan la constante PHP_VERSION, ya que esta contiene el valor de la versión de PHP con que se está ejecutando el código.

Ejemplo #1 Ejemplos de version_compare()

<?php
if (version_compare(PHP_VERSION'6.0.0') >= 0) {
    echo 
'Soy al menos la versión 6.0.0 de PHP, mi versión: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.3.0') >= 0) {
    echo 
'Soy al menos la versión 5.3.0 de PHP, mi versión: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''>=')) {
    echo 
'Estoy usando la versión 5 de PHP, mi versión: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''<')) {
    echo 
'Estoy usando la versión 4 de PHP, mi versión: ' PHP_VERSION "\n";
}
?>

Notas

Nota:

La constante PHP_VERSION almacena la versión de PHP en uso.

Nota:

Tenga presente que las versiones preeliminares, como por ejemplo 5.3.0-dev, se las considera inferiroes a la versión final (como por ejemplo 5.3.0).

Ver también

  • phpversion() - Obtiene la versión de PHP
  • php_uname() - Devuelve información sobre el sistema operativo en que se está ejecutando PHP
  • function_exists() - Devuelve TRUE si la función dada ha sido definida



zend_logo_guid

(PHP 4, PHP 5)

zend_logo_guidObtiene el valor guid de Zend

Descripción

string zend_logo_guid ( void )

Esta función devuelve el ID que puede ser usado para desplegar el logo de Zend usando la imagen incorporada.

Valores devueltos

Devuelve PHPE9568F35-D428-11d2-A769-00AA001ACF42.

Ejemplos

Ejemplo #1 Ejemplo de zend_logo_guid()

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' zend_logo_guid() . '" alt="¡Logo Zend!" />';

?>

Ver también



zend_thread_id

(PHP 5)

zend_thread_idDevuelve un identificador único del thread actual

Descripción

int zend_thread_id ( void )

Esta función devuelve un identificador único del thread actual.

Valores devueltos

Devuelve thread id en formato integer.

Ejemplos

Ejemplo #1 Ejemplo de zend_thread_id()

<?php
$thread_id 
zend_thread_id();

echo 
'El thread id actual es: ' $thread_id;
?>

El resultado del ejemplo sería algo similar a:

El thread actual es: 7864

Notas

Nota:

Esta función solo está disponible en PHP compilado con soporte ZTS (Zend Thread Safety) y modo debug (--enable-debug).



zend_version

(PHP 4, PHP 5)

zend_versionObtiene la versión del motor Zend actual

Descripción

string zend_version ( void )

Devuelve una cadena que contiene la versión del Motor Zend ejecutándose actualmente.

Valores devueltos

Devuelve el número de versión del Motor Zend, como una cadena.

Ejemplos

Ejemplo #1 Ejemplo de zend_version()

<?php
echo "Versión del motor Zend: " zend_version();
?>

El resultado del ejemplo sería algo similar a:

Versión del motor Zend: 2.2.0

Ver también


Tabla de contenidos

  • assert_options — Establecer/obtener valores de las directivas relacionadas con las aserciones
  • assert — Checks if assertion is FALSE
  • dl — Carga una extensión PHP en tiempo de ejecucción
  • extension_loaded — Encontrar si una extensión está cargada
  • gc_collect_cycles — Las fuerzas de la colección de todos los ciclos de basura existentes
  • gc_disable — Desactiva el recolector de referencia circular
  • gc_enable — Activa el colector de referencia circular
  • gc_enabled — Devuelve el estado del colector de referencia circular
  • get_cfg_var — Obtiene el valor de una opción de configuración de PHP
  • get_current_user — Obtiene el nombre del propietario del script PHP actual
  • get_defined_constants — Devuelve un array asociativo con los nombres de todas las constantes y sus valores
  • get_extension_funcs — Devuelve una matriz con los nombres de funciones de un módulo
  • get_include_path — Obtiene la opción de configuración include_path actual
  • get_included_files — Devuelve un array con los nombres de los archivos incluidos o requeridos
  • get_loaded_extensions — Devuelve un array con los nombres de todos los módulos compilados y cargados
  • get_magic_quotes_gpc — Obtiene el valor actual de configuración de magic_quotes_gpc
  • get_magic_quotes_runtime — Obtiene el valor de configuración activo actual de magic_quotes_runtime
  • get_required_files — Alias de get_included_files
  • getenv — Obtiene el valor de una variable de entorno
  • getlastmod — Obtiene la hora de la última modificación de la página
  • getmygid — Obtener el GID del dueño del script PHP
  • getmyinode — Obtiene el inode del script actual
  • getmypid — Obtiene el ID del proceso PHP
  • getmyuid — Obtiene el UID del dueño del script PHP
  • getopt — Obtiene las opciones de la lista de argumentos de la línea de comandos
  • getrusage — Obtiene el uso de los recursos actuales
  • ini_alter — Alias de ini_set
  • ini_get_all — Obtiene todas las opciones de configuración
  • ini_get — Devuelve el valor de una directiva de configuración
  • ini_restore — Restablece el valor de una opción de configuración
  • ini_set — Establecer el valor de una directiva de configuración
  • magic_quotes_runtime — Alias de set_magic_quotes_runtime
  • main — Función main falsa
  • memory_get_peak_usage — Devuelve el máximo de memoria asignada por PHP
  • memory_get_usage — Devuelve la cantidad de memoria asignada a PHP
  • php_ini_loaded_file — Recupera la ruta de acceso al archivo php.ini cargado
  • php_ini_scanned_files — Devuelve una lista de ficheros .ini procesados del directorio adicional ini dir
  • php_logo_guid — Obtiene el valor guid del logo
  • php_sapi_name — Devuelve el tipo de interfaz que hay entre PHP y el servidor
  • php_uname — Devuelve información sobre el sistema operativo en que se está ejecutando PHP
  • phpcredits — Imprime los créditos de PHP
  • phpinfo — Muestra información sobre la configuración de PHP
  • phpversion — Obtiene la versión de PHP
  • putenv — Establece el valor de una variable de entorno
  • restore_include_path — Restablece el valor de la opción de configuración include_path
  • set_include_path — Establece la opción de configuración include_path
  • set_magic_quotes_runtime — Establece el valor de configuración activo actual de magic_quotes_runtime
  • set_time_limit — Limita el tiempo máximo de ejecución
  • sys_get_temp_dir — Devuelve la ruta del directorio para archivos temporales
  • version_compare — Compara dos números de versiones estandarizados de PHP
  • zend_logo_guid — Obtiene el valor guid de Zend
  • zend_thread_id — Devuelve un identificador único del thread actual
  • zend_version — Obtiene la versión del motor Zend actual



runkit


Introducción

La extensión runkit proporciona medios para modificar constantes, funciones definidas por el usuario y clases definidas por el usuario. También proporciona variables superglobales personalizadas y sub-intérpretes que se pueden embeber mediante aislamiento de procesos (sandboxing).

Este paquete está hecho como una característica añadida para reemplazar al paquete » classkit. Cuando se compila con la opción --enable-runkit=classkit a ./configure, exportará las definiciones de funciones y constantes compatibles con classkit.



Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

RUNKIT_IMPORT_FUNCTIONS (integer)
Bandera de runkit_import() que indica que las funciones normales deberían ser importadas desde el archivo especificado.
RUNKIT_IMPORT_CLASS_METHODS (integer)
Bandera de runkit_import() que indica que los métodos de clases deberían ser importados desde el archivo especificado.
RUNKIT_IMPORT_CLASS_CONSTS (integer)
Bandera de runkit_import() que indica que las constantes de clases deberían ser importadas desde el archivo especificado. Observe que esta bandera sólo tiene sentido en versiones de PHP 5.1.0 y superiores.
RUNKIT_IMPORT_CLASS_PROPS (integer)
Bandera de runkit_import() que indica que las propiedades estándar de clases deberían ser importadas desde el archivo especificado.
RUNKIT_IMPORT_CLASSES (integer)
Bandera de runkit_import() que representa un operador OR a nivel de bit de las constantes RUNKIT_IMPORT_CLASS_*.
RUNKIT_IMPORT_OVERRIDE (integer)
Bandera de runkit_import() que indica que si cualesquiera de las funciones, métodos, contantes o propiedades importados ya existen deberían ser reemplazados con las nuevas definiciones. Si esta bandera no está establecida, cualquier definición importada que ya exista será descartada.
RUNKIT_ACC_PUBLIC (integer)
Bandera específica de PHP 5 para runkit_method_add()
RUNKIT_ACC_PROTECTED (integer)
Bandera específica de PHP 5 para runkit_method_add()
RUNKIT_ACC_PRIVATE (integer)
Bandera específica de PHP 5 para runkit_method_add()
CLASSKIT_ACC_PUBLIC (integer)
Bandera específica de PHP 5 para classkit_method_add() Sólo definida cuando la compatibilidad con classkit está habilitada.
CLASSKIT_ACC_PROTECTED (integer)
Bandera específica de PHP 5 para classkit_method_add() Sólo definida cuando la compatibilidad con classkit está habilitada.
CLASSKIT_ACC_PRIVATE (integer)
Bandera específica de PHP 5 para classkit_method_add() Sólo definida cuando la compatibilidad con classkit está habilitada.
CLASSKIT_AGGREGATE_OVERRIDE (integer)
Bandera específica de PHP 5 para classkit_import() Sólo definida cuando la compatibilidad con classkit está habilitada.
RUNKIT_VERSION (string)
Definida para la versión actual del paquete runkit.
CLASSKIT_VERSION (string)
Definida para la versión actual del paquete runkit. Sólo definida cuando la compatibilidad con classkit está habilitada.


Instalación/Configuración

Tabla de contenidos


Requerimientos

Modificar Constantes, Funciones, Clases y Métodos funciona con todas las distribuciones de PHP 4 y PHP 5. No se necesitan requisitos especiales.

Las Superglobales Personalizadas sólo están disponibles en PHP 4.2.0 o posterior.

El Aislamiento de Procesos (Sandboxing) requiere PHP 5.1.0 o posterior, o PHP 5.0.0 con un parche TSRM especial aplicado. Sin importar qué versión de PHP está en uso se debe compilar con la opción --enable-maintainer-zts. Vea el archivo README en el paquete de runkit para información adicional.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/runkit.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de Runkit
Nombre Por defecto Cambiable Historial de cambios
runkit.superglobal "" PHP_INI_PERDIR  
runkit.internal_override "0" PHP_INI_SYSTEM  
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

runkit.superglobal string
Una lista separada por comas de nombres de variables que van a ser tratadas como superglobales. Este valor debería estar establecido a través del archivo php.ini, pero puede funcionar en contextos de configuración por directorio dependiendo de su SAPI.

Ejemplo #1 Superglobales personalizadas con runkit.superglobal=_FOO,_BAR en php.ini

<?php
function mostrar_valores() {
  echo 
"Foo es $_FOO\n";
  echo 
"Bar es $_BAR\n";
  echo 
"Baz es $_BAZ\n";
}

$_FOO 'foo';
$_BAR 'bar';
$_BAZ 'baz';

/* Muestra foo y bar, pero no baz */
mostrar_valores();
?>
runkit.internal_override boolean
Habilita la capacidad de modificar/renombrar/eliminar funciones internas.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Funciones runkit


Runkit_Sandbox

(PECL runkit >= 0.7.0)

Runkit_Sandbox La Clase Runkit Sandbox -- Máquina Virtual de PHP

Descripción

Al instanciar la clase Runkit_Sandbox se crea un nuevo hilo con su própio ámbito y pila de programa. Al usar un conjunto de opciones pasadas al constructor, este entorno puede estar restringido a un subconjunto de lo que el intérprete primario puede hacer y proporciona un entorno seguro para ejecutar código proporcionado por el usuario.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Constructor

void Runkit_Sandbox::__construct ([ array $options ] )

options es un array asociativo que contiene cualquier combinación de las opciones especiales ini listadas abajo.

safe_mode

Si el script exterior que está instanciando la clase Runkit_Sandbox se configura con safe_mode = off, safe_mode puede ser activado para el entorno del aislamiento de procesos (sandbox). Esta configuración no se puede usar para deshabilitar safe_mode cuando ya está habilitado en el script exterior.

safe_mode_gid

Si el script exterior que está instanciando la clase Runkit_Sandbox se configura con safe_mode_gid = on, safe_mode_gid puede ser activado para el entorno del aislamiento de procesos. Esta configuración no se puede usar para habilitar safe_mode_gid cuando ya está deshabilitado en el script exterior.

safe_mode_include_dir

Si el script exterior que está instanciando la clase Runkit_Sandbox se configura con un directorio safe_mode_include_dir, un nuevo directorio safe_mode_include_dir puede ser establecido para los entornos del aislamiento de procesos bajo es valor definido actualmente. safe_mode_include_dir también puede ser limpiado para indicar que la característica de bypass está deshabilitada. Si safe_mode_include_dir estaba en blanco en el script exterior, pero safe_mode no estaba habilitado, se puede establecer cualquier directorio safe_mode_include_dir arbitrario mientras se activa safe_mode.

open_basedir

open_basedir puede ser establecido a cualquier ruta bajo la confuguración actual de open_basedir. Si open_basedir no está establecido dentro del ámbito global, se asume que es el directorio raíz y puede ser establecido a cualquier ubicación.

allow_url_fopen

Como safe_mode, esta configuración sólo puede ser hecha más restrictiva, en este caso estableciéndola a FALSE cuando estaba anteriomente establecida a TRUE

disable_functions

Una lista de funciones separadas por comas a deshabilitar dentro del sub-intérprete del aisalmiaento de procesos. Esta lista no necesita contener los nombres de las funciones actualmente deshabiltadas, permanecerán deshabiltadas ya estén listadas o no.

disable_classes

Una lista de clases separadas por comas a deshabilitar dentro del sub-intérprete del aisalmiaento de procesos. Esta lista no necesita contener los nombres de las clases actualmente deshabiltadas, permanecerán deshabiltadas ya estén listadas o no.

runkit.superglobal

Una lista de varables separadas por comas a ser tratadas como superglobales dentro del sub-intérprete del aislamiaento de procesos. Estas variables serás usadas además de cualquier variable definida internamente o a través de la configuración global runkit.superglobal.

runkit.internal_override

La opción ini runkit.internal_override puede ser deshabilitada (pero no rehabilitada) dentro de los aislamientos de procesos.

Ejemplo #1 Instanciar un entorno de aislamiento de procesos (sandbox) restringido

<?php
$opciones 
= array(
  
'safe_mode'=>true,
  
'open_basedir'=>'/var/www/users/jdoe/',
  
'allow_url_fopen'=>'false',
  
'disable_functions'=>'exec,shell_exec,passthru,system',
  
'disable_classes'=>'myAppClass');
$sandbox = new Runkit_Sandbox($opciones);
/* Las configuraciones ini no protegidas pueden establecerse normalmente */
$sandbox->ini_set('html_errors',true);
?>

Acceder a Variables

Todas las variables en el ámbito global del entorno del aislamiento de procesos son accesibles como propiedades del objeto de aislamiento de procesos. Lo primero a tener en cuenta es que a causa de la manera en que se maneja la memoria entre estos dos hilos, las variables de objeto y de recurso actualmente no se pueden intercambiar entre intérpretes. Además, todas las matrices se copian en profundidad y cualquier referencia se perderá. Esto también siginifiva que las referencias entre intérpretes no son posibles.

Ejemplo #2 Trabajar con variables en un entorno de aislamiento de procesos (sandbox)

<?php
$sandbox 
= new Runkit_Sandbox();

$sandbox->foo 'bar';
$sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";');
echo 
"{$sandbox->bar}\n";
if (isset(
$sandbox->foo)) unset($sandbox->foo);
$sandbox->eval('var_dump(isset($foo));');
?>

El resultado del ejemplo sería:

bar
barbaz
bool(false)

Llamar a Funciones de PHP

Cualquier función definida dentro del entorno de aislamiento de procesos puede ser llamada como un método del objeto de aislamiento de procesos. Esto también incluye algunos contructores de lenguaje de pseudo-función: eval(), include, include_once, require, require_once, echo, print, die(), y exit().

Ejemplo #3 Llamar a funciones del aislamiento de procesos

<?php
$sandbox 
= new Runkit_Sandbox();

echo 
$sandbox->str_replace('a','f','abc');
?>

El resultado del ejemplo sería:

fbc

Cuando se pasan argumentos a una función de aislameinto de procesos, los argumentos se toman desde la instancia exterior de PHP. Si se desea pasar argumentos desde el ámbito del aislamiento de procesos, asegúrese de acceder a ellos como propiedades del objeto de aislamiento de procesos como se ilustra abajo.

Ejemplo #4 Pasar agumentos a las funciones del aislamiento de procesos

<?php
$sandbox 
= new Runkit_Sandbox();

$foo 'bar';
$sandbox->foo 'baz';
echo 
$sandbox->str_replace('a',$foo,'a');
echo 
$sandbox->str_replace('a',$sandbox->foo,'a');
?>

El resultado del ejemplo sería:

bar
baz

Cambiar la Configuración del Aislamiento de Procesos

A partir de la versión 0.5 de runkit, se pueden modificar ciertas configuraciones del aislamiento de procesos sobre la marcha usando la sintaxis de ArrayAccess. Algunos ajustes, como active, son de sólo lectura y proporcionan información de estado. Otros ajustes, como output_handler, se pueden establecer y leer como un índice de matriz normal. Ajustes futuros puede ser de sólo escritura, sin embargo actualmente no existen tales ajustes.

Configuración del Aislamiento de Procesos / Indicadores de estado
Configuración Tipo Propósito Predeterminado
active Boolean (Sólo Lectura) TRUE si el Aislamiento de Procesos está aún en un estado usable, FALSE si la peticióni está abandonada debido a una llamada a die(), exit(), o a causa de una condición de error fatal. TRUE (Inicial)
output_handler Callback Cuando se establece a una llamada de retorno válida, toda la salida generada por la instancia del Aislamiento de Procesos será procesada por la función nominada. Los gestores de salida del Aislamiento de Procesos siguen las misma convenciones de llamada que los gestores de salida del lado del sistema. Ninguno
parent_access Boolean ¿El aislamiento de procesos puede usar instancias de la clase Runkit_Sandbox_Parent? Debe estar habilitado para otras configuraciones de Runkit_Sandbox_Parent relacionadas para que funcione. FALSE
parent_read Boolean ¿El aislamiento de procesos puede leer variables en su contexto padre? FALSE
parent_write Boolean ¿El aislamiento de procesos puede modificar variables en su contexto padre? FALSE
parent_eval Boolean ¿El aislamiento de procesos puede evaluar código arbitrario en su contexto padre? PELIGROSO FALSE
parent_include Boolean ¿El aislamiento de procesos puede incluir archivos de código php en su contexto padre? PELIGROSO FALSE
parent_echo Boolean ¿El aislamiento de procesos puede hacer eco de información en su contexto padre eefctivamente pasando su propio output_handler? FALSE
parent_call Boolean ¿El aislamiento de procesos puede llamar a funciones en su contexto padre? FALSE
parent_die Boolean ¿El aislamiento de procesos puede eliminar su propio contexto padre? (Y así a sí mismo) FALSE
parent_scope Integer ¿Qué Ámbito tendrá el acceso de las propiedades padre? 0 == Ámbito global, 1 == Ámbito de llamda, 2 == Ámbito precediendo al ambito de llamada, 3 == El ambito antes de este, etc..., etc... 0 (Global)
parent_scope String Cuando parent_scope está establecido a un valor de cadena, se refiere a un variable de matriz nominada en el Ámbito global. Si la variable nominada no existe el momento del acceso se creará como un array vacío. Si la varible existe pero no es un array, se creará un array "falso" que contiene una referencia a la variable global nominada.  



Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent Clase Runkit Anti-Sandbox

Descripción

void Runkit_Sandbox_Parent::__construct ( void )

Instanciar la clase Runkit_Sandbox_Parent desde dentro de un entorno de aislamiento de procesos creado desde la clase Runkit_Sandbox proporciona algunos medios (controlados) para que un aislamiento de procesos hijo acceda a su padre.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Para que cualquier característica de Runkit_Sandbox_Parent funcione, el soporte debe estar habilitado sobre una base del aislamiento de procesos habilitando la bandera parent_access desde el contexto padre.

Ejemplo #1 Trabajar con variables en un aislamiento de procesos (sandbox)

<?php
$sandbox 
= new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>

Acceder a las Variables del Padre

Al igual que con el acceso a variables en un aislamiento de procesos, las variables del padre de un aislamiento de procesos se puede leer y escribir como propiedades de la clase Runkit_Sandbox_Parent. El acceso a la lectura de variables padre puede estar habilitado con el ajuste parent_read (además del ajuste base parent_access). El acceso a escritura, a su vez, se habilita a través del ajuste parent_write.

A diferencia del acceso a variables de un hijo del aislamiento de procesos, el ámbito de la variable no está limitado sólo a globales. Estableciendo el ajuste parent_scope a un valor entero apropiado se pueden examinar otros ámbitos en la pila de llamadas activas. Un valor de 0 (Predeterminado) dirigirá el acceso a variables al ámbito global. 1 apuntará al acceso a varables en cualquier ámbito de variables que estuviera activo en el momento en el que el bloque del código del aislamiento de proceosos actual estuviera ejecutándose. Valores mayores recorren hacia atrás las funciones que llamaron a las funciones que llevaron al código de ejecución del aislamiento de procesos que intentó acceder a sus propias variables padre.

Ejemplo #2 Acceder a las varibales padre

<?php
$php 
= new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;

$prueba "Global";

$php->eval('$PARENT = new Runkit_Sandbox_Parent;');

$php['parent_scope'] = 0;
uno();

$php['parent_scope'] = 1;
uno();

$php['parent_scope'] = 2;
uno();

$php['parent_scope'] = 3;
uno();

$php['parent_scope'] = 4;
uno();

$php['parent_scope'] = 5;
uno();

function 
uno() {
    
$prueba "uno()";
    
dos();
}

function 
dos() {
    
$prueba "dos()";
    
tres();
}

function 
tres() {
    
$prueba "tres()";
    
$GLOBALS['php']->eval('var_dump($PARENT->prueba);');
}
?>

El resultado del ejemplo sería:

string(6) "Global"
string(7) "tres()"
string(5) "dos()"
string(5) "uno()"
string(6) "Global"
string(6) "Global"

Llamar a las Funciones Padre

Igual que con el acceso del aislamiento de procesos, un aislamiento de procesos puede acceder a sus funciones padre siempre que haya sido habilitada la configuración apropiada. Habilitar parent_call permitirá al aislamiento de procesos llamar a todas las funciones disponibles en el ámbito padre. Los constructores del lenguaje están controlados cada uno por sus propias configuraciones: print y echo son habilitadas con parent_echo. die() y exit() son habilitadas con parent_die. eval() es habilitada con parent_eval mientras que include, include_once, require, y require_once son habilitadas a través de parent_include.



runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt Convertir una clase base en una clase heredada, añadiendo métodos ancestrales cuando sea apropiado

Descripción

bool runkit_class_adopt ( string $classname , string $parentname )

Parámetros

classname

Nombre de la clase a ser adoptada

parentname

La clase padre en la que se extiende la hija

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de runkit_class_adopt()

<?php
class miPadre {
  function 
funcPadre() {
    echo 
"Salida de la Función Padre\n";
  }
}

class 
miHija {
}

runkit_class_adopt('myChild','funcPadre');
miHija::funcPadre();
?>

El resultado del ejemplo sería:

Salida de la Función Padre

Ver también

  • runkit_class_emancipate() - Convertir una clase heredada en una clase base, eliminando cualquier método cuyo ámbito sea ancestral



runkit_class_emancipate

(PECL runkit >= 0.7.0)

runkit_class_emancipate Convertir una clase heredada en una clase base, eliminando cualquier método cuyo ámbito sea ancestral

Descripción

bool runkit_class_emancipate ( string $classname )

Parámetros

classname

Nombre de la clase a emancipar

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de runkit_class_emancipate()

<?php
class miPadre {
  function 
funcPadre () {
    echo 
"Salida de la Función Padre\n";
  }
}
class 
miHija extends miPadre {
}

miHija::funcPadre();
runkit_class_emancipate('miHija');
miHija::funcPadre();
?>

El resultado del ejemplo sería:

Salida de la Función Padre
Fatal error: Call to undefined function:  funcPadre() in example.php on line 12

Ver también

  • runkit_class_adopt() - Convertir una clase base en una clase heredada, añadiendo métodos ancestrales cuando sea apropiado



runkit_constant_add

(PECL runkit >= 0.7.0)

runkit_constant_add Similar a define(), excepto que también permite definir en definiciones de clase

Descripción

bool runkit_constant_add ( string $constname , mixed $value )

Parámetros

constname

Nombre de la constante a declarar. Una cadena que indica la constante global, o nombreclase::constname que indica la constante de clase.

value

Valor NULL, Bool, Long, Double, String, o Resource a almacenar en la nueva constante.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_constant_redefine

(PECL runkit >= 0.7.0)

runkit_constant_redefine Redefinir una constante ya definida

Descripción

bool runkit_constant_redefine ( string $constname , mixed $newvalue )

Parámetros

constname

Constante a redefinir. Una cadena que indica la constante global, o nombreclase::constname que indica la constante de clase.

newvalue

El nuevo valor a asignar a la constante.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_constant_remove

(PECL runkit >= 0.7.0)

runkit_constant_remove Eliminar/Borrar una constante ya definida

Descripción

bool runkit_constant_remove ( string $constname )

Parámetros

constname

Nombre de la constante a eliminar. Una cadena que indica la constante global, o nombreclase::constname que indica la constante de clase.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_function_add

(PECL runkit >= 0.7.0)

runkit_function_add Añadir una nueva función, similar a create_function()

Descripción

bool runkit_function_add ( string $funcname , string $arglist , string $code )

Parámetros

funcname

Nombre de la función que va a ser creada

arglist

Lista de argumentos separados por comas

code

Código que compone la función

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de runkit_function_add()

<?php
runkit_function_add
('testme','$a,$b','echo "El valor de a es $a\n"; echo "El valor de b es $b\n";');
testme(1,2);
?>

El resultado del ejemplo sería:

El valor de a es 1
El valor de b es 2

Ver también



runkit_function_copy

(PECL runkit >= 0.7.0)

runkit_function_copy Copiar una función a un nombre de función nuevo

Descripción

bool runkit_function_copy ( string $funcname , string $targetname )

Parámetros

funcname

Nombre de la función existente

targetname

Nombre de la función donde se va a copiar la definición

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de runkit_function_copy()

<?php
function original() {
  echo 
"En una función\n";
}
runkit_function_copy('original','duplicado');
original();
duplicado();
?>

El resultado del ejemplo sería:

En una función
En una función

Ver también



runkit_function_redefine

(PECL runkit >= 0.7.0)

runkit_function_redefine Reemplazar una definición de función con una nueva implementación

Descripción

bool runkit_function_redefine ( string $funcname , string $arglist , string $code )

Nota: Por defecto, sólo funciones del espacio de usuario pueden ser eliminadas, renombradas, o modificadas. Para controlar funciones internas, la opción runkit.internal_override en php.ini debe ser habilitada.

Parámetros

funcname

Nombre de la función a redefinir

arglist

Nueva lista de argumentos a ser aceptados por la función

code

Nueva implementación de código

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de runkit_function_redefine()

<?php
function testme() {
  echo 
"Implementación Original de Testme\n";
}
testme();
runkit_function_redefine('testme','','echo "Nueva Implementación de Testme\n";');
testme();
?>

El resultado del ejemplo sería:

Implementación Original de Testme
Nueva Implementación de Testme

Ver también



runkit_function_remove

(PECL runkit >= 0.7.0)

runkit_function_remove Eliminar una definición de función

Descripción

bool runkit_function_remove ( string $funcname )

Nota: Por defecto, sólo funciones del espacio de usuario pueden ser eliminadas, renombradas, o modificadas. Para controlar funciones internas, la opción runkit.internal_override en php.ini debe ser habilitada.

Parámetros

funcname

Nombre de la función a ser borrada

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_function_rename

(PECL runkit >= 0.7.0)

runkit_function_rename Cambiar el nombre de una función

Descripción

bool runkit_function_rename ( string $funcname , string $newname )

Nota: Por defecto, sólo funciones del espacio de usuario pueden ser eliminadas, renombradas, o modificadas. Para controlar funciones internas, la opción runkit.internal_override en php.ini debe ser habilitada.

Parámetros

funcname

Nombre actual de la función

newname

Nombre nuevo de la función

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_import

(PECL runkit >= 0.7.0)

runkit_import Procesar un archivo PHP importando definiciones de funciones y clases, sobrescribiendo cuando sea apropiado

Descripción

bool runkit_import ( string $filename [, int $flags = RUNKIT_IMPORT_CLASS_METHODS ] )

Similar a include, sin embargo cualquier código que resida fuera de una función o clase es simplemente ignorado. Además, dependiendo del valor de flags, cualquier función o clase ya existente en el entorno de ejecución actual será sobrescrito automáticamente por sus nuevas definiciones.

Parámetros

filename

El nombre de archivo desde que se va a importar las definiciones de funciones y clases

flags

Operador OR a nivel de bit de la familia de constantes RUNKIT_IMPORT_*.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



runkit_lint_file

(PECL runkit >= 0.7.0)

runkit_lint_file Verificar la sintaxis PHP del archivo especificado

Descripción

bool runkit_lint_file ( string $filename )

La función runkit_lint_file() lleva a cabo una verifiación de sintaxis (lint) (pelusa en inglés) sobre el nombre de archivo especificado comprobando errores en la escritura del script. Esto es similar a usar php -l desde la línea de comandos.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Parámetros

filename

Archivo que contiene el código PHP a ser verificado de "pelusas" (lint)

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también

  • runkit_lint() - Verificar la sintaxis PHP del código php especificado



runkit_lint

(PECL runkit >= 0.7.0)

runkit_lint Verificar la sintaxis PHP del código php especificado

Descripción

bool runkit_lint ( string $code )

La función runkit_lint() lleva a cabo una verifiación de sintaxis (lint) (pelusa en inglés) sobre el código php especificado comprobando errores en la escritura del script. Esto es similar a usar php -l desde la línea de comandos excepto que runkit_lint() acepta código actual en vez de un nombre de archivo.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Parámetros

code

El código PHP a ser verificado de "pelusas" (lint)

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



runkit_method_add

(PECL runkit >= 0.7.0)

runkit_method_addAñadir dinámicamente un nuevo método a una clase dada

Descripción

bool runkit_method_add ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Parámetros

classname

La clase donde se va a añadir el método

methodname

El nombre del método a añadir

args

Lista de argumentos delimitados por comas para el recién creado método

code

El código a ser evaluado cuando methodname sea llamado

flags

El tipo de método a crear, puede ser RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED o RUNKIT_ACC_PRIVATE

Nota:

Este parámetro sólo se usa a partir de PHP 5, ya que, antes de esta versión, todos los métodos eran públicos.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de runkit_method_add()

<?php
class Ejemplo {
    function 
foo() {
        echo 
"foo!\n";
    }
}

// crear un objeto de Ejemplo
$e = new Ejemplo();

// Añadir un nuevo método público
runkit_method_add(
    
'Ejemplo',
    
'sumar',
    
'$num1, $num2',
    
'return $num1 + $num2;',
    
RUNKIT_ACC_PUBLIC
);

// sumar 12 + 4
echo $e->sumar(124);
?>

El resultado del ejemplo sería:

16

Ver también



runkit_method_copy

(PECL runkit >= 0.7.0)

runkit_method_copyCopia un método de una clase a otra

Descripción

bool runkit_method_copy ( string $dClass , string $dMethod , string $sClass [, string $sMethod ] )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Parámetros

dClass

Clase destino del método a copiar

dMethod

Nombre del método destino

sClass

Clase fuente del método a copiar

sMethod

Nombre del método a copiar desde la clase fuente. Si se omite este parámetro, se asume el valor de dMethod.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de runkit_method_copy()

<?php
class Foo {
    function 
ejemplo() {
        return 
"foo!\n";
    }
}

class 
Bar {
    
// inicialmete sin métodos
}

// copiar el método ejemplo() desde la clase Foo a la clase Bar, como baz()
runkit_method_copy('Bar''baz''Foo''ejemplo');

// imprimir la función copiada
echo Bar::baz();
?>

El resultado del ejemplo sería:

foo!

Ver también



runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineCambiar dinámicamente el código del método dado

Descripción

bool runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )

Nota: Esta función no puede ser utilizada para manipular el actual método en ejecución (o extendido).

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Parámetros

classname

La clase en la que se va a redefinir el método

methodname

El nombre del método a redefinir

args

Lista de argumentos delimitados por coma para el método redefinido

code

El nuevo código a ser evaluado cuando methodname sea llamado

flags

El método redefinido puede ser RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED o RUNKIT_ACC_PRIVATE

Nota:

Este parámetro sólo se usa a partir de PHP 5, ya que, antes de esta versión, todos los métodos eran públicos.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de runkit_method_redefine()

<?php
class Ejemplo {
    function 
foo() {
        return 
"foo!\n";
    }
}

// crear un objeto de Ejemplo
$e = new Ejemplo();

// imprimir Ejemplo::foo() (antes de redefinir)
echo "Antes: " $e->foo();

// Redefinir el método 'foo'
runkit_method_redefine(
    
'Ejemplo',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// imprimir Ejemplo::foo() (después de redefinir)
echo "Después: " $e->foo();
?>

El resultado del ejemplo sería:

Antes: foo!
Después: bar!

Ver también



runkit_method_remove

(PECL runkit >= 0.7.0)

runkit_method_removeEliminar dinámicamente el método dado

Descripción

bool runkit_method_remove ( string $classname , string $methodname )

Nota: Esta función no puede ser utilizada para manipular el actual método en ejecución (o extendido).

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Parámetros

classname

La clase en la que se va a eliminar el método

methodname

El nombre del método a eliminar

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de runkit_method_remove()

<?php
class Ejemplo {
    function 
foo() {
        return 
"foo!\n";
    }
    
    function 
bar() {
        return 
"bar!\n";
    }
}

// Eliminar el método 'foo'
runkit_method_remove(
    
'Ejemplo',
    
'foo'
);

echo 
implode(' 'get_class_methods('Ejemplo'));

?>

El resultado del ejemplo sería:

bar

Ver también



runkit_method_rename

(PECL runkit >= 0.7.0)

runkit_method_renameCambiar dinámicamente el nombre del método dado

Descripción

bool runkit_method_rename ( string $classname , string $methodname , string $newname )

Nota: Esta función no puede ser utilizada para manipular el actual método en ejecución (o extendido).

Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Parámetros

classname

La clase en la que se renombrará el método

methodname

El nombre del método a renombrar

newname

El nombre nuevo a dar al método renombrado

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo derunkit_method_rename()

<?php
class Ejemplo {
    function 
foo() {
        return 
"foo!\n";
    }
}

// Renombrar el método 'foo' a 'bar'
runkit_method_rename(
    
'Ejemplo',
    
'foo',
    
'bar'
);

// salida de la función renombrada
echo Ejemplo::bar();
?>

El resultado del ejemplo sería:

foo!

Ver también



runkit_return_value_used

(PECL runkit >= 0.8.0)

runkit_return_value_usedDetermina si se usarán los valores devueltos por las funciones actuales

Descripción

bool runkit_return_value_used ( void )

Valores devueltos

Devuelve TRUE si el valor devuelto de la función actual se usa por el alcance de la llamada, de otro modo FALSE

Ejemplos

Ejemplo #1 Ejemplo de runkit_return_value_used()

<?php
function foo() {
  
var_dump(runkit_return_value_used());
}

foo();
$f foo();
?>

El resultado del ejemplo sería:

bool(false)
bool(true)



runkit_sandbox_output_handler

(PECL runkit >= 0.7.0)

runkit_sandbox_output_handler Especificar una función para capturar y/o procesar la salida de un aislamiento de procesos de runkit

Descripción

mixed runkit_sandbox_output_handler ( object $sandbox [, mixed $callback ] )

Normalmente, cuanquier cosa que realice una salida (como echo o print) será sacada como si fuera impresa desde el ámbito padre. Sin embargo, al usar runkit_sandbox_output_handler(), la salida generada por el aislamiento de procesos (inclueyndo errores) puede ser capturada por una función fuera del aislamiento de procesos.

Nota: Soporte para Entorno de Pruebas (requerido por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) está disponible sólo a partir de PHP 5.1.0 o versiones especialmente parcheadas de PHP 5.0, y requiere que thread safety sea habilitada. Vea el archivo README incluido en el paquete runkit para más información.

Nota: Obsoleto

A partir de la versión 0.5 de runkit, esta función está obsoleta y está programada para ser eliminada del paquete antes de la distribución de la versión 1.0. Para una instancia de Runkit_Sandbox, el gestor de salida puede ser leído/establecido usando la sintaxis de índice de array mostrado en la página de definición de la clase Runkit_Sandbox.

Parámetros

sandbox

Instancia de objeto de la clase Runkit_Sandbox en la que establecer el gestor de salida.

callback

Nombre de una función que espera un parámetro. La salida generada por sandbox será pasada a esta llamada de retorno (callback). Cualquier cosa devuelta por la llamda de retorno será mostrada normalmente. Si este parámetro no se pasa, la gestión de salida no será cambiada. Si se pasa un valor no verdadero, la gestión de salida será deshabilitada y será vuelta a la muestra directa.

Valores devueltos

Devuelve el nombre de la llamada de retorno del gestor de salida definido previamente, o FALSE si no se definió previamente un gestor.

Ejemplos

Ejemplo #1 Introducir la salida en una variable

<?php
function capture_output($str) {
  
$GLOBALS['sandbox_output'] .= $str;

  return 
'';
}

$sandbox_output '';

$php = new Runkit_Sandbox();
runkit_sandbox_output_handler($php'capture_output');
$php->echo("Hola\n");
$php->eval('var_dump("Lo siento");');
$php->die("Me perdí.");
unset(
$php);

echo 
"Sandbox Completado\n\n";
echo 
$sandbox_output;
?>

El resultado del ejemplo sería:

Sandbox Completado

Hola
string(9) "Lo sientoe"
Me perdí.



runkit_superglobals

(PECL runkit >= 0.7.0)

runkit_superglobals Devolver el array indexado numéricamente de las superglobales registradas

Descripción

array runkit_superglobals ( void )

Valores devueltos

Devuelve un array indexado numéricamente de las globales registradas actualmente, esto es, _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER, _ENV, _FILES

Ver también


Tabla de contenidos




Desactivar silenciar errores


Introducción

La extensión scream permite la posibilidad de desactivar el silenciado del operador de control de errores así que todos los errores serán expuestos. Esta característica está controlada por una directiva ini.



Instalación/Configuración

Tabla de contenidos


Requerimientos

Versión de PHP 5.2.0 o superior.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/scream



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración de scream
Nombre Por defecto Cambiable Historial de cambios
scream.enabled Off PHP_INI_ALL  
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

scream.enabled int

Cuando está o no está scream activado.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Ejemplos

Tabla de contenidos


Ejemplo que muestra el efecto de scream

Este ejemplo demuestra como scream afecta el comportamiento del controlador de errores de PHP.

Ejemplo #1 Activando y desactivando scream en tiempo de ejecución

<?php
// Asegurarse de mostrar todos los errores
ini_set('display_errors'true);
error_reporting(E_ALL);

// Desactivar scream - este es el valor por defecto y producirá un error
ini_set('scream.enabled'false);
echo 
"Abriendo http://example.com/not-existing-file\n";
@
fopen('http://example.com/not-existing-file''r');

// Ahora activamos scream y probamos de nuevo
ini_set('scream.enabled'true);
echo 
"Abriendo http://example.com/not-existing-file\n";
@
fopen('http://example.com/another-not-existing-file''r');
?>

El resultado del ejemplo sería algo similar a:

Opening http://example.com/not-existing-file
Opening http://example.com/not-existing-file

Warning: fopen(http://example.com/another-not-existing-file): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in example.php on line 14

Nota: Normalmente se querrá activar esta directiva en el fichero de configuración php.ini en lugar de cambiar el código.





Weak References


Introducción

Weak references provide a non-intrusive gateway to ephemeral objects. Unlike normal (strong) references, weak references do not prevent the garbage collector from freeing that object. For this reason, an object may be destroyed even though a weak reference to that object still exists. In such conditions, the weak reference seamlessly becomes invalid.

Ejemplo #1 Weakref usage example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}
?>

El resultado del ejemplo sería:

Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/weakref.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




The WeakRef class

(PECL weakref >= 0.1.0)

Introducción

The WeakRef class provides a gateway to objects without preventing the garbage collector from freeing those objects. It also provides a way to turn a weak reference into a strong one.

Sinopsis de la Clase

WeakRef {
/* Métodos */
public Weakref::__construct ([ object $object ] )
public bool Weakref::acquire ( void )
public object Weakref::get ( void )
public bool Weakref::release ( void )
public bool Weakref::valid ( void )
}

Ejemplos

Ejemplo #1 WeakRef usage example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new WeakRef($o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}
?>

El resultado del ejemplo sería:

Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!


Weakref::acquire

(PECL weakref >= 0.1.0)

Weakref::acquireAcquires a strong reference on that object

Descripción

public bool Weakref::acquire ( void )

Acquires a strong reference on that object, virtually turning the weak reference into a strong one.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns TRUE if the reference was valid and could be turned into a strong reference, FALSE otherwise.

Ejemplos

Ejemplo #1 Weakref::acquire() example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

$r1->acquire();

echo 
"Unsetting o1...\n";
unset(
$o1);

$o2 $r1->get();

$r1->release();

echo 
"Unsetting o2...\n";
unset(
$o2);
?>

El resultado del ejemplo sería:

Unsetting o1...
Unsetting o2...
Destroying object!

Ejemplo #2 Nested acquire/release example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

echo 
"Acquiring...\n";
$r1->acquire();

echo 
"  Unsetting...\n";
unset(
$o1);

echo 
"  Acquiring...\n";
$r1->acquire();

echo 
"    Acquiring...\n";
$r1->acquire();

echo 
"    Releasing...\n";
$r1->release();

echo 
"  Releasing...\n";
$r1->release();

echo 
"Releasing...\n";
$r1->release();

?>

El resultado del ejemplo sería:

Acquiring...
  Unsetting...
  Acquiring...
    Acquiring...
    Releasing...
  Releasing...
Releasing...
Destroying object!

Ver también



Weakref::__construct

(PECL weakref >= 0.1.0)

Weakref::__constructConstructs a new weak reference

Descripción

public Weakref::__construct() ([ object $object ] )

Constructs a new weak reference.

Parámetros

object

The object to reference.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Weakref::__construct() example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"Object still exists!\n";
    
var_dump($r1->get());
} else {
    echo 
"Object is dead!\n";
}
?>

El resultado del ejemplo sería:

Object still exists!
object(MyClass)#1 (0) {
}
Destroying object!
Object is dead!



Weakref::get

(PECL weakref >= 0.1.0)

Weakref::getReturns the object pointed to by the weak reference

Descripción

public object Weakref::get ( void )

Returns the object pointed to by the weak reference.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns the object if the reference is still valid, NULL otherwise.

Ver también



Weakref::release

(PECL weakref >= 0.1.0)

Weakref::releaseReleases a previously acquired reference

Descripción

public bool Weakref::release ( void )

Releases a previously acquired reference. Potentially turning a strong reference back into a weak reference.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns TRUE if the reference was previously acquired and thus could be released, FALSE otherwise.

Ejemplos

Ejemplo #1 Weakref::release() example

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Destroying object!\n";
    }
}

$o1 = new MyClass;

$r1 = new Weakref($o1);

$r1->acquire();

echo 
"Unsetting o1...\n";
unset(
$o1);

$o2 $r1->get();

$r1->release();

echo 
"Unsetting o2...\n";
unset(
$o2);
?>

El resultado del ejemplo sería:

Unsetting o1...
Unsetting o2...
Destroying object!

Ver también



Weakref::valid

(PECL weakref >= 0.1.0)

Weakref::validChecks whether the object referenced still exists

Descripción

public bool Weakref::valid ( void )

Checks whether the object referenced still exists.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns TRUE if the object still exists and is thus still accessible via Weakref::get(), FALSE otherwise.

Ver también

  • Weakref::get() - Returns the object pointed to by the weak reference


Tabla de contenidos



The WeakMap class

(PECL weakref >= 0.2.0)

Introducción

Sinopsis de la Clase

WeakMap implements Countable , ArrayAccess , Iterator , Traversable {
/* Métodos */
public __construct ( void )
public int count ( void )
public mixed current ( void )
public object key ( void )
public void next ( void )
public bool offsetExists ( object $object )
public mixed offsetGet ( object $object )
public void offsetSet ( object $object , mixed $value )
public void offsetUnset ( object $object )
public void rewind ( void )
public bool valid ( void )
}

Ejemplos

Ejemplo #1 Weakmap usage example

<?php
$wm 
= new WeakMap();

$o = new StdClass;

class 
{
    public function 
__destruct() {
        echo 
"Dead!\n";
    }
}

$wm[$o] = new A;

var_dump(count($wm));
echo 
"Unsetting..\n";
unset(
$o);
echo 
"Done\n";
var_dump(count($wm));

El resultado del ejemplo sería:

int(1)
Unsetting..
Dead!
Done
int(0)


WeakMap::__construct

(PECL weakref >= 0.2.0)

WeakMap::__constructConstructs a new map

Descripción

public WeakMap::__construct ( void )

Constructs a new map.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.



WeakMap::count

(PECL weakref >= 0.2.0)

WeakMap::countCounts the number of live entries in the map

Descripción

public int WeakMap::count ( void )

Counts the number of live entries in the map.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns the number of live entries in the map.



WeakMap::current

(PECL weakref >= 0.2.0)

WeakMap::currentReturns the current value under iteration

Descripción

public mixed WeakMap::current ( void )

Returns the current value being iterated on in the map.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

The value currently being iterated on.



WeakMap::key

(PECL weakref >= 0.2.0)

WeakMap::keyReturns the current key under iteration.

Descripción

public object WeakMap::key ( void )

Returns the object serving as key in the map, at the current iterating position.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

The object key currently being iterated.



WeakMap::next

(PECL weakref >= 0.2.0)

WeakMap::nextAdvances to the next map element

Descripción

public void WeakMap::next ( void )

Advances to the next map element.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.



WeakMap::offsetExists

(PECL weakref >= 0.2.0)

WeakMap::offsetExistsChecks whether a certain object is in the map

Descripción

public bool WeakMap::offsetExists ( object $object )

Checks whether the passed object is referenced in the map.

Parámetros

object

Object to check for.

Valores devueltos

Returns TRUE if the object is contained in the map, FALSE otherwise.



WeakMap::offsetGet

(PECL weakref >= 0.2.0)

WeakMap::offsetGetReturns the value pointed to by a certain object

Descripción

public mixed WeakMap::offsetGet ( object $object )

Returns the value pointed to by a certain object.

Parámetros

object

Some object contained as key in the map.

Valores devueltos

Returns the value associated to the object passed as argument, NULL otherwise.



WeakMap::offsetSet

(PECL weakref >= 0.2.0)

WeakMap::offsetSetUpdates the map with a new key-value pair

Descripción

public void WeakMap::offsetSet ( object $object , mixed $value )

Updates the map with a new key-value pair. If the key already existed in the map, the old value is replaced with the new.

Parámetros

object

The object serving as key of the key-value pair.

value

The arbitrary data serving as value of the key-value pair.

Valores devueltos

No devuelve ningún valor.



WeakMap::offsetUnset

(PECL weakref >= 0.2.0)

WeakMap::offsetUnsetRemoves an entry from the map

Descripción

public void WeakMap::offsetUnset ( object $object )

Removes an entry from the map.

Parámetros

object

The key object to remove from the map.

Valores devueltos

No devuelve ningún valor.



WeakMap::rewind

(PECL weakref >= 0.2.0)

WeakMap::rewindRewinds the iterator to the beginning of the map

Descripción

public void WeakMap::rewind ( void )

Rewinds the iterator to the beginning of the map.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.



WeakMap::valid

(PECL weakref >= 0.2.0)

WeakMap::validReturns whether the iterator is still on a valid map element

Descripción

public bool WeakMap::valid ( void )

Returns whether the iterator is still on a valid map element.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Returns TRUE if the iterator is on a valid element that can be accessed, FALSE otherwise.


Tabla de contenidos




Windows Cache for PHP


Introducción

Windows Cache Extension for PHP is a PHP accelerator that is used to increase the speed of PHP applications running on Windows and Windows Server. Once the Windows Cache Extension for PHP is enabled and loaded by the PHP engine, PHP applications can take advantage of the functionality without any code modifications.

The Windows Cache Extension includes 5 different types of caches. The following describes the purpose of each cache type and the benefits it provides.

  • PHP Opcode Cache - PHP is a script processing engine, which reads an input stream of data that contains text and/or PHP instructions and produces another stream of data, most commonly in the HTML format. This means that on a web server the PHP engine reads, parses, compiles and executes a PHP script each time that it is requested by a Web client. The reading, parsing and compilation operations put additional load on the web server's CPU and file system and thus affect the overall performance of a PHP web application. The PHP bytecode (opcode) cache is used to store the compiled script bytecode in shared memory so that it can be re-used by PHP engine for subsequent executions of the same script.

  • File Cache - Even with the PHP opcode cache enabled, the PHP engine has to accesses the script files on a file system. When PHP scripts are stored on a remote UNC file share, the file operations introduce a significant performance overhead. The Windows Cache Extension for PHP includes a file cache that is used to store the content of the PHP script files in shared memory, which reduces the amount of file system operations performed by PHP engine.

  • Resolve File Path Cache - PHP scripts very often include or operate with files by using relative file paths. Every file path has to be normalized to an absolute file path by the PHP engine. When a PHP application uses many PHP files and accesses them by relative paths, the operation of resolving the paths may negatively impact the application's performance. The Windows Cache Extension for PHP provides a Resolve File Path cache, which is used to store the mappings between relative and absolute file paths, thereby reducing the number of path resolutions that the PHP engine has to perform.

  • User Cache (available since version 1.1.0) - PHP scripts can take advantage of the shared memory cache by using the user cache API's. PHP objects and variables can be stored in the user cache and then re-used on subsequent requests. This can be used to improve performance of PHP scripts and to share the data across multiple PHP processes.

  • Session Handler (available since version 1.1.0) - The WinCache session handler can be used to store the PHP session data in the shared memory cache. This avoids file system operations for reading and writing session data, which improves performance when large amount of data is stored in PHP session.



Instalación/Configuración

Tabla de contenidos


Requerimientos

The extension is currently supported only on the following configurations:

Windows OS:

  • Windows XP SP3 with IIS 5.1 and » FastCGI Extension
  • Windows Server 2003 with IIS 6.0 and » FastCGI Extension
  • Windows Vista SP1 with IIS 7.0 and FastCGI Module
  • Windows Server 2008 with IIS 7.0 and FastCGI Module
  • Windows 7 with IIS 7.5 and FastCGI Module
  • Windows Server 2008 R2 with IIS 7.5 and FastCGI Module

PHP:

  • PHP 5.2.X, Non-thread-safe build
  • PHP 5.3 X86, Non-thread-safe VC9 build

Nota: The WinCache Extension can only be used when IIS is configured to run PHP via FastCGI.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/wincache.

There are two packages for this extension: one package is for PHP versions 5.2.X, and the other package is for PHP 5.3.X. Select the package that is appropriate for the PHP version being used.

To install and enable the extension, follow these steps:

  1. Unpack the package into some temporary location.

  2. Copy the php_wincache.dll file into the PHP extensions folder. Typically this folder is called "ext" and it is located in the same folder with all PHP binary files. For example: C:\Program Files\PHP\ext.

  3. Using a text editor, open the php.ini file, which is usually located in the same folder where all PHP binary files are. For example: C:\Program Files\PHP\php.ini.

  4. Add the following line at the end of the php.ini file: extension = php_wincache.dll.

  5. Save and close the php.ini file.

  6. Recycle the IIS Application Pools for PHP to pick up the configuration changes. To check that the extension has been enabled, create a file called phpinfo.php with a PHP code that calls phpinfo function.

  7. Save the phpinfo.php file in the root folder of a IIS web site that uses PHP, then open a browser and make a request to http://localhost/phpinfo.php. Search within the returned web page for a section called wincache. If the extension is enabled, then the phpinfo output will list the configuration settings provided by the WinCache.

Nota: Do not forget to remove phpinfo.php file from the web site's root folder after verifying that extension has been enabled.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

The following table lists and explains the configuration settings provided by the WinCache extension:

WinCache configuration options
Nombre Por defecto Minimum Maximum Cambiable Historial de cambios
wincache.fcenabled "1" "0" "1" PHP_INI_ALL Available since WinCache 1.0.0
wincache.fcenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.fcachesize "24" "5" "255" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.fcndetect "1" "0" "1" PHP_INI_SYSTEM Available since WinCache 1.1.0
wincache.maxfilesize "256" "10" "2048" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ocenabled "1" "0" "1" PHP_INI_ALL Available since WinCache 1.0.0
wincache.ocenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ocachesize "96" "15" "255" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.filecount "4096" "1024" "16384" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.chkinterval "30" "0" "300" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ttlmax "1200" "0" "7200" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.enablecli 0 0 1 PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ignorelist NULL NULL NULL PHP_INI_ALL Available since WinCache 1.0.0
wincache.namesalt NULL NULL NULL PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ucenabled 1 0 1 PHP_INI_SYSTEM Available since WinCache 1.1.0
wincache.ucachesize 8 5 85 PHP_INI_SYSTEM Available since WinCache 1.1.0
wincache.scachesize 8 5 85 PHP_INI_SYSTEM Available since WinCache 1.1.0
wincache.rerouteini NULL NULL NULL PHP_INI_SYSTEM Available since WinCache 1.2.0
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

wincache.fcenabled boolean
Enables or disables the file cache functionality.
wincache.fcenabledfilter string
Defines a comma-separated list of IIS web site identifiers where file cache should be enabled or disabled. This setting works in conjunction with wincache.fcenabled: if wincache.fcenabled is set to 1, then the sites listed in the wincache.fcenabledfilter will have the file cache turned off; if wincache.fcenabled is set to 0, then the sites listed in the wincache.fcenabledfilter will have the file cache turned on.
wincache.fcachesize integer
Defines the maximum memory size (in megabytes) that is allocated for the file cache. If the total size of all the cached files exceeds the value specified in this setting, then most stale files will be removed from the file cache.
wincache.fcndetect boolean
Enables or disables the file change notification detection functionality. If file change notification is supported then it will be used to refresh the opcode and file cache entries as soon as the corresponding files are modified on a file system. If file change notification is not supported, for example when using network file shares, then wincache will poll for file changes at regular time intervals specified by wincache.chkinterval.
wincache.maxfilesize integer
Defines the maximum allowed size (in kilobytes) for a single file to be cached. If a file size exceeds the specified value, the file will not be cached. This setting applies to the file cache only.
wincache.ocenabled boolean
Enables or disables the opcode cache functionality
wincache.ocenabledfilter string
Defines a comma-separated list of IIS web site identifiers where opcode cache should be enabled or disabled. This setting works in conjunction with wincache.ocenabled: if wincache.ocenabled is set to 1, then the sites listed in the wincache.ocenabledfilter will have the opcode cache turned off; if wincache.ocenabled is set to 0, then the sites listed in the wincache.ocenabledfilter will have the opcode cache turned on.
wincache.ocachesize integer
Defines the maximum memory size (in megabytes) that is allocated for the opcode cache. If the cached opcode size exceeds the specified value, then most stale opcode will be removed from the cache. Note that the opcode cache size must be at least 3 times bigger than file cache size. If that is not the case the opcode cache size will be automatically increased.
wincache.filecount integer
Defines how many files are expected to be cached by the extension, so that appropriate memory size is allocated at the startup time. If the number of files exceeds the specified value, the WinCache will re-allocate more memory as needed.
wincache.chkinterval integer
Defines how often (in seconds) the extension checks for file changes in order to refresh the cache. Setting it to 0 will disable the refreshing of the cache. The file changes will not be reflected in the cache unless the cache entry for that file is removed by scavenger or IIS application pool is recycled or wincache_refresh_if_changed function is called.
wincache.ttlmax integer
Defines the maximum time to live (in seconds) for a cached entry without being used. Setting it to 0 will disable the cache scavenger, so the cached entries will never be removed from the cache during the lifetime of the IIS worker process.
wincache.enablecli boolean
Defines if caching is enabled when PHP is running in command line (CLI) mode.
wincache.ignorelist string

Defines a list of files that should not be cached by the extension. The files list is specified by using file names only, separated by the pipe symbol - "|".

Ejemplo #1 wincache.ignorelist example

wincache.ignorelist = "index.php|misc.php|admin.php"

wincache.namesalt string
Defines a string that will be used when naming the extension specific objects that are stored in shared memory. This is used to avoid conflicts that may be caused if other applications within an IIS worker process tries to access shared memory. The length of the namesalt string cannot exceed 8 characters.
wincache.ucenabled boolean
Enables or disables the user cache functionality.
wincache.ucachesize integer
Defines the maximum memory size in megabytes that is allocated for the user cache. If the total size of variables stored in the user cache exceeds the specified value, then the most stale variables will be removed from the cache.
wincache.scachesize integer
Defines the maximum memory size in megabytes that is allocated for the session cache. If the total size of data stored in the session cache exceeds the specified value, then the most stale data will be removed from the cache.
wincache.rerouteini string
Specifies an absolute or a relateve path to the reroute.ini file that contains the list of PHP functions whose implementation should be replaced with the WinCache function equivalents. If a relative path is specified then it is assumed to be relative to the location of php-cgi.exe file.



WinCache Statistics Script

The installation package for WinCache includes a PHP script, wincache.php, that can be used to obtain cache information and statistics.

If the WinCache extension was installed via the Microsoft Web Platform Installer, then this script is located in %SystemDrive%\Program Files\IIS\Windows Cache for PHP\. On a 64-bit version of the Windows Server operating system, the script is located in %SystemDrive%\Program Files (x86)\IIS\Windows Cache for PHP. If the extension was installed manually, then the wincache.php will be located in the same folder from which the content of the installation package was extracted.

To use wincache.php, copy it into a root folder of a Web site or into any subfolder. To protect the script, open it in any text editor and replace the values for USERNAME and PASSWORD constants. If any other IIS authentication is enabled on the server, then follow the instructions in the comments:

Ejemplo #1 Authentication configuration for wincache.php

<?php
/**
 * ======================== CONFIGURATION SETTINGS ==============================
 * If you do not want to use authentication for this page, set USE_AUTHENTICATION to 0.
 * If you use authentication then replace the default password.
 */
define('USE_AUTHENTICATION'1);
define('USERNAME''wincache');
define('PASSWORD''wincache');

/**
 * The Basic PHP authentication will work only when IIS is configured to support 
 * Anonymous Authentication' and nothing else. If IIS is configured to support/use
 * any other kind of authentication like Basic/Negotiate/Digest etc, this will not work.
 * In that case use the array below to define the names of users in your 
 * domain/network/workgroup which you want to grant access to.
 */
$user_allowed = array('DOMAIN\user1''DOMAIN\user2''DOMAIN\user3');

/**
 * If the array contains string 'all', then all the users authenticated by IIS
 * will have access to the page. Uncomment the below line and comment above line
 * to grant access to all users who gets authenticated by IIS.
 */
/* $user_allowed = array('all'); */

/** ===================== END OF CONFIGURATION SETTINGS ========================== */
?>

Nota: Always protect the wincache.php script by using either the built-in authentication or the server's authentication mechanism. Leaving this script unprotected may compromise the security of your web application and web server.



WinCache Session Handler

The WinCache session handler (available since WinCache 1.1.0) can be used to configure PHP to store the session data in shared memory session cache. Using shared memory instead of the default file session storage helps improve performance of PHP applications that store large amount of data in session objects. Wincache session cache uses file-backed shared memory, which ensures that the session data is not lost during recycling of IIS application pools.

To configure PHP to use WinCache session handler set the php.ini setting session.save_handler to wincache. By default the Windows temporary file location is used for storing the session data. To change the location of the session file use session.save_path directive.

Ejemplo #1 Enabling WinCache session handler

session.save_handler = wincache
session.save_path = C:\inetpub\temp\session\



WinCache Functions Reroutes

The WinCache functions reroutes (available since WinCache 1.2.0) can be used to replace built-in PHP functions with their equivalents that are optimized for a particular purpose. WinCache extension includes Windows-optimized implementation of PHP file functions that may improve performance of PHP applications in cases when PHP has to access files on network shares. The optimized implementation is provided for the following functions:

To configure WinCache to use the functions reroutes use the file reroute.ini that is included in WinCache installation package. Copy this file into the same directory where php.ini file is located. After that add the wincache.rerouteini setting in php.ini and specify an absolute or relative path to the reroute.ini file.

Ejemplo #1 Enabling WinCache functions reroutes

wincache.rerouteini = C:\PHP\reroute.ini

Nota: If WinCache functions reroutes are enabled it is recommended to increase the WinCache file cache size. This can be done by using wincache.fcachesize setting.

The reroute.ini file contains the mappings between the native PHP functions and their equivalents in WinCache. Each line in the file defines a mapping by using the following syntax:

<PHP function name>:[<number of function parameters>]=<wincache function name>

The example of the file is shown below. In this example the calls to PHP function file_get_contents() will be replaced with calls to wincache_file_get_contents() only if the number of parameters passed to the function is less than or equals to 2. Specifying the number of parameters is useful when replacement function does not handle all the function's parameters.

Ejemplo #2 Reroute.ini file content

[FunctionRerouteList]
file_exists=wincache_file_exists
file_get_contents:2=wincache_file_get_contents
readfile:2=wincache_readfile
is_readable=wincache_is_readable
is_writable=wincache_is_writable
is_writeable=wincache_is_writable
is_file=wincache_is_file
is_dir=wincache_is_dir
realpath=wincache_realpath
filesize=wincache_filesize



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Funciones de WinCache


wincache_fcache_fileinfo

(PECL wincache >= 1.0.0)

wincache_fcache_fileinfo Retrieves information about files cached in the file cache

Descripción

array wincache_fcache_fileinfo ([ bool $summaryonly = false ] )

Retrieves information about file cache content and its usage.

Parámetros

summaryonly

Controls whether the returned array will contain information about individual cache entries along with the file cache summary.

Valores devueltos

Array of meta data about file cache o FALSE en caso de error

The array returned by this function contains the following elements:

  • total_cache_uptime - total time in seconds that the file cache has been active
  • total_file_count - total number of files that are currently in the file cache
  • total_hit_count - number of times the files have been served from the file cache
  • total_miss_count - number of times the files have not been found in the file cache
  • file_entries - an array that contains the information about all the cached files:

    • file_name - absolute file name of the cached file
    • add_time - time in seconds since the file has been added to the file cache
    • use_time - time in seconds since the file has been accessed in the file cache
    • last_check - time in seconds since the file has been checked for modifications
    • hit_count - number of times the file has been served from the cache
    • file_size - size of the cached file in bytes

Ejemplos

Ejemplo #1 A wincache_fcache_fileinfo() example

<pre>
<?php
print_r
(wincache_fcache_fileinfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(   [total_cache_uptime] => 3234
    [total_file_count] => 5
    [total_hit_count] => 0
    [total_miss_count] => 1
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 1
                    [use_time] => 0
                    [last_check] => 1
                    [hit_count] => 1
                    [file_size] => 2435
                )
            [2] => Array (...iterates for each cached file)
        )
)

Ver también



wincache_fcache_meminfo

(PECL wincache >= 1.0.0)

wincache_fcache_meminfo Retrieves information about file cache memory usage

Descripción

array wincache_fcache_meminfo ( void )

Retrieves information about memory usage by file cache.

Valores devueltos

Array of meta data about file cache memory usage o FALSE en caso de error

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the file cache
  • memory_free - amount of free memory in bytes available for the file cache
  • num_used_blks - number of memory blocks used by the file cache
  • num_free_blks - number of free memory blocks available for the file cache
  • memory_overhead - amount of memory in bytes used for the file cache internal structures

Ejemplos

Ejemplo #1 A wincache_fcache_meminfo() example

<pre>
<?php
print_r
(wincache_fcache_meminfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [memory_total] => 134217728
    [memory_free] => 131339120
    [num_used_blks] => 361
    [num_free_blks] => 3
    [memory_overhead] => 5856
)

Ver también



wincache_lock

(PECL wincache >= 1.1.0)

wincache_lock Acquires an exclusive lock on a given key

Descripción

bool wincache_lock ( string $key [, bool $isglobal = false ] )

Obtains an exclusive lock on a given key. The execution of the current script will be blocked until the lock can be obtained. Once the lock is obtained, the other scripts that try to request the lock by using the same key will be blocked, until the current script releases the lock by using wincache_unlock().

Advertencia

Using of the wincache_lock() and wincache_unlock() can cause deadlocks when executing PHP scripts in a multi-process environment like FastCGI. Do not use these functions unless you are absolutely sure you need to use them. For the majority of the operations on the user cache it is not necessary to use these functions.

Parámetros

key

Name of the key in the cache to get the lock on.

isglobal

Controls whether the scope of the lock is system-wide or local. Local locks are scoped to the application pool in IIS FastCGI case or to all php processes that have the same parent process identifier.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Using wincache_lock()

<?php
$fp 
fopen("/tmp/lock.txt""r+");
if (
wincache_lock(“lock_txt_lock”)) { // do an exclusive lock
    
ftruncate($fp0); // truncate file
    
fwrite($fp"Write something here\n");
    
wincache_unlock(“lock_txt_lock”); // release the lock
} else {
    echo 
"Couldn't get the lock!";
}
fclose($fp);
?>

Ver también



wincache_ocache_fileinfo

(PECL wincache >= 1.0.0)

wincache_ocache_fileinfo Retrieves information about files cached in the opcode cache

Descripción

array wincache_ocache_fileinfo ([ bool $summaryonly = false ] )

Retrieves information about opcode cache content and its usage.

Parámetros

summaryonly

Controls whether the returned array will contain information about individual cache entries along with the opcode cache summary.

Valores devueltos

Array of meta data about opcode cache o FALSE en caso de error

The array returned by this function contains the following elements:

  • total_cache_uptime - total time in seconds that the opcode cache has been active
  • total_file_count - total number of files that are currently in the opcode cache
  • total_hit_count - number of times the compiled opcode have been served from the cache
  • total_miss_count - number of times the compiled opcode have not been found in the cache
  • is_local_cache - true is the cache metadata is for a local cache instance, false if the metadata is for the global cache
  • file_entries - an array that contains the information about all the cached files:

    • file_name - absolute file name of the cached file
    • add_time - time in seconds since the file has been added to the opcode cache
    • use_time - time in seconds since the file has been accessed in the opcode cache
    • last_check - time in seconds since the file has been checked for modifications
    • hit_count - number of times the file has been served from the cache
    • function_count - number of functions in the cached file
    • class_count - number of classes in the cached file

Ejemplos

Ejemplo #1 A wincache_ocache_fileinfo() example

<pre>
<?php
print_r
(wincache_ocache_fileinfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [total_cache_uptime] => 17357
    [total_file_count] => 121
    [total_hit_count] => 36562
    [total_miss_count] => 201
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 17356
                    [use_time] => 7
                    [last_check] => 10
                    [hit_count] => 454
                    [function_count] => 0
                    [class_count] => 1
                )
            [2] => Array (...iterates for each cached file)
        )
)

Ver también



wincache_ocache_meminfo

(PECL wincache >= 1.0.0)

wincache_ocache_meminfo Retrieves information about opcode cache memory usage

Descripción

array wincache_ocache_meminfo ( void )

Retrieves information about memory usage by opcode cache.

Valores devueltos

Array of meta data about opcode cache memory usage o FALSE en caso de error

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the opcode cache
  • memory_free - amount of free memory in bytes available for the opcode cache
  • num_used_blks - number of memory blocks used by the opcode cache
  • num_free_blks - number of free memory blocks available for the opcode cache
  • memory_overhead - amount of memory in bytes used for the opcode cache internal structures

Ejemplos

Ejemplo #1 A wincache_ocache_meminfo() example

<pre>
<?php
print_r
(wincache_ocache_meminfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [memory_total] => 134217728
    [memory_free] => 112106972
    [num_used_blks] => 15469
    [num_free_blks] => 4
    [memory_overhead] => 247600
)

Ver también



wincache_refresh_if_changed

(PECL wincache >= 1.0.0)

wincache_refresh_if_changed Refreshes the cache entries for the cached files

Descripción

bool wincache_refresh_if_changed ([ array $files ] )

Refreshes the cache entries for the files, whose names were passed in the input argument. If no argument is specified then refreshes all the entries in the cache.

Parámetros

files

An array of file names for files that need to be refreshed. An absolute or relative file paths can be used.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

WinCache performs regular checks on the cached files to ensure that if any file has changed then the corresponding entry in the cache is updated. By default this check is performed every 30 seconds. If, for example, a PHP script updates another PHP script where the application's configuration settings are stored, then it may happen that after the configuration settings have been saved to a file, the application is still using old settings for some time until the cache is refreshed. In those cases it may be preferrable to refresh the cache right after the file has been changed. The following example shows how this can be done.

Ejemplo #1 A wincache_refresh_if_changed() example

<?php 
$filename 
'C:\inetpub\wwwroot\config.php';
$handle fopen($filename'w+');
if (
$handle === FALSE) die('Failed to open file '.$filename.' for writing');
fwrite($handle'<?php $setting=something; ?>');
fclose($handle);
wincache_refresh_if_changed(array($filename));
?>

Ver también



wincache_rplist_fileinfo

(PECL wincache >= 1.0.0)

wincache_rplist_fileinfo Retrieves information about resolve file path cache

Descripción

array wincache_rplist_fileinfo ([ bool $summaryonly = false ] )

Retrieves information about cached mappings between relative file paths and corresponding absolute file paths.

Valores devueltos

Array of meta data about the resolve file path cache o FALSE en caso de error

The array returned by this function contains the following elements:

  • total_file_count - total number of file path mappings stored in the cache
  • rplist_entries - an array that contains the information about all the cached file paths:

    • resolve_path - path to a file
    • subkey_data - corresponding absolute path to a file

Ejemplos

Ejemplo #1 A wincache_rplist_fileinfo() example

<pre>
<?php
print_r
(wincache_rplist_fileinfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [total_file_count] => 5
    [rplist_entries] => Array
        (
            [1] => Array
                (
                    [resolve_path] => checkcache.php
                    [subkey_data] => c:\inetpub\wwwroot|c:\inetpub\wwwroot\checkcache.php
                )

            [2] => Array (...iterates for each cached file)
        )
)

Ver también



wincache_rplist_meminfo

(PECL wincache >= 1.0.0)

wincache_rplist_meminfo Retrieves information about memory usage by the resolve file path cache

Descripción

array wincache_rplist_meminfo ( void )

Retrieves information about memory usage by resolve file path cache.

Valores devueltos

Array of meta data that describes memory usage by resolve file path cache. o FALSE en caso de error

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the resolve file path cache
  • memory_free - amount of free memory in bytes available for the resolve file path cache
  • num_used_blks - number of memory blocks used by the resolve file path cache
  • num_free_blks - number of free memory blocks available for the resolve file path cache
  • memory_overhead - amount of memory in bytes used for the internal structures of resolve file path cache

Ejemplos

Ejemplo #1 A wincache_rplist_meminfo() example

<pre>
<?php
print_r
(wincache_rplist_meminfo());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [memory_total] => 9437184
    [memory_free] => 9416744
    [num_used_blks] => 23
    [num_free_blks] => 1
    [memory_overhead] => 416
)

Ver también



wincache_scache_info

(PECL wincache >= 1.1.0)

wincache_scache_info Retrieves information about files cached in the session cache

Descripción

array wincache_scache_info ([ bool $summaryonly = false ] )

Retrieves information about session cache content and its usage.

Parámetros

summaryonly

Controls whether the returned array will contain information about individual cache entries along with the session cache summary.

Valores devueltos

Array of meta data about session cache o FALSE en caso de error

The array returned by this function contains the following elements:

  • total_cache_uptime - total time in seconds that the session cache has been active
  • total_item_count - total number of elements that are currently in the session cache
  • is_local_cache - true is the cache metadata is for a local cache instance, false if the metadata is for the global cache
  • total_hit_count - number of times the data has been served from the cache
  • total_miss_count - number of times the data has not been found in the cache
  • scache_entries - an array that contains the information about all the cached items:

    • key_name - name of the key which is used to store the data
    • value_type - type of value stored by the key
    • use_time - time in seconds since the file has been accessed in the opcode cache
    • last_check - time in seconds since the file has been checked for modifications
    • ttl_seconds - time remaining for the data to live in the cache, 0 meaning infinite
    • age_seconds - time elapsed from the time data has been added in the cache
    • hitcount - number of times data has been served from the cache

Ejemplos

Ejemplo #1 A wincache_scache_info() example

<pre>
<?php
print_r
(wincache_scache_info());
?>
</pre>

El resultado del ejemplo sería:

Array
(
    [total_cache_uptime] => 17357
    [total_file_count] => 121
    [total_hit_count] => 36562
    [total_miss_count] => 201
    [scache_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 17356
                    [use_time] => 7
                    [last_check] => 10
                    [hit_count] => 454
                    [function_count] => 0
                    [class_count] => 1
                )
            [2] => Array (...iterates for each cached file)
        )
)

Ver también



wincache_scache_meminfo

(PECL wincache >= 1.1.0)

wincache_scache_meminfo Recupera información sobre el uso de memoria caché de sesión

Descripción

array wincache_scache_meminfo ( void )

Recupera información sobre el uso de memoria caché de la sesión.

Valores devueltos

Array de metadatos sobre el uso de la memoria caché de sesión o FALSE en caso de error

El array devuelto por esta función contiene los siguientes elementos:

  • memory_total - cantidad de memoria en bytes asignado para la caché de sesión
  • memory_free - cantidad de memoria libre en bytes disponible para la caché de sesión
  • num_used_blks - número de bloques de memoria utilizados por el caché de la sesión
  • num_free_blks - número de bloques disponibles en la memoria de la caché de sesión
  • memory_overhead - cantidad de memoria en bytes utilizado para las estructuras de sesión de caché interna

Ejemplos

Ejemplo #1 Ejemplo de wincache_scache_meminfo()

<pre>
<?php
print_r
(wincache_scache_meminfo());
?>
</pre>

El resultado del ejemplo sería:

Array 
( 
    [memory_total] => 5242880 
    [memory_free] => 5215056 
    [num_used_blks] => 6 
    [num_free_blks] => 3 
    [memory_overhead] => 176
) 

Ver también



wincache_ucache_add

(PECL wincache >= 1.1.0)

wincache_ucache_add Adds a variable in user cache only if variable does not already exist in the cache

Descripción

bool wincache_ucache_add ( string $key , mixed $value [, int $ttl = 0 ] )
bool wincache_ucache_add ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Adds a variable in user cache, only if this variable doesn't already exist in the cache. The added variable remains in the user cache unless its time to live expires or it is deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.

Parámetros

key

Store the variable using this key name. If a variable with same key is already present the function will fail and return FALSE. key is case sensitive. To override the value even if key is present use wincache_ucache_set() function instad. key can also take array of name => value pairs where names will be used as keys. This can be used to add multiple values in the cache in one operation, thus avoiding race condition.

value

Value of a variable to store. Value supports all data types except resources, such as file handles. This paramter is ignored if first argument is an array. A general guidance is to pass NULL as value while using array as key. If value is an object, or an array containing objects, then the objects will be serialized. See __sleep() for details on serializing objects.

values

Associative array of keys and values.

ttl

Time for the variable to live in the cache in seconds. After the value specified in ttl has passed the stored variable will be deleted from the cache. This parameter takes a default value of 0 which means the variable will stay in the cache unless explicitly deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.

Valores devueltos

If key is string, the function returns TRUE on success and FALSE on failure.

If key is an array, the function returns:

  • If all the name => value pairs in the array can be set, function returns an empty array;
  • If all the name => value pairs in the array cannot be set, function returns FALSE;
  • If some can be set while others cannot, function returns an array with name=>value pair for which the addition failed in the user cache.

Ejemplos

Ejemplo #1 wincache_ucache_add() with key as a string

<?php
$bar 
'BAR';
var_dump(wincache_ucache_add('foo'$bar));
var_dump(wincache_ucache_add('foo'$bar));
var_dump(wincache_ucache_get('foo'));
?>

El resultado del ejemplo sería:

bool(true)
bool(false)
string(3) "BAR" 

Ejemplo #2 wincache_ucache_add() with key as an array

<?php
$colors_array 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_add($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>

El resultado del ejemplo sería:

array(0) { } 
array(4) { 
  ["green"]=> int(-1) 
  ["Blue"]=> int(-1) 
  ["yellow"]=> int(-1) 
  ["cyan"]=> int(-1) 
} 
string(1) "6"

Ver también



wincache_ucache_cas

(PECL wincache >= 1.1.0)

wincache_ucache_cas Compara la variable con el valor antiguo y le asigna un nuevo valor a este

Descripción

bool wincache_ucache_cas ( string $key , int $old_value , int $new_value )

Compara la variable asociada con la key con old_value y si coincide entonces asigna el new_value a este.

Parámetros

key

El parámetro key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas.

old_value

Valor anterior de la variable apuntada por key en la memoria caché del usuario. El valor debe ser de tipo long, en caso contrario la función devuelve FALSE.

new_value

El nuevo valor que se asigna a una variable New value which will get assigned to variable indicado por la key si se encuentra una coincidencia. El valor debe ser de tipo long, en caso contrario la función devolverá FALSE.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Usando wincache_ucache_cas()

<?php
wincache_ucache_set
('counter'2922);
var_dump(wincache_ucache_cas('counter'29221));
var_dump(wincache_ucache_get('counter'));
?>

El resultado del ejemplo sería:

bool(true) 
int(1)

Ver también



wincache_ucache_clear

(PECL wincache >= 1.1.0)

wincache_ucache_clear Elimina todo el contenido de la caché del usuario

Descripción

bool wincache_ucache_clear ( void )

Borra o elimina todos los valores almacenados en la caché del usuario.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Usando wincache_ucache_clear()

<?php
wincache_ucache_set
('green'1);
wincache_ucache_set('red'2);
wincache_ucache_set('orange'4);
wincache_ucache_set('blue'8);
wincache_ucache_set('cyan'16);
$array1 = array('green''red''orange''blue''cyan');
var_dump(wincache_ucache_get($array1));
var_dump(wincache_ucache_clear());
var_dump(wincache_ucache_get($array1));
?>

El resultado del ejemplo sería:

array(5) { ["green"]=> int(1) 
           ["red"]=> int(2) 
           ["orange"]=> int(4) 
           ["blue"]=> int(8) 
           ["cyan"]=> int(16) } 
bool(true) 
bool(false) 

Ver también



wincache_ucache_dec

(PECL wincache >= 1.1.0)

wincache_ucache_dec Disminuye el valor asociado a la clave

Descripción

mixed wincache_ucache_dec ( string $key [, int $dec_by = 1 [, bool &$success ]] )

Disminuye el valor asociado a la key por 1 o como se especifica por dec_by.

Parámetros

key

El parámetro key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas.

dec_by

El valor de la variable asociada por el que conseguirá que key disminuya. Si el argumento es un número de punto flotante se truncará al integer más cercano. La variable asociada con la key debe ser de tipo long, en caso contrario la función falla y devolverá FALSE.

success

Será establecido a TRUE en caso de éxito y FALSE en caso de error.

Valores devueltos

Devuelve el valor decrementado en caso de éxito y FALSE en caso de error.

Ejemplos

Ejemplo #1 Usando wincache_ucache_dec()

<?php
wincache_ucache_set
('counter'1);
var_dump(wincache_ucache_dec('counter'2923$success));
var_dump($success);
?>

El resultado del ejemplo sería:

int(2922) 
bool(true)

Ver también



wincache_ucache_delete

(PECL wincache >= 1.1.0)

wincache_ucache_delete Elimina las variables de la memoria caché del usuario

Descripción

bool wincache_ucache_delete ( mixed $key )

Elimina los elementos de la caché del usuario apuntado por key.

Parámetros

key

El parámetro key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas. key puede ser un array de claves.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Si key es un array, entonces la función devuelve FALSE si cada elemento del array no se borra de la memoria caché del usuario, en caso contrario devuelve un array que consta de todas las claves que se eliminan.

Ejemplos

Ejemplo #1 Usando wincache_ucache_delete() con key como un string

<?php
wincache_ucache_set
('foo''bar');
var_dump(wincache_ucache_delete('foo'));
var_dump(wincache_ucache_exists('foo'));
?>

El resultado del ejemplo sería:

bool(true)
bool(false)

Ejemplo #2 Usingwincache_ucache_delete() con key como un array

<?php
$array1 
= array('green' => '5''blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green''blue''yellow''cyan');
var_dump(wincache_ucache_delete($array2));
?>

El resultado del ejemplo sería:

array(4) { [0]=> string(5) "green" 
           [1]=> string(4) "Blue" 
           [2]=> string(6) "yellow" 
           [3]=> string(4) "cyan" } 

Ejemplo #3 Using wincache_ucache_delete() con key como un array donde algunos elementos no se pueden eliminar

<?php
$array1 
= array('green' => '5''blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('orange''red''yellow''cyan');
var_dump(wincache_ucache_delete($array2));
?>

El resultado del ejemplo sería:

array(2) { [0]=> string(6) "yellow" 
           [1]=> string(4) "cyan" }

Ver también



wincache_ucache_exists

(PECL wincache >= 1.1.0)

wincache_ucache_exists Comprueba si una variable existe en la caché del usuario

Descripción

bool wincache_ucache_exists ( string $key )

Comprueba si una variable con la key existe en la caché de usuario o no.

Parámetros

key

La key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas.

Valores devueltos

Devuelve TRUE si la variable con la key existe, en caso contrario devuelve FALSE.

Ejemplos

Ejemplo #1 Usando wincache_ucache_exists()

<?php
if (!wincache_ucache_exists('green'))
    
wincache_ucache_set('green'1);
var_dump(wincache_ucache_exists('green'));
?>

El resultado del ejemplo sería:

bool(true)

Ver también



wincache_ucache_get

(PECL wincache >= 1.1.0)

wincache_ucache_get Obtiene una variable almacenada en la caché del usuario

Descripción

mixed wincache_ucache_get ( mixed $key [, bool &$success ] )

Obtiene una variable almacenada en la caché del usuario.

Parámetros

key

La key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas. key puede ser un array de claves. En este caso el valor de retorno será un array de valores de cada elemento en el array key. Si un objeto, o un array que contiene objetos, es retornado, entonces los objetos serán decodificados. Véase __wakeup() para más detalles sobre decodificar objetos.

success

Se establecerá en TRUE en caso de éxito y FALSE en caso de error.

Valores devueltos

Si key es un string, la función devuelve el valor de la variable almacenada con esa clave. El parámetro success es establecido a TRUE en caso de éxito y a FALSE en caso de error.

El parámetro key es un array, el parámetro success siempre se establece en TRUE. El array devuelto (pares nombre => valor) will contendrá sólo aquellos pares nombre => valor en donde la operación de obtención de caché de usuario se ha realizado correctamente. Si ninguna de las claves del array encuentran una coincidencia en la caché del usuario, un array vacío será devuelto.

Ejemplos

Ejemplo #1 wincache_ucache_get() con key como un string

<?php
wincache_ucache_add
('color''blue');
var_dump(wincache_ucache_get('color'$success));
var_dump($success);
?>

El resultado del ejemplo sería:

string(4) "blue"
bool(true)

Ejemplo #2 wincache_ucache_get() con key como un array

<?php
$array1 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
wincache_ucache_set($array1);
$array2 = array('green''Blue''yellow''cyan');
var_dump(wincache_ucache_get($array2$success));
var_dump($success);
?>

El resultado del ejemplo sería:

array(4) { ["green"]=> string(1) "5" 
           ["Blue"]=> string(1) "6" 
           ["yellow"]=> string(1) "7" 
           ["cyan"]=> string(1) "8" } 
bool(true) 

Ver también



wincache_ucache_inc

(PECL wincache >= 1.1.0)

wincache_ucache_inc Incrementa el valor asociado a la clave

Descripción

mixed wincache_ucache_inc ( string $key [, int $inc_by = 1 [, bool &$success ]] )

Incrementa el valor asociado a la key por 1 o como se especifica por inc_by.

Parámetros

key

La key que se utiliza para almacenar la variable en la caché. key distingue mayúsculas de minúsculas.

inc_by

El valor por el cual la variable asociada con la key será incrementada. Si el argumento es un número de punto flotante se truncará al integer más cercano. La variable asociada con la key debe ser de tipo long, de lo contrario la función falla y devuelve FALSE.

success

Se establecerá en TRUE en caso de éxito y FALSE en caso de error.

Valores devueltos

Devuelve el valor incrementado en caso de éxito y FALSE en caso de error.

Ejemplos

Ejemplo #1 Usando wincache_ucache_inc()

<?php
wincache_ucache_set
('counter'1);
var_dump(wincache_ucache_inc('counter'2921$success));
var_dump($success);
?>

El resultado del ejemplo sería:

int(2922) 
bool(true)

Ver también



wincache_ucache_info

(PECL wincache >= 1.1.0)

wincache_ucache_info Recupera información sobre los datos almacenados en la caché del usuario

Descripción

array wincache_ucache_info ([ bool $summaryonly = false [, string $key ]] )

Recupera información sobre los datos almacenados en la caché del usuario.

Parámetros

summaryonly

Controla si el array devuelto contiene información sobre las entradas de caché individuales junto con el resumen caché del usuario.

key

La clave de una entrada en la caché del usuario. Si se especifica a continuación, el array devuelto contendrá información sólo acerca de que la entrada de caché. Si no se especifica y summaryonly es establecido a FALSE entonces el array devuelto contendrá información sobre todas las entradas en la caché.

Valores devueltos

Array de metadatos sobre caché de usuario o FALSE en caso de error

El array devuelto por esta función contiene los siguientes elementos:

  • total_cache_uptime - tiempo total en segundos que el caché de usuario ha sido activo
  • total_item_count - número total de elementos que están actualmente en la caché del usuario
  • is_local_cache - true si el caché es de metadatos para una instancia de caché local, false si los metadatos es para el la caché global
  • total_hit_count - número de veces que los datos se han servido de la memoria caché
  • total_miss_count - número de veces que los datos no se han encontrado en la caché
  • ucache_entries - un array que contiene la información sobre todos los elementos almacenados en caché:

    • key_name - nombre de la clave que se utiliza para almacenar los datos
    • value_type - tipo de valor almacenado por la clave
    • use_time - tiempo en segundos desde el fichero ha sido visitado en la caché de código de operación
    • last_check - tiempo en segundos desde el fichero ha sido chequeado para modificaciones
    • is_session - indica si los datos son una variable de sesión
    • ttl_seconds - el tiempo restante de los datos a vivir en la memoria caché, 0 significa infinito
    • age_seconds - tiempo transcurrido desde el momento que los datos han sido añadidos en la caché
    • hitcount - número de veces que los datos se han servido de la memoria caché

Ejemplos

Ejemplo #1 Usar wincache_ucache_info()

<?php
wincache_ucache_get
('green');
wincache_ucache_set('green'2922);
wincache_ucache_get('green');
wincache_ucache_get('green');
wincache_ucache_get('green');
print_r(wincache_ucache_info());
?>

El resultado del ejemplo sería:

Array 
( ["total_cache_uptime"] => int(0)
  ["is_local_cache"] => bool(false)
  ["total_item_count"] => int(1) 
  ["total_hit_count"] => int(3) 
  ["total_miss_count"] => int(1) 
  ["ucache_entries"] => Array(1) 
    ( [1] => Array(6)
      ( 
        ["key_name"] => string(5) "green"
        ["value_type"] => string(4) "long" 
        ["is_session"] => int(0) 
        ["ttl_seconds"] => int(0)
        ["age_seconds"] => int(0)
        ["hitcount"] => int(3) 
       ) 
    ) 
)

Ver también



wincache_ucache_meminfo

(PECL wincache >= 1.1.0)

wincache_ucache_meminfo Recupera información sobre el uso de memoria caché de usuario

Descripción

array wincache_ucache_meminfo ( void )

Recupera información sobre el uso de memoria caché del usuario.

Valores devueltos

Array de metadatos sobre el uso de la memoria caché de usuario o FALSE en caso de error

El array devuelto por esta función contiene los siguientes elementos:

  • memory_total - cantidad de memoria en bytes asignado para la caché de usuario
  • memory_free - cantidad de memoria libre en bytes disponible para la caché de usuario
  • num_used_blks - número de bloques de memoria utilizados por el caché del usuario
  • num_free_blks - número de bloques disponibles en la memoria de la caché del usuario
  • memory_overhead - cantidad de memoria en bytes utilizado para las estructuras de los usuarios de caché interna

Ejemplos

Ejemplo #1 Ejemplo de wincache_ucache_meminfo()

<pre>
<?php
print_r
(wincache_ucache_meminfo());
?>
</pre>

El resultado del ejemplo sería:

Array 
( 
    [memory_total] => 5242880 
    [memory_free] => 5215056 
    [num_used_blks] => 6 
    [num_free_blks] => 3 
    [memory_overhead] => 176
) 

Ver también



wincache_ucache_set

(PECL wincache >= 1.1.0)

wincache_ucache_set Adds a variable in user cache and overwrites a variable if it already exists in the cache

Descripción

bool wincache_ucache_set ( mixed $key , mixed $value [, int $ttl = 0 ] )
bool wincache_ucache_set ( array $values [, mixed $unused [, int $ttl = 0 ]] )

Adds a variable in user cache. Overwrites a variable if it already exists in the cache. The added or updated variable remains in the user cache unless its time to live expires or it is deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.

Parámetros

key

Store the variable using this key name. If a variable with same key is already present the function will overwrite the previous value with the new one. key is case sensitive. key can also take array of name => value pairs where names will be used as keys. This can be used to add multiple values in the cache in one operation, thus avoiding race condition.

value

Value of a variable to store. Value supports all data types except resources, such as file handles. This paramter is ignored if first argument is an array. A general guidance is to pass NULL as value while using array as key. If value is an object, or an array containing objects, then the objects will be serialized. See __sleep() for details on serializing objects.

values

Associative array of keys and values.

ttl

Time for the variable to live in the cache in seconds. After the value specified in ttl has passed the stored variable will be deleted from the cache. This parameter takes a default value of 0 which means the variable will stay in the cache unless explicitly deleted by using wincache_ucache_delete() or wincache_ucache_clear() functions.

Valores devueltos

If key is string, the function returns TRUE on success and FALSE on failure.

If key is an array, the function returns:

  • If all the name => value pairs in the array can be set, function returns an empty array;
  • If all the name => value pairs in the array cannot be set, function returns FALSE;
  • If some can be set while others cannot, function returns an array with name=>value pair for which the addition failed in the user cache.

Ejemplos

Ejemplo #1 wincache_ucache_set() with key as a string

<?php
$bar 
'BAR';
var_dump(wincache_ucache_set('foo'$bar));
var_dump(wincache_ucache_get('foo'));
$bar1 'BAR1';
var_dump(wincache_ucache_set('foo'$bar1));
var_dump(wincache_ucache_get('foo'));
?>

El resultado del ejemplo sería:

bool(true)
string(3) "BAR"
bool(true)
string(3) "BAR1"

Ejemplo #2 wincache_ucache_set() with key as an array

<?php
$colors_array 
= array('green' => '5''Blue' => '6''yellow' => '7''cyan' => '8');
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_set($colors_array));
var_dump(wincache_ucache_get('Blue'));
?>

El resultado del ejemplo sería:

array(0) {}
array(0) {}
string(1) "6"

Ver también



wincache_unlock

(PECL wincache >= 1.1.0)

wincache_unlock Libera un bloqueo exclusivo sobre una clave dada

Descripción

bool wincache_unlock ( string $key )

Libera un bloqueo exclusivo que se obtuvo en una clave dada mediante wincache_lock(). Si cualquier otro proceso fue bloqueado en espera de el bloqueo en esta clave, este proceso será capaz de obtener el bloqueo.

Advertencia

Usando wincache_lock() y wincache_unlock() puede causar bloqueos al ejecutar los scripts PHP en un entorno de multi-proceso, como FastCGI. No utilice estas funciones a menos que esté absolutamente seguro de que necesitan para su uso. Para la mayoría de las operaciones en la caché de usuario no es necesario el uso de estas funciones.

Parámetros

key

Nombre de la llave en la caché para liberar el bloqueo.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Usar wincache_unlock()

<?php
$fp 
fopen("/tmp/lock.txt""r+");
if (
wincache_lock(“lock_txt_lock”)) { // hacer un bloqueo exclusivo
    
ftruncate($fp0); // truncate file
    
fwrite($fp"Escribir algo aquí\n");
    
wincache_unlock(“lock_txt_lock”); // liberar el bloqueo
} else {
    echo 
"No se pudo obtener el bloqueo!";
}
fclose($fp);
?>

Ver también


Tabla de contenidos



Building for Windows

Tabla de contenidos


Prerequisites

Building WinCache extension will require:

  1. PHP source code
  2. PHP build environment
  3. WinCache source code

For completing first two steps, follow the step-by-step guide for how to » build PHP on Windows.

For getting the WinCache source code follow the instructions described in Downloading PECL extensions.



Compiling and building

The following steps describe how to compile and build WinCache on Windows OS:

  1. Open a command prompt which is used to build PHP

  2. Go to the root folder where PHP sources are present

  3. Run the command:

    cscript.exe win32\build\buildconf.js

  4. Run the command:

    configure.bat --help
    The output will contain a new flag --enable-wincache.

  5. Run the command:

    configure.js [all options used to build PHP] --enable-wincache
    --enable-wincache is the only extra option which is required to ensure that WinCache extension gets built properly. This option will build WinCache and will statically link it with PHP dll. To build WinCache extension as a stand-alone DLL use the option --enable-wincache=shared.

  6. Run the command:

    nmake



Verifying the build

The following steps describe how to verify that WinCache has been built correctly:

  1. Go to the folder where the PHP binaries are built

  2. Run the command:

    php.exe -n -d extension=php_wincache.dll -re wincache
    If WinCache has been built properly, the output of this command will list the INI directives and functions supported by WinCache.





Hierarchical Profiler


Introducción

XHProf is a light-weight hierarchical and instrumentation based profiler. During the data collection phase, it keeps track of call counts and inclusive metrics for arcs in the dynamic callgraph of a program. It computes exclusive metrics in the reporting/post processing phase, such as wall (elapsed) time, CPU time and memory usage. A functions profile can be broken down by callers or callees. XHProf handles recursive functions by detecting cycles in the callgraph at data collection time itself and avoiding the cycles by giving unique depth qualified names for the recursive invocations.

XHProf includes a simple HTML based user interface (written in PHP). The browser based UI for viewing profiler results makes it easy to view results or to share results with peers. A callgraph image view is also supported.

XHProf reports can often be helpful in understanding the structure of the code being executed. The hierarchical nature of the reports can be used to determine, for example, what chain of calls led to a particular function getting called.

XHProf supports ability to compare two runs (a.k.a. "diff" reports) or aggregate data from multiple runs. Diff and aggregate reports, much like single run reports, offer "flat" as well as "hierarchical" views of the profile.

Additional documentation can be found via the » facebook xhprof website.



Instalación/Configuración

Tabla de contenidos


Requerimientos

Aunque no es obligatorio, xhprof incluye una interfaz que está escrito en PHP. Se utiliza para guardar y mostrar los datos reseñados en una forma utilizable, donde la observación se realiza mediante un navegador web. Por lo tanto, un servidor web PHP activado probablemente mejorara la experiencia xhprof.

También hay un tenedor de la interfaz gráfica de usuario en » http://github.com/preinheimer/xhprof



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/xhprof



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Xhprof Opciones de configuración
Nombre Por defecto Cambiable Historial de cambios
xhprof.output_dir "" PHP_INI_ALL  

He aquí una breve explicación de las directivas de configuración.

xhprof.output_dir string

Directorio utilizado por la aplicación por defecto de la interfaz iXHProfRuns (es decir, la clase XHProfRuns_Default) para el almacenamiento XHProf.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

XHPROF_FLAGS_NO_BUILTINS (integer)
Se utiliza para saltar todas las funciones incorporadas (internas)
XHPROF_FLAGS_CPU (integer)
Se utiliza para agregar información de la CPU a la salida.
XHPROF_FLAGS_MEMORY (integer)
Se utiliza para agregar información de la memoria a la salida.


Ejemplos

Ejemplo #1 Ejemplo Xhprof con interfaz gráfica de usuario opcional

En este ejemplo se inicia y detiene el perfilador, a continuación, utiliza interfaz gráfica de usuario para guardar y analizar los resultados. En otras palabras, el código de la extensión se termina en la llamada a xhprof_disable() .

<?php
xhprof_enable
(XHPROF_FLAGS_CPU XHPROF_FLAGS_MEMORY);

for (
$i 0$i <= 1000$i++) {
    
$a $i $i;
}

$xhprof_data xhprof_disable();

$XHPROF_ROOT "/tools/xhprof/";
include_once 
$XHPROF_ROOT "/xhprof_lib/utils/xhprof_lib.php";
include_once 
$XHPROF_ROOT "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id $xhprof_runs->save_run($xhprof_data"xhprof_testing");

echo 
"http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";

?>

El resultado del ejemplo sería algo similar a:

http://localhost/xhprof/xhprof_html/index.php?run=t11_4bdf44d21121f&source=xhprof_testing


Xhprof Funciones


xhprof_disable

(PECL xhprof >= 0.9.0)

xhprof_disableDetiene el perfilador xhprof

Descripción

array xhprof_disable ( void )

Detiene el perfilador, y devuelve los datos xhprof de la carrera.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Un array de los datos xhprof, de la carrera.

Ejemplos

Ejemplo #1 xhprof_disable() ejemplo

<?php
xhprof_enable
();

$foo strlen("foo bar");

$xhprof_data xhprof_disable();

print_r($xhprof_data);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [main()==>strlen] => Array
        (
            [ct] => 1
            [wt] => 279
        )

    [main()==>xhprof_disable] => Array
        (
            [ct] => 1
            [wt] => 9
        )

    [main()] => Array
        (
            [ct] => 1
            [wt] => 610
        )

)


xhprof_enable

(PECL xhprof >= 0.9.0)

xhprof_enableInicia perfil xhprof

Descripción

void xhprof_enable ([ int $flags = 0 [, array $options ]] )

Inicia perfiles xhprof.

Parámetros

flags

Flags opcionales para añadir información adicional a la creación de perfiles. Véase las constantes XHprof Para obtener más información acerca de estos flags, p.e.j., XHPROF_FLAGS_MEMORY para permitir perfiles de memoria.

options

Un array de opciones opcionales, es decir, la opción 'ignored_functions' para pasar en las funciones que se ignoraron durante el perfilado.

Valores devueltos

NULL

Historial de cambios

Versión Descripción
0.9.2 El parámetro opcional options fué agregado.

Ejemplos

Ejemplo #1 Ejemplos de xhprof_enable()

<?php
// 1. tiempo transcurrido + memoria + perfiles CPU; e ignorar las funciones integradas (internas)
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS XHPROF_FLAGS_CPU XHPROF_FLAGS_MEMORY);

// 2. perfil tiempo transcurrido; ignorando call_user_func* durante el perfilado
xhprof_enable(
    
0,
    array(
'ignored_functions' =>  array('call_user_func',
                                        
'call_user_func_array')));
                                       
// 3. tiempo transcurrido + perfil de memoria; ignorando call_user_func* durante el perfilado
xhprof_enable(
    
XHPROF_FLAGS_MEMORY,
    array(
'ignored_functions' =>  array('call_user_func',
                                        
'call_user_func_array')));
?>

Ver también



xhprof_sample_disable

(PECL xhprof >= 0.9.0)

xhprof_sample_disableDetiene la muestra del perfilador xhprof

Descripción

array xhprof_sample_disable ( void )

Detiene la muestra el modo perfilador xhprof, y

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Un array de los datos de muestra xhprof, de la ejecución.

Ejemplos

Ejemplo #1 Ejemplo de xhprof_sample_disable()

<?php
xhprof_sample_enable
();

for (
$i 0$i <= 10000$i++) {
    
$a strlen($i);
    
$b $i $a;
    
$c rand();
}

$xhprof_data xhprof_sample_disable();

print_r($xhprof_data);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [1272935300.800000] => main()
    [1272935300.900000] => main()
)


xhprof_sample_enable

(PECL xhprof >= 0.9.0)

xhprof_sample_enableDescripción

Descripción

void xhprof_sample_enable ( void )

Inicia la creación de perfiles en modo de muestra, que es una versión más ligera de peso de xhprof_enable() . El intervalo de muestreo es 0,1 segundos, y las muestras de registro de la pila de llamadas de función completa. El caso de uso principal es en gastos indirectos más bajos se requiere cuando se hace la supervisión del rendimiento y de diagnóstico.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

NULL

Ver también


Tabla de contenidos





Manipulación de formatos de audio


Etiquetas ID3


Introducción

Estas funciones permiten leer y manipular etiquetas ID3. Las etiquetas ID3 se utilizan en archivos MP3 para almacenar el título de la canción, así como información acerca del artista, álbum, género, año y número de pista.

Desde la versión 0.2 también es posible extraer marcos de texto desde etiquetas ID3 v2.2+.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/id3.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes Predefinidas

La mayoría de las funciones ID3 permiten especificar u obtener la versión de la etiqueta. Para especificar la versión se recomienda usar las siguientes constantes.

ID3_V1_0 (integer)
ID3_V1_0 Es usada cuando se trabaja con etiquetas ID3 V1.0. Esas etiquetas pueden contener los campos título, artista, álbum, género, año y comentario.
ID3_V1_1 (integer)
ID3_V1_1 Es usada cuando se trabaja con etiquetas ID3 V1.1. Esas etiquetas pueden contener toda la información abarcada por las etiquetas v1.0 más el número de pista.
ID3_V2_1 (integer)
ID3_V2_1 Es usada cuando se trabaja con etiquetas ID3 V2.1.
ID3_V2_2 (integer)
ID3_V2_2 Es usada cuando se trabaja con etiquetas ID3 V2.2.
ID3_V2_3 (integer)
ID3_V2_3 Es usada cuando se trabaja con etiquetas ID3 V2.3.
ID3_V2_4 (integer)
ID3_V2_4 Es usada cuando se trabaja con etiquetas ID3 V2.4.
ID3_BEST (integer)
ID3_BEST Es usada para permitir a las funciones ID3 determinar que versión de etiquetas debería ser usado.



Funciones ID3


id3_get_frame_long_name

(PECL id3 >= 0.2)

id3_get_frame_long_nameObtiene el nombre largo de un marco ID3v2

Descripción

string id3_get_frame_long_name ( string $frameId )

id3_get_frame_long_name() Retorna el nombre largo para un marco ID3v2.

Parámetros

frameId

Un marco ID3v2

Valores devueltos

Retorna el nombre largo del marco o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_frame_long_name()

<?php
$longName 
id3_get_frame_long_name("TOLY");
echo 
$longName;
?>

El resultado del ejemplo sería:

Original lyricist(s)/text writer(s)

Ver también



id3_get_frame_short_name

(PECL id3 >= 0.2)

id3_get_frame_short_nameObtiene el nombre corto de un marco ID3v2

Descripción

string id3_get_frame_short_name ( string $frameId )

id3_get_frame_short_name() Retorna el nombre corto para un marco ID3v2.

Parámetros

frameId

Un marco ID3v2

Valores devueltos

Retorna el nombre corto del marco o FALSE en caso de error.

Los valores retornados por id3_get_frame_short_name() son usados en el array retornado por id3_get_tag().

Ejemplos

Ejemplo #1 Ejemplo de id3_get_frame_short_name()

<?php
$nombreCorto 
id3_get_frame_short_name("TOLY");
echo 
$nombreCorto;
?>

El resultado del ejemplo sería:

originalLyricist

Ver también



id3_get_genre_id

(PECL id3 >= 0.1)

id3_get_genre_idObtiene el id correspondiente para un género musical

Descripción

int id3_get_genre_id ( string $genre )

id3_get_genre_id() Retorna el id correspondiente a un género.

Parámetros

genre

Nombre del género como un string.

Valores devueltos

El id del género o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_genre_id()

<?php
$id 
id3_get_genre_id("Alternative");
echo 
$id;
?>

El resultado del ejemplo sería:

20

Ver también



id3_get_genre_list

(PECL id3 >= 0.1)

id3_get_genre_listObtiene todos los valores posibles para la etiqueta género

Descripción

array id3_get_genre_list ( void )

id3_get_genre_list() Retorna un array conteniendo todos los posibles géneros que pueden ser almacenados en la etiqueta ID3 correspondiente. Esta lista fue creada por Eric Kemp y más tarde ampliada por WinAmp.

Esta función es útil para proveer a los usuarios una lista de géneros donde puedan seleccionar uno de ellos. Al actualizar la etiqueta ID3 siempre se debe especificar el género como un entero entre 0 y 147.

Valores devueltos

Retorna un array conteniendo todos los valores posibles para la etiqueta ID3.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_genre_list()

<?php
$generos 
id3_get_genre_list();
print_r($generos);
?>

El resultado del ejemplo sería:

Array
(
    [0] => Blues
    [1] => Classic Rock
    [2] => Country
    [3] => Dance
    [4] => Disco
    [5] => Funk
    [6] => Grunge
    [7] => Hip-Hop
    [8] => Jazz
    [9] => Metal
    [10] => New Age
    [11] => Oldies
    [12] => Other
    [13] => Pop
    [14] => R&B
    [15] => Rap
    [16] => Reggae
    [17] => Rock
    [18] => Techno
    [19] => Industrial
    [20] => Alternative
    [21] => Ska
    [22] => Death Metal
    [23] => Pranks
    [24] => Soundtrack
    [25] => Euro-Techno
    [26] => Ambient
    [27] => Trip-Hop
    [28] => Vocal
    [29] => Jazz+Funk
    [30] => Fusion
    [31] => Trance
    [32] => Classical
    [33] => Instrumental
    [34] => Acid
    [35] => House
    [36] => Game
    [37] => Sound Clip
    [38] => Gospel
    [39] => Noise
    [40] => Alternative Rock
    [41] => Bass
    [42] => Soul
    [43] => Punk
    [44] => Space
    [45] => Meditative
    [46] => Instrumental Pop
    [47] => Instrumental Rock
    [48] => Ethnic
    [49] => Gothic
    [50] => Darkwave
    [51] => Techno-Industrial
    [52] => Electronic
    [53] => Pop-Folk
    [54] => Eurodance
    [55] => Dream
    [56] => Southern Rock
    [57] => Comedy
    [58] => Cult
    [59] => Gangsta
    [60] => Top 40
    [61] => Christian Rap
    [62] => Pop/Funk
    [63] => Jungle
    [64] => Native US
    [65] => Cabaret
    [66] => New Wave
    [67] => Psychadelic
    [68] => Rave
    [69] => Showtunes
    [70] => Trailer
    [71] => Lo-Fi
    [72] => Tribal
    [73] => Acid Punk
    [74] => Acid Jazz
    [75] => Polka
    [76] => Retro
    [77] => Musical
    [78] => Rock & Roll
    [79] => Hard Rock
    [80] => Folk
    [81] => Folk-Rock
    [82] => National Folk
    [83] => Swing
    [84] => Fast Fusion
    [85] => Bebob
    [86] => Latin
    [87] => Revival
    [88] => Celtic
    [89] => Bluegrass
    [90] => Avantgarde
    [91] => Gothic Rock
    [92] => Progressive Rock
    [93] => Psychedelic Rock
    [94] => Symphonic Rock
    [95] => Slow Rock
    [96] => Big Band
    [97] => Chorus
    [98] => Easy Listening
    [99] => Acoustic
    [100] => Humour
    [101] => Speech
    [102] => Chanson
    [103] => Opera
    [104] => Chamber Music
    [105] => Sonata
    [106] => Symphony
    [107] => Booty Bass
    [108] => Primus
    [109] => Porn Groove
    [110] => Satire
    [111] => Slow Jam
    [112] => Club
    [113] => Tango
    [114] => Samba
    [115] => Folklore
    [116] => Ballad
    [117] => Power Ballad
    [118] => Rhytmic Soul
    [119] => Freestyle
    [120] => Duet
    [121] => Punk Rock
    [122] => Drum Solo
    [123] => Acapella
    [124] => Euro-House
    [125] => Dance Hall
    [126] => Goa
    [127] => Drum & Bass
    [128] => Club-House
    [129] => Hardcore
    [130] => Terror
    [131] => Indie
    [132] => BritPop
    [133] => Negerpunk
    [134] => Polsk Punk
    [135] => Beat
    [136] => Christian Gangsta
    [137] => Heavy Metal
    [138] => Black Metal
    [139] => Crossover
    [140] => Contemporary C
    [141] => Christian Rock
    [142] => Merengue
    [143] => Salsa
    [144] => Thrash Metal
    [145] => Anime
    [146] => JPop
    [147] => SynthPop
)

Ver también



id3_get_genre_name

(PECL id3 >= 0.1)

id3_get_genre_nameObtiene el nombre del género correspondiente a un id

Descripción

string id3_get_genre_name ( int $genre_id )

id3_get_genre_name() Retorna el nombre de un género correspondiente a un id dado.

Parámetros

genre_id

Un entero entre 0 to 147

Valores devueltos

Retorna el nombre del género en inglés en forma de string.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_genre_name()

<?php
$genero 
id3_get_genre_name(20);
echo 
$genero;
?>

El resultado del ejemplo sería:

Alternative

Ver también



id3_get_tag

(PECL id3 >= 0.1)

id3_get_tagObtiene toda la información almacenada en una etiqueta ID3

Descripción

array id3_get_tag ( string $filename [, int $version = ID3_BEST ] )

id3_get_tag() Es usada para obtener toda la información almacenada en la etiqueta ID3 del fichero especificado.

Parámetros

filename

Ruta al fichero MP3

En lugar de un nombre de fichero puede pasarse un contexto de flujos válido.

version

Permite especificar la versión de la etiqueta debido a que los ficheros MP3 pueden contener ambas, etiquetas versión 1.x y 2.x

Desde la versión 0.2 id3_get_tag() también soporta etiquetas ID3 versión 2.2, 2.3 y 2.4. Para extraer información de esas etiquetas deben pasarse las constantes ID3_V2_2, ID3_V2_3 o ID3_V2_4 como segundo parámetro. Las etiquetas ID3 v2.x pueden contener mucha más información acerca del fichero MP3 que las etiquetas ID3 v1.x.

Valores devueltos

Retorna un array asociativo con varias claves como: title, artist, ..

La clave genre contendrá un entero entre 0 y 147. La función id3_get_genre_name() puede ser usada para convertir este valor a uno legible por humanos.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_tag()

<?php
$etiqueta 
id3_get_tag"ruta/a/ejemplo.mp3" );
print_r($etiqueta);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [title] => DN-38416
    [artist] => Re:\Legion
    [album] => Reflections
    [year] => 2004
    [genre] => 19
)

Ejemplo #2 Ejemplo de id3_get_tag()

<?php
$etiqueta 
id3_get_tag"ruta/a/ejemplo2.mp3"ID3_V2_3 );
print_r($etiqueta);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [copyright] => Dirty Mac
    [originalArtist] => Dirty Mac
    [composer] => Marcus Götze
    [artist] => Dirty Mac
    [title] => Little Big Man
    [album] => Demo-Tape
    [track] => 5/12
    [genre] => (17)Rock
    [year] => 2001
)

Ver también



id3_get_version

(PECL id3 >= 0.1)

id3_get_versionObtiene la versión de una etiqueta ID3

Descripción

int id3_get_version ( string $filename )

id3_get_version() Obtiene la o las versiones de una o más etiquetas ID3 en un fichero MP3.

Si un fichero contiene una etiqueta ID3 v1.1, este siempre contiene una etiqueta 1.0, debido a que la versión 1.1 es sólo una extensión de la 1.0.

Parámetros

fichero

La ruta al fichero MP3

En lugar de un nombre de fichero puede ser pasado un contexto de flujos válido.

Valores devueltos

Retorna el número de versión de la etiqueta ID3 del archivo. Como una etiqueta puede contener etiquetas ID3 v1.x y v2.x, la respuesta de esta función debería ser comparada bit a bit con las constantes predefinidas ID3_V1_0, ID3_V1_1 e ID3_V2.

Ejemplos

Ejemplo #1 Ejemplo de id3_get_version()

<?php
$version 
id3_get_version"ruta/a/ejemplo.mp3" );
if (
$version ID3_V1_0) {
    echo 
"Contiene una etiqueta 1.x\n";
}
if (
$version ID3_V1_1) {
    echo 
"Contiene una etiqueta 1.1\n";
}
if (
$version ID3_V2) {
    echo 
"Contiene una etiqueta 2.x\n";
}
?>

El resultado del ejemplo sería algo similar a:

Contiene una etiqueta 1.x
Contiene una etiqueta 1.1

Ver también



id3_remove_tag

(PECL id3 >= 0.1)

id3_remove_tagElimina una etiqueta ID3 existente

Descripción

bool id3_remove_tag ( string $filename [, int $version = ID3_V1_0 ] )

id3_remove_tag() Es usada para eliminar información almacenada de una etiqueta ID3.

Parámetros

filename

Ruta al fichero MP3

En lugar de un nombre de fichero puede pasarse un contexto de flujos válido.

version

Permite especificar la versión de la etiqueta, esto se debe a que los ficheros MP3 pueden contener ambas versiones de etiquetas, 1.x y 2.x

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de id3_remove_tag()

<?php
$resultado 
id3_remove_tag"ruta/a/ejemplo.mp3"ID3_V1_0 );
if (
$resultado === true) {
    echo 
"Etiqueta eliminada exitosamente\n";
}
?>

Si es posible escribir en el fichero y este contiene una etiqueta 1.0, imprimirá:

Etiqueta eliminada exitosamente

Notas

Nota: Actualmente id3_remove_tag() solamente soporta versiones 1.0 y 1.1. Si se desea eliminar una etiqueta 1.0 y el fichero contiene una etiqueta 1.1, esta será eliminada, esto se debe a que la etiqueta versión 1.1 es sólo una extensión de la 1.0.

Ver también



id3_set_tag

(PECL id3 >= 0.1)

id3_set_tagActualiza la información almacenada en una etiqueta ID3

Descripción

bool id3_set_tag ( string $filename , array $tag [, int $version = ID3_V1_0 ] )

id3_set_tag() Es usada para modificar la información almacenada de una etiqueta ID3. Si la etiqueta no se encuentra presente, será añadida al fichero.

Parámetros

filename

Ruta al fichero MP3

En lugar de un nombre de fichero puede pasarse un contexto de flujos válido.

tag

Un array asociativo de claves de la etiqueta y sus valores

Las siguientes claves pueden ser usadas en el array asociativo:

Claves en el array asociativo
clave valor posible disponible en la versión
title cadena con un máximo de 30 caracteres v1.0, v1.1
artist cadena con un máximo de 30 caracteres v1.0, v1.1
album cadena con un máximo de 30 caracteres v1.0, v1.1
year 4 dígitos v1.0, v1.1
genre entero entre 0 y 147 v1.0, v1.1
comment cadena con un máximo de 30 caracteres (28 en v1.1) v1.0, v1.1
track entero entre 0 y 255 v1.1

version

Permite especificar la versión de la etiqueta, esto se debe a que los ficheros MP3 pueden contener ambas versiones de etiquetas, 1.x y 2.x

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de id3_set_tag()

<?php
$datos 
= array(
              
"title" => "Re:Start",
              
"artist" => "Re:\Legion",
              
"comment" => "A nice track"
             
);
$resultado id3_set_tag"ruta/a/ejemplo.mp3"$datosID3_V1_0 );
if (
$resultado === true) {
    echo 
"Etiqueta actualizada exitosamente\n";
}
?>

Si es posible escribir en el fichero, imprimirá:

Etiqueta actualizada exitosamente

Notas

Nota: Actualmente id3_set_tag() solamente soporta las versiones 1.0 y 1.1.

Ver también


Tabla de contenidos




KTaglib


Introducción

KTaglib es una unión orientada a objetos a la libreria taglib del proyecto KDE utilizado en proyectos como el Amarok a leer y escribir ID3 y etiquetas Ogg. La libreria también proporciona acceso a la información de audio. Los enlaces están diseñadas por lo general siguen el subyacente C++ API, pero ha cambiado en PHP de una forma similar.

Nota:

Por el momento ktaglib es capaz de leer y escribir etiquetas ID3v1 e ID3v2.



Instalación/Configuración

Tabla de contenidos


Requerimientos

If you want to build ktaglib you need at least taglib 1.5 installed. To obtain the taglib see the » taglib project page. Windows DLL's are build static against taglib, therefore there is no need to have taglib installed.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/ktaglib.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

KTaglib uses class constants. Most of the constants are mappings to the according Taglib enums and constants.

KTaglib_MPEG_Header::Version1 (integer)
ID3 version is 1.0
KTaglib_MPEG_Header::Version2 (integer)
ID3 version is 2.0
KTaglib_MPEG_Header::Version2_5 (integer)
ID3 version is 2.5
KTaglib_ID3v2_AttachedPictureFrame::Other (integer)
Picture type Other
KTaglib_ID3v2_AttachedPictureFrame::FileIcon (integer)
Picture type FileIcon
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon (integer)
Picture type OtherFileIcon
KTaglib_ID3v2_AttachedPictureFrame::FrontCover (integer)
Picture type FrontCover
KTaglib_ID3v2_AttachedPictureFrame::BackCover (integer)
Picture type BackCover
KTaglib_ID3v2_AttachedPictureFrame::LeafletPage (integer)
Picture type LeafletPage
KTaglib_ID3v2_AttachedPictureFrame::Media (integer)
Picture type Media
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist (integer)
Picture type LeadArtist
KTaglib_ID3v2_AttachedPictureFrame::Artist (integer)
Picture type Artist
KTaglib_ID3v2_AttachedPictureFrame::Conductor (integer)
Picture type Condutor
KTaglib_ID3v2_AttachedPictureFrame::Band (integer)
Picture type Band
KTaglib_ID3v2_AttachedPictureFrame::Composer (integer)
Picture type Composer
KTaglib_ID3v2_AttachedPictureFrame::Lyricist (integer)
Picture type Lyricist
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation (integer)
Picture type RecordingLocation
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording (integer)
Picture type DuringRecording
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance (integer)
Picture type DuringPerformance
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture (integer)
Picture type MovieScreenCapture
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish (integer)
Picture type ColouredFish
KTaglib_ID3v2_AttachedPictureFrame::Illustration (integer)
Picture type Illustration
Picture type BandLogo


La clase KTaglib_MPEG_File

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Representa un archivo MPEG. Los archivos MPEG pueden tener etiquetas ID3v1, ID3v2 y propiedades de audio.

Sinopsis de la clase

KTaglib_MPEG_File {
/* Métodos */
public KTaglib_MPEG_File getAudioProperties ( void )
public KTaglib_ID3v1_Tag getID3v1Tag ([ bool $create = false ] )
public KTaglib_ID3v2_Tag getID3v2Tag ([ bool $create = false ] )
}

KTaglib_MPEG_File::__construct

(0.0.1)

KTaglib_MPEG_File::__constructAbre un fichero nuevo

Descripción

public KTaglib_MPEG_File::__construct() ( string $filename )

Abre un fichero MPEG nuevo.

Parámetros

filename

El fichero a leer

Ejemplos

Ejemplo #1 Abre un fichero MP3 nuevo y lee el título

<?php
$mpeg 
= new KTaglib_MPEG_File('example.mp3');
echo 
$mpeg->getID3v1Tag()->getTitle();
?>



KTaglib_MPEG_File::getAudioProperties

(0.0.1)

KTaglib_MPEG_File::getAudioPropertiesDevuelve un objeto que proporciona acceso a las propiedades de audio

Descripción

public KTaglib_MPEG_File KTaglib_MPEG_File::getAudioProperties ( void )

Devuelve un objeto que proporciona acceso a las propiedades de audio de el fichero mpeg.

Valores devueltos

Devuelve un objeto KTaglib_MPEG_AudioProperties o falso.



KTaglib_MPEG_File::getID3v1Tag

(0.0.1)

KTaglib_MPEG_File::getID3v1TagDevuelve un objeto que representa una etiqueta ID3v1

Descripción

public KTaglib_ID3v1_Tag KTaglib_MPEG_File::getID3v1Tag ([ bool $create = false ] )

Devuelve un objeto que representa una etiqueta ID3v1, la cual puede ser usada para obtener información sobre la etiqueta ID3v1.

Valores devueltos

Devuelve un objeto KTaglib_MPEG_ID3v1Tag o false si no hay una etiqueta ID3v1.



KTaglib_MPEG_File::getID3v2Tag

(0.0.1)

KTaglib_MPEG_File::getID3v2TagDevuelve un objeto ID3v2

Descripción

public KTaglib_ID3v2_Tag KTaglib_MPEG_File::getID3v2Tag ([ bool $create = false ] )

Devuelve un objeto ID3v2 para el fichero mpeg. Si no está presente la etiqueta ID3v2, es lanzada una KTaglib_TagNotFoundException.

Valores devueltos

Devuelve el objeto KTaglib_ID3v2_Tag del fichero MPEG o falso si no hay una etiqueta ID3v2


Tabla de contenidos



La clase KTaglib_MPEG_AudioProperties

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Representa las propiedades audio de un fichero MPEG, como la duración el bitrate o el samplerate.


KTaglib_MPEG_AudioProperties::getBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getBitrateDevuelve el bitrate del archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getBitrate ( void )

Devuelve el bitrate del archivo MPEG

Valores devueltos

Devuelve el bitrate como un entero



KTaglib_MPEG_AudioProperties::getChannels

(0.0.1)

KTaglib_MPEG_AudioProperties::getChannelsDevuelve la cantidad de canales de un archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getChannels ( void )

Devuelve la cantidad de canales de un archivo MPEG

Valores devueltos

Devuelve el número de canales como un entero



KTaglib_MPEG_AudioProperties::getLayer

(0.0.1)

KTaglib_MPEG_AudioProperties::getLayerDevuelve la capa de un archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getLayer ( void )

Devuelve la capa del archivo MPEG (por lo general 3 para MP3).

Valores devueltos

Devuelve la capa como un número entero



KTaglib_MPEG_AudioProperties::getLength

(0.0.1)

KTaglib_MPEG_AudioProperties::getLengthDevuelve la duración de un archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getLength ( void )

Devuelve la duración de un archivo MPEG

Valores devueltos

Devuelve la duración como un entero



KTaglib_MPEG_AudioProperties::getSampleBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getSampleBitrateDevuelve la frecuencia de muestreo o tasa de bits de un archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )

Devuelve la frecuencia de muestreo o tasa de bits de un archivo MPEG

Valores devueltos

Devuelve la frecuencia de muestreo o tasa de bits como un entero



KTaglib_MPEG_AudioProperties::getVersion

(0.0.1)

KTaglib_MPEG_AudioProperties::getVersionDevuelve la versión de un archivo MPEG

Descripción

public int KTaglib_MPEG_AudioProperties::getVersion ( void )

Devuelve la versión de la cabecera de un archivo MPEG. Las posibles versiones son definidas en Tag_MPEG_Header (Version1, Version2, Version2.5).

Valores devueltos

Devuelve la versión



KTaglib_MPEG_AudioProperties::isCopyrighted

(0.0.1)

KTaglib_MPEG_AudioProperties::isCopyrightedDevuelve el estado de derecho de autor de un archivo MPEG

Descripción

public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )

Devuelve true si el archivo MPEG tiene derechos de autor

Valores devueltos

Devuelve true si el archivo MPEG tiene derechos de autor



KTaglib_MPEG_AudioProperties::isOriginal

(0.0.1)

KTaglib_MPEG_AudioProperties::isOriginalDevuelve si el archivo está marcado como el archivo original

Descripción

public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )

Devuelve true si el archivo está marcado como el archivo original

Valores devueltos

Devuelve true si el archivo está marcado como el archivo original



KTaglib_MPEG_AudioProperties::isProtectionEnabled

(0.0.1)

KTaglib_MPEG_AudioProperties::isProtectionEnabledDevuelve si los mecanismos de protección de un archivo MPEG están habilitados

Descripción

public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )

Devuelve true si los mecanismos de protección (como el DRM) están habilitados para este archivo

Valores devueltos

Devuelve true si los mecanismos de protección (como el DRM) están habilitados para este archivo


Tabla de contenidos



La clase KTaglib_Tag

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Clase base para las etiquetas ID3v1 o ID3v2

Sinopsis de la clase

KTaglib_Tag {
/* Métodos */
public string getAlbum ( void )
public string getArtist ( void )
public string getComment ( void )
public string getGenre ( void )
public string getTitle ( void )
public int getTrack ( void )
public int getYear ( void )
public bool isEmpty ( void )
}

KTaglib_Tag::getAlbum

(0.0.1)

KTaglib_Tag::getAlbumDevuelve la cadena álbum de una etiqueta ID3

Descripción

public string KTaglib_Tag::getAlbum ( void )

Devuelve la cadena álbum de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve la cadena álbum



KTaglib_Tag::getArtist

(0.0.1)

KTaglib_Tag::getArtistDevuelve la cadena artista de una etiqueta ID3

Descripción

public string KTaglib_Tag::getArtist ( void )

Devuelve la cadena artista de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve la cadena artista



KTaglib_Tag::getComment

(0.0.1)

KTaglib_Tag::getCommentDevuelve el comentario de una etiqueta ID3

Descripción

public string KTaglib_Tag::getComment ( void )

Devuelve el comentario de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve la cadena comentario



KTaglib_Tag::getGenre

(0.0.1)

KTaglib_Tag::getGenreDevuelve el género de una etiqueta ID3

Descripción

public string KTaglib_Tag::getGenre ( void )

Devuelve el género de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve la cadena género



KTaglib_Tag::getTitle

(0.0.1)

KTaglib_Tag::getTitleDevuelve la cadena de título de una etiqueta ID3

Descripción

public string KTaglib_Tag::getTitle ( void )

Devuelve la cadena de título de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve la cadena título



KTaglib_Tag::getTrack

(0.0.1)

KTaglib_Tag::getTrackDevuelve el número de pista de una etiqueta ID3

Descripción

public int KTaglib_Tag::getTrack ( void )

Devuelve el número de pista en una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve el número de pista como un entero



KTaglib_Tag::getYear

(0.0.1)

KTaglib_Tag::getYearDevuelve el año de una etiqueta ID3

Descripción

public int KTaglib_Tag::getYear ( void )

Devuelve el año de una etiqueta ID3. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve el año como un número entero



KTaglib_Tag::isEmpty

(0.0.1)

KTaglib_Tag::isEmptyDevuelve true si la etiqueta está vacía

Descripción

public bool KTaglib_Tag::isEmpty ( void )

Devuelve true si la etiqueta existe, pero está vacía. Este método es implementado en etiquetas ID3v1 y ID3v2.

Valores devueltos

Devuelve true si la etiqueta está vacía, en caso contrario devuelve false.


Tabla de contenidos



La clase KTaglib_ID3v2_Tag

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Representa y etiqueta ID3v2. Esta proporciona una lista de tramas ID3v2 y puede ser utilizada para añadir y eliminar tramas adicionales.

Sinopsis de clase

extends KTaglib_Tag {
/* Métodos */
public bool addFrame ( KTaglib_ID3v2_Frame $frame )
public array getFrameList ( void )
/* Métodos heredados */
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_Tag::addFrame

(0.0.1)

KTaglib_ID3v2_Tag::addFrameAgregar un frame a la etiqueta ID3v2

Descripción

public bool KTaglib_ID3v2_Tag::addFrame ( KTaglib_ID3v2_Frame $frame )

Agrega un frame a la etiqueta ID3v2. El frame debe ser un objeto KTaglib_ID3v2_Frame válido. Para guardar la etiqueta, es necesario invocar a la función guardar.

Valores devueltos

Devuelve true en caso de éxito, de lo contrario false.



KTaglib_ID3v2_Tag::getFrameList

(0.0.1)

KTaglib_ID3v2_Tag::getFrameListDevuelve un array de frames ID3v2, asociados con la etiqueta ID3v2

Descripción

public array KTaglib_ID3v2_Tag::getFrameList ( void )

Devuelve un array de frames ID3v2, asociados con la etiqueta ID3v2.

Valores devueltos

Devuelve un array de objetos KTaglib_ID3v2_Frame


Tabla de contenidos



La clase KTaglib_ID3v2_Frame

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

La clase base para tramas ID3v2. Las etiquetas ID3v2 son separadas en varias tramas especializadas. Algunas tramas pueden estar presente múltiples veces.

Sinopsis de clase

extends KTaglib_Tag {
/* Métodos */
public int getSize ( void )
public string __toString ( void )
/* Métodos heredados */
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_Frame::getSize

(0.0.1)

KTaglib_ID3v2_Frame::getSizeDevuelve el tamaño de el frame en bytes

Descripción

public int KTaglib_ID3v2_Frame::getSize ( void )

Devuelve el tamaño de el frame en bytes. Por favor, referirse a id3.org para ver qué son los frames ID3v2 y cómo están definidos.

Valores devueltos

Devuelve el tamaño de el frame en bytes



KTaglib_ID3v2_Frame::__toString

(0.0.1)

KTaglib_ID3v2_Frame::__toStringDevuelve un string de representación de el frame

Descripción

public string KTaglib_ID3v2_Frame::__toString ( void )

Devuelve un string de representación de el frame. Esto podría ser solamente el id del frame, pero podría contener más información. Por favor vea la documentación de ktaglib para más información

Valores devueltos

Devuelve un string de representación de el frame.


Tabla de contenidos



La clase KTaglib_ID3v2_AttachedPictureFrame

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

Representa una trama ID3v2 que puede contener una imagen.

Sinopsis de Clase

/* Métodos */
public string getDescription ( void )
public string getMimeType ( void )
public int getType ( void )
public bool savePicture ( string $filename )
public string getMimeType ( string $type )
public void setPicture ( string $filename )
public void setType ( int $type )
/* Métodos heredados */
public int KTaglib_ID3v2_Frame::getSize ( void )
public string KTaglib_ID3v2_Frame::__toString ( void )
public string KTaglib_Tag::getAlbum ( void )
public string KTaglib_Tag::getArtist ( void )
public string KTaglib_Tag::getComment ( void )
public string KTaglib_Tag::getGenre ( void )
public string KTaglib_Tag::getTitle ( void )
public int KTaglib_Tag::getTrack ( void )
public int KTaglib_Tag::getYear ( void )
public bool KTaglib_Tag::isEmpty ( void )
}

KTaglib_ID3v2_AttachedPictureFrame::getDescription

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::getDescriptionDevuelve una descripción de la imagen en un marco de fotos

Descripción

public string KTaglib_ID3v2_AttachedPictureFrame::getDescription ( void )

Devuelve la descripción que se acompaña de un marco de fotos en un marco de ID3v2.x.

Valores devueltos

Devuelve una descripción de la imagen en un marco de fotos



KTaglib_ID3v2_AttachedPictureFrame::getMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getMimeTypeDevuelve el tipo mime de la imagen

Descripción

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( void )

Devuelve el tipo mime de la imagen representada por el marco de la imagen adjunta.

Tenga en cuenta que este método puede devolver diferentes tipos. Mientras ID3v2.2 tiene un tipo mime que no empiece con "image/", ID3v2.3 y v2.4 usualmente comienzan con "image/". Por lo tanto, el método puede devolver para los marcos "image/png" para IDv2.3 y "PNG" para el marco ID3v2.2.

Tenga en cuenta que incluso el marco es una imagen adjunta, el tipo mime no esté configurado y por lo tanto puede devolver una cadena vacía.

Valores devueltos

Devuelve el tipo mime de la imagen representada por el marco de la imagen adjunta.



KTaglib_ID3v2_AttachedPictureFrame::getType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getTypeDevuelve el tipo de la imagen

Descripción

public int KTaglib_ID3v2_AttachedPictureFrame::getType ( void )

Devuelve el tipo de la imagen.

La especificación ID3v2 permite una AttachedPictureFrame para establecer el tipo de una imagen. Esto puede ser por ejemplo, FrontCover or FileIcon. Por favor refiérase a la descripción de la clase KTaglib_ID3v2_AttachedPictureFrame para obtener una lista de tipos disponibles.

Valores devueltos

Devuelve la representación de entero de este tipo.



KTaglib_ID3v2_AttachedPictureFrame::savePicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::savePictureGuarda la imagen en un archivo

Descripción

public bool KTaglib_ID3v2_AttachedPictureFrame::savePicture ( string $filename )

Guarda la imagen adjunta al archivo especificado.

Valores devueltos

Devuelve true si tiene éxito, false en caso contrario



KTaglib_ID3v2_AttachedPictureFrame::setMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setMimeTypeEstablece el tipo mime de la imagen

Descripción

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( string $type )

Establece el tipo mime de la imagen. Esto debe en la mayoría de los casos es "image/png" o "image/jpeg".



KTaglib_ID3v2_AttachedPictureFrame::setPicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::setPictureEstablece el marco de la imagen a la imagen dada

Descripción

public void KTaglib_ID3v2_AttachedPictureFrame::setPicture ( string $filename )

Establece la imagen para poner la imagen. La imagen se carga desde el fichero especificado. Tenga en cuenta que la imagen no se guarda a menos que llame el save method de el fichero del objeto correspondiente.

Valores devueltos

Devuelve true si tiene éxito, false en caso contrario



KTaglib_ID3v2_AttachedPictureFrame::setType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setTypeEstablecer el tipo de la imagen

Descripción

public void KTaglib_ID3v2_AttachedPictureFrame::setType ( int $type )

Establece el tipo de la imagen. Esto puede ser por ejemplo, FrontCover io FileIcon. Véase la descripción de la clase KTaglib_ID3v2_AttachedPictureFrame para una lista de tipos disponibles y sus asignaciones de constantes.


Tabla de contenidos




OGG/Vorbis


Introducción

El formato de fichero OGG/Vorbis, tal como está definido en » http://www.vorbis.com/, es un esquema para comprimir flujos de audio mediante múltiples factores con un mínimo de pérdida de calidad. Esta extensión añade el soporte Ogg Vorbis a las Envolturas URL de PHP. Cuando se utiliza en modo lectura, la información OGG/Vorbis comprimida se expande a audio PCM sin tratar en uno de los formatos de codificación PCM listados después.



Instalación/Configuración

Tabla de contenidos


Requerimientos

Esta extensión requiere PHP >= 4.3.0, » libogg >= 1.0, y » libvorbis >= 1.0.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/oggvorbis



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

OGG/Vorbis soporta codificaciones PCM en los siguientes formatos
Constante Definición
OGGVORBIS_PCM_U8 PCM sin signo de 8 bit.
OGGVORBIS_PCM_S8 PCM con signo de 8 bit.
OGGVORBIS_PCM_U16_LE PCM sin signo de 16 bit. Orden de byte Little Endian.
OGGVORBIS_PCM_U16_BE PCM sin signo de 16 bit. Orden de byte Big Endian.
OGGVORBIS_PCM_S16_LE PCM con signo de 16 bit. Orden de byte Little Endian.
OGGVORBIS_PCM_S16_BE PCM con signo de 16 bit. Orden de byte Big Endian.


Opciones de contexto

OGG/Vorbis tuning options
Opción Definición Relevancia Predeterminado
pcm_mode Codificación PCM de byte usada. Véase las constantes. Lectura / Escritura OGGVORBIS_PCM_S16_LE
rate Velocidad de muestreo PCM. Medida en Hz. Sólo escritura 44100
bitrate Codificación de Velocidad de Tranferencia Media / Codificación de Velocidad de Tranferencia Variable de Vorbis. Medido en bps (ABR) o nivel de Calidad (VBR: 0.0 a 1.0). 128000 ABR es aproximadamente igual a 0.4 VBR. Sólo escritura 128000
channels Número de canales PCM. 1 == Mono, 2 == Estéreo. Sólo escritura 2
serialno Número de Serie del flujo dentro de fichero. Debe ser único dentro del fichero. Debido a la posibilidades de seleccionar un número de serie duplicado dentro de un fichero encadenado, se han de realizar esfuerzon para asignar manualmente números únicos al codificar. Sólo escritura Aleatorio
comments Array asociativo de comentarios de ficheros. Será traducido a strtoupper($nombre) . "=$valor". Nota: Esta opción de contexto no está disponible en oggvorbis-0.1 Sólo escritura array('ENCODER' => 'PHP/OggVorbis, http://pear.php.net/oggvorbis')


Ejemplos

Tabla de contenidos


Ejemplo de uso de ogg:// wrapper.

Ejemplo #1 Leer un fichero OGG/Vorbis

<?php
dl
("oggvorbis.so");

/* Por omisión, ogg:// decodificará a 16 bit sin signo Little Endian */
$fp fopen('ogg://myaudio.ogg''r');

/* Recopilar información sobre el fichero. */
$metadatos stream_get_meta_data($fp);

/* Inspeccionar la primera canción (normalmente una única canción, 
   pero los ficheros OGG/Vorbis pueden ser encadenados) */
$datos_canción $metadatos['wrapper_data'][0];

echo 
"Fichero OGG/Vorbis codificado por: {$datos_canción['vendor']}\n.";
echo 
"  {$datos_canción['channels']} canales de {$datos_canción['rate']}Hz muestreo codificado a {$datos_canción['bitrate_nominal']}bps.\n";
foreach(
$datos_canción['comments'] as $comentario) {
    echo 
"  $comentario\n";
}

while (
$audio_data fread($fp8192)) {
  
/* Hacer algo con el audio PCM que estamos extrayendo desde el OGG.
     Copiarlo a /dev/dsp es un buen destino en sistemas linux,
     recuerde configurar primero su dispositivo al modo de muestreo . */
}

fclose($fp);

?>

Ejemplo #2 Codificar un fichero de audio a OGG/Vorbis

<?php
dl
('oggvorbis.so');

$contexto stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* Audio de 8 bit con signo */
             
'rate' => 44100,                 /* Calida CD de 44kHz */
             
'bitrate' => 0.5,                /* VBR calidad media*/
             
'channels' => 1,                 /* Mono */
             
'serialno' => 12345)));          /* ünoco dentro de nuestro flujo */

/* Abrir un fichero para añadir información. Esto "encadenará" un segundo flujo OGG al final del primero. */
$ogg fopen('ogg://mysong.ogg''a'false$contexto);

$pcm fopen('mysample.pcm''r');

/* Comprimir el audio PCM sin tratar de mysample.pcm a mysong.ogg */
stream_copy_to_stream($pcm$ogg);

fclose($pcm);
fclose($ogg);
?>





Vinculaciones de audio del OpenAL


Introducción

La plataforma independiente de vinculación de audio. Requiere la » OpenAL library.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/openal.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión define cuatro tipos de recursos: Open AL(Device) - Devuelto por openal_device_open(), Open AL(Context) - Devuelto por openal_context_create(), Open AL(Buffer) - Devuelto por openal_buffer_create(), y Open AL(Source) - Devuelto por openal_source_create().




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

ALC_FREQUENCY (integer)
Atributo de contexto
ALC_REFRESH (integer)
Atributo de contexto
ALC_SYNC (integer)
Atributo de contexto
AL_FREQUENCY (integer)
Establecer el buffer
AL_BITS (integer)
Establecer el buffer
AL_CHANNELS (integer)
Establecer el buffer
AL_SIZE (integer)
Establecer el buffer
AL_BUFFER (integer)
Establecer Fuente/Oyente (Entero)
AL_SOURCE_RELATIVE (integer)
Establecer Fuente/Oyente (Entero)
AL_SOURCE_STATE (integer)
Establecer Fuente/Oyente (Entero)
AL_PITCH (integer)
Establecer Fuente/Oyente (Flotante)
AL_GAIN (integer)
Establecer Fuente/Oyente (Flotante)
AL_MIN_GAIN (integer)
Establecer Fuente/Oyente (Flotante)
AL_MAX_GAIN (integer)
Establecer Fuente/Oyente (Flotante)
AL_MAX_DISTANCE (integer)
Establecer Fuente/Oyente (Flotante)
AL_ROLLOFF_FACTOR (integer)
Establecer Fuente/Oyente (Flotante)
AL_CONE_OUTER_GAIN (integer)
Establecer Fuente/Oyente (Flotante)
AL_CONE_INNER_ANGLE (integer)
Establecer Fuente/Oyente (Flotante)
AL_CONE_OUTER_ANGLE (integer)
Establecer Fuente/Oyente (Flotante)
AL_REFERENCE_DISTANCE (integer)
Establecer Fuente/Oyente (Flotante)
AL_POSITION (integer)
Establecer Fuente/Oyente (Vector Flotante)
AL_VELOCITY (integer)
Establecer Fuente/Oyente (Vector Flotante)
AL_DIRECTION (integer)
Establecer Fuente/Oyente (Vector Flotante)
AL_ORIENTATION (integer)
Establecer Fuente/Oyente (Vector Flotante)
AL_FORMAT_MONO8 (integer)
Formato PCM
AL_FORMAT_MONO16 (integer)
Formato PCM
AL_FORMAT_STEREO8 (integer)
Formato PCM
AL_FORMAT_STEREO16 (integer)
Formato PCM
AL_INITIAL (integer)
Fuente de Estado
AL_PLAYING (integer)
Fuente de Estado
AL_PAUSED (integer)
Fuente de Estado
AL_STOPPED (integer)
Fuente de Estado
AL_LOOPING (integer)
Fuente de Estado
AL_TRUE (integer)
Valor Booleano reconocido por OpenAL
AL_FALSE (integer)
Valor Booleano reconocido por OpenAL


Funciones de OpenAL


openal_buffer_create

(PECL openal >= 0.1.0)

openal_buffer_create Genera un buffer OpenAL

Descripción

resource openal_buffer_create ( void )

Valores devueltos

Devuelve un recurso Open AL(Buffer) en éxito o FALSE en fallo.

Ver también



openal_buffer_data

(PECL openal >= 0.1.0)

openal_buffer_data Carga un buffer con datos

Descripción

bool openal_buffer_data ( resource $buffer , int $format , string $data , int $freq )

Parámetros

buffer

Un recurso Open AL(Buffer) (previamente creado por openal_buffer_create()).

format

Formato de data, uno de: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 y AL_FORMAT_STEREO16

data

Bloque de datos de audio binario en el format y el freq especificado.

freq

Frecuencia de data dados en Hz.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_buffer_destroy

(PECL openal >= 0.1.0)

openal_buffer_destroy Destruye un buffer OpenAL

Descripción

bool openal_buffer_destroy ( resource $buffer )

Parámetros

buffer

Un recurso Open AL(Buffer) (previamente creado por openal_buffer_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_buffer_get

(PECL openal >= 0.1.0)

openal_buffer_get Recupera una propiedad del buffer OpenAL

Descripción

int openal_buffer_get ( resource $buffer , int $property )

Parámetros

buffer

Un recurso Open AL(Buffer) (previamente creado por openal_buffer_create()).

property

Propiedad especifica, una de: AL_FREQUENCY, AL_BITS, AL_CHANNELS y AL_SIZE.

Valores devueltos

Devuelve un valor entero apropiada a la property requerida o FALSE en caso de error.

Ver también



openal_buffer_loadwav

(PECL openal >= 0.1.0)

openal_buffer_loadwav Carga un archivo .wav dentro de un buffer

Descripción

bool openal_buffer_loadwav ( resource $buffer , string $wavfile )

Parámetros

buffer

Un recurso Open AL(Buffer) (previamente creado por openal_buffer_create()).

wavfile

Ruta al archivo .wav en el sistema de archivo local.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_context_create

(PECL openal >= 0.1.0)

openal_context_create Crea un contexto de procesamiento de audio

Descripción

resource openal_context_create ( resource $device )

Parámetros

device

Un recurso Open AL(Device) (previamente creado por openal_device_open()).

Valores devueltos

Devuelve un recurso Open AL(Context) en éxito o FALSE en fallo.

Ver también



openal_context_current

(PECL openal >= 0.1.0)

openal_context_current Crea el corriente contexto especificado

Descripción

bool openal_context_current ( resource $context )

Parámetros

context

Un recurso Open AL(Context) (previamente creado por openal_context_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_context_destroy

(PECL openal >= 0.1.0)

openal_context_destroy Destruye un contexto

Descripción

bool openal_context_destroy ( resource $context )

Parámetros

context

Un recurso Open AL(Context) (previamente creado por openal_context_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_context_process

(PECL openal >= 0.1.0)

openal_context_process Procesa un contexto especificado

Descripción

bool openal_context_process ( resource $context )

Parámetros

context

Un recurso Open AL(Context) (previamente creado por openal_context_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_context_suspend

(PECL openal >= 0.1.0)

openal_context_suspend Suspende el contexto especificado

Descripción

bool openal_context_suspend ( resource $context )

Parámetros

context

Un recurso Open AL(Context) (previamente creado por openal_context_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_device_close

(PECL openal >= 0.1.0)

openal_device_close Cierra un dispositivo OpenAL

Descripción

bool openal_device_close ( resource $device )

Parámetros

device

Un recurso Open AL(Device) (previamente creado por openal_device_open()) para ser cerrado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_device_open

(PECL openal >= 0.1.0)

openal_device_open Inicia la capa de audio del OpenAL

Descripción

resource openal_device_open ([ string $device_desc ] )

Parámetros

device_desc

Abre un dispositivo de audio especiado opcionalmente por device_desc. Si device_desc no está especificado el primer dispositivo de audio disponible será usado.

Valores devueltos

Devuelve un recurso Open AL(Device) en éxito o FALSE en fallo.

Ver también



openal_listener_get

(PECL openal >= 0.1.0)

openal_listener_get Devuelve una propiedad de oyente

Descripción

mixed openal_listener_get ( int $property )

Parámetros

property

Propiedad para recuperar, una de: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) y AL_ORIENTATION (array(float,float,float)).

Valores devueltos

Devuelve un flotante o un arreglo de flotantes (como apropiado) o FALSE en caso de error.

Ver también



openal_listener_set

(PECL openal >= 0.1.0)

openal_listener_set Establece una propiedad de oyente

Descripción

bool openal_listener_set ( int $property , mixed $setting )

Parámetros

property

Propiedad a establecer, una de: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) y AL_ORIENTATION (array(float,float,float)).

setting

Valor a establecer, ya sea flotante, o un arreglo de flotantes como apropiado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_create

(PECL openal >= 0.1.0)

openal_source_create Genera una fuente de recursos

Descripción

resource openal_source_create ( void )

Valores devueltos

Devuelve un recurso Open AL(Source) en éxito o FALSE en fallo.

Ver también



openal_source_destroy

(PECL openal >= 0.1.0)

openal_source_destroy Destruye una fuente de recursos

Descripción

bool openal_source_destroy ( resource $source )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_get

(PECL openal >= 0.1.0)

openal_source_get Recupera una propiedad de una fuente del OpenAL

Descripción

mixed openal_source_get ( resource $source , int $property )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

property

Propiedad para obtener, una de: AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

Valores devueltos

Devuelve el tipo asociado con la propiedad que se recupera o FALSE en caso de error.

Ver también



openal_source_pause

(PECL openal >= 0.1.0)

openal_source_pause Pausa la fuente

Descripción

bool openal_source_pause ( resource $source )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_play

(PECL openal >= 0.1.0)

openal_source_play Empieza la reproducción de la fuente

Descripción

bool openal_source_play ( resource $source )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_rewind

(PECL openal >= 0.1.0)

openal_source_rewind Rebobina la fuente

Descripción

bool openal_source_rewind ( resource $source )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_set

(PECL openal >= 0.1.0)

openal_source_set Establece la propiedad de la fuente

Descripción

bool openal_source_set ( resource $source , int $property , mixed $setting )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

property

Propiedad para establecer, una de: AL_BUFFER (OpenAL(Source)), AL_LOOPING (bool), AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

setting

El valor para asignar a la property especifica. Consulta la descripción de la property para una descripción de el valor(es) esperando.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_source_stop

(PECL openal >= 0.1.0)

openal_source_stop Detiene la reproducción de la fuente

Descripción

bool openal_source_stop ( resource $source )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



openal_stream

(PECL openal >= 0.1.0)

openal_stream Empieza la salida de una fuente

Descripción

resource openal_stream ( resource $source , int $format , int $rate )

Parámetros

source

Un recurso Open AL(Source) (previamente creado por openal_source_create()).

format

Formato de data, uno de: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 y AL_FORMAT_STEREO16

rate

Frecuencias de datos para las salidas dadas en Hz.

Valores devueltos

Devuelve un recurso de salida en success o FALSE en caso de error.

Ver también


Tabla de contenidos





Servicios de autenticación


Kerberos V


Introducción

Estos paquetes le permite acceder a la administración en los servidores Kerberos V. Se puede crear, modificar y eliminar directores y politicas en Kerberos V.

Más información acerca de Kerberos se puede encontrar en » http://web.mit.edu/kerberos/www/.

La documentación de Kerberos y KADM5 se puede encontrar en » http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.8/doc/admin_toc.html.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/kadm5.

Nota:

Si se utiliza esta opción sin especificar la ruta de KADM5, PHP utiliza la libreria cliente built-in KADM5. Los usuarios que ejecutan otras aplicaciones que utilizan KADM5 (por ejemplo, ejecutar PHP 4 y PHP 5 como módulo concurrente apache, o auth kadm5) siempre se debe especificar la ruta de KADM5: --with-kadm5=/path/to/kadm5. Esto obligará a PHP a usar las librerias de cliente instaladas por KADM5, y evitar cualquier conflicto.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión define un manejador KADM5 devuelto por kadm5_init_with_password().




Constantes predefinidas

Tabla de contenidos

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.


Constants for Attribute Flags

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_modify_principal() allow to specify special attributes using a bitfield. The symbols are defined below:

Attributes for use by the KDC
constant
KRB5_KDB_DISALLOW_POSTDATED
KRB5_KDB_DISALLOW_FORWARDABLE
KRB5_KDB_DISALLOW_TGT_BASED
KRB5_KDB_DISALLOW_RENEWABLE
KRB5_KDB_DISALLOW_PROXIABLE
KRB5_KDB_DISALLOW_DUP_SKEY
KRB5_KDB_DISALLOW_ALL_TIX
KRB5_KDB_REQUIRES_PRE_AUTH
KRB5_KDB_REQUIRES_HW_AUTH
KRB5_KDB_REQUIRES_PWCHANGE
KRB5_KDB_DISALLOW_SVR
KRB5_KDB_PWCHANGE_SERVER
KRB5_KDB_SUPPORT_DESMD5
KRB5_KDB_NEW_PRINC



Constants for Options

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_get_principal() allow to specify or return principal's options as an associative array. The keys for the associative array are defined as string constants below:

Options for creating/modifying/retrieving principals
constant funcdef description
KADM5_PRINCIPAL long The expire time of the princial as a Kerberos timestamp.
KADM5_PRINC_EXPIRE_TIME long The expire time of the princial as a Kerberos timestamp.
KADM5_LAST_PW_CHANGE long The time this principal's password was last changed.
KADM5_PW_EXPIRATION long The expire time of the principal's current password, as a Kerberos timestamp.
KADM5_MAX_LIFE long The maximum lifetime of any Kerberos ticket issued to this principal.
KADM5_MAX_RLIFE long The maximum renewable lifetime of any Kerberos ticket issued to or for this principal.
KADM5_MOD_NAME string The name of the Kerberos principal that most recently modified this principal.
KADM5_MOD_TIME long The time this principal was last modified, as a Kerberos timestamp.
KADM5_KVNO long The version of the principal's current key.
KADM5_POLICY string The name of the policy controlling this principal.
KADM5_CLEARPOLICY long Standard procedure is to assign the 'default' policy to new principals. KADM5_CLEARPOLICY suppresses this behaviour.
KADM5_LAST_SUCCESS long The KDC time of the last successfull AS_REQ.
KADM5_LAST_FAILED long The KDC time of the last failed AS_REQ.
KADM5_FAIL_AUTH_COUNT long The number of consecutive failed AS_REQs.
KADM5_RANDKEY long Generates a random password for the principal. The parameter password will be ignored.
KADM5_ATTRIBUTES long A bitfield of attributes for use by the KDC.




Ejemplos

Tabla de contenidos


El uso básico

Este sencillo ejemplo muestra cómo conectarse, consultar, imprimir directores resultantes y desconectarse de una base de datos KADM5.

<?php

  $handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

  print 
"<h1>get_principals</h1>\n";
  
$principals kadm5_get_principals($handle);
  for( 
$i=0$i<count($principals); $i++)
      print 
"$principals[$i]<br>\n";

  print 
"<h1>get_policies</h1>\n";
  
$policies kadm5_get_policies($handle);
  for( 
$i=0$i<count($policies); $i++)
      print 
"$policies[$i]<br>\n";

  print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

  
$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );
  
$keys array_keys($options);
  for( 
$i=0$i<count($keys); $i++) {
    
$value $options[$keys[$i]];
    print 
"$keys[$i]$value<br>\n";
  }

  
$options = array(KADM5_PRINC_EXPIRE_TIME => 0);
  
kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

  
kadm5_destroy($handle);
?>




KADM5 Funciones


kadm5_chpass_principal

(PECL kadm5 >= 0.2.3)

kadm5_chpass_principalChanges the principal's password

Descripción

bool kadm5_chpass_principal ( resource $handle , string $principal , string $password )

kadm5_chpass_principal() sets the new password password for the principal.

Parámetros

handle

A KADM5 handle.

principal

The principal.

password

The new password.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Example of changing principal's password

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_chpass_principal($handle"burbach@GONICUS.LOCAL""newpassword");

kadm5_destroy($handle);
?>



kadm5_create_principal

(PECL kadm5 >= 0.2.3)

kadm5_create_principalCreates a kerberos principal with the given parameters

Descripción

bool kadm5_create_principal ( resource $handle , string $principal [, string $password [, array $options ]] )

Creates a principal with the given password.

Parámetros

handle

A KADM5 handle.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

options

It is possible to specify several optional parameters within the array options. Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Example of principal's creation

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Ver también



kadm5_delete_principal

(PECL kadm5 >= 0.2.3)

kadm5_delete_principalDeletes a kerberos principal

Descripción

bool kadm5_delete_principal ( resource $handle , string $principal )

Removes the principal from the Kerberos database.

Parámetros

handle

A KADM5 handle.

principal

The removed principal.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 kadm5_delete_principal() example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_delete_principal($handle"burbach@GONICUS.LOCAL");

kadm5_destroy($handle);
?>

Ver también



kadm5_destroy

(PECL kadm5 >= 0.2.3)

kadm5_destroyCloses the connection to the admin server and releases all related resources

Descripción

bool kadm5_destroy ( resource $handle )

Closes the connection to the admin server and releases all related resources.

Parámetros

handle

A KADM5 handle.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



kadm5_flush

(PECL kadm5 >= 0.2.3)

kadm5_flushFlush all changes to the Kerberos database

Descripción

bool kadm5_flush ( resource $handle )

Flush all changes to the Kerberos database, leaving the connection to the Kerberos admin server open.

Parámetros

handle

A KADM5 handle.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



kadm5_get_policies

(PECL kadm5 >= 0.2.3)

kadm5_get_policiesGets all policies from the Kerberos database

Descripción

array kadm5_get_policies ( resource $handle )

Gets an array containing the policies's names.

Parámetros

handle

A KADM5 handle.

Valores devueltos

Returns array of policies on success o FALSE en caso de error.

Ejemplos

Ejemplo #1 kadm5_get_policies() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_policies</h1>\n";
foreach (
kadm5_get_policies($handle) as $policy) {
    echo 
"$policy<br />\n";
}

kadm5_destroy($handle);
?>



kadm5_get_principal

(PECL kadm5 >= 0.2.3)

kadm5_get_principalGets the principal's entries from the Kerberos database

Descripción

array kadm5_get_principal ( resource $handle , string $principal )

Gets the principal's entries from the Kerberos database.

Parámetros

handle

A KADM5 handle.

principal

The principal.

Valores devueltos

Returns array of options containing the following keys: KADM5_PRINCIPAL, KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_MOD_NAME, KADM5_MOD_TIME, KADM5_KVNO, KADM5_POLICY, KADM5_MAX_RLIFE, KADM5_LAST_SUCCESS, KADM5_LAST_FAILED, KADM5_FAIL_AUTH_COUNT on success o FALSE en caso de error.

Ejemplos

Ejemplo #1 kadm5_get_principal() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );

foreach (
$options as $key => $value) {
    echo 
"$key$value<br />\n";
}

kadm5_destroy($handle);
?>

Ver también



kadm5_get_principals

(PECL kadm5 >= 0.2.3)

kadm5_get_principalsGets all principals from the Kerberos database

Descripción

array kadm5_get_principals ( resource $handle )

kadm5_get_principals() returns an array containing the principals's names.

Parámetros

handle

A KADM5 handle.

Valores devueltos

Returns array of principals on success o FALSE en caso de error.

Ejemplos

Ejemplo #1 kadm5_get_principals() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principals</h1>\n";
foreach (
kadm5_get_principals($handle) as $principal) {
    echo 
"$principal<br />\n";
}

kadm5_destroy($handle);
?>

Ver también



kadm5_init_with_password

(PECL kadm5 >= 0.2.3)

kadm5_init_with_passwordOpens a connection to the KADM5 library

Descripción

resource kadm5_init_with_password ( string $admin_server , string $realm , string $principal , string $password )

Opens a connection with the KADM5 library using the principal and the given password to obtain initial credentials from the admin_server.

Parámetros

admin_server

The server.

realm

Defines the authentication domain for the connection.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

Valores devueltos

Returns a KADM5 handle on success o FALSE en caso de error.

Ejemplos

Ejemplo #1 KADM5 initialization example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Notas

Nota:

Connection should be closed after use with kadm5_destroy().

Ver también

  • kadm5_destroy() - Closes the connection to the admin server and releases all related resources



kadm5_modify_principal

(PECL kadm5 >= 0.2.3)

kadm5_modify_principalModifies a kerberos principal with the given parameters

Descripción

bool kadm5_modify_principal ( resource $handle , string $principal , array $options )

Modifies a principal according to the given options.

Parámetros

handle

A KADM5 handle.

principal

The principal.

options

It is possible to specify several optional parameters within the array options. Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE. KADM5_FAIL_AUTH_COUNT.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Example of modifying principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH;
$options = array(KADM5_PRINC_EXPIRE_TIME => 3451234,
                 
KADM5_POLICY => "gonicus",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

kadm5_destroy($handle);
?>

Ver también


Tabla de contenidos




Radius


Introducción

Este paquete se basa en los libradius de FreeBSD (Autenticación remota telefónica de servicio de usuario). Permite a los clientes realizar la autenticación y la contabilidad por medio de solicitudes de red a servidores remotos.

Esta extensión PECL añade soporte completo para la autenticación Radius (» RFC 2865) y contabilidad Radius (» RFC 2866). Este paquete está disponible para Unix (probado en FreeBSD y Linux) y para Windows.

Nota:

Una descripción exacta de libradius se pueden encontrar » aquí. Una descripción detallada del archivo de configuración se puede encontrar » aquí.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP.

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/radius.

No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

RADIUS_ACCESS_REQUEST ()
Authentication Request
RADIUS_ACCESS_ACCEPT ()
Access accepted
RADIUS_ACCESS_REJECT ()
Access rejected
RADIUS_ACCOUNTING_REQUEST ()
Accounting request
RADIUS_ACCOUNTING_RESPONSE ()
Accounting response
RADIUS_ACCESS_CHALLENGE ()
Accsess challenge
RADIUS_USER_NAME (string)
Username
RADIUS_USER_PASSWORD (string)
Password
RADIUS_CHAP_PASSWORD (string)
Chap Password: chappass = md5(ident + plaintextpass + challenge)
RADIUS_NAS_IP_ADDRESS (string)
NAS IP-Adress
RADIUS_NAS_PORT (int)
NAS Port
RADIUS_SERVICE_TYPE (int)

Type of Service, one of:

  • RADIUS_LOGIN
  • RADIUS_FRAMED
  • RADIUS_CALLBACK_LOGIN
  • RADIUS_CALLBACK_FRAMED
  • RADIUS_OUTBOUND
  • RADIUS_ADMINISTRATIVE
  • RADIUS_NAS_PROMPT
  • RADIUS_AUTHENTICATE_ONLY
  • RADIUS_CALLBACK_NAS_PROMPT

RADIUS_FRAMED_PROTOCOL (int)

Framed Protocol, one of:

  • RADIUS_PPP
  • RADIUS_SLIP
  • RADIUS_ARAP
  • RADIUS_GANDALF
  • RADIUS_XYLOGICS

RADIUS_FRAMED_IP_ADDRESS (int)
IPv4 Internet network address
RADIUS_FRAMED_IP_NETMASK (string)
Netmask
RADIUS_FRAMED_ROUTING (int)
Routing
RADIUS_FILTER_ID (string)
Filter ID
RADIUS_FRAMED_MTU (int)
MTU
RADIUS_FRAMED_COMPRESSION (int)

Compression, one of:

  • RADIUS_COMP_NONE
  • RADIUS_COMP_VJ
  • RADIUS_COMP_IPXHDR

RADIUS_LOGIN_IP_HOST (string)
Login IP Host
RADIUS_LOGIN_SERVICE (int)
Login Service
RADIUS_LOGIN_TCP_PORT (int)
Login TCP Port
RADIUS_REPLY_MESSAGE (string)
Reply Message
RADIUS_CALLBACK_NUMBER (string)
Callback Number
RADIUS_CALLBACK_ID (string)
Callback ID
RADIUS_FRAMED_ROUTE (string)
Framed Route
RADIUS_FRAMED_IPX_NETWORK (string)
Framed IPX Network
RADIUS_STATE (string)
State
RADIUS_CLASS (int)
Class
RADIUS_VENDOR_SPECIFIC (int)
Vendor specific attribute
RADIUS_SESSION_TIMEOUT (int)
Session timeout
RADIUS_IDLE_TIMEOUT (int)
Idle timeout
RADIUS_TERMINATION_ACTION (int)
Termination action
RADIUS_CALLED_STATION_ID (int)
Called Station Id
RADIUS_CALLING_STATION_ID (string)
Calling Station Id
RADIUS_NAS_IDENTIFIER (int)
NAS ID
RADIUS_PROXY_STATE (int)
Proxy State
RADIUS_LOGIN_LAT_SERVICE (int)
Login LAT Service
RADIUS_LOGIN_LAT_NODE (int)
Login LAT Node
RADIUS_LOGIN_LAT_GROUP (int)
Login LAT Group
Framed Appletalk Link
RADIUS_FRAMED_APPLETALK_NETWORK (int)
Framed Appletalk Network
RADIUS_FRAMED_APPLETALK_ZONE (int)
Framed Appletalk Zone
RADIUS_CHAP_CHALLENGE (string)
Challenge
RADIUS_NAS_PORT_TYPE (int)

NAS port type, one of:

  • RADIUS_ASYNC
  • RADIUS_SYNC
  • RADIUS_ISDN_SYNC
  • RADIUS_ISDN_ASYNC_V120
  • RADIUS_ISDN_ASYNC_V110
  • RADIUS_VIRTUAL
  • RADIUS_PIAFS
  • RADIUS_HDLC_CLEAR_CHANNEL
  • RADIUS_X_25
  • RADIUS_X_75
  • RADIUS_G_3_FAX
  • RADIUS_SDSL
  • RADIUS_ADSL_CAP
  • RADIUS_ADSL_DMT
  • RADIUS_IDSL
  • RADIUS_ETHERNET
  • RADIUS_XDSL
  • RADIUS_CABLE
  • RADIUS_WIRELESS_OTHER
  • RADIUS_WIRELESS_IEEE_802_11

RADIUS_PORT_LIMIT (int)
Port Limit
RADIUS_LOGIN_LAT_PORT (int)
Login LAT Port
RADIUS_CONNECT_INFO (string)
Connect info
RADIUS_ACCT_STATUS_TYPE (int)

Accounting status type, one of:

  • RADIUS_START
  • RADIUS_STOP
  • RADIUS_ACCOUNTING_ON
  • RADIUS_ACCOUNTING_OFF

RADIUS_ACCT_DELAY_TIME (int)
Accounting delay time
RADIUS_ACCT_INPUT_OCTETS (int)
Accounting input bytes
RADIUS_ACCT_OUTPUT_OCTETS (int)
Accounting output bytes
RADIUS_ACCT_SESSION_ID (int)
Accounting session ID
RADIUS_ACCT_AUTHENTIC (int)

Accounting authentic, one of:

  • RADIUS_AUTH_RADIUS
  • RADIUS_AUTH_LOCAL
  • RADIUS_AUTH_REMOTE

RADIUS_ACCT_SESSION_TIME (int)
Accounting session time
RADIUS_ACCT_INPUT_PACKETS (int)
Accounting input packets
RADIUS_ACCT_OUTPUT_PACKETS (int)
Accounting output packets
RADIUS_ACCT_TERMINATE_CAUSE (int)

Accounting terminate cause, one of:

  • RADIUS_TERM_USER_REQUEST
  • RADIUS_TERM_LOST_CARRIER
  • RADIUS_TERM_LOST_SERVICE
  • RADIUS_TERM_IDLE_TIMEOUT
  • RADIUS_TERM_SESSION_TIMEOUT
  • RADIUS_TERM_ADMIN_RESET
  • RADIUS_TERM_ADMIN_REBOOT
  • RADIUS_TERM_PORT_ERROR
  • RADIUS_TERM_NAS_ERROR
  • RADIUS_TERM_NAS_REQUEST
  • RADIUS_TERM_NAS_REBOOT
  • RADIUS_TERM_PORT_UNNEEDED
  • RADIUS_TERM_PORT_PREEMPTED
  • RADIUS_TERM_PORT_SUSPENDED
  • RADIUS_TERM_SERVICE_UNAVAILABLE
  • RADIUS_TERM_CALLBACK
  • RADIUS_TERM_USER_ERROR
  • RADIUS_TERM_HOST_REQUEST

RADIUS_ACCT_MULTI_SESSION_ID (string)
Accounting multi session ID
Accounting link count
RADIUS_VENDOR_MICROSOFT (int)

Microsoft specific vendor attributes (» RFC 2548), one of:

  • RADIUS_MICROSOFT_MS_CHAP_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP_ERROR
  • RADIUS_MICROSOFT_MS_CHAP_PW_1
  • RADIUS_MICROSOFT_MS_CHAP_PW_2
  • RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PW
  • RADIUS_MICROSOFT_MS_CHAP_NT_ENC_PW
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES
  • RADIUS_MICROSOFT_MS_RAS_VENDOR
  • RADIUS_MICROSOFT_MS_CHAP_DOMAIN
  • RADIUS_MICROSOFT_MS_CHAP_CHALLENGE
  • RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS
  • RADIUS_MICROSOFT_MS_BAP_USAGE
  • RADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLD
  • RADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMIT
  • RADIUS_MICROSOFT_MS_MPPE_SEND_KEY
  • RADIUS_MICROSOFT_MS_MPPE_RECV_KEY
  • RADIUS_MICROSOFT_MS_RAS_VERSION
  • RADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASON
  • RADIUS_MICROSOFT_MS_FILTER
  • RADIUS_MICROSOFT_MS_ACCT_AUTH_TYPE
  • RADIUS_MICROSOFT_MS_ACCT_EAP_TYPE
  • RADIUS_MICROSOFT_MS_CHAP2_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP2_SUCCESS
  • RADIUS_MICROSOFT_MS_CHAP2_PW
  • RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_ARAP_CHALLENGE



Ejemplos

¿Cómo iniciar?

  • Obtener un recurso radius
  • Configurar la librería
  • Crear la petición
  • Poner atributos
  • Enviar la petición
  • Recibir atributos
  • Cerrar el recurso radius (opcional)
También sirve echar un vistazo a los ejemplos en este paquete.

El paquete contiene un ejemplo de script php. Este script demuestra como autenticar con radius utilizando PAP o CHAP (md5). Si se autentica con servidores Microsoft Radius entonces no le será posible utilizar CHAP (md5). Si quisiera autenticarse con servidores Microsoft tiene que utilizar MS-CHAPv1 o MS-CHAPv2, pero es más complicado, porque usted necesita md4, sha1 y des para generar los datos correctos. Los ejemplos adjuntos demuestran todos los métodos de autenticación, incluyendo MS-CHAPv1 y MS-CHAPv2. Para tener funcionando MS-CHAP necesita las extensiones mcrypt y mhash iniciando con la version 1.2 de este paquete, la extensión mcrypt ya no es necesaria.



Funciones Radius

Información de Contacto

Si tiene algún comentario, correcciones de errores, mejoras o quiere ayudar a desarrollar esto, puede enviar un e-mail a » mbretter@php.net.


radius_acct_open

(PECL radius >= 1.1.0)

radius_acct_openCrea un manejador Radius para el conteo

Descripción

resource radius_acct_open ( void )

Valores devueltos

Devuelve un manejador en caso de tener éxito, FALSE en caso de error. Esta función falla solamente si hay insuficiencia de memoria.

Ejemplos

Ejemplo #1 radius_acct_open() example

<?php
$res 
radius_acct_open ()
    or die (
"No se pudo crear un manejador handle");
print(
"Manejador creado exitosamente");
?>



radius_add_server

(PECL radius >= 1.1.0)

radius_add_serverAdds a server

Descripción

bool radius_add_server ( resource $radius_handle , string $hostname , int $port , string $secret , int $timeout , int $max_tries )

radius_add_server() may be called multiple times, and it may be used together with radius_config(). At most 10 servers may be specified. When multiple servers are given, they are tried in round-robin fashion until a valid response is received, or until each server's max_tries limit has been reached.

Parámetros

radius_handle

hostname

The hostname parameter specifies the server host, either as a fully qualified domain name or as a dotted-quad IP address in text form.

port

The port specifies the UDP port to contact on the server. If port is given as 0, the library looks up the radius/udp or radacct/udp service in the network services database, and uses the port found there. If no entry is found, the library uses the standard Radius ports, 1812 for authentication and 1813 for accounting.

secret

The shared secret for the server host is passed to the secret parameter. The Radius protocol ignores all but the leading 128 bytes of the shared secret.

timeout

The timeout for receiving replies from the server is passed to the timeout parameter, in units of seconds.

max_tries

The maximum number of repeated requests to make before giving up is passed into the max_tries.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_add_server() example

<?php
if (!radius_add_server($res'radius.example.com'1812'testing123'33)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br>";
    exit;
}
?>

Ver también

  • radius_config() - Causes the library to read the given configuration file



radius_auth_open

(PECL radius >= 1.1.0)

radius_auth_openCrea un identificador de Radius para la autenticación

Descripción

resource radius_auth_open ( void )

Valores devueltos

Devuelve un manejador en caso de éxito, FALSE en caso de error. Esta función sólo falla si hay insuficiente memoria disponible.

Ejemplos

Ejemplo #1 Ejemplo de radius_auth_open()

<?php
$radh 
radius_auth_open()
    or die (
"No se pudo crear el manejador");
echo 
"Manejador creado con éxito";
?>



radius_close

(PECL radius >= 1.1.0)

radius_closeFrees all ressources

Descripción

bool radius_close ( resource $radius_handle )

It is not needed to call this function because php frees all resources at the end of each request.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



radius_config

(PECL radius >= 1.1.0)

radius_configCauses the library to read the given configuration file

Descripción

bool radius_config ( resource $radius_handle , string $file )

Before issuing any Radius requests, the library must be made aware of the servers it can contact. The easiest way to configure the library is to call radius_config(). radius_config() causes the library to read a configuration file whose format is described in » radius.conf.

Parámetros

radius_handle

file

The pathname of the configuration file is passed as the file argument to radius_config(). The library can also be configured programmatically by calls to radius_add_server().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



radius_create_request

(PECL radius >= 1.1.0)

radius_create_requestCreate accounting or authentication request

Descripción

bool radius_create_request ( resource $radius_handle , int $type )

A Radius request consists of a code specifying the kind of request, and zero or more attributes which provide additional information. To begin constructing a new request, call radius_create_request().

Nota: Attention: You must call this function, before you can put any attribute!

Parámetros

radius_handle

type

Type is RADIUS_ACCESS_REQUEST or RADIUS_ACCOUNTING_REQUEST.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_create_request() example

<?php
if (!radius_create_request($resRADIUS_ACCESS_REQUEST)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ver también



radius_cvt_addr

(PECL radius >= 1.1.0)

radius_cvt_addrConverts raw data to IP-Address

Descripción

string radius_cvt_addr ( string $data )

Ejemplos

Ejemplo #1 radius_cvt_addr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_IP_ADDRESS:
        
$ip radius_cvt_addr($data);
        echo 
"IP: $ip<br>\n";
        break;

    case 
RADIUS_FRAMED_IP_NETMASK:
        
$mask radius_cvt_addr($data);
        echo 
"MASK: $mask<br>\n";
        break;
    }
}
?>

Ver también



radius_cvt_int

(PECL radius >= 1.1.0)

radius_cvt_intConverts raw data to integer

Descripción

int radius_cvt_int ( string $data )

Ejemplos

Ejemplo #1 radius_cvt_int() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_MTU:
        
$mtu radius_cvt_int($data);
        echo 
"MTU: $mtu<br>\n";
        break;
    }
}
?>

Ver también



radius_cvt_string

(PECL radius >= 1.1.0)

radius_cvt_stringConverts raw data to string

Descripción

string radius_cvt_string ( string $data )

Ejemplos

Ejemplo #1 radius_cvt_string() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FILTER_ID:
        
$id radius_cvt_string($data);
        echo 
"Filter ID: $id<br>\n";
        break;
    }
}
?>

Ver también



radius_demangle_mppe_key

(PECL radius >= 1.2.0)

radius_demangle_mppe_keyDerives mppe-keys from mangled data

Descripción

string radius_demangle_mppe_key ( resource $radius_handle , string $mangled )

When using MPPE with MS-CHAPv2, the send- and recv-keys are mangled (see » RFC 2548), however this function is useless, because I don't think that there is or will be a PPTP-MPPE implementation in PHP.

Valores devueltos

Returns the demangled string, or FALSE on error.



radius_demangle

(PECL radius >= 1.2.0)

radius_demangleDemangles data

Descripción

string radius_demangle ( resource $radius_handle , string $mangled )

Some data (Passwords, MS-CHAPv1 MPPE-Keys) is mangled for security reasons, and must be demangled before you can use them.

Valores devueltos

Returns the demangled string, or FALSE on error.



radius_get_attr

(PECL radius >= 1.1.0)

radius_get_attrExtracts an attribute

Descripción

mixed radius_get_attr ( resource $radius_handle )

Like Radius requests, each response may contain zero or more attributes. After a response has been received successfully by radius_send_request(), its attributes can be extracted one by one using radius_get_attr(). Each time radius_get_attr() is called, it gets the next attribute from the current response.

Valores devueltos

Returns an associative array containing the attribute-type and the data, or error number <= 0.

Ejemplos

Ejemplo #1 radius_get_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
}
?>

Ver también



radius_get_vendor_attr

(PECL radius >= 1.1.0)

radius_get_vendor_attrExtracts a vendor specific attribute

Descripción

array radius_get_vendor_attr ( string $data )

If radius_get_attr() returns RADIUS_VENDOR_SPECIFIC, radius_get_vendor_attr() may be called to determine the vendor.

Valores devueltos

Returns an associative array containing the attribute-type, vendor and the data, or FALSE on error.

Ejemplos

Ejemplo #1 radius_get_vendor_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
    if (
$attr == RADIUS_VENDOR_SPECIFIC) {

        
$resv radius_get_vendor_attr($data);
        if (
is_array($resv)) {
            
$vendor $resv['vendor'];
            
$attrv $resv['attr'];
            
$datav $resv['data'];    
            
printf("Got Vendor Attr:%d %d Bytes %s\n"$attrvstrlen($datav), bin2hex($datav));
        }
        
    }
}
?>

Ver también



radius_put_addr

(PECL radius >= 1.1.0)

radius_put_addrAttaches an IP-Address attribute

Descripción

bool radius_put_addr ( resource $radius_handle , int $type , string $addr )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



radius_put_attr

(PECL radius >= 1.1.0)

radius_put_attrAttaches a binary attribute

Descripción

bool radius_put_attr ( resource $radius_handle , int $type , string $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_put_attr() example

<?php
mt_srand
(time());
$chall mt_rand();
$chapval md5(pack('Ca*','sepp' $chall));
$pass pack('CH*'1$chapval);
if (!
radius_put_attr($resRADIUS_CHAP_PASSWORD$pass)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ver también



radius_put_int

(PECL radius >= 1.1.0)

radius_put_intAttaches an integer attribute

Descripción

bool radius_put_int ( resource $radius_handle , int $type , int $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_put_int() example

<?php
if (!radius_put_int($resRAD_FRAMED_PROTOCOLRAD_PPP)) {
   echo 
'RadiusError:' radius_strerror($res). "\n<br />";
   exit;
}
?>

Ver también



radius_put_string

(PECL radius >= 1.1.0)

radius_put_stringAttaches a string attribute

Descripción

bool radius_put_string ( resource $radius_handle , int $type , string $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_put_string() example

<?php
if (!radius_put_string($resRADIUS_USER_NAME'billy')) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ver también



radius_put_vendor_addr

(PECL radius >= 1.1.0)

radius_put_vendor_addrAttaches a vendor specific IP-Address attribute

Descripción

bool radius_put_vendor_addr ( resource $radius_handle , int $vendor , int $type , string $addr )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



radius_put_vendor_attr

(PECL radius >= 1.1.0)

radius_put_vendor_attrAttaches a vendor specific binary attribute

Descripción

bool radius_put_vendor_attr ( resource $radius_handle , int $vendor , int $type , string $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 radius_put_vendor_attr() example

<?php
if (!radius_put_vendor_attr($resRADIUS_VENDOR_MICROSOFTRAD_MICROSOFT_MS_CHAP_CHALLENGE$challenge)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ver también



radius_put_vendor_int

(PECL radius >= 1.1.0)

radius_put_vendor_intAttaches a vendor specific integer attribute

Descripción

bool radius_put_vendor_int ( resource $radius_handle , int $vendor , int $type , int $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



radius_put_vendor_string

(PECL radius >= 1.1.0)

radius_put_vendor_stringAttaches a vendor specific string attribute

Descripción

bool radius_put_vendor_string ( resource $radius_handle , int $vendor , int $type , string $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



radius_request_authenticator

(PECL radius >= 1.1.0)

radius_request_authenticatorReturns the request authenticator

Descripción

string radius_request_authenticator ( resource $radius_handle )

The request authenticator is needed for demangling mangled data like passwords and encryption-keys.

Valores devueltos

Returns the request authenticator as string, or FALSE on error.

Ver también



radius_send_request

(PECL radius >= 1.1.0)

radius_send_requestSends the request and waites for a reply

Descripción

int radius_send_request ( resource $radius_handle )

After the Radius request has been constructed, it is sent by radius_send_request().

The radius_send_request() function sends the request and waits for a valid reply, retrying the defined servers in round-robin fashion as necessary.

Valores devueltos

If a valid response is received, radius_send_request() returns the Radius code which specifies the type of the response. This will typically be RADIUS_ACCESS_ACCEPT, RADIUS_ACCESS_REJECT, or RADIUS_ACCESS_CHALLENGE. If no valid response is received, radius_send_request() returns FALSE.

Ver también



radius_server_secret

(PECL radius >= 1.1.0)

radius_server_secretReturns the shared secret

Descripción

string radius_server_secret ( resource $radius_handle )

The shared secret is needed as salt for demangling mangled data like passwords and encryption-keys.

Valores devueltos

Returns the server's shared secret as string, or FALSE on error.



radius_strerror

(PECL radius >= 1.1.0)

radius_strerrorReturns an error message

Descripción

string radius_strerror ( resource $radius_handle )

If Radius-functions fail then they record an error message. This error message can be retrieved with this function.

Valores devueltos

Returns error messages as string from failed radius functions.


Tabla de contenidos





Extensiones relacionadas con fecha y hora


Calendario


Introducción

La extensión de calendario presenta una serie de funciones para simplificar la conversión entre diferentes formatos de calendario. El intermediario o estádar está basado en la Fecha Juliana. La Fecha Juliana es una cuenta de días comenzando desde el 1 de Enero del 4713 A.C. Para hacer la conversión entre sistemas de calendario, primero debe convertir a la Fecha Juliana, después al sistema de calendario de su elección. ¡La Fecha Juliana es muy diferente del Calendario Juliano! Para más información acerca de la Fecha Juliana, visite » http://www.hermetic.ch/cal_stud/jdn.htm. Para más información acerca de sistemas de calendario visite » http://www.fourmilab.ch/documents/calendar/. Los extractos de esta página están incluidos en estas instrucciones, y están entrecomillados.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Para que estas funciones estén disponibles tiene que compilar PHP con --enable-calendar .

La versión de PHP para Windows tiene soporte nativo para esta extensión. No se requiere cargar extensiones adicionales para utilizar estas funciones.



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

CAL_GREGORIAN (integer)
CAL_JULIAN (integer)
CAL_JEWISH (integer)
CAL_FRENCH (integer)
CAL_NUM_CALS (integer)
CAL_DOW_DAYNO (integer)
CAL_DOW_SHORT (integer)
CAL_DOW_LONG (integer)
CAL_MONTH_GREGORIAN_SHORT (integer)
CAL_MONTH_GREGORIAN_LONG (integer)
CAL_MONTH_JULIAN_SHORT (integer)
CAL_MONTH_JULIAN_LONG (integer)
CAL_MONTH_JEWISH (integer)
CAL_MONTH_FRENCH (integer)

Las siguientes constantes están disponibles desde PHP 4.3.0 :

CAL_EASTER_DEFAULT (integer)
CAL_EASTER_ROMAN (integer)
CAL_EASTER_ALWAYS_GREGORIAN (integer)
CAL_EASTER_ALWAYS_JULIAN (integer)

Las siguientes constantes están disponibles desde PHP 5.0.0 :

CAL_JEWISH_ADD_ALAFIM_GERESH (integer)
CAL_JEWISH_ADD_ALAFIM (integer)
CAL_JEWISH_ADD_GERESHAYIM (integer)


Funciones de Calendario


cal_days_in_month

(PHP 4 >= 4.1.0, PHP 5)

cal_days_in_monthDevolver el número de días de un mes para un año y un calendario dados

Descripción

int cal_days_in_month ( int $calendar , int $month , int $year )

Esta función devolverá el número de días del mes month del año year para el calendario calendar especificado.

Parámetros

calendar

El calendario que se va a usar para el cálculo

month

El mes del calendario seleccionado

year

El año del calendario seleccionado

Valores devueltos

La duración en días del mes seleccionado en el calendario dado.

Ejemplos

Ejemplo #1 Ejemplo de cal_days_in_month()

<?php
$número 
cal_days_in_month(CAL_GREGORIAN82003); // 31
echo "Hubo $número días en agosto del 2003";
?>



cal_from_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_from_jdConvierte de una Fecha Juliana a un calendario soportado

Descripción

array cal_from_jd ( int $jd , int $calendar )

cal_from_jd() convierte el día juliano dado en jd a una fecha del calendario calendar. Los valores soportados por calendar son CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH y CAL_FRENCH.

Parámetros

jd

Un día juliano como un entero

calendar

El calendario al que se va a convertir

Valores devueltos

Devuelve una matriz que contiene información del calendario como el mes, día, año, día de la semana, nombres abreviados y completos del día de la semana y mes y la fecha como cadena de la forma "mes/día/año".

Ejemplos

Ejemplo #1 Ejemplo de cal_from_jd()

<?php
$hoy 
unixtojd(mktime(0008162003));
print_r(cal_from_jd($hoyCAL_GREGORIAN));
?>

El resultado del ejemplo sería:

Array
(
    [date] => 8/16/2003
    [month] => 8
    [day] => 16
    [year] => 2003
    [dow] => 6
    [abbrevdayname] => Sat
    [dayname] => Saturday
    [abbrevmonth] => Aug
    [monthname] => August
)

Ver también

  • cal_to_jd() - Convertir un calendario soportado a la Fecha Juliana
  • jdtofrench() - Convierte una Fecha Juliana al Calendario Republicano Francés
  • jdtogregorian() - Convierte una Fecha Juliana en una fecha Gregoriana
  • jdtojewish() - Convierte una Fecha Juliana a una fecha del Calendario Judío
  • jdtojulian() - Convierte una Fecha Juliana a una fecha del Calendario Juliano
  • jdtounix() - Convierte una Fecha Juliana a una fecha Unix



cal_info

(PHP 4 >= 4.1.0, PHP 5)

cal_infoDevuelve información sobre un calendario en particular

Descripción

array cal_info ([ int $calendar = -1 ] )

cal_info() devuelve información sobre el calendario calendar especificado.

La información del calendario es devuelta como una matriz que contiene los elementos calname, calsymbol, month, abbrevmonth y maxdaysinmonth. Los nombre de los diferentes calendarios que se pueden usar en calendar son los siguientes:

  • 0 o CAL_GREGORIAN - Calendario Gregoriano
  • 1 o CAL_JULIAN - Calendario Juliano
  • 2 o CAL_JEWISH - Calendario Judío
  • 3 o CAL_FRENCH - Calendario Republicano Francés

Si no se especifica calendar la información de todos los calendarios soportados es devuelta como un matriz.

Parámetros

calendar

El calendario del que se va a devolver la información. Si no se especifica ningún calendario se devolverá la información sobre todos los calendarios.

Valores devueltos

Historial de cambios

Versión Descripción
5.0.0 El parametro calendar se volvió opcional y si se omite se devuelven "todos los calendarios".

Ejemplos

Ejemplo #1 Ejemplo de cal_info()

<?php
$info 
cal_info(0);
print_r($info);
?>

El resultado del ejemplo sería:

Array
(
    [months] => Array
        (
            [1] => January
            [2] => February
            [3] => March
            [4] => April
            [5] => May
            [6] => June
            [7] => July
            [8] => August
            [9] => September
            [10] => October
            [11] => November
            [12] => December
        )

    [abbrevmonths] => Array
        (
            [1] => Jan
            [2] => Feb
            [3] => Mar
            [4] => Apr
            [5] => May
            [6] => Jun
            [7] => Jul
            [8] => Aug
            [9] => Sep
            [10] => Oct
            [11] => Nov
            [12] => Dec
        )

    [maxdaysinmonth] => 31
    [calname] => Gregorian
    [calsymbol] => CAL_GREGORIAN
)



cal_to_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_to_jdConvertir un calendario soportado a la Fecha Juliana

Descripción

int cal_to_jd ( int $calendar , int $month , int $day , int $year )

cal_to_jd() calcula la Fecha Juliana para una fecha en el calendario calendar especificado. Los calendarios calendar soportados son CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH y CAL_FRENCH.

Parámetros

calendar

El calendario desde el que se va a hacer la conversión, CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH o CAL_FRENCH.

month

El mes como número, el rango válido depende de calendar

day

El día como número, el rango válido depende de calendar

year

El año como número, el rango válido depende de calendar

Valores devueltos

Un número de día de la Fecha Juliana.

Ver también

  • cal_from_jd() - Convierte de una Fecha Juliana a un calendario soportado
  • frenchtojd() - Convierte una fecha desde el Calendario Republicano Francés a la Fecha Juliana
  • gregoriantojd() - Convierte una fecha Gregoriana en Fecha Juliana
  • jewishtojd() - Convierte una fecha del Calendario Judío a una Fecha Juliana
  • juliantojd() - Convierte una fecha del Calendario Juliano a una Fecha Juliana
  • unixtojd() - Convertir una fecha Unix en una Fecha Juliana



easter_date

(PHP 4, PHP 5)

easter_dateObtener la fecha Unix para la medianoche de Pascua de un año dado

Descripción

int easter_date ([ int $year ] )

Devuelve la fecha Unix correspondiente a la medianoche de Pascua del año dado.

Advertencia

Esta función generará una advertencia si el año está fuera del rango de fechas Unix (esto es, antes de 1970 o después de 2037).

La fecha del Domiongo de Pascua fue definida por el Concilio de Nicea en el año 325 D.C. como el domingo después de la primera luna llena que cae en o después del Equinocio de Primavera. El equinocio se asume que cae en el 21 de marzo, por lo que el cálculo se reduce a determinar la fecha de la luna llena y la fecha del siguiente domingo. El algoritmo que se usa aquí fue introducido alrededor del año 532 por Dionisio el Exiguo. Bajo el Calendario Juliano (para años anteriores a 1753) se usa un simple ciclo de 19 años para rastrear las fases de la luna. Bajo el Calendario Gregoriano (para años posteriores a 1753 - concebido por Clavio y Lilio, e introducido por el papa Gregorio XIII en Octubre de 1582, e introducido en Gran Bretaña y sus colonias en Septiembre de 1752) se añadieron dos factores de corrección para hacer el ciclo más exacto.

Parámetros

year

El año como un número entre 1970 y 2037.

Valores devueltos

El Domingo de Pascua como fecha Unix.

Historial de cambios

Versión Descripción
Since 4.3.0 El parámetro year es opcional y si se omite, por defecto es el año actual de acuerdo a la hora actual.

Ejemplos

Ejemplo #1 Ejemplo de easter_date()

<?php

echo date("M-d-Y"easter_date(1999));        // Apr-04-1999
echo date("M-d-Y"easter_date(2000));        // Apr-23-2000
echo date("M-d-Y"easter_date(2001));        // Apr-15-2001

?>

Ver también

  • easter_days() - Obtener el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado para calcular la Pascua antes de 1970 o después de 2037



easter_days

(PHP 4, PHP 5)

easter_daysObtener el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado

Descripción

int easter_days ([ int $year [, int $method = CAL_EASTER_DEFAULT ]] )

Obtiene el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado. Si no se especifica el año, se asume el año actual.

Esta función se puede usar en vez de easter_date() para calcular cuándo cae Pascua para años fuera del rango de fechas Unix (esto es, antes de 1970 o después de 2037).

La fecha del Domiongo de Pascua fue definida por el Concilio de Nicea en el año 325 D.C. como el domingo después de la primera luna llena que cae en o después del Equinocio de Primavera. El equinocio se asume que cae en el 21 de marzo, por lo que el cálculo se reduce a determinar la fecha de la luna llena y la fecha del siguiente domingo. El algoritmo que se usa aquí fue introducido alrededor del año 532 por Dionisio el Exiguo. Bajo el Calendario Juliano (para años anteriores a 1753) se usa un simple ciclo de 19 años para rastrear las fases de la luna. Bajo el Calendario Gregoriano (para años posteriores a 1753 - concebido por Clavio y Lilio, e introducido por el papa Gregorio XIII en Octubre de 1582, e introducido en Gran Bretaña y sus colonias en Septiembre de 1752) se añadieron dos factores de corrección para hacer el ciclo más exacto.

Parámetros

year

El año como un número positivo.

method

Permite calcular las fechas de pascua basadas en el calendario Gregoriano durante los años 1582 - 1752 cuando se establece a CAL_EASTER_ROMAN. Vea las constantes de calendario para más constantes válidas.

Valores devueltos

El número de días después del 21 de marzo en el que cae el Domingo de Pascua para el año year dado.

Historial de cambios

Versión Descripción
Since 4.3.0 El parámetro year es opcional y por defecto es el año actual de acuerdo a la hora local si se omite.
Since 4.3.0 El parámetro method fue introducido.

Ejemplos

Ejemplo #1 Ejemplo de easter_days()

<?php

echo easter_days(1999);        // 14, esto es, 4 de abril
echo easter_days(1492);        // 32, esto es, 22 de abril
echo easter_days(1913);        //  2, esto es, 23 de marzo

?>

Ver también

  • easter_date() - Obtener la fecha Unix para la medianoche de Pascua de un año dado



FrenchToJD

(PHP 4, PHP 5)

FrenchToJDConvierte una fecha desde el Calendario Republicano Francés a la Fecha Juliana

Descripción

int frenchtojd ( int $month , int $day , int $year )

Convierte una fecha desde el Calendario Republicano Francés a la Fecha Juliana.

Estas rutinas sólamente convierten fechas de los años 1 hasta 14 (fechas gregorianas desde el 22 de septiembre de 1792 hasta el 22 de septiembre de 1806). Esto cubre más que el periodo cuando el calendario estaba en uso.

Parámetros

month

El mes como un número desde 1 (para Vendémiaire) hasta 13 (para el periodo de 5-6 días al final de cada año)

day

El día como un número de 1 a 30

year

El año como un número entre 1 y 14

Valores devueltos

La Fecha Jjuliana para la fecha de la Revolución Francesa dada como un entero.

Ver también

  • jdtofrench() - Convierte una Fecha Juliana al Calendario Republicano Francés
  • cal_to_jd() - Convertir un calendario soportado a la Fecha Juliana



GregorianToJD

(PHP 4, PHP 5)

GregorianToJDConvierte una fecha Gregoriana en Fecha Juliana

Descripción

int gregoriantojd ( int $month , int $day , int $year )

El rango válido para el Calendario Gregoriano es de 4714 A.C. a 9999 D.C.

Aunque esta función puede manejar fechas que se remontan hasta 4714 A.C., tal uso puede no ser significativo. El calendario Gregoriano no fue establecido hasta el 15 de octubre de 1582 (o 5 de octubre de 1582 el el calendario Juliano). Algunos países no lo aceptaron hasta mucho más tarde. Por ejemplo, Gran Bretaña lo adoptó en 1752, la URSS en 1918 y Grecia en 1923. La mayoría de los países europeos usaban el calendario Juliano antes del Gregoriano.

Parámetros

month

El mes como un número desde 1 (para enero) hasta 12 (para diciembre)

day

El día como un número desde 1 a 31

year

El año como un número entre -4714 y 9999

Valores devueltos

La Fecha Juliana para la fecha gregoriana dada como un entero.

Ejemplos

Ejemplo #1 Funciones de calendario

<?php
$jd 
GregorianToJD(10111970);
echo 
"$jd\n";
$gregoriano JDToGregorian($jd);
echo 
"$gregoriano\n";
?>

Ver también

  • jdtogregorian() - Convierte una Fecha Juliana en una fecha Gregoriana
  • cal_to_jd() - Convertir un calendario soportado a la Fecha Juliana



JDDayOfWeek

(PHP 4, PHP 5)

JDDayOfWeekDevuelve el día de la semana

Descripción

mixed jddayofweek ( int $julianday [, int $mode = CAL_DOW_DAYNO ] )

Devuelve el día de la semana. Puede devolver una cadena o un entero dependiendo del modo.

Parámetros

julianday

Un número de día juliano como un entero

mode
Modos de semana de calendario
Modo Significado
0 (Por defecto) Devuelve el número de día como un entero (0=domingo, 1=lunes, etc.)
1 Devuelve una cadena que contiene el día de la semana (Inglés-Gregoriano)
2 Devuelve una cadena que contiene el día de la semana abreviado (Inglés-Gregoriano)

Valores devueltos

El día de la semada gregoriana como un entero o cadena.



JDMonthName

(PHP 4, PHP 5)

JDMonthNameDevuelve el nombre de un mes

Descripción

string jdmonthname ( int $julianday , int $mode )

Devuelve una cadena que contiene el nombre del mes. mode le indica a esta función a qué calendario va a ser convertido la Fecha Juliana, y qué tipo de nombres de meses son devueltos.

Calendar modes
Modo Significado Valores
0 Gregoriano - abreviado Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
1 Gregoriano January, February, March, April, May, June, July, August, September, October, November, December
2 Juliano - abreviado Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
3 Juliano January, February, March, April, May, June, July, August, September, October, November, December
4 Judío Tishri, Heshvan, Kislev, Tevet, Shevat, AdarI, AdarII, Nisan, Iyyar, Sivan, Tammuz, Av, Elul
5 Republicano Francés Vendemiaire, Brumaire, Frimaire, Nivose, Pluviose, Ventose, Germinal, Floreal, Prairial, Messidor, Thermidor, Fructidor, Extra

Parámetros

jday

La Fecha Juliana que se va a manejar

calendar

El calendario del que se va a tomar el nombre del mes

Valores devueltos

El nombre del mes de la Fecha Juliana y del calendario calendar dados.



JDToFrench

(PHP 4, PHP 5)

JDToFrenchConvierte una Fecha Juliana al Calendario Republicano Francés

Descripción

string jdtofrench ( int $juliandaycount )

Convierte una Fecha Juliana al Calendario Republicano Francés.

Parámetros

julianday

Una número de día juliano como un entero

Valores devueltos

La fecha de la Revolución Francesa como una cadena de la forma "mes/día/año"

Ver también

  • frenchtojd() - Convierte una fecha desde el Calendario Republicano Francés a la Fecha Juliana
  • cal_from_jd() - Convierte de una Fecha Juliana a un calendario soportado



JDToGregorian

(PHP 4, PHP 5)

JDToGregorianConvierte una Fecha Juliana en una fecha Gregoriana

Descripción

string jdtogregorian ( int $julianday )

Convierte una Fecha Juliana a una cadena que contiene la fecha Gregoriana con el formato "mes/día/año".

Parámetros

julianday

Un número de día juliano como un entero

Valores devueltos

La fecha gregoriana como una cadena de la forma "mes/día/año"

Ver también

  • gregoriantojd() - Convierte una fecha Gregoriana en Fecha Juliana
  • cal_from_jd() - Convierte de una Fecha Juliana a un calendario soportado



jdtojewish

(PHP 4, PHP 5)

jdtojewishConvierte una Fecha Juliana a una fecha del Calendario Judío

Descripción

string jdtojewish ( int $juliandaycount [, bool $hebrew = false [, int $fl = 0 ]] )

Convierte una Fecha Juliana al Calendario Judío.

Parámetros

julianday

Un número de día juliano como un entero

hebrew

Si el parámetro hebrew está establecido a TRUE, el parámetro fl se usa para el formato de salida, basado en cadena, Hebreo.

fl

Los formatos disponibles son: CAL_JEWISH_ADD_ALAFIM_GERESH, CAL_JEWISH_ADD_ALAFIM, CAL_JEWISH_ADD_GERESHAYIM.

Valores devueltos

La fecha judía como una cadena de la forma "mes/día/año"

Historial de cambios

Versión Descripción
5.0.0 Se añadió el parámetro fl.
4.3.0 Se añadió el parámetro hebrew.

Ejemplos

Ejemplo #1 Ejemplo de jdtojewish()

<?php
echo jdtojewish(gregoriantojd(1082002), true,
       
CAL_JEWISH_ADD_GERESHAYIM CAL_JEWISH_ADD_ALAFIM CAL_JEWISH_ADD_ALAFIM_GERESH); 
?>

Ver también

  • jewishtojd() - Convierte una fecha del Calendario Judío a una Fecha Juliana
  • cal_from_jd() - Convierte de una Fecha Juliana a un calendario soportado



JDToJulian

(PHP 4, PHP 5)

JDToJulianConvierte una Fecha Juliana a una fecha del Calendario Juliano

Descripción

string jdtojulian ( int $julianday )

Convierte una Fecha Juliana a una cadena que contiene la fecha del Calendario Juliano con el formato "mes/día/año".

Parámetros

julianday

Un número de día juliano como un entero

Valores devueltos

La fecha del calendario juliano como una cadena de la forma "mes/día/año"

Ver también

  • juliantojd() - Convierte una fecha del Calendario Juliano a una Fecha Juliana
  • cal_from_jd() - Convierte de una Fecha Juliana a un calendario soportado



jdtounix

(PHP 4, PHP 5)

jdtounixConvierte una Fecha Juliana a una fecha Unix

Descripción

int jdtounix ( int $jday )

Esta funcion devolverá una fecha Unix correspondiente a la Fecha Juliana dada en jday o FALSE si jday no está dentro de la época Unix (años gregorianos entre 1970 y 2037 o 2440588 <= jday <= 2465342 ). El momento devuleto es como hora local (y no GMT).

Parámetros

jday

Un número de día juliano entre 2440588 y 2465342.

Valores devueltos

La fecha Unix para el comienzo de la Fecha Juliana dada.

Ver también

  • unixtojd() - Convertir una fecha Unix en una Fecha Juliana



JewishToJD

(PHP 4, PHP 5)

JewishToJDConvierte una fecha del Calendario Judío a una Fecha Juliana

Descripción

int jewishtojd ( int $month , int $day , int $year )

Aunque esta función puede manejar fechas que se remontan hasta el año 1 (3761 A.C.), tal uso puede no ser significativo. El calendario judío ha estado en uso desde varios cientos de años, pero en los primeros días no había una fórmula para determinar el inicio del un mes. Un nuevo mes comenzaba cuando se observaba la primera luna nueva.

Parámetros

month

El mes como un número de 1 a 13

day

El día como un número de 1 a 30

year

El año como un número entre 1 y 9999

Valores devueltos

La Fecha Juliana para la fecha judía dada como un entero.

Ver también

  • jdtojewish() - Convierte una Fecha Juliana a una fecha del Calendario Judío
  • cal_to_jd() - Convertir un calendario soportado a la Fecha Juliana



JulianToJD

(PHP 4, PHP 5)

JulianToJDConvierte una fecha del Calendario Juliano a una Fecha Juliana

Descripción

int juliantojd ( int $month , int $day , int $year )

El rango válido para el Calendario Juliano es desde 4713 A.C. a 9999 D.C.

Aunque esta función puede manejar fechas que se remontan hasta 4713 A.C., tal uso puede no ser significativo. El calendario fue creado en el 46 A.C., pero los detalles no se estabilizaron hasta al menos el 8 D.C., y quizás hasta el siglo IV tardío. También, el comienzo de un año variaba de una cultura a otra - no todas aceptaron enero como el primer mes.

Precaución

Recuerde, el sistema de calendario actual que se usa mundialmente es el Calendario Gregoriano. gregoriantojd() se puede usar para convertir tales fechas a sus Fechas Julianas.

Parámetros

month

El mes como un número de 1 (para enero) a 12 (para diecienbre)

day

El día como un número de 1 a 31

year

El año como un número entre -4713 y 9999

Valores devueltos

La Fecha Juliana para la fecha del Calendario Juliano dado como un entero.

Ver también

  • jdtojulian() - Convierte una Fecha Juliana a una fecha del Calendario Juliano
  • cal_to_jd() - Convertir un calendario soportado a la Fecha Juliana



unixtojd

(PHP 4, PHP 5)

unixtojdConvertir una fecha Unix en una Fecha Juliana

Descripción

int unixtojd ([ int $timestamp = time() ] )

Devuelve la Fecha Juliana para la fecha timestamp Unix (segundos desde 1.1.1970), o el día actual si timestamp no es dado.

Parámetros

timestamp

Una fecha unix a convertir.

Valores devueltos

Un número de día juliano como un entero.

Ver también

  • jdtounix() - Convierte una Fecha Juliana a una fecha Unix


Tabla de contenidos

  • cal_days_in_month — Devolver el número de días de un mes para un año y un calendario dados
  • cal_from_jd — Convierte de una Fecha Juliana a un calendario soportado
  • cal_info — Devuelve información sobre un calendario en particular
  • cal_to_jd — Convertir un calendario soportado a la Fecha Juliana
  • easter_date — Obtener la fecha Unix para la medianoche de Pascua de un año dado
  • easter_days — Obtener el número de días despúes del 21 de marzo en el cuál cae Pascua para un año dado
  • FrenchToJD — Convierte una fecha desde el Calendario Republicano Francés a la Fecha Juliana
  • GregorianToJD — Convierte una fecha Gregoriana en Fecha Juliana
  • JDDayOfWeek — Devuelve el día de la semana
  • JDMonthName — Devuelve el nombre de un mes
  • JDToFrench — Convierte una Fecha Juliana al Calendario Republicano Francés
  • JDToGregorian — Convierte una Fecha Juliana en una fecha Gregoriana
  • jdtojewish — Convierte una Fecha Juliana a una fecha del Calendario Judío
  • JDToJulian — Convierte una Fecha Juliana a una fecha del Calendario Juliano
  • jdtounix — Convierte una Fecha Juliana a una fecha Unix
  • JewishToJD — Convierte una fecha del Calendario Judío a una Fecha Juliana
  • JulianToJD — Convierte una fecha del Calendario Juliano a una Fecha Juliana
  • unixtojd — Convertir una fecha Unix en una Fecha Juliana



Fecha y Hora


Introducción

Estas funciones le permiten obtener la fecha y la hora del servidor donde sus scripts PHP se están ejecutando. Puede usar estas funciones parar dar formato a fechas y horas de muchas maneras diferentes.

La fecha y la información de la hora se almacena internamente como un número de 64 bits para todas las fechas posiblemente útiles (incluyendo años negativos) están soportadas. El rango es aproximadamente desde 292 billones de años en el pasado, y lo mismo en el futuro.

Nota: Por favor, tenga en cuenta que estas funciones dependen de la configuración regional del servidor. Asegúrese de tomar en consideración el horario de verano (use p.ej. $fecha = strtotime('+7 days', $fecha) y no $fecha += 7*24*60*60) y los años bisiestos en cuenta cuando se trabaja con estas funciones.

Nota: Las zonas horarias a las que se refiere esta sección pueden encontrarse en la Listado de Timezones soportados.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

No se requiere de ninguna instalación para utilizar estas funciones; forman parte del núcleo de PHP.

Nota: Obtener la última base de datos de zonas horarias

La última versión de la base de datos de zona horaria se puede instalar mediante la base de datos » timezonedb de PECL.

Nota: Soporte experimental para DateTime en PHP 5.1.x

Aunque la clase DateTime (y sus funciones relacionadas) están habilitadas por defecto desde PHP 5.2.0, es posible añadir soporte experimental en PHP 5.1.x usando la siguiente bandera antes de configurar/compilar: CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de Fecha/Hora
Nombre Por defecto Cambiable Historial de cambios
date.default_latitude "31.7667" PHP_INI_ALL Disponible desde PHP 5.0.0.
date.default_longitude "35.2333" PHP_INI_ALL Disponible desde PHP 5.0.0.
date.sunrise_zenith "90.583333" PHP_INI_ALL Disponible desde PHP 5.0.0.
date.sunset_zenith "90.583333" PHP_INI_ALL Disponible desde PHP 5.0.0.
date.timezone "" PHP_INI_ALL Disponible desde PHP 5.1.0.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

date.default_latitude float

La latitud predeterminada.

date.default_longitude float

La longitud predeterminada.

date.sunrise_zenith float

El cénit de la salida del sol predeterminado.

date.sunset_zenith float

El cénit de la puesta de sol predeterminado.

date.timezone string

La zona horaria predeterminada usada por todas funciones date/time. Antes de PHP 5.4.0, esto sólo funciona si la variable de entorno TZ no se ha establecido. El orden de prioridad para la zona horaria que se utiliza cuando no se establece explícitamente se describe en la función date_default_timezone_get() Vea Listado de Timezones soportados para una lista de las zonas horarias soportadas.

Nota: Las cuatro primeras opciones de configuración son sólo usadas actualmente por date_sunrise() y date_sunset().



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Las contantes DATE_ están definidas desde PHP 5.1.1 y ofrecen representaciones de fecha estándar, que pueden ser usadas por las funciones de formato de fecha (como date()).

Las siguientes constantes existen desde PHP 5.1.2 y especifican un formato devuelvto por las funciones date_sunrise() y date_sunset().

SUNFUNCS_RET_TIMESTAMP (integer)
Marca de tiempo (timestamp)
SUNFUNCS_RET_STRING (integer)
Horas:minutos (ejemplo: 08:02)
SUNFUNCS_RET_DOUBLE (integer)
Horas como número de coma flotante (ejemplo 8.75)


La clase DateTime

(PHP 5 >= 5.2.0)

Introducción

Representación de la fecha y la hora.

Sinopsis de la Clase

DateTime {
/* Constantes */
const string ATOM = "Y-m-d\TH:i:sP" ;
const string COOKIE = "l, d-M-y H:i:s T" ;
const string ISO8601 = "Y-m-d\TH:i:sO" ;
const string RFC822 = "D, d M y H:i:s O" ;
const string RFC850 = "l, d-M-y H:i:s T" ;
const string RFC1036 = "D, d M y H:i:s O" ;
const string RFC1123 = "D, d M Y H:i:s O" ;
const string RFC2822 = "D, d M Y H:i:s O" ;
const string RFC3339 = "Y-m-d\TH:i:sP" ;
const string RSS = "D, d M Y H:i:s O" ;
const string W3C = "Y-m-d\TH:i:sP" ;
/* Métodos */
public __construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
public DateTime add ( DateInterval $interval )
public static DateTime createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
public DateInterval diff ( DateTime $datetime2 [, bool $absolute = false ] )
public string format ( string $format )
public static array getLastErrors ( void )
public int getOffset ( void )
public int getTimestamp ( void )
public DateTimeZone getTimezone ( void )
public DateTime modify ( string $modify )
public static DateTime __set_state ( array $array )
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setISODate ( int $year , int $week [, int $day = 1 ] )
public DateTime setTime ( int $hour , int $minute [, int $second = 0 ] )
public DateTime setTimestamp ( int $unixtimestamp )
public DateTime setTimezone ( DateTimeZone $timezone )
public DateTime sub ( DateInterval $interval )
public DateTime __wakeup ( void )
}

Constantes predefinidas

DateTime::ATOM
DATE_ATOM
Atom (ejemplo: 2005-08-15T15:52:01+00:00)
DateTime::COOKIE
DATE_COOKIE
HTTP Cookies (ejemplo: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::ISO8601
DATE_ISO8601
ISO-8601 (ejemplo: 2005-08-15T15:52:01+0000)
DateTime::RFC822
DATE_RFC822
RFC 822 (ejemplo: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC850
DATE_RFC850
RFC 850 (ejemplo: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::RFC1036
DATE_RFC1036
RFC 1036 (ejemplo: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC1123
DATE_RFC1123
RFC 1123 (ejemplo: Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC2822
DATE_RFC2822
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC3339
DATE_RFC3339
Lo mismo que DATE_ATOM (desde PHP 5.1.3)
DateTime::RSS
DATE_RSS
RSS (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::W3C
DATE_W3C
World Wide Web Consortium (ejemplo: 2005-08-15T15:52:01+00:00)

Historial de cambios

Versión Descripción
5.2.2 La comparación de un objeto DateTime con los operadores de comparación se cambió para que funcionara como se esperaba. Anteriormente, todos los objetos DateTime eran considerados iguales (usando ==).


DateTime::add

date_add

(PHP 5 >= 5.3.0)

DateTime::add -- date_add Añade una cantidad de días, meses, años, horas, minutos y segundos al objeto DateTime

Descripción

Estilo orientado a objetos

public DateTime DateTime::add ( DateInterval $interval )

Estilo por procedimientos

DateTime date_add ( DateTime $object , DateInterval $interval )

Añade el objeto DateInterval especificado al objeto DateTime especificado.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

interval

Un objeto DateInterval

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::add()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2000-01-01');
$fecha->add(new DateInterval('P10D'));
echo 
$fecha->format('Y-m-d') . "\n";
?>

Estilo por procedimientos

<?php
$fecha 
date_create('2000-01-01');
date_add($fechadate_interval_create_from_date_string('10 days'));
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2000-01-11

Ejemplo #2 Más ejemplos de DateTime::add()

<?php
$fecha
= new DateTime('2000-01-01');
$fecha->add(new DateInterval('PT10H30S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";

$fecha = new DateTime('2000-01-01');
$fecha->add(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería:

2000-01-01 10:00:30
2007-06-05 04:03:02

Ejemplo #3 Cuidado al añadir meses

<?php
$fecha 
= new DateTime('2000-12-31');
$intervalo = new DateInterval('P1M');

$fecha->add($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->add($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2001-01-31
2001-03-03

Notas

DateTime::modify() es una alternativa cuando se usa PHP 5.2.

Ver también



DateTime::__construct

date_create

(PHP 5 >= 5.2.0)

DateTime::__construct -- date_createDevuelve un nuevo objeto DateTime

Descripción

Estilo orientado a objetos

public DateTime::__construct() ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Estilo por procedimientos

DateTime date_create ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Devuelve un nuevo objeto DateTime.

Parámetros

time

Una cadena de fecha/hora. Los formatos válidos son explicados en Formatos de fecha y hora.

Introduzca NULL aquí para obtener el instante actual cuando se use el parámetro $timezone.

timezone

Un objeto DateTimeZone que representa la zona horaria deseada.

Si se omite $timezone, se usará la zona horaria actual.

Nota:

El parámetro $timezone y la zona horaria actuales se ignoran cuando el parámetro $time es una fecha UNIX (p.ej. @946684800) o especifica una zona horaria (p.ej. 2010-01-28T15:00:00+02:00).

Valores devueltos

Devuelve una nueva instancia de DateTime. Estilo por procedimientos devuelve FALSE en caso de error.

Errores/Excepciones

Emite una Exception en caso de error.

Historial de cambios

Versión Descripción
5.3.0 Si se especifica una fecha no válida, ahora se lanza una excepción. Anteriormente se emitía un error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::__construct()

Estilo orientado a objetos

<?php
try {
    
$fecha = new DateTime('2000-01-01');
} catch (
Exception $e) {
    echo 
$e->getMessage();
    exit(
1);
}

echo 
$fecha->format('Y-m-d');
?>

Estilo por procedimientos

<?php
$fecha 
date_create('2000-01-01');
if (!
$fecha) {
    
$e date_get_last_errors();
    foreach (
$e['errors'] as $error) {
        echo 
"$error\n";
    }
    exit(
1);
}

echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2000-01-01

Ejemplo #2 Complejidades de DateTime::__construct()

<?php
// Fecha/hora especificadas en la zona horaria de su ordenador.
$fecha = new DateTime('2000-01-01');
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

// Fecha/hora especificadas en la zona horaria especificada.
$fecha = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

// Fecha/hora actuales en la zona horaria de su ordenador.
$fecha = new DateTime();
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

// Fecha/hora actuales en la zona horaria especificada.
$fecha = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

// Usar una fecha UNIX. Observe que el resultado está en la zona horaria UTC.
$fecha = new DateTime('@946684800');
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

// Desbordamiento de valores no existentes.
$fecha = new DateTime('2000-02-30');
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";
?>

El resultado del ejemplo sería algo similar a:

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Ver también



DateTime::createFromFormat

date_create_from_format

(PHP 5 >= 5.3.0)

DateTime::createFromFormat -- date_create_from_formatDevuelve un nuevo objeto DateTime formateado según el formato especificado

Descripción

Estilo orientado a objetos

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )

Estilo por procedimientos

DateTime date_create_from_format ( string $format , string $time [, DateTimeZone $timezone ] )

Devuelve un nuevo objeto DateTime formateado según el formato especificado.

Parámetros

format

El formato en el que debería estar lo pasado en string. Véase las opciones de formateo más abajo. En la mayoría de los casos se pueden usar las mismas letras que para date().

Los siguientes caracters son reconocidos en la cadena parámetro format
Carácter format Descripción Ejemplo de valores analizables
Día --- ---
d y j Día del mes, 2 dígitos con o sin ceros iniciales 01 a 31 o 1 a 31
D y l Una representación textual de un día Mon hasta Sun o Sunday hasta Saturday
S Sufijo ordinal inglés para el día del mes, 2 caracteres. Se ignora mientras se procesa. st, nd, rd o th.
z El día del año (comenzando por 0) 0 hasta 365
Mes --- ---
F y M Una representación textual de un mes, como January o Sept January hasta December o Jan hasta Dec
m y n Representación numérica de un mes, con o sin ceros iniciales 01 hasta 12 o 1 hasta 12
Año --- ---
Y Una representación numérica completa de un año, 4 dígitos Ejemplos: 1999 o 2003
y Una representación de dos dígitos de un año Ejemplos: 99 o 03
Hora --- ---
a y A Ante meridiem y Post meridiem am o pm
g y h Formato de 12 horas de una hora con o sin ceros iniciales 1 hasta 12 o 01 hasta 12
G y H Formato de 24 horas de una hora con o sin ceros iniciales 0 hasta 23 o 00 hasta 23
i Minutos con ceros iniciales 00 a 59
s Segundos, con ceros iniciales 00 hasta 59
u Microsegundos (hasta seis dígitos) Ejemplo: 45, 654321
Zona Horaria --- ---
e, O, P y T Identificador de zona horaria, o diferencia con UTC en horas, o diferencia con UTC con dos puntos entre horas y minutos, o abreviatura de la zona horaria Ejemplos: UTC, GMT, Atlantic/Azores o +0200 o +02:00 o EST, MDT
Fecha/Hora Completas --- ---
U Segundos desde la Época Unix (January 1 1970 00:00:00 GMT) Ejemplo: 1292177455
Espacios en Blanco y Separadores --- ---
(espacio) Un espacio o una tabulación Ejemplo:
# Uno de los siguientes símbolos de separación: ;, :, /, ., ,, -, ( o ) Ejemplo: /
;, :, /, ., ,, -, ( or ) El carácter especificado. Ejemplo: -
? Un byte aleatorio Ejemplo: ^ (Sea consciente de que para los caracteres UTF-8 debería necesitar más de un ?. En este caso es probable que quiera usar * en su lugar)
* Bytes aleatorios hasta el siguiente separador o dígito Ejemplo: * en Y-*-d con la cadena 2009-aWord-08 coincidirá con aWord
! Reinicia todos los campos (año, mes, día, hora, minuto, segundo, fracción e información de la zona horaria) a la Época Unix Sin !, todos los campos serán establecidos a la fecha y hora actuales.
| Reinicia todos los campos (año, mes, día, hora, minuto, segundo, fracción e información de la zona horaria) a la Época Unix si no han sido ya analizados Y-m-d| establecerá el año, mes y día a la información encontrada en la cadena a analizar, y establece la hora, minutos y segundos a 0.
+ Si este especificador de formato está presente, la información sobrante de la cadena no causará un error, pero sí una advertencia en su lugar Use DateTime::getLastErrors() para averiguar si está presente información sobrante.

Los caracteres no reconocidos en la cadena de formato causarán el fallo del análisis y se añadirá un mensaje de error a la esctructura devuelta. Puede consultar los mensajes de error con DateTime::getLastErrors().

Si format no contiene el carácter !, las partes del momento generado que no estén especificadas en format serán establecidas al momento actual del sistema.

Si format contiene el carácter !, las partes del momento generadas no proporcionadas en format, así como los valores más a la izquierda de !, serán establecidos a los valores correspondientes de la época Unix.

La época Unix es 1970-01-01 00:00:00 UTC.

time

Una cadena que representa la hora.

timezone

Un objeto DateTimeZone que representa la zona horaria deseada.

Si se omite timezone y time no contiene ninguna zona horaria, se usará la zona horaria actual.

Nota:

El parámetro timezone y la zona horaria actual son ignoradas cuando el parámetro time contiene una marca de tiempo UNIX (p.ej. 946684800) o especifica una zona horaria (p.ej. 2010-01-28T15:00:00+02:00).

Valores devueltos

Devuelve una nueva instancia de DateTime o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::createFromFormat()

Estilo orientado a objetos

<?php
$fecha 
DateTime::createFromFormat('j-M-Y''15-Feb-2009');
echo 
$fecha->format('Y-m-d');
?>

Estilo por procedimientos

<?php
$fecha 
date_create_from_format('j-M-Y''15-Feb-2009');
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2009-02-15

Ejemplo #2 Complejidades de DateTime::createFromFormat()

<?php
echo 'Momento actual: ' date('Y-m-d H:i:s') . "\n";

$formato 'Y-m-d';
$fecha DateTime::createFromFormat($formato'2009-02-15');
echo 
"Formato: $formato; " $fecha->format('Y-m-d H:i:s') . "\n";

$formato 'Y-m-d H:i:s';
$fecha DateTime::createFromFormat($formato'2009-02-15 15:16:17');
echo 
"Formato: $formato; " $fecha->format('Y-m-d H:i:s') . "\n";

$formato 'Y-m-!d H:i:s';
$fecha DateTime::createFromFormat($formato'2009-02-15 15:16:17');
echo 
"Formato: $formato; " $fecha->format('Y-m-d H:i:s') . "\n";

$formato '!d';
$fecha DateTime::createFromFormat($formato'15');
echo 
"Formato: $formato; " $fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería algo similar a:

Momento actual: 2010-04-23 10:29:35
Formato: Y-m-d; 2009-02-15 10:29:35
Formato: Y-m-d H:i:s; 2009-02-15 15:16:17
Formato: Y-m-!d H:i:s; 1970-01-15 15:16:17
Formato: !d; 1970-01-15 00:00:00

Ver también



DateTime::diff

date_diff

(PHP 5 >= 5.3.0)

DateTime::diff -- date_diffDevuelve la diferencia entres objetos DateTime

Descripción

Estilo orientado a objetos

public DateInterval DateTime::diff ( DateTime $datetime2 [, bool $absolute = false ] )

Estilo por procedimientos

DateInterval date_diff ( DateTime $datetime1 , DateTime $datetime2 [, bool $absolute = false ] )

Devuelve la diferencia entres objetos DateTime.

Parámetros

datetime

La fecha a comparar.

absolute

Si se devulve la diferencia absoluta.

Valores devueltos

El objeto DateInterval que representa la diferencia entre dos fechas o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::diff()

Estilo orientado a objetos

<?php
$datetime1 
= new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$intervalo $datetime1->diff($datetime2);
echo 
$intervalo->format('%R%a días');
?>

Estilo por procedimientos

<?php
$datetime1 
date_create('2009-10-11');
$datetime2 date_create('2009-10-13');
$intervalo date_diff($datetime1$datetime2);
echo 
$intervalo->format('%R%a días');
?>

El resultado de los ejemplos serían:

+2 días

Ejemplo #2 Comparación de objetos DateTime

Nota:

A partir de PHP 5.2.2, los objetos DateTime se pueden comparar utilizando operadores de comparación.

<?php
$date1 
= new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 $date2);
var_dump($date1 $date2);
?>

El resultado del ejemplo sería:

bool(false)
bool(true)
bool(false)

Ver también

  • DateInterval::format() - Formatea el intervalo
  • DateTime::add() - Añade una cantidad de días, meses, años, horas, minutos y segundos al objeto DateTime
  • DateTime::sub() - Sustrae una cantidad de días, meses, años, horas, minutos y segundos de un objeto DateTime


DateTime::format

date_format

(PHP 5 >= 5.2.0)

DateTime::format -- date_formatDevuelve la fecha formateada según el formato dado

Descripción

Estilo orientado a objetos

public string DateTime::format ( string $format )

Estilo por procedimientos

string date_format ( DateTime $object , string $format )

Devuelve la fecha formateada según el formato dado.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime es devuelto por date_create()

format

Formato aceptado por date().

Valores devueltos

Devuelve la cadena de fecha formateada si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::format()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2000-01-01');
echo 
$fecha->format('Y-m-d H:i:s');
?>

Estilo por procedimientos

<?php
$fecha 
date_create('2000-01-01');
echo 
date_format($fecha'Y-m-d H:i:s');
?>

El resultado del ejemplo sería:

2000-01-01 00:00:00

Notas

Este método no utiliza regiones. Todas las salidas son en inglés.

Ver también

  • date() - Dar formato a la fecha/hora local


DateTime::getLastErrors

date_get_last_errors

(PHP 5 >= 5.3.0)

DateTime::getLastErrors -- date_get_last_errorsDevuelve las advertencias y los errores

Descripción

Estilo orientado a objetos

public static array DateTime::getLastErrors ( void )

Estilo por procedimientos

array date_get_last_errors ( void )

Devuelve un array de advertencias y errores encontrados mientras se analizaba una cadena de fecha/hora.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve una matriz que contiene información acerca de las advertencias y errores.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::getLastErrors()

Estilo orientado a objetos

<?php
try {
    
$fecha = new DateTime('asdfasdf');
} catch (
Exception $e) {
    
// Sólo para propósitos de demostración...
    
print_r(DateTime::getLastErrors());

    
// La forma real orientada a objetos de hacer esto es
    // echo $e->getMessage();
}
?>

Estilo por procedimientos

<?php
$fecha 
date_create('asdfasdf');
print_r(date_get_last_errors());
?>

El resultado de los ejemplos serían:

Array
(
   [warning_count] => 1
   [warnings] => Array
       (
           [6] => Double timezone specification
       )

   [error_count] => 1
   [errors] => Array
       (
           [0] => The timezone could not be found in the database
       )

)


DateTime::getOffset

date_offset_get

(PHP 5 >= 5.2.0)

DateTime::getOffset -- date_offset_getDevuelve el índice de la zona horaria

Descripción

Estilo orientado a objetos

public int DateTime::getOffset ( void )

Estilo por procedimientos

int date_offset_get ( DateTime $object )

Devuelve el índice de la zona horaria.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime es devuelto por date_create()

Valores devueltos

Devuelve el índice de la zona horaria en segundos desde UTC si se tiene éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::getOffset()

Estilo orientado a objetos

<?php
$invierno 
= new DateTime('2010-12-21', new DateTimeZone('America/New_York'));
$verano = new DateTime('2008-06-21', new DateTimeZone('America/New_York'));

echo 
$invierno->getOffset() . "\n";
echo 
$verano->getOffset() . "\n";
?>

Estilo por procedimientos

<?php
$invierno 
date_create('2010-12-21'timezone_open('America/New_York'));
$verano   date_create('2008-06-21'timezone_open('America/New_York'));

echo 
date_offset_get($invierno) . "\n";
echo 
date_offset_get($verano) . "\n";
?>

El resultado de los ejemplos serían:

-18000
-14400

Nota: -18000 = -5 horas, -14400 = -4 horas.



DateTime::getTimestamp

date_timestamp_get

(PHP 5 >= 5.3.0)

DateTime::getTimestamp -- date_timestamp_getObtiene la fecha Unix

Descripción

Estilo orientado a objetos

public int DateTime::getTimestamp ( void )

Estilo por procedimientos

int date_timestamp_get ( DateTime $object )

Obtiene la fecha Unix.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve la fecha Unix que representa la fecha.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::getTimestamp()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime();
echo 
$fecha->getTimestamp();
?>

Estilo por procedimientos

<?php
$fecha 
date_create();
echo 
date_timestamp_get($fecha);
?>

El resultado de los ejemplos serían algo similar a:

1272509157

Notas

Utilizar U como parámetro de DateTime::format() es una alternativa cuando se usa PHP 5.2.

Ver también



DateTime::getTimezone

date_timezone_get

(PHP 5 >= 5.2.0)

DateTime::getTimezone -- date_timezone_getDevolver la zona horaria relativa al objeto DateTime dado

Descripción

Estilo orientado a objetos

public DateTimeZone DateTime::getTimezone ( void )

Estilo por procedimientos

Devolver la zona horaria relativa al objeto DateTime dado.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime es devuelto por date_create()

Valores devueltos

Devuelve un objeto DateTimeZone si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::getTimezone()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime(null, new DateTimeZone('Europe/London'));
$zh $fecha->getTimezone();
echo 
$zh->getName();
?>

Estilo por procedimientos

<?php
$fecha 
date_create(nulltimezone_open('Europe/London'));
$zh date_timezone_get($fecha);
echo 
timezone_name_get($zh);
?>

El resultado de los ejemplos serían:

Europe/London

Ver también



DateTime::modify

date_modify

(PHP 5 >= 5.2.0)

DateTime::modify -- date_modifyAltera la marca de tiempo

Descripción

Estilo orientado a objetos

public DateTime DateTime::modify ( string $modify )

Estilo por procedimientos

DateTime date_modify ( DateTime $object , string $modify )

Altera la marca de tiempo de un objeto DateTime incrementando o disminuyendo en un formato aceptado por strtotime().

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

modify

Una cadena de fecha/hora. Los formatos válidos son explicados en Formatos de fecha y hora.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.6 Las sentencias de fecha/hora absolutas ahora toman efecto. Previamente, sólo se usaban las partes relativas.
5.3.0Se ha cambiado el valor devuelto en caso de éxito de NULL a DateTime.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::modify()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2006-12-12');
$fecha->modify('+1 day');
echo 
$fecha->format('Y-m-d');
?>

Estilo por procedimientos

<?php
$fecha
date_create('2006-12-12');
date_modify($fecha'+1 day');
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2006-12-13

Ejemplo #2 Cuidado al añadir o sustraer meses

<?php
$fecha 
= new DateTime('2000-12-31');

$fecha->modify('+1 month');
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->modify('+1 month');
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2001-01-31
2001-03-03

Ver también



DateTime::__set_state

(PHP 5 >= 5.2.0)

DateTime::__set_stateEl gestor __set_state

Descripción

public static DateTime DateTime::__set_state ( array $array )

El gestor __set_state().

Parámetros

array

Matriz de inicialización.

Valores devueltos

Devuelve una nueva instancia de un objeto DateTime.



DateTime::setDate

date_date_set

(PHP 5 >= 5.2.0)

DateTime::setDate -- date_date_setEstablece la fecha

Descripción

Estilo orientado a objetos

public DateTime DateTime::setDate ( int $year , int $month , int $day )

Estilo por procedimientos

DateTime date_date_set ( DateTime $object , int $year , int $month , int $day )

Reinicia la fecha actual del objeto DateTime a una fecha diferente.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

year

Año de la fecha.

month

Mes de la fecha.

day

Día de la fecha.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0Se ha cambiado el valor devuelto en caso de éxito de NULL a DateTime.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setDate()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime();
$fecha->setDate(200123);
echo 
$fecha->format('Y-m-d');
?>

Estilo por procedimientos

<?php
$fecha 
date_create();
date_date_set($fecha200123);
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2001-02-03

Ejemplo #2 Los valores que exceden rangos son añadidos a sus valores padre

<?php
$fecha 
= new DateTime();

$fecha->setDate(2001228);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->setDate(2001229);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->setDate(2001143);
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2001-02-28
2001-03-01
2002-02-03

Ver también



DateTime::setISODate

date_isodate_set

(PHP 5 >= 5.2.0)

DateTime::setISODate -- date_isodate_setEstablece la fecha ISO

Descripción

Estilo orientado a objetos

public DateTime DateTime::setISODate ( int $year , int $week [, int $day = 1 ] )

Estilo por procedimientos

DateTime date_isodate_set ( DateTime $object , int $year , int $week [, int $day = 1 ] )

Establece una fecha según el estándar ISO 8601 - usando índices de semanas y días en vez de fechas específicas.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

year

Año de la fecha.

week

Semana de la fecha.

day

Índice del primer día de la semana.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0Se ha cambiado el valor devuelto en caso de éxito de NULL a DateTime.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setISODate()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime();

$fecha->setISODate(20082);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->setISODate(200827);
echo 
$fecha->format('Y-m-d') . "\n";
?>

Estilo por procedimientos

<?php
$fecha 
date_create();

date_isodate_set($fecha20082);
echo 
date_format($fecha'Y-m-d') . "\n";

date_isodate_set($fecha200827);
echo 
date_format($fecha'Y-m-d') . "\n";
?>

El resultado de los ejemplos serían:

2008-01-07
2008-01-13

Ejemplo #2 Los valores que execen rangos son añadidos a sus valores padre

<?php
$fecha 
= new DateTime();

$fecha->setISODate(200827);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->setISODate(200828);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->setISODate(2008537);
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2008-01-13
2008-01-14
2009-01-04

Ejemplo #3 Buscar el mes en el que se encuentra una semana

<?php
$fecha 
= new DateTime();
$fecha->setISODate(200814);
echo 
$fecha->format('n');
?>

El resultado de los ejemplos serían:

3

Ver también



DateTime::setTime

date_time_set

(PHP 5 >= 5.2.0)

DateTime::setTime -- date_time_setEstablece la hora

Descripción

Estilo orientado a objetos

public DateTime DateTime::setTime ( int $hour , int $minute [, int $second = 0 ] )

Estilo por procedimientos

DateTime date_time_set ( DateTime $object , int $hour , int $minute [, int $second = 0 ] )

Reinicia la hora actual del objeto DateTime a una hora diferente.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

hour

Hora del momento.

minute

Minuto del momento.

second

Segundo del momento.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0Se ha cambiado el valor devuelto en caso de éxito de NULL a DateTime.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setTime()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2001-01-01');

$fecha->setTime(1455);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha->setTime(145524);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";
?>

Estilo por procedimientos

<?php
$fecha 
date_create('2001-01-01');

date_time_set($fecha1455);
echo 
date_format($fecha'Y-m-d H:i:s') . "\n";

date_time_set($fecha145524);
echo 
date_format($fecha'Y-m-d H:i:s') . "\n";
?>

El resultado de los ejemplos serían algo similar a:

2000-01-01 14:55:00
2000-01-01 14:55:24

Ejemplo #2 Los valores que exceden rangos son añadidos a sus valores padre

<?php
$fecha 
= new DateTime('2001-01-01');

$fecha->setTime(145524);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha->setTime(145565);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha->setTime(146524);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha->setTime(255524);
echo 
$fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería:

2001-01-01 14:55:24
2001-01-01 14:56:05
2001-01-01 15:05:24
2001-01-02 01:55:24

Ver también



DateTime::setTimestamp

date_timestamp_set

(PHP 5 >= 5.3.0)

DateTime::setTimestamp -- date_timestamp_setEstablece la fecha y la hora basadas en una fecha Unix

Descripción

Estilo orientado a objetos

public DateTime DateTime::setTimestamp ( int $unixtimestamp )

Estilo por procedimientos

DateTime date_timestamp_set ( DateTime $object , int $unixtimestamp )

Establece la fecha y la hora basadas en una fecha Unix.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

unixtimestamp

La marca de tiempo Unix que representa la fecha.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setTimestamp()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime();
echo 
$fecha->format('U = Y-m-d H:i:s') . "\n";

$fecha->setTimestamp(1171502725);
echo 
$fecha->format('U = Y-m-d H:i:s') . "\n";
?>

Estilo por procedimientos

<?php
$fecha 
date_create();
echo 
date_format($fecha'U = Y-m-d H:i:s') . "\n";

date_timestamp_set($fecha1171502725);
echo 
date_format($fecha'U = Y-m-d H:i:s') . "\n";
?>

El resultado de los ejemplos serían algo similar a:

1272508903 = 2010-04-28 22:41:43
1171502725 = 2007-02-14 20:25:25

Notas

Usar el formato de fecha Unix para construir un nuevo objeto DateTime es una alternativa al usar PHP 5.2, como se muestra en el ejemplo de abajo.

Ejemplo #2 Alternativa de DateTime::setTimestamp() en PHP 5.2

<?php
$ts 
1171502725;
$fecha = new DateTime("@$ts");
echo 
$date->format('U = Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería algo similar a:

1171502725 = 2007-02-14 20:25:25

Ver también



DateTime::setTimezone

date_timezone_set

(PHP 5 >= 5.2.0)

DateTime::setTimezone -- date_timezone_setEstablece la zona horaria para el objeto DateTime

Descripción

Estilo orientado a objetos

public DateTime DateTime::setTimezone ( DateTimeZone $timezone )

Estilo por procedimientos

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

timezone

Un objeto DateTimeZone que representa la zona horaria deseada.

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0Se ha cambiado el valor devuelto en caso de éxito de NULL a DateTime.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setTimeZone()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";

$fecha->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo 
$fecha->format('Y-m-d H:i:sP') . "\n";
?>

Estilo por procedimientos

<?php
$fecha
date_create('2000-01-01'timezone_open('Pacific/Nauru'));
echo 
date_format($fecha'Y-m-d H:i:sP') . "\n";

date_timezone_set($fechatimezone_open('Pacific/Chatham'));
echo 
date_format($fecha'Y-m-d H:i:sP') . "\n";
?>

El resultado de los ejemplos serían:

2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45

Ver también



DateTime::sub

date_sub

(PHP 5 >= 5.3.0)

DateTime::sub -- date_sub Sustrae una cantidad de días, meses, años, horas, minutos y segundos de un objeto DateTime

Descripción

Estilo orientado a objetos

public DateTime DateTime::sub ( DateInterval $interval )

Estilo por procedimientos

DateTime date_sub ( DateTime $object , DateInterval $interval )

Sustrae el objeto DateInterval especificado del objeto DateTime especificado.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

interval

Un objeto DateInterval

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::sub()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2000-01-20');
$fecha->sub(new DateInterval('P10D'));
echo 
$fecha->format('Y-m-d') . "\n";
?>

Estilo por procedimientos

<?php
$fecha 
date_create('2000-01-20');
date_sub($fechadate_interval_create_from_date_string('10 days'));
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2000-01-10

Ejemplo #2 Más ejemplos de DateTime::sub()

<?php
$fecha 
= new DateTime('2000-01-20');
$fecha->sub(new DateInterval('PT10H30S'));
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha = new DateTime('2000-01-20');
$fecha->sub(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería:

2000-01-19 13:59:30
1992-08-15 19:56:58

Ejemplo #3 Cuidado al sustraer meses

<?php
$fecha 
= new DateTime('2001-04-30');
$intervalo = new DateInterval('P1M');

$fecha->sub($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->sub($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2001-03-30
2001-03-02

Notas

DateTime::modify() es una alternativa cuando se usa PHP 5.2.

Ver también



DateTime::__wakeup

(PHP 5 >= 5.2.0)

DateTime::__wakeupEl gestor __wakeup

Descripción

public DateTime DateTime::__wakeup ( void )

El gestor __wakeup().

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Inicializa un objeto DateTime.


Tabla de contenidos



La clase DateTimeZone

(PHP 5 >= 5.2.0)

Introducción

Representación de la zona horaria.

Sinopsis de la Clase

DateTimeZone {
/* Constantes */
const integer AFRICA = 1 ;
const integer AMERICA = 2 ;
const integer ANTARCTICA = 4 ;
const integer ARCTIC = 8 ;
const integer ASIA = 16 ;
const integer ATLANTIC = 32 ;
const integer AUSTRALIA = 64 ;
const integer EUROPE = 128 ;
const integer INDIAN = 256 ;
const integer PACIFIC = 512 ;
const integer UTC = 1024 ;
const integer ALL = 2047 ;
const integer ALL_WITH_BC = 4095 ;
const integer PER_COUNTRY = 4096 ;
/* Métodos */
public __construct ( string $timezone )
public array getLocation ( void )
public string getName ( void )
public int getOffset ( DateTime $datetime )
public array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
public static array listAbbreviations ( void )
public static array listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )
}

Constantes predefinidas

DateTimeZone::AFRICA

Zonas horarias de África.

DateTimeZone::AMERICA

Zonas horarias de América.

DateTimeZone::ANTARCTICA

Zonas horarias de la Antártida.

DateTimeZone::ARCTIC

Zonas horarias del Ártico.

DateTimeZone::ASIA

Zonas horarias de Asia.

DateTimeZone::ATLANTIC

Zonas horarias del Atlántico.

DateTimeZone::AUSTRALIA

Zonas horarias de Australia.

DateTimeZone::EUROPE

Zonas horarias de Europa.

DateTimeZone::INDIAN

Zonas horarias de la India.

DateTimeZone::PACIFIC

Zonas horarias del Pacífico.

DateTimeZone::UTC

Zonas horarias UTC.

DateTimeZone::ALL

Todas las zonas horarias.

DateTimeZone::ALL_WITH_BC

Todas las zonas horarias incluyendo las de versiones anteriores por compatibilidad.

DateTimeZone::PER_COUNTRY

Zonas horarias por país.


DateTimeZone::__construct

timezone_open

(PHP 5 >= 5.2.0)

DateTimeZone::__construct -- timezone_openCrea un nuevo objeto DateTimeZone

Descripción

Estilo orientado a objetos

public DateTimeZone::__construct() ( string $timezone )

Estilo por procedimientos

DateTimeZone timezone_open ( string $timezone )

Crea un nuevo objeto DateTimeZone.

Parámetros

timezone

Una de las zonas horarias.

Valores devueltos

Devuelve un objeto DateTimeZone si tuvo éxito. Estilo por procedimientos devuelve FALSE en caso de error.

Errores/Excepciones

Este método lanza Exception si la zona horaria suministrada no es reconocida como una zona horaria válida.

Ejemplos

Ejemplo #1 Atrapar errores cuando se instancia DateTimeZone

<?php
// Manejo de errores atrapando excepciones
$zonas_horarias = array('Europe/London''Mars/Phobos''Jupiter/Europa');

foreach (
$zonas_horarias as $zh) {
    try {
        
$marte = new DateTimeZone($zh);
    } catch(
Exception $e) {
        echo 
$e->getMessage() . '<br />';
    }
}
?>

El resultado del ejemplo sería:

DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)



DateTimeZone::getLocation

timezone_location_get

(PHP 5 >= 5.3.0)

DateTimeZone::getLocation -- timezone_location_getDevuelve la información de la ubicación para una zona horaria

Descripción

Estilo orientado a objetos

public array DateTimeZone::getLocation ( void )

Estilo por procedimientos

Devuelve la información de la ubicación para una zona horaria, incluyendo el código de país, latitud/longitud y comentarios.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTimeZone es devuelto por timezone_open()

Valores devueltos

Una matriz que contiene la información de la ubicación acerca de una zona horaria.

Ejemplos

Ejemplo #1 Ejemplo de DateTimeZone::getLocation()

<?php
$zh 
= new DateTimeZone("Europe/Prague");
print_r($zh->getLocation());
print_r(timezone_location_get($zh));
?>

El resultado del ejemplo sería:

Array
Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] => 
)
Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] => 
)



DateTimeZone::getName

timezone_name_get

(PHP 5 >= 5.2.0)

DateTimeZone::getName -- timezone_name_getDevuelve el nombre de la zona horaria

Descripción

Estilo orientado a objetos

public string DateTimeZone::getName ( void )

Estilo por procedimientos

string timezone_name_get ( DateTimeZone $object )

Devuelve el nombre de la zona horaria.

Parámetros

object

El DateTimeZone del cual desera obtener el nombre.

Valores devueltos

Una de los nombres de zona horaria en la lista de zonas horarias.



DateTimeZone::getOffset

timezone_offset_get

(PHP 5 >= 5.2.0)

DateTimeZone::getOffset -- timezone_offset_getDevuelve el índice de la zona horaria de GMT

Descripción

Estilo orientado a objetos

public int DateTimeZone::getOffset ( DateTime $datetime )

Estilo por procedimientos

int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

Esta función devuelve el índice GMT para la fecha/hora especificada en el parámetro datetime. El índice GMT se calcula con la información de la zona horaria contenida en el objeto DateTimeZone que se va a utilizar.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTimeZone es devuelto por timezone_open()

datetime

El objeto DateTime que contiene la fecha/hora desde la que se va a computar el índice.

Valores devueltos

Devuelve el índice de la zona horaria en segundos si tiene éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTimeZone::getOffset()

<?php
// Crear dos objetos de zona horaria, uno para Taipéi (Taiwán) y otro para
// Tokyo (Japón)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Crear dos objetos DateTime que contendrán la misma fecha Unix, pero
// tendrán diferentes zonas horarias adjuntas.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calcular el índice GMT para la fecha/hora contenida en el objeto $dateTimeTaipei,
// pero usando las normas de la zona horaria definidas en Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Debería mostrar int(32400) (para fechas después de Sat Sep 8 01:00:00 1951 JST).
var_dump($timeOffset);
?>



DateTimeZone::getTransitions

timezone_transitions_get

(PHP 5 >= 5.2.0)

DateTimeZone::getTransitions -- timezone_transitions_getDevuelve todas las transiciones para una zona horaria

Descripción

Estilo orientado a objetos

public array DateTimeZone::getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )

Estilo por procedimientos

array timezone_transitions_get ( DateTimeZone $object [, int $timestamp_begin [, int $timestamp_end ]] )

Parámetros

object

Estilo por procesos solamente: Un objeto DateTimeZone es devuelto por timezone_open()

timestamp_begin

Marca de tiempo de inicio.

timestamp_end

Marca de tiempo final.

Valores devueltos

Deveulve una matriz numérica que contiene una matriz asociativa con todas las transiciones si se tuvo éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0 Se añadireon los parámteros opcionales timestamp_begin y timestamp_end.

Ejemplos

Ejemplo #1 Un ejemplo de timezone_transitions_get()

<?php
$zona_horaria 
= new DateTimeZone("Europe/London");
$transiciones $zona_horaria->getTransitions();
print_r(array_slice($transiciones03));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [0] => Array
        (
            [ts] => -2147483648
            [time] => 1901-12-13T20:45:52+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [1] => Array
        (
            [ts] => -1691964000
            [time] => 1916-05-21T02:00:00+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [2] => Array
        (
            [ts] => -1680472800
            [time] => 1916-10-01T02:00:00+0000
            [offset] => 0
            [isdst] => 
            [abbr] => GMT
        )

)



DateTimeZone::listAbbreviations

timezone_abbreviations_list

(PHP 5 >= 5.2.0)

DateTimeZone::listAbbreviations -- timezone_abbreviations_listDevuelve una matriz asociativa que contiene el horario de verano (dst), el índice y el nombre de la zona horaria

Descripción

Estilo orientado a objetos

public static array DateTimeZone::listAbbreviations ( void )

Estilo por procedimientos

Valores devueltos

Devuelve una matriz si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de timezone_abbreviations_list()

<?php
$timezone_abbreviations 
DateTimeZone::listAbbreviations();
print_r($timezone_abbreviations["acst"]);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [0] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Porto_Acre
        )

    [1] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Eirunepe
        )

    [2] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Rio_Branco
        )

    [3] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => Brazil/Acre
        )

)

Ver también



DateTimeZone::listIdentifiers

timezone_identifiers_list

(PHP 5 >= 5.2.0)

DateTimeZone::listIdentifiers -- timezone_identifiers_listDevuelve una matriz numérica con todos los identificadores de las zonas horarias

Descripción

Estilo orientado a objetos

public static array DateTimeZone::listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )

Estilo por procedimientos

array timezone_identifiers_list ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )

Parámetros

what

Una de las constantes de la clase DateTimeZone.

country

Un código de país de dos letras compatible con ISO 3166-1.

Nota: Esta opción sólo se usa cuando el parámetro what está establecido a DateTimeZone::PER_COUNTRY.

Valores devueltos

Devuelve una matriz si se tuvo éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.3.0 Añadidos los parámteros opcionales what y country.

Ejemplos

Ejemplo #1 Un ejemplo de timezone_identifiers_list()

<?php
$timezone_identifiers 
DateTimeZone::listIdentifiers();
for (
$i=0$i 5$i++) {
    echo 
"$timezone_identifiers[$i]\n";
}
?>

El resultado del ejemplo sería algo similar a:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara

Ver también


Tabla de contenidos



La clase DateInterval

(PHP 5 >= 5.3.0)

Introducción

Representación del intervalo de fecha. Un intervalo de fecha almacena una cantidad fija de tiempo (en años, meses, días, horas, etc.) o una cadena de tiempo relativa en el formato que el constructor DateTime soporta.

Sinopsis de la Clase

DateInterval {
/* Propiedades */
public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;
public integer $invert ;
public mixed $days ;
/* Métodos */
public __construct ( string $interval_spec )
public static DateInterval createFromDateString ( string $time )
public string format ( string $format )
}

Propiedades

y

Número de años.

m

Número de meses.

d

Número de días.

h

Número de horas.

i

Número de minutos.

s

Número de segundos.

invert

Es 1 si el intervalo está invertido y 0 de otro modo. Véase DateInterval::format().

days

El número total de días entre las fechas de inicio y fin en un cáculo de DateTime::diff(). days será FALSE en otras circunstancias.


DateInterval::__construct

(PHP 5 >= 5.3.0)

DateInterval::__constructCrea un nuevo objeto DateInterval

Descripción

public DateInterval::__construct() ( string $interval_spec )

Crea un nuevo objeto DateInterval.

Parámetros

interval_spec

Especificación del intervalo.

El formato empieza con la letra P, de "periodo." Cada periodo de duración está representado por un valor integer seguido de un indicador de periodo. Si la duración contiene elementos de hora, esta parte de la especificación está precedida por una letra T.

Indicadores de Periodo de interval_spec
Indicador de Periodo Descripción
Y años
M meses
D días
W semanas. Éstas se convierten a días, por lo que no se puede combinar con D.
H horas
M minutos
S segundos

Aquí hay algunos ejemplos sencillos. Dos días es P2D. Dos segundos es PT2S. Seis años y cinco minutos es P6YT5M.

Nota:

Los tipos de unidades deben ser escritos desde la unidad de escala más grande a la izquierda a la unidad de escala más pequeña a la derecha. Así los años van antes que los meses, meses antes que días, días antes que minutos, etc. Así un año y cuatro días debe representarse como P1Y4D, y no como P4D1Y.

La especificación también puede ser representada como una fecha/hora. Un ejemplo de un año y cuatro días sería P0001-00-04T00:00:00. Pero los valores en este formato no pueden exceder el punto de vuelta de un periodo (p.ej. 25 horas no es válido).

Estos formatos están basados en la » especificación de duración ISO 8601.

Ejemplos

Ejemplo #1 Ejemplo de DateInterval

<?php

$intervalo 
= new DateInterval('P2Y4DT6H8M');
var_dump($intervalo);

?>

El resultado del ejemplo sería:

object(DateInterval)#1 (8) {
  ["y"]=>
  int(2)
  ["m"]=>
  int(0)
  ["d"]=>
  int(4)
  ["h"]=>
  int(6)
  ["i"]=>
  int(8)
  ["s"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  bool(false)
}

Ver también



DateInterval::createFromDateString

(PHP 5 >= 5.3.0)

DateInterval::createFromDateStringEstablece un objeto DateInterval desde las partes relativas de una cadena

Descripción

public static DateInterval DateInterval::createFromDateString ( string $time )

Usa el analizador de fechas normal y estblece un objeto DateInterval desde las partes relativas de la cadena analizada.

Parámetros

time

La fecha con las partes relativas.

Valores devueltos

Devuelve una nueva instancia de DateInterval si se tuvo éxito.



DateInterval::format

(PHP 5 >= 5.3.0)

DateInterval::formatFormatea el intervalo

Descripción

public string DateInterval::format ( string $format )

Formatea el intervalo.

Parámetros

format

Los siguietes caracteres están reconocidos en el parámetro de cadena format. Cada carácter de formato debe ser prefijado con un signo (%).
Carácter format Descripción Valores de ejemplo
% Literal % %
Y Años, numérico, al menos 2 dígitos empezando con 0 01, 03
y Años, numérico 1, 3
M Meses, numérico, al menos 2 dígitos empezando con 0 01, 03, 12
m Meses, numérico 1, 3, 12
D Días, numérico, al menos 2 dígitos empezando con 0 01, 03, 31
d Días, numérico 1, 3, 31
a Cantidad total de días 4, 18, 8123
H Horas, numérico, al menos 2 dígitos empezando con 0 01, 03, 23
h Horas, numérico 1, 3, 23
I Minutos, numérico, al menos 2 dígitos empezando con 0 01, 03, 59
i Minutos, numérico 1, 3, 59
S Segundos, numérico, al menos 2 dígitos empezando con 0 01, 03, 57
s Segundos, numérico 1, 3, 57
R Signo "-" cuando es negativo, "+" cuando es positivo -, +
r Signo "-" cuando es negativo, vacío cuando es positivo -,

Valores devueltos

Devuelve el intervalo formateado.

Notas

Nota:

El método DateInterval::format() no recalcula los excesos en cadenas de hora ni en segmentos de fecha. Esto es así porque no es posible analizar valores como "32 días" el cual podría ser interpretado como cualquier cosa desde "1 mes y 4 días" hasta "1 mes y un día".

Ejemplos

Ejemplo #1 Ejemplo de DateInterval

<?php

$intervalo 
= new DateInterval('P2Y4DT6H8M');
echo 
$intervalo->format('%d días');

?>

El resultado del ejemplo sería:

4 días

Ejemplo #2 DateInterval y excesos

<?php
 
$intervalo 
= new DateInterval('P32D');
echo 
$intervalo->format('%d días');

?>

El resultado del ejemplo sería:

32 días

Ejemplo #3 DateInterval and DateTime::diff() with the %a and %d modifiers

<?php

$enero 
= new DateTime('2010-01-01');
$febrero = new DateTime('2010-02-01');
$intervalo $febrero->diff($enero);

// %a imprimirá el múmero total de días.
echo $intervalo->format('%a total de días')."\n";

// Mientras que %d sólo imprimirá el múmero total de días no cubiertos por el
// mes.
echo $intervalo->format('%m mes, %d días');

?>

El resultado del ejemplo sería:

31 total days
1 month, 0 days


Tabla de contenidos



La clase DatePeriod

(PHP 5 >= 5.3.0)

Introducción

Representación del periodo de fecha.

Sinopsis de la Clase

DatePeriod implements Traversable {
/* Constantes */
const integer EXCLUDE_START_DATE = 1 ;
/* Métodos */
public __construct ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
public __construct ( DateTime $start , DateInterval $interval , DateTime $end [, int $options ] )
public __construct ( string $isostr [, int $options ] )
}

Constantes predefinidas

DatePeriod::EXCLUDE_START_DATE

Excluir la fecha inicial, usado en DatePeriod::__construct().


DatePeriod::__construct

(PHP 5 >= 5.3.0)

DatePeriod::__constructCrea un nuevo objeto DatePeriod

Descripción

public DatePeriod::__construct() ( DateTime $start , DateInterval $interval , int $recurrences [, int $options ] )
public DatePeriod::__construct() ( DateTime $start , DateInterval $interval , DateTime $end [, int $options ] )
public DatePeriod::__construct() ( string $isostr [, int $options ] )

Crea un nuevo objeto DatePeriod.

Parámetros

start

Fecha de inicio.

interval

Intervalo.

recurrences

Número de repeticiones.

end

Fecha final.

isostr

Una cadena que contiene el intervalo ISO.

options

Se puede establecer a DatePeriod::EXCLUDE_START_DATE.


Tabla de contenidos



Funciones de Fecha/Hora


checkdate

(PHP 4, PHP 5)

checkdateValidar una fecha gregoriana

Descripción

bool checkdate ( int $month , int $day , int $year )

Comprueba la validez de una fecha formada por los argumentos. Una fecha se considera válida si cada parámetro está propiamente definido.

Parámetros

month

El mes entre 1 y 12 inclusive.

day

El día que está dentro del número de días del mes month dado. Los años year bisiestos son tomados en consideración.

year

El año entre 1 y 32767 inclusive.

Valores devueltos

Devuelve TRUE si la fecha dada es válida, si no, devuelve FALSE.

Ejemplos

Ejemplo #1 Ejemplo de checkdate()

<?php
var_dump
(checkdate(12312000));
var_dump(checkdate(2292001));
?>

El resultado del ejemplo sería:

bool(true)
bool(false)

Ver también

  • mktime() - Obtener la marca de tiempo Unix de una fecha
  • strtotime() - Convierte una descripción de fecha/hora textual en Inglés a una fecha Unix



date_add

(PHP 5 >= 5.3.0)

date_addAlias de DateTime::add()

Descripción

Esta función es un alias de: DateTime::add()



date_create_from_format

(PHP 5 >= 5.3.0)

date_create_from_formatAlias de DateTime::createFromFormat()

Descripción

Esta función es un alias de: DateTime::createFromFormat()



date_create

(PHP 5 >= 5.2.0)

date_createAlias de DateTime::__construct()

Descripción

Esta función es un alias de: DateTime::__construct()



date_date_set

(PHP 5 >= 5.2.0)

date_date_setAlias de DateTime::setDate()

Descripción

Esta función es un alias de: DateTime::setDate()



date_default_timezone_get

(PHP 5 >= 5.1.0)

date_default_timezone_get Obtiene la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script

Descripción

string date_default_timezone_get ( void )

En orden de preferencia, esta función devuelve la zona horaria predeternimada mediante:

  • Leer la zona horaria usando la función date_default_timezone_set() (si hay alguna)

  • Sólo antes de PHP 5.4.0: Leer la variable de entorno TZ (si no está vacía)

  • Leer el valor de la opción ini date.timezone (si está establecida)

  • Sólo antes de PHP 5.4.0: Preguntar al sistema operativo (siempre que el SO lo soporte y lo permita). Utiliza un algoritmo que debe estimar la zona horaria. No funcionará de forma necesariamente correcta en todas las situaciones posibles. Si se diera este caso, se mostrará una alerta. No se aconseja depender de esta función. En su lugar, debe establecerse la zona horaria correcta con date.timezone

Si nada de lo de arriba sucedió, date_default_timezone_get() devolverá una zona horaria predeterminada de UTC.

Valores devueltos

Devuelve un string.

Historial de cambios

Versión Descripción
5.4.0 La variable de entorno TZ ya no se usa para adivinar la zona horaria.
5.4.0 La zona horaria ya no se adivina de la información disponible a través del sistema operativo, la zona horaria adivinada no puede invocarse.

Ejemplos

Ejemplo #1 Obtener la zona horaria por defecto

<?php
date_default_timezone_set
('Europe/London');

if (
date_default_timezone_get()) {
    echo 
'date_default_timezone_set: ' date_default_timezone_get() . '<br />';
}

if (
ini_get('date.timezone')) {
    echo 
'date.timezone: ' ini_get('date.timezone');
}

?>

El resultado del ejemplo sería algo similar a:

date_default_timezone_set: Europe/London
date.timezone: Europe/London

Ejemplo #2 Obtener la abreviatura de una zona horaria

<?php
date_default_timezone_set
('America/Los_Angeles');
echo 
date_default_timezone_get() . ' => ' date('e') . ' => ' date('T');
?>

El resultado del ejemplo sería:

America/Los_Angeles => America/Los_Angeles => PST

Ver también



date_default_timezone_set

(PHP 5 >= 5.1.0)

date_default_timezone_set Establece la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script

Descripción

bool date_default_timezone_set ( string $timezone_identifier )

date_default_timezone_set() establce la zona horaria predetermiada usada por todas las funciones de fecha/hora.

Nota:

A partir de PHP 5.1.0 (cuando las funciones de fecha/hora fueron reescritas), cada llamada a la función de fecha/hora generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_WARNING si se usa la configuración del sistema o la variable de entorno TZ.

En vez de usar esta función para establecer la zona horaria predeterminada en su script, puede usar también la configuración INI date.timezone para establecer la zona horaria predeterminada.

Parámetros

timezone_identifier

El indentificador de la zona horaria, como UTC o Europe/Lisbon. La lista de los identificadores válidos está disponible en la Listado de Timezones soportados.

Valores devueltos

Esta función devuelve FALSE si timezone_identifier no es válido, o TRUE de otro modo.

Ejemplos

Ejemplo #1 Obtener la zona horaria por defecto

<?php
date_default_timezone_set
('America/Los_Angeles');

$script_tz date_default_timezone_get();

if (
strcmp($script_tzini_get('date.timezone'))){
    echo 
'La zona horaria del script difiere de la zona horaria de la configuracion ini.';
} else {
    echo 
'La zona horaria del script y la zona horaria de la configuración ini coinciden.';
}
?>

Historial de cambios

Versión Descripción
5.3.0 Ahora se lanza un E_WARNING en vez de un E_STRICT.
5.1.2 La función comenzo a validar el parámetro timezone_identifier.

Ver también



date_diff

(PHP 5 >= 5.3.0)

date_diffAlias de DateTime::diff()

Descripción

Esta función es un alias de: DateTime::diff()



date_format

(PHP 5 >= 5.2.0)

date_formatAlias de DateTime::format()

Descripción

Esta función es un alias de: DateTime::format()



date_get_last_errors

(PHP 5 >= 5.3.0)

date_get_last_errorsAlias de DateTime::getLastErrors()

Descripción

Esta función es un alias de: DateTime::getLastErrors()



date_interval_create_from_date_string

(PHP 5 >= 5.3.0)

date_interval_create_from_date_stringAlias de DateInterval::createFromDateString()

Descripción

Esta función es un alias de: DateInterval::createFromDateString()



date_interval_format

(PHP 5 >= 5.3.0)

date_interval_formatAlias de DateInterval::format()

Descripción

Esta función es un alias de: DateInterval::format()



date_isodate_set

(PHP 5 >= 5.2.0)

date_isodate_setAlias de DateTime::setISODate()

Descripción

Esta función es un alias de: DateTime::setISODate()



date_modify

(PHP 5 >= 5.2.0)

date_modifyAlias de DateTime::modify()

Descripción

Esta función es un alias de: DateTime::modify()



date_offset_get

(PHP 5 >= 5.2.0)

date_offset_getAlias de DateTime::getOffset()

Descripción

Esta función es un alias de: DateTime::getOffset()



date_parse_from_format

(PHP 5 >= 5.3.0)

date_parse_from_formatObtiene información de una fecha dada formateada de acuerdo al formato especificado

Descripción

array date_parse_from_format ( string $format , string $date )

Devuelve una matriz asociativa con información detallada acerca de la fecha dada.

Parámetros

format

Un formato aceptado por DateTime::createFromFormat().

date

Una cadena que representa la fecha.

Valores devueltos

Devuelve una matriz asociativa con información detallada de la fecha dada.

Ejemplos

Ejemplo #1 Ejemplo de date_parse_from_format()

<?php
$fecha 
"6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP"$fecha));
?>

El resultado del ejemplo sería:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => -60
    [is_dst] => 
)

Ver también



date_parse

(PHP 5 >= 5.2.0)

date_parseDevuelve una matriz asociativa con información detallada acerca de una fecha dada

Descripción

array date_parse ( string $date )

Parámetros

date

La fecha en un formato aceptado por strtotime().

Valores devueltos

Devuelve un array con información sobre la fecha analizada si se tuvo éxito o FALSE en caso de error.

Errores/Excepciones

En el caso de que el formato de fecha tenga un error, el elemento 'errors' contendrá los mensajes de error.

Ejemplos

Ejemplo #1 Un ejemplo de date_parse()

<?php
print_r
(date_parse("2006-12-12 10:00:00.5"));
?>

El resultado del ejemplo sería:

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)

Ver también



date_sub

(PHP 5 >= 5.3.0)

date_subAlias de DateTime::sub()

Descripción

Esta función es un alias de: DateTime::sub()



date_sun_info

(PHP 5 >= 5.1.2)

date_sun_infoDevuelve una matriz con información sobre la puesta/salida del sol y el comienzo/final del crepúsculo

Descripción

array date_sun_info ( int $time , float $latitude , float $longitude )

Parámetros

time

Marca de tiempo.

latitude

Latitud en grados.

longitude

Longitud en grados.

Valores devueltos

Devuelve una matriz si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de date_sun_info()

<?php
$sun_info 
date_sun_info(strtotime("2006-12-12"), 31.766735.2333);
foreach (
$sun_info as $clave => $valor) {
    echo 
"$clave: " date("H:i:s"$valor) . "\n";
}
?>

El resultado del ejemplo sería:

sunrise: 05:52:11
sunset: 15:41:21
transit: 10:46:46
civil_twilight_begin: 05:24:08
civil_twilight_end: 16:09:24
nautical_twilight_begin: 04:52:25
nautical_twilight_end: 16:41:06
astronomical_twilight_begin: 04:21:32
astronomical_twilight_end: 17:12:00

Ver también

  • date_sunrise() - Devuelve la hora de la salida del sol de un día y ubicación dados
  • date_sunset() - Devuelve la hora de la puesta de sol de un día y ubicación dados



date_sunrise

(PHP 5)

date_sunriseDevuelve la hora de la salida del sol de un día y ubicación dados

Descripción

mixed date_sunrise ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunrise() devuelve la hora de la salida del sol para un día (especificado como timestamp) y ubicación dados.

Parámetros

timestamp

La marca de tiempo timestamp del día del que se va a tomar la salida del sol.

format

Constantes format
constante descripción ejemplo
SUNFUNCS_RET_STRING devuelve el resultado como string 16:46
SUNFUNCS_RET_DOUBLE devuelve el resultado como float 16.78243132
SUNFUNCS_RET_TIMESTAMP devuelve el resultado como integer (timestamp) 1095034606

latitude

La latitud, por defecto a Norte, y como valor negativo a Sur. Vea también: date.default_latitude

longitude

La longitud, por defecto a Este, y como valor negativo a Oeste. Vea tambien: date.default_longitude

zenith

El cénit, por defecto: date.sunset_zenith

gmtoffset

El índice GMT especificado en horas.

Valores devueltos

Devuelve la hora de la salida del sol en un formato format especificado si se tuvo éxito o FALSE en caso de error.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo de date_sunrise()

<?php

/* calcular la salida del sol para Lisboa, Portugal
Latitud: 38.4 Norte
Longitud: 9 Oeste
Cenit ~= 90
Índice: +1 GMT
*/

echo date("D M d Y"). ', hora de la salida del sol : ' .date_sunrise(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

El resultado del ejemplo sería algo similar a:

Mon Dec 20 2004, hora de la salida del sol : 08:54

Ver también

  • date_sunset() - Devuelve la hora de la puesta de sol de un día y ubicación dados



date_sunset

(PHP 5)

date_sunset Devuelve la hora de la puesta de sol de un día y ubicación dados

Descripción

mixed date_sunset ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0 ]]]]] )

date_sunset() devuelve la hora de la puesta de sol para un día (especificado como timestamp) y ubicación dados.

Parámetros

timestamp

La marca de tiempo timestamp del día del que se va a tomar la puesta de sol.

format

Constantes format
constante descripción ejemplo
SUNFUNCS_RET_STRING devuelve el resultado como string 16:46
SUNFUNCS_RET_DOUBLE devuelve el resultado como float 16.78243132
SUNFUNCS_RET_TIMESTAMP devuelve el resultado como integer (timestamp) 1095034606

latitude

La latitud, por defecto a Norte, y como valor negativo a Sur. Vea también: date.default_latitude

longitude

La longitud, por defecto a Este, y como valor negativo a Oeste. Vea tambien: date.default_longitude

zenith

El cénit, por defecto: date.sunset_zenith

gmtoffset

El índice GMT especificado en horas.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Valores devueltos

Devuelve la hora de la puesta de sol en un formato format especificado si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de date_sunset()

<?php

/* calcular la puesta de sol para Lisboa, Portugal
Latitud: 38.4 Norte
Longitud: 9 Oeste
Cenit ~= 90
Índice: +1 GMT
*/

echo date("D M d Y"). ', hora de la puesta de sol : ' .date_sunset(time(), SUNFUNCS_RET_STRING38.4, -9901);

?>

El resultado del ejemplo sería algo similar a:

Mon Dec 20 2004, hora de la puesta de sol : 18:13

Ver también

  • date_sunrise() - Devuelve la hora de la salida del sol de un día y ubicación dados



date_time_set

(PHP 5 >= 5.2.0)

date_time_setAlias de DateTime::setTime()

Descripción

Esta función es un alias de: DateTime::setTime()



date_timestamp_get

(PHP 5 >= 5.3.0)

date_timestamp_getAlias de DateTime::getTimestamp()

Descripción

Esta función es un alias de: DateTime::getTimestamp()



date_timestamp_set

(PHP 5 >= 5.3.0)

date_timestamp_setAlias de DateTime::setTimestamp()

Descripción

Esta función es un alias de: DateTime::setTimestamp()



date_timezone_get

(PHP 5 >= 5.2.0)

date_timezone_getAlias de DateTime::getTimezone()

Descripción

Esta función es un alias de: DateTime::getTimezone()



date_timezone_set

(PHP 5 >= 5.2.0)

date_timezone_setAlias de DateTime::setTimezone()

Descripción

Esta función es un alias de: DateTime::setTimezone()



date

(PHP 4, PHP 5)

dateDar formato a la fecha/hora local

Descripción

string date ( string $format [, int $timestamp = time() ] )

Devuelve una cadena formateada según el formato dado usando el parámetro de tipo integer timestamp dado o el momento actual si no se da una marca de tiempo. En otras palabras, timestamp es opcional y por defecto es el valor de time().

Parámetros

format

El formato de la fecha de salida tipo string. Vea las opciones de formato más abajo. También hay varias constantes de fecha predefinidas que pueden usarse en su lugar, así por ejemplo DATE_RSS contiene la cadena de formato 'D, d M Y H:i:s'.

Los siguientes caracteres están reconocidos en el parámetro de cadena format
Carácter de format Descripción Ejemplo de valores devueltos
Día --- ---
d Día del mes, 2 dígitos con ceros iniciales 01 a 31
D Una representación textual de un día, tres letras Mon hasta Sun
j Día del mes sin ceros iniciales 1 a 31
l ('L' minúscula) Una representación textual completa del día de la semana Sunday hasta Saturday
N Representación numérica ISO-8601 del día de la semana (añadido en PHP 5.1.0) 1 (para lunes) hasta 7 (para domingo)
S Sufijo ordinal inglés para el día del mes, 2 caracteres st, nd, rd o th. Funciona bien con j
w Representación numérica del día de la semana 0 (para domingo) hasta 6 (para sábado)
z El día del año (comenzando por 0) 0 hasta 365
Semana --- ---
W Número de la semana del año ISO-8601, las semanas comienzan en lunes (añadido en PHP 4.1.0) Ejemplo: 42 (la 42ª semana del año)
Mes --- ---
F Una representación textual completa de un mes, como January o March January hasta December
m Representación numérica de una mes, con ceros iniciales 01 hasta 12
M Una representación textual corta de un mes, tres letras Jan hasta Dec
n Representación numérica de un mes, sin ceros iniciales 1 hasta 12
t Número de días del mes dado 28 hasta 31
Año --- ---
L Si es un año bisiesto 1 si es bisiesto, 0 si no.
o Número de año ISO-8601. Esto tiene el mismo valor que Y, excepto que si el número de la semana ISO (W) pertenece al año anterior o siguiente, se usa ese año en su lugar. (añadido en PHP 5.1.0) Ejemplos: 1999 o 2003
Y Una representación numérica completa de un año, 4 dígitos Ejemplos: 1999 o 2003
y Una representación de dos dígitos de un año Ejemplos: 99 o 03
Hora --- ---
a Ante meridiem y Post meridiem en minúsculas am o pm
A Ante meridiem y Post meridiem en mayúsculas AM o PM
B Hora Internet 000 hasta 999
g Formato de 12 horas de una hora sin ceros iniciales 1 hasta 12
G Formato de 24 horas de una hora sin ceros iniciales 0 hasta 23
h Formato de 12 horas de una hora con ceros iniciales 01 hasta 12
H Formato de 24 horas de una hora con ceros iniciales 00 hasta 23
i Minutos, con ceros iniciales 00 hasta 59
s Segundos, con ceros iniciales 00 hasta 59
u Microsegundos (añadido en PHP 5.2.2) Ejemplo: 654321
Zona Horaria --- ---
e Identificador de zona horaria (añadido en PHP 5.1.0) Ejemplos: UTC, GMT, Atlantic/Azores
I (i mayúscula) Si la fecha está en horario de verano o no 1 si está en horario de verano, 0 si no.
O Diferencia de la hora de Greenwich (GMT) en horas Ejemplo: +0200
P Diferencia con la hora de Greenwich (GMT) con dos puntos entre horas y minutos (añadido en PHP 5.1.3) Ejemplo: +02:00
T Abreviatura de la zona horaria Ejemplos: EST, MDT ...
Z Índice de la zona horaria en segundos. El índice para zonas horarias al oeste de UTC siempre es negativo, y para aquellas al este de UTC es siempre positivo. -43200 hasta 50400
Fecha/Hora Completa --- ---
c Fecha ISO 8601 (añadido en PHP 5) 2004-02-12T15:19:21+00:00
r Fecha con formato » RFC 2822 Ejemplo: Thu, 21 Dec 2000 16:01:07 +0200
U Segundos desde la Época Unix (1 de Enero del 1970 00:00:00 GMT) Vea también time()

Los caracteres no reconocidos en la cadena de formato serán impresos tal cual. El formato Z siempre devolverá 0 cuando se usa gmdate().

Nota:

Ya que esta función sólo acepta marcas de tiempo de tipo integer el carácter de formato u sólo es útil cuando se usa la función date_format() con marcas de tiempo basadas en usuario creadas con date_create().

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve una cadena de fecha formateada. Si se usa un valor no numérico para timestamp, se devuelve FALSE y se emite un error de nivel E_WARNING.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.1.0 El rango válido de una marca de tiempo es típicamente desde Fri, 13 Dec 1901 20:45:54 GMT a Tue, 19 Jan 2038 03:14:07 GMT. (Estas son las fechas que corresponden a los valores mínimo y máximo de un entero con signo de 32 bit). Sin embargo, antes de PHP 5.1.0 este rango estaba limitado desde 01-01-1970 a 19-01-2038 en algunos sistemas (p.ej. Windows).
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

5.1.1 Hay constantes útiles de formatos de fecha/hora estándar que se pueden usar para especificar el parámetro format.

Ejemplos

Ejemplo #1 Ejemplo de date()

<?php
// Establecer la zona horaria predeterminada a usar. Disponible desde PHP 5.1
date_default_timezone_set('UTC');


// Imprime algo como: Monday
echo date("l");

// Imprime algo como: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Imprime: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

/* Usar las constantes en el parámetro de formato */
// Imprime algo como: Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);

// Imprime algo como: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOMmktime(000712000));
?>

Puede prevenir que un carácter reconocido en la cadena de formato sea expandido escapándolo con una barra invertida precedente. Si el carácter con una barra invertida es ya una secuencia especial, necesitará escapar también la barra invertida.

Ejemplo #2 Escapar caracteres en date()

<?php
// imprime algo como: Wednesday the 15th
echo date('l \t\h\e jS');
?>

Es posible usar date() y mktime() juntos para buscar fechas en el futuro o en el pasado.

Ejemplo #3 Ejemplo de date() y mktime()

<?php
$mañana        
mktime(000date("m")  , date("d")+1date("Y"));
$mes_anterior  mktime(000date("m")-1date("d"),   date("Y"));
$año_siguiente mktime(000date("m"),   date("d"),   date("Y")+1);
?>

Nota:

Esto puede ser más fiable que añadir o sustraer simplemente el número de segundos de un día o mes a una marca de tiempo debido al horario de verano.

Algunos ejemplos de formatear date(). Observe que debería escapar cualesquiera otros caracteres, ya que cualquiera que tenga actualmente un significado especial producirá resultados no deseados, y a otros caracteres se les pueden asignar significado en futuras versiones de PHP. Cuando se escapa un carácter, asegúrese de usar comillas simples para prevenir que caracteres como \n se conviertan en nuevas líneas.

Ejemplo #4 date() Formatting

<?php
// Se asume que hoy es March 10th, 2001, 5:16:18 pm, y que estamos en la
// zona horaria Mountain Standard Time (MST)

$today date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today date("m.d.y");                         // 03.10.01
$today date("j, n, Y");                       // 10, 3, 2001
$today date("Ymd");                           // 20010310
$today date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today date("H:i:s");                         // 17:16:18
?>

Para formatear fechas en otros lenguajes debería usar las funciones setlocale() y strftime() en vez de date().

Notas

Nota:

Para generar una marca de tiempo desde una cadena que representa la fecha, puede usar strtotime(). Adicionalmente, algunas bases de datos tienen funciones para convertir formatos de fecha en marcas de tiempo (como la función » UNIX_TIMESTAMP de MySQL).

Sugerencia

La marca de tiempo del inicio de una petición está disponible en $_SERVER['REQUEST_TIME'] desde PHP 5.1.

Ver también



getdate

(PHP 4, PHP 5)

getdateObtener información de la fecha/hora

Descripción

array getdate ([ int $timestamp = time() ] )

Devuelve un array asociativo que contiene la información de la fecha de timestamp, o el momento local actual si no se da timestamp.

Parámetros

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve un array asociativo con información relacionada con la marca de tiempo timestamp. Los elementos devueltos de la matriz asociativa son los siguientes:

Las claves de la matriz asociativa devuelta
Clave Descripción Ejemplo de valores devueltos
"seconds" Representacion numérica de los segundos 0 a 59
"minutes" Representacion numérica de los minutos 0 a 59
"hours" Representacion numérica de las horas 0 a 23
"mday" Representacion numérica del día del mes 1 a 31
"wday" Representacion numérica del día de la semana 0 (para Domingo) hasta 6 (para Sábado)
"mon" Representacion numérica de un mes 1 hasta 12
"year" Una representacion numérica completa de una año, 4 dígitos Ejemplos: 1999 o 2003
"yday" Representacion numérica del día del año 0 hasta 365
"weekday" Una representación textual completa del día de la semana Sunday hasta Saturday
"month" Una representación textual completa de un mes, como January o March January hasta December
0 Los segundos desde la Época Unix, similar a los valores devueltos por time() y usados por date(). Dependiente del Sistema, típicamente -2147483648 hasta 2147483647.

Ejemplos

Ejemplo #1 Ejemplo de getdate()

<?php
$hoy 
getdate();
print_r($hoy);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Tuesday
    [month]   => June
    [0]       => 1055901520
)

Ver también

  • date() - Dar formato a la fecha/hora local
  • idate() - Formatea una fecha/hora local como un entero
  • localtime() - Obtiene fecha y hora local
  • time() - Devuelve la fecha Unix actual
  • setlocale() - Establecer la información de la configuración regional



gettimeofday

(PHP 4, PHP 5)

gettimeofdayObtener la hora actual

Descripción

mixed gettimeofday ([ bool $return_float = false ] )

Esta es una interfaz a gettimeofday(2). Devuelve una matriz asociativa que contiene la información devuelta por la llamada al sistema.

Parámetros

return_float

Cuando se establece a TRUE, se devuelve un float en vez de un array.

Valores devueltos

Por defecto se devuelve un array. Si return_float está establecido, se devuelve un float.

Claves de la matriz:

  • "sec" - segundos desde la Época Unix
  • "usec" - microsegundos
  • "minuteswest" - minutos al oeste de Greenwich
  • "dsttime" - tipo de corrección del horario de verano (dst)

Historial de cambios

Versión Descripción
5.1.0 Se añadió el parámetro return_float.

Ejemplos

Ejemplo #1 Ejemplo de gettimeofday()

<?php
print_r
(gettimeofday());

echo 
gettimeofday(true);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [sec] => 1073504408
    [usec] => 238215
    [minuteswest] => 0
    [dsttime] => 1
)

1073504408.23910



gmdate

(PHP 4, PHP 5)

gmdateFormatea una fecha/hora GMT/UTC

Descripción

string gmdate ( string $format [, int $timestamp = time() ] )

Idéntica a la función date() excepto que la fecha/hora devuelta es en Greenwich Mean Time (GMT).

Parámetros

format

El formato de la fecha (string) a mostrar. Ver las opciones de formato de la función date().

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve una fecha en formato GMT. Si se usa un valor no numérico en timestamp, devolverá FALSE y se lanzará un error de nivel E_WARNING.

Historial de cambios

Versión Descripción
5.1.0 El rango válido de una marca de tiempo es típicamente desde Fri, 13 Dec 1901 20:45:54 GMT a Tue, 19 Jan 2038 03:14:07 GMT. (Estas son las fechas que corresponden a los valores mínimo y máximo de un entero con signo de 32-bit). Sin embargo, antes de PHP 5.1.0 este rango estaba limitado desde 01-01-1970 a 19-01-2038 en algunos sistemas (p.ej. Windows).
5.1.1 Hay constantes útiles de formatos de fecha/hora estándar que se pueden usar para especificar el parámetro format.

Ejemplos

Ejemplo #1 Ejemplo de gmdate()

Cuando se ejecuta en Finlandia (GMT +0200), la primera línea de abajo imprimirá "Jan 01 1998 00:00:00", mientras que la segunda imprimirá "Dec 31 1997 22:00:00".

<?php
echo date("M d Y H:i:s"mktime(000111998));
echo 
gmdate("M d Y H:i:s"mktime(000111998));
?>

Ver también

  • date() - Dar formato a la fecha/hora local
  • mktime() - Obtener la marca de tiempo Unix de una fecha
  • gmmktime() - Obtener la marca de tiempo Unix para una fecha GMT
  • strftime() - Formatea una fecha/hora local según la configuración regional



gmmktime

(PHP 4, PHP 5)

gmmktimeObtener la marca de tiempo Unix para una fecha GMT

Descripción

int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1 ]]]]]]] )

Idéntica a mktime() excepto que los parámetros pasados representan una fecha GMT. gmmktime() internamente usa mktime() por lo que sólo los momento válidos derivados del momento local se pueden usar.

Como en mktime(), los argumentos pueden ser expuestos en orden de derecha a izquierda, con cualquier argumento que se omita establecido al valor GMT correspondiente actual.

Parámetros

hour

El número de la hora relativo al inicio del día determinado por month, day y year. Los valores negativos referencias la hora antes de la media noche del día en cuestión. Los valores mayores que 23 referencian la hora apropiada en el/los día/s siguiente/s.

minute

El número del minuto relativo al inicio de hour. Los valores negativos referencian el minuto en la hora previa. Los valores maayores que 59 referencian el minuto apropiado en la/s hora/s siguiente/s.

second

El número de segundos relativo al inicio de minute. Los valores negativos referencian el segundo en el minuto previo. Los valores mayores que 59 referencian el segundo apropiado en el/los minuto/s siguiente/s.

month

El número del mes relativo al inicio del año previo. Los valores de 1 a 12 referencian los meses del calendario normal del año en cuestión. Los valores menores que 1 (incluyendo valores negativos) referencian los meses del año previo en orden inverso, por lo que 0 es December, -1 es November, etc. Los valores mayores que 12 referencian el mes apropiado en el/los año/s siguiente/s.

day

El número del día relativo al final del mes previo. Los valores del 1 al 28, 29, 30 o 31 (dependiendo del mes) referenciacn los días normales del mes relevante.the normal days in the relevant month. Los valores menores que 1 (incluyendo valores negativos) referencian los días del mes previo por lo que 0 es el último día del mes previo, -1 es el día anterior a ese, etc. Los valores mayores que el número de días del mes relevante referencian el día apropiado en el/los mes/es siguiente/s.

year

El año

is_dst

Los parámetros siempre representan una fecha GMT por lo que is_dst no influye en el resultado.

Valores devueltos

Devuelve una marca de tiempo Unix de tipo integer.

Historial de cambios

Versión Descripción
5.1.0 A partir de PHP 5.1.0, el parámetro is_dst se volvió obsoleto. Como resultado, se podría usar en su lugar las nuevas características de manejo de zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo básico de gmmktime()

<?php
// Imprime: July 1, 2000 is on a Friday
echo "July 1, 2000 is on a " date("l"gmmktime(000712000));
?>

Ver también

  • mktime() - Obtener la marca de tiempo Unix de una fecha
  • date() - Dar formato a la fecha/hora local
  • time() - Devuelve la fecha Unix actual



gmstrftime

(PHP 4, PHP 5)

gmstrftimeFormatear una fecha/hora GMT/UTC según la configuración regional

Descripción

string gmstrftime ( string $format [, int $timestamp = time() ] )

Se comporta como strftime() excepto que el momento devuelto es Greenwich Mean Time (GMT). Por ejemplo, cuando se ejecuta en Hora del Este (GMT -0500), la primera línea de abajo imprime "Dec 31 1998 20:00:00", mientras que la segunda imprime "Jan 01 1999 01:00:00".

Parámetros

format

Vea la descripción de strftime().

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve una cadena formateada según la cadena de formato dada usando la marca de tiempo timestamp dada o el momento local actual si no se da la marca de tiempo. Los nombres del mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados a la configuración regional local establecida con

Ejemplos

Ejemplo #1 Ejemplo de gmstrftime()

<?php
setlocale
(LC_TIME'en_US');
echo 
strftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
echo 
gmstrftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
?>

Ver también

  • strftime() - Formatea una fecha/hora local según la configuración regional



idate

(PHP 5)

idateFormatea una fecha/hora local como un entero

Descripción

int idate ( string $format [, int $timestamp = time() ] )

Devuelve un número formateado según la cadena de formato dada usando la marca de tiempo timestamp de tipo entero dado o el momento local actual si no se da la marca de tiempo. En otras palabras, timestamp es opcional y su valor por defecto es el de time().

A diferencia de date(), idate() acepta un sólo carácter en el parámetro format.

Parámetros

format

Los siguientes caracteres son reconocidos por el parámetro de cadena format
Caracter format Descripción
B Swatch Beat/Hora Internet
d Día del mes
h Hora (formato de 12 horas)
H Hora (formato de 24 horas)
i Minutos
I (i mayúscula) devuelve 1 si el horario de verano (DST) está activado, 0 si no
L (l mayúscula) devuelve 1 para años bisiestos, 0 si no
m Número de mes
s Segundos
t Días en el mes actual
U Segundos desde la Época Unix - 1 de enero de 1970 00:00:00 UTC - esto es lo mismo que en time()
w Día de la semana (0 para Domingo)
W Número del mes del año ISO-8601, las semanas comienzan en Lunes
y Año (1 ó 2 dígitos - comprobar la anotación de abajo)
Y Año (4 dígitos)
z Día del año
Z Ínidce de la zona horaria en segundos

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve un integer.

Ya que idate() devuelve siempre un integer y como éste nunca puede empezar por un "0", idate() puede devolver menos dígitos de los que se esperarían. Vea el ejemplo de abajo.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo de idate()

<?php
$timestamp 
strtotime('1st January 2004'); //1072915200

// esto imprime el año en un formato de dos dígitos
// sin embargo, ya que éste podría empezar con un "0",
// sólo se imprime "4"
echo idate('y'$timestamp);
?>

Ver también

  • date() - Dar formato a la fecha/hora local
  • getdate() - Obtener información de la fecha/hora
  • time() - Devuelve la fecha Unix actual



localtime

(PHP 4, PHP 5)

localtimeObtiene fecha y hora local

Descripción

array localtime ([ int $timestamp = time() [, bool $is_associative = false ]] )

La función localtime() devuelve un array con la estructura idéntica a la devuelta por la llamada a la función en C.

Parámetros

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

is_associative

Si está defindo como FALSE o no se proporciona, el array es devuelto como un array indexado numéricamente. Si el argumento está definido como TRUE, localtime() devuelve un array asociativo que contiene todos los diferentes elementos de la estructura devuelta por la llamada a la fucnión de C localtime. Los nombres de las diferentes claves del array asociativo son los siguientes:

  • "tm_sec" - segundos, 0 a 59
  • "tm_min" - minutos, 0 a 59
  • "tm_hour" - horas, 0 a 23
  • "tm_mday" - día del mes, 1 a 31
  • "tm_mon" - mes del año, 0 (Ene) a 11 (Dic)
  • "tm_year" - años desde 1900
  • "tm_wday" - día de la semana, 0 (Domingo) a 6 (Sábado)
  • "tm_yday" - día del año, 0 to 365
  • "tm_isdst" - ¿Está en horario de verano? Valor positivo si es que sí, 0 si es que no, negativo en caso que no se sepa.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo de localtime()

<?php
$localtime 
localtime();
$localtime_assoc localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [0] => 24
    [1] => 3
    [2] => 19
    [3] => 3
    [4] => 3
    [5] => 105
    [6] => 0
    [7] => 92
    [8] => 1
)

Array
(
    [tm_sec] => 24
    [tm_min] => 3
    [tm_hour] => 19
    [tm_mday] => 3
    [tm_mon] => 3
    [tm_year] => 105
    [tm_wday] => 0
    [tm_yday] => 92
    [tm_isdst] => 1
)

Ver también

  • getdate() - Obtener información de la fecha/hora



microtime

(PHP 4, PHP 5)

microtimeDevuelve la fecha Unix actual con microsegundos

Descripción

mixed microtime ([ bool $get_as_float = false ] )

microtime() devuelve la fecha Unix actual con microsegundos. Esta función sólo está disponible en sisitemas operativos que soportan la llamada al sistema de gettimeofday().

Parámetros

get_as_float

Si se usa y se establece a TRUE, microtime() devolverá un float en vez de un string, como está descrito en la sección de valores de retorno de abajo.

Valores devueltos

Por omisión, microtime() devuelve un string en la forma "msec sec", donde sec es el momento actual medido con el número de segundos desde la época Unix (0:00:00 January 1, 1970 GMT), y msec es el número de microsegundos que han transcurrido desde sec expresado en segundos.

Si get_as_float está establecido a TRUE, microtime() devuelve un float, que representa el momento actual en segundos desde la época Unix con precisión al microsegundo más cercano.

Historial de cambios

Versión Descripción
5.0.0 Se añadió el parámetro get_as_float.

Ejemplos

Ejemplo #1 Ejecución de un script de cronometraje con microtime()

<?php
/**
 * Función sencilla para repetir el comportamiento de PHP 5
 */
function microtime_float()
{
    list(
$usec$sec) = explode(" "microtime());
    return ((float)
$usec + (float)$sec);
}

$time_start microtime_float();

// Dormir por un momento
usleep(100);

$time_end microtime_float();
$time $time_end $time_start;

echo 
"No se hizo nada en $time segundos\n";
?>

Ejemplo #2 Ejecución de un script de cronometraje en PHP 5

<?php
$time_start 
microtime(true);

// Dormir por un momento
usleep(100);

$time_end microtime(true);
$time $time_end $time_start;

echo 
"No se hizo nada en $time segundos\n";
?>

Ver también

  • time() - Devuelve la fecha Unix actual



mktime

(PHP 4, PHP 5)

mktimeObtener la marca de tiempo Unix de una fecha

Descripción

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

Devuelve la marca de tiempo Unix correspondiente a los argumentos dados. Esta marca de tiempo es un entero que contiene el número de segundos entre la Época Unix (1 de Enero del 1970 00:00:00 GMT) y el instante especificado.

Los argumentos pueden omitirse de derecha a izquierda; cualquier argumento que se omita será establecido al valor actual según la fecha y hora locales.

Notas

Nota:

Desde PHP 5.1, cuando se hace la llamada sin argumentos, mktime() lanza un aviso de tipo E_STRICT: use la función time() en su lugar.

Parámetros

hour

El número de la hora relativa al inicio del día determinado por month, day y year. Los valores negativos referencian la hora antes de la media noche del día en cuestión. Los valores mayores que 23 referencian la hora apropiada en el/los día/s siguiente/s.

minute

El número de los minutos relativos al inicio de hour. Los valores negativos referencian el minuto en la hora previa. Los valores mayores que 59 referencian el minuto apropiado en la/s hora/s siguiente/s.

second

El número de segundos relativos al inicio de minute. Los valores negativos referencian el segundo en el minuto previo. Los valores mayores que 59 referencian el segundo apropiado en el/los minuto/s siguiente/s.

month

El número del mes relativo al final del año previo. Los valores de 1 a 12 referencian los meses del calendario normal del año en cuestión. Los valores menores que 1 (incluyendo valores negativos) referencian los meses del año previo en orden inverso, por lo que 0 es Diciembre, -1 es Noviembre, etc. Los valores mayores que 12 referencian el mes apropiado en el/los año/s siguiente/s.

day

El número del día relativo al final del mes previo. Los valores del 1 al 28, 29, 30 o 31 (dependiendo del mes) referencian los días normales del mes relevante. Los valores menores que 1 (incluyendo valores negativos) referencian los días del mes previo por lo que 0 es el último día del mes previo, -1 es el día anterior a ese, etc. Los valores mayores que el número de días del mes relevante referencian el día apropiado en el/los mes/es siguiente/s.

year

El número del año, puede ser un valor de dos o cuatro dígitos, con valores entre 0-69 mapeados a 2000-2069 y 70-100 a 1970-2000. En sistemas donde time_t es un entero con signo de 32 bits, como es lo más normal hoy en día, el rango válido para year es entre 1901 y 2038. Sin embargo, antes de PHP 5.1.0 este rango estaba limitado desde 1970 a 2038 en algunos sistemas (p.ej. Windows).

is_dst

Este parámetro se puede establecer a 1 si el instante está durante el horario de verano (DST), 0 si no, o -1 (por omisión) si no se sabe si el instante está durante el horario de verano. Si no se sabe, PHP lo intentará calcular por sí mismo. Esto puede causar resultados inesperados (pero no incorrectos). Algunas veces no son válidos si DST está habilitado en el sistema donde se ejecuta PHP o is_dst está establecido a 1. Si DST está habilitado a, p.ej. 2:00, todas las horas entre las 2:00 y las 3:00 no son válidas y mktime() devuelve un valor indefinido (normalmente negativo). Algunos sistemas (p.ej. Solaris 8) habilitan DST a la medianoche por lo que la hora 0:30 del día, cuando DST está habilitado, es evaluada como 23:30 del día anterior.

Nota:

A partir de PHP 5.1.0, este parámetro se volvió obsoleto. Como resultado, se pueden usar en su lugar las nuevas características de manejo de zonas horarias.

Valores devueltos

mktime() devuelve la marca de tiempo Unix de los argumentos dados. Si los argumentos no son válidos, la función devuelve FALSE (antes de PHP 5.1 devolvía -1).

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.3.0 mktime() ahora lanza un aviso de tipo E_DEPRECATED si se usa el parámetro is_dst.
5.1.0 El parámetro is_dst se volvió obsoleto. Hacía que la funcion devolviese FALSE si se pruducía un error, en vez de -1. Arreglada la función para que acepte el año, mes y día pasados como cero.
5.1.0 Cuando se hace la llamada sin argumento, mktime() lanza un aviso E_STRICT. Use la función time() en su lugar.
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Ejemplo #1 Ejemplo básico de mktime()

<?php
// Establecer la zona horaria predeterminada a usar. Disponible desde PHP 5.1
date_default_timezone_set('UTC');

// Imprime: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

// Imprime algo como: 2006-04-05T01:02:03+00:00
echo date('c'mktime(123452006));
?>

Ejemplo #2 Ejemplo de mktime()

mktime() es útil para hacer que las fechas sean aritméticas y válidas, ya que calculará automáticamente el valor correcto para las entradas que estén fuera de rango. Por ejemplo, cada una de las líneas siguientes producirá la cadena "Jan-01-1998".

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Ejemplo #3 El último día del mes

El último día de cualquier mes dado se puede expresar como el día "0" del mes siguiente, no el día -1. Los dos ejemplos siguientes producirán la cadena "El último día en Feb 2000 es: 29".

<?php
$último_día 
mktime(000302000);
echo 
strftime("El último día en Feb 2000 es: %d"$último_día);
$último_día mktime(0004, -312000);
echo 
strftime("El último día en Feb 2000 es: %d"$último_día);
?>

Notas

Precaución

Antes de PHP 5.1.0, las marcas de tiempo negativas no estaban soportadas bajo ninguna versión de Windows conocida, y tampoco en otros sistemas. Por lo tanto el rango de años válidos estaba limitado desde 1970 hasta 2038.

Ver también

  • checkdate() - Validar una fecha gregoriana
  • gmmktime() - Obtener la marca de tiempo Unix para una fecha GMT
  • date() - Dar formato a la fecha/hora local
  • time() - Devuelve la fecha Unix actual



strftime

(PHP 4, PHP 5)

strftimeFormatea una fecha/hora local según la configuración regional

Descripción

string strftime ( string $format [, int $timestamp = time() ] )

Formatea una fecha/hora local según la configuración regional. Los nombres del mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados a la configuración regional local establecida con setlocale().

No todos los especificadores de conversión están soportados por su biblioteca C, en cuyo caso no serán soportados por la fucnión strftime() de PHP. Adicionalmente, no todas las plataformas soportan marcas de tiempo negativas, por lo que el rango de fechas puede estar limitado a fechas que no sean anteriores a la época Unix. Eso significa que %e, %T, %R y, %D (y posiblemente otros) - así como las fechas anteriores al 1 Ene, 1970 - no funcionarán en Windows, en algunas distribucioes de Linux, y en otros pocos sistemas operativos. Para sistemas Windows se puede encontrar una visión general de los especificadores de conversión soportados en » MSDN.

Parámetros

format

Los siguientes caracteres están reconocidos en el parámetro de cadena format
format Descripción Ejemplo de valores devueltos
Día --- ---
%a Una representación textual abreviada del día Sun hasta Sat
%A Una representación textual completa del día Sunday hsata Saturday
%d El día del mes con dos dígitos (con ceros iniciales) 01 a 31
%e El día del mes, con un espacio precediendo a los dígitos simples. No está implementado como está descrito en Windows. Véase más abajo para más información. 1 a 31
%j Día del año, 3 dígitos con ceros iniciales 001 a 366
%u Representación numérica ISO-8601 del día de la semana 1 (para Lunes) hasta 7 (para Domingo)
%w Representación numérica del día de la semana 0 (para Domingo) hasta 6 (para Sábado)
Semana --- ---
%U Número de semana del año dado, comenzando con el primer Domingo como la primera semana 13 (para la 13ª semana completa del año)
%V Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana 01 hasta 53 (donde 53 cuenta para una semana solapada)
%W Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana 46 (para la 46ª semana del año comenzando con un Lunes)
Mes --- ---
%b Nombre del mes abreviado, basado en la configuración regional Jan hasta Dec
%B Nombre del mes completo, basado en la configuración regional January hasta December
%h Nombre del mes abreviado, basado en la configuración regional (un alias de %b) Jan hasta Dec
%m Representación de dos dígitos del mes 01 (para Enero) hasta 12 (para Diciembre)
Año --- ---
%C Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer) 19 para el Siglo XX
%g Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V) Ejemplo: 09 para la semana del 6 de Enero de 2009
%G La versión de cuatro dígitos completa de %g Ejemplo: 2008 para la semana del 3 de Enero de 2009
%y Representación de dos dígitos del año Ejemplo: 09 para 2009, 79 para 1979
%Y Representación de cuatro dígitos del año Ejemplo: 2038
Hora --- ---
%H Representación de dos dígitos de la hora en formato de 24 horas 00 hasta 23
%I Representación de dos dígitos de la hora en formato de 12 horas 01 hasta 12
%l ('L' minúscula) La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples 1 hasta 12
%M Representación de dos dígitos de los minutos 00 hasta 59
%p 'AM' o 'PM' en MAYÚSCULAS basados en la hora dada Ejemplo: AM para 00:31, PM para 22:23
%P 'am' o 'pm' en minúsculas basados en la hora dada Ejemplo: am para 00:31, pm para 22:23
%r Lo mismo que "%I:%M:%S %p" Ejemplo: 09:34:17 PM para 21:34:17
%R Lo mismo que "%H:%M" Ejemplo: 00:35 para 12:35 AM, 16:44 para 4:44 PM
%S Representación de dos dígitos de los segundos 00 hasta 59
%T Lo mismo que "%H:%M:%S" Ejemplo: 21:34:17 para 09:34:17 PM
%X Representación preferida de la hora basda en la configuración regional, sin la fecha Ejemplo: 03:59:16 o 15:59:16
%z El índice de la zona horaria de UTC o la abreviatura (depende del sistema operativo) Ejemplo: -0500 o EST para Hora del Este
%Z La opción de índice/abreviatura de la zona horaria NO dada por %z (depende del sistema operativo) Ejemplo: -0500 o EST para Hora del Este
Marcas de Fecha y Hora --- ---
%c Marca preferida de la fecha y hora basadas en la configuración regional Ejemplo: Tue Feb 5 00:45:10 2009 para el 5 de Febrero de 2009 a las 12:45:10 AM
%D Lo mismo que "%m/%d/%y" Ejemplo: 02/05/09 para el 5 de Febrero de 2009
%F Lo mismo que "%Y-%m-%d" (normalmente usado en las marcas de fecha de bases de datos) Ejemplo: 2009-02-05 para el 5 de Febrero de 2009
%s Marca de tiempo del momento de la Época Unix (lo mismo que la función time()) Ejemplo: 305815200 para el 10 de Septiembre de 1979 08:40:00 AM
%x Representación preferida de la fecha basda en la configuración local, sin la hora Ejemplo: 02/05/09 para el 5 de Febrero de 2009
Miscelánea --- ---
%n Un carácter de nueva línea ("\n") ---
%t Un carácter de tabulación ("\t") ---
%% Un carácter literal de porcentaje ("%") ---

La longitud máxima de este parámetro es de 1023 caracteres.

Advertencia

A diferencia de ISO-9899:1999, Sun Solaris comienza con el Domingo como 1. Como resultado, %u puede no funcionar como está descrito en este manual.

Advertencia

Solamente Windows: El modificador %e no está soportado en la implementación de Windows de esta función. Para obtener este valor se puede usar en su lugar el modificador %#d. El ejemplo de abajo ilustra cómo escribir una función compatible multiplataforma.

Advertencia

Solamente Mac OS X: El modificador %P no está soportado en la implementación de Mac OS X de esta función.

timestamp

El parámetro opcional timestamp es una marca de tiempo Unix de tipo integer que por defecto es la hora local si no se proporciona ningún valor a timestamp. En otras palabras, es por defecto el valor de la función time().

Valores devueltos

Devuelve una cadena formateada según format usando el parámetro timestamp dado o el momento actual local si no se da la marca de tiempo. Los nombres del mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados a la configuración regional local establecida con setlocale().

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Ya que la salida depende de la biblioteca C subyacente, algunos especificadores de conversión no están soportados. En Windows, proporcionar especificadores de conversión desconocidos resultará en 5 mensajes E_WARNING y devolverá FALSE. En otros sistemas operativos puede no obtenerse ningún mensaje E_WARNING y la salida contener los especificadores de conversión no convertidos.

Historial de cambios

Versión Descripción
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

Ejemplos

Este ejemplo funcionará si tiene instalada en su sistema la configuración regional respectiva.

Ejemplo #1 Ejemplos de configuraciones regionales con strftime()

<?php
setlocale
(LC_TIME"C");
echo 
strftime("%A");
setlocale(LC_TIME"fi_FI");
echo 
strftime(" en Finlandés es %A,");
setlocale(LC_TIME"fr_FR");
echo 
strftime(" en Francés %A y");
setlocale(LC_TIME"de_DE");
echo 
strftime(" en Alemán %A.\n");
?>

Ejemplo #2 Ejemplo de número de semana con ISO 8601:1988

<?php
/*     Diciembre 2002 / Enero 2003
ISO    L   M   X   J   V   S   D
---   ----------------------------
51     16  17  18  19  20  21  22
52     23  24  25  26  27  28  29
1      30  31   1   2   3   4   5
2       6   7   8   9  10  11  12
3      13  14  15  16  17  18  19   */

// Imprime: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/28/2002")) . "\n";

// Imprime: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/30/2002")) . "\n";

// Imprime: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Imprime: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";



/*     Diciembre 2004 / Enero 2005
ISO    L   M   X   J   V   S   D
---   ----------------------------
51     13  14  15  16  17  18  19
52     20  21  22  23  24  25  26
53     27  28  29  30  31   1   2
1       3   4   5   6   7   8   9
2      10  11  12  13  14  15  16   */

// Imprime: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Imprime: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Imprime: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Imprime: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

Ejemplo #3 Ejemplo compatible de multi-plataforma usando del modificador %e

<?php

// Jan 1: resulta en: '%e%1%' (%%, e, %%, %e, %%)
$format '%%e%%%e%%';

// Comprobación para Windows para hallar y remplazar el 
// modificador %e adecuadamente
// el modificador %e si existen en el formato
if (strtoupper(substr(PHP_OS03)) == 'WIN') {
    
$format preg_replace('#(?<!%)((?:%%)*)%e#''\1%#d'$format);
}

echo 
strftime($format);
?>

Ejemplo #4 Mostrar todos los formatos conocidos y desconocidos.

<?php
// Describe los formatos.
$strftimeFormats = array(
    
'A' => 'Una representación textual completa del día',
    
'B' => 'Nombre del mes completo, basado en la configuración regional',
    
'C' => 'Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer)',
    
'D' => 'Lo mismo que "%m/%d/%y"',
    
'E' => '',
    
'F' => 'Lo mismo que "%Y-%m-%d"',
    
'G' => 'La versión de cuatro dígitos completa de %g',
    
'H' => 'Representación de dos dígitos de la hora en formato de 24 horas',
    
'I' => 'Representación de dos dígitos de la hora en formato de 12 horas',
    
'J' => '',
    
'K' => '',
    
'L' => '',
    
'M' => 'Representación de dos dígitos de los minutos',
    
'N' => '',
    
'O' => '',
    
'P' => ''am' o 'pm' en minúsculas basados en la hora dada',
    
'Q' => '',
    
'R' => 'Lo mismo que "%H:%M',
    
'S' => 'Representación de dos dígitos de los segundos',
    
'T' => 'Lo mismo que "%H:%M:%S"',
    
'U' => 'Número de semana del año dado, comenzando con el primer Domingo como la primera semana',
    
'V' => 'Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana',
    
'W' => 'Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana',
    
'X' => 'Representación preferida de la hora basda en la configuración regional, sin la fecha',
    
'Y' => 'Representación de cuatro dígitos del año',
    
'Z' => 'La opción de índice/abreviatura de la zona horaria NO dada por %z (depende del sistema operativo)',
    
'a' => 'Una representación textual abreviada del día',
    
'b' => 'Nombre del mes abreviado, basado en la configuración regional',
    
'c' => 'Marca preferida de la fecha y hora basadas en la configuración regional',
    
'd' => 'El día del mes con dos dígitos (con ceros iniciales)',
    
'e' => 'El día del mes, con un espacio precediendo a los dígitos simples',
    
'f' => '',
    
'g' => 'Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V)',
    
'h' => 'Nombre del mes abreviado, basado en la configuración regional (un alias de %b)',
    
'i' => '',
    
'j' => 'Día del año, 3 dígitos con ceros iniciales',
    
'k' => '',
    
'l' => 'La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples',
    
'm' => 'Representación de dos dígitos del mes',
    
'n' => 'Un carácter de nueva línea ("\n")',
    
'o' => '',
    
'p' => ''AM' o 'PM' en MAYÚSCULAS basados en la hora dada',
    
'q' => '',
    
'r' => 'Lo mismo que "%I:%M:%S %p"',
    
's' => 'Marca de tiempo del momento de la Época Unix',
    
't' => 'Un carácter de tabulación ("\t")',
    
'u' => 'Representación numérica ISO-8601 del día de la semana',
    
'v' => '',
    
'w' => 'Representación numérica del día de la semana',
    
'x' => 'Representación preferida de la fecha basda en la configuración local, sin la hora',
    
'y' => 'Representación de dos dígitos del año',
    
'z' => 'El índice de la zona horaria de UTC o la abreviatura (depende del sistema operativo)',
    
'%' => 'Un carácter de porcentaje literal ("%")',
);

// Resultados.
$strftimeValues = array();

// Evalúa los formatos, mientras suprime cualquier error.
foreach($strftimeFormats as $format => $description){
    if (
False !== ($value = @strftime("%{$format}"))){
        
$strftimeValues[$format] = $value;
    }
}

// Encuentra el valor más largo.
$maxValueLength max(array_map('strlen'$strftimeValues));

// Reporta los formatos conocidos.
foreach($strftimeValues as $format => $value){
    echo 
"Formato conocido : '{$format}' = "str_pad("'{$value}'"$maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}

// Reporta los formatos desconocidos.
foreach(array_diff_key($strftimeFormats$strftimeValues) as $format => $description){
    echo 
"Formato desconocido : '{$format}'   "str_pad(' '$maxValueLength), ($description " ( {$description} )" ''), "\n";
}
?>

El resultado del ejemplo sería algo similar a:

Formato conocido   : 'A' = 'Friday'            ( Una representación textual completa del día )
Formato conocido   : 'B' = 'December'          ( Nombre del mes completo, basado en la configuración regional )
Formato conocido   : 'H' = '11'                ( Representación de dos dígitos de la hora en formato de 24 horas )
Formato conocido   : 'I' = '11'                ( Representación de dos dígitos de la hora en formato de 12 horas )
Formato conocido   : 'M' = '24'                ( Representación de dos dígitos de los minutos )
Formato conocido   : 'S' = '44'                ( Representación de dos dígitos de los segundos )
Formato conocido   : 'U' = '48'                ( Número de semana del año dado, comenzando con el primer Domingo como la primera semana )
Formato conocido   : 'W' = '48'                ( Una representación numérica de la semana del año, comenzando con el primer Domingo como la primera semana )
Formato conocido   : 'X' = '11:24:44'          ( Representación preferida de la hora basda en la configuración regional, sin la fecha )
Formato conocido   : 'Y' = '2010'              ( Representación de cuatro dígitos del año )
Formato conocido   : 'Z' = 'GMT Standard Time' ( La opción de índice/abreviatura de la zona horaria NO dada por %z (depende del sistema operativo) )
Formato conocido   : 'a' = 'Fri'               ( Una representación textual abreviada del día )
Formato conocido   : 'b' = 'Dec'               ( Nombre del mes abreviado, basado en la configuración regional )
Formato conocido   : 'c' = '12/03/10 11:24:44' ( Marca preferida de la fecha y hora basadas en la configuración regional )
Formato conocido   : 'd' = '03'                ( El día del mes con dos dígitos (con ceros iniciales) )
Formato conocido   : 'j' = '337'               ( Día del año, 3 dígitos con ceros iniciales )
Formato conocido   : 'm' = '12'                ( Representación de dos dígitos del mes )
Formato conocido   : 'p' = 'AM'                ( 'AM' o 'PM' en MAYÚSCULAS basados en la hora dada )
Formato conocido   : 'w' = '5'                 ( Representación numérica del día de la semana )
Formato conocido   : 'x' = '12/03/10'          ( Representación preferida de la fecha basda en la configuración local, sin la hora )
Formato conocido   : 'y' = '10'                ( Representación de dos dígitos del año )
Formato conocido   : 'z' = 'GMT Standard Time' ( El índice de la zona horaria de UTC o la abreviatura (depende del sistema operativo) )
Formato conocido   : '%' = '%'                 ( Un carácter de porcentaje literal ("%") )
Formato desconocido : 'C'                       ( Representación de dos dígitos del siglo (año dividido entre 100, truncado a un integer) )
Formato desconocido : 'D'                       ( Lo mismo que "%m/%d/%y" )
Formato desconocido : 'E'
Formato desconocido : 'F'                       ( Lo mismo que "%Y-%m-%d" )
Formato desconocido : 'G'                       ( La versión de cuatro dígitos completa de %g )
Formato desconocido : 'J'
Formato desconocido : 'K'
Formato desconocido : 'L'
Formato desconocido : 'N'
Formato desconocido : 'O'
Formato desconocido : 'P'                       ( 'am' o 'pm' en minúsculas basados en la hora dada )
Formato desconocido : 'Q'
Formato desconocido : 'R'                       ( Lo mismo que "%H:%M )
Formato desconocido : 'T'                       ( Lo mismo que "%H:%M:%S" )
Formato desconocido : 'V'                       ( Número de semana ISO-8601:1988 del año dado, comenzando con la primera semana del año con al menos 4 días de semana, con Lunes siendo el principio de la semana )
Formato desconocido : 'e'                       ( El día del mes, con un espacio precediendo a los dígitos simples )
Formato desconocido : 'f'
Formato desconocido : 'g'                       ( Representación de dos dígitos del año por el estándar ISO-8601:1988 (véase %V) )
Formato desconocido : 'h'                       ( Nombre del mes abreviado, basado en la configuración regional (un alias de %b) )
Formato desconocido : 'i'
Formato desconocido : 'k'
Formato desconocido : 'l'                       ( La hora en formato de 12 horas, con un espacio precediendo a los dígitos simples )
Formato desconocido : 'n'                       ( Un carácter de nueva línea ("\n") )
Formato desconocido : 'o'
Formato desconocido : 'q'
Formato desconocido : 'r'                       ( Lo mismo que "%I:%M:%S %p" )
Formato desconocido : 's'                       ( Marca de tiempo del momento de la Época Unix )
Formato desconocido : 't'                       ( Un carácter de tabulación ("\t") )
Formato desconocido : 'u'                       ( Representación numérica ISO-8601 del día de la semana )
Formato desconocido : 'v'

Notas

Nota: %G y %V, que están basados en el número de semana ISO 8601:1988, pueden dar resultados inesperados (aunque correctos) si el sistema numérico no se entendió perfectamente. Véase los ejemplos de %V en esta página del manual.

Ver también



strptime

(PHP 5 >= 5.1.0)

strptime Analiza una fecha/hora generada con strftime()

Descripción

array strptime ( string $date , string $format )

strptime() devuelve una matriz con la fecha date analizada, o FALSE si se produjo un error.

Los nombres del mes y del día de la semana y otras cadenas dependientes del lenguaje están subordinados a la configuración regional local establecida con setlocale() (LC_TIME).

Parámetros

date (string)

La cadena a analizar (p.ej. devuelta por strftime()).

format (string)

El formato usado en date (p.ej. el mismo que el usado en strftime()). Observe que algunas de las opciones de formato disponibles en strftime() pueden no tener ningún efecto en strptime(); el subconjunto exacto que está soportado variará en base al sistema operativo y a la biblioteca de C que esté en uso.

Para más información sobre las opciones de formato, lea la página de strftime().

Valores devueltos

Devuelve una matriz o FALSE en caso de error.

Los siguietens parámetros son devueltos en la matriz
parámetros Descripción
"tm_sec" Segundos después del minuto (0-61)
"tm_min" Minutos después de la hora (0-59)
"tm_hour" Hora desde la medianoche (0-23)
"tm_mday" Día del mes (1-31)
"tm_mon" Meses desde Enero (0-11)
"tm_year" Años desde 1900
"tm_wday" Días desde el Domingo (0-6)
"tm_yday" Días desde el 1 de Enero (0-365)
"unparsed" la parte de date que no fue reconocida usando el formato format especificado

Ejemplos

Ejemplo #1 Ejemplo de strptime()

<?php
$formato 
'%d/%m/%Y %H:%M:%S';
$strf strftime($formato);

echo 
"$strf\n";

print_r(strptime($strf$formato));
?>

El resultado del ejemplo sería algo similar a:

03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)

Notas

Nota: Esta función no está implementada en plataformas Windows.

Nota:

Internamente, esta función llama a la función strptime() proporcionada por la biblioteca C del sistema. Esta función puede presentar diferencias notables de comportamiento en diferentes sistemas operativos. Se recomienda el uso de date_parse_from_format(), a la cuál no le afectan estas cosas, en PHP 5.3.0 y posterior.

Nota:

"tm_sec" incluye segundos intercalares (actualmente hasta 2 por año). Para más información acerca de los segundos intercalares, vea el » artículo de Wikipedia sobre segundos intercalares.

Nota:

Antes de PHP 5.2.0, esta función podía devolver un comportamiento indefinido. En particular, las entradas "tm_sec", "tm_min" y "tm_hour" devolverían valores indefinidos.

Ver también



strtotime

(PHP 4, PHP 5)

strtotimeConvierte una descripción de fecha/hora textual en Inglés a una fecha Unix

Descripción

int strtotime ( string $time [, int $now = time() ] )

Esta función espera que se proporcione una cadena que contenga un formato de fecha en Inglés US e intentará convertir ese formato a una fecha Unix (el número de segundos desde el 1 de Enero del 1970 00:00:00 UTC), relativa a la marca de tiempo dada en now, o la marca de tiempo actual si now no se proporciona.

Cada parámetro de esta función utiliza la zona horaria predeterminada a menos que se especifique una en ese parámetro. Se ha de tener cuidado de no usar diferentes zonas horarias en cada parámetro a memos que sea esa la intención. Véase la función date_default_timezone_get() para las diferentes maneras de definir la zona horaria predeterminada.

Parámetros

time

Una cadena de fecha/hora. Los formatos válidos son explicados en Formatos de fecha y hora.

now

La marca de tiempo que se usa como base para el cálculo de las fechas relativas.

Valores devueltos

Devuelve una marca de tiempo si se tuvo éxito, FALSE si no. Antes de PHP 5.1.0, esta funcion devolvía -1 si fallaba.

Errores/Excepciones

Cada vez que se llame a la función date/time se generará un E_NOTICE si la zona horaria no es válida, y/o un mensaje E_STRICT o E_WARNING si se usa la configuración del sistema o la variable global TZ. Vea también date_default_timezone_set()

Historial de cambios

Versión Descripción
5.3.0 Antes de PHP 5.3.0, 24:00 no era un formato válido y strtotime() devolvía FALSE.
5.2.7 En PHP 5 anterior a 5.2.7, las peticiones de una incidencia de un día de la semana dado en un mes donde ese día de la semana era el primer día del mes, añadía incorrectamente una semana a la marca de tiempo devuelta. Esto ha sido corregido en 5.2.7 y versiones posteriores.
5.1.0 Ahora devuelve FALSE si falla, en vez de -1.
5.1.0

Ahora muestra E_STRICT y E_NOTICE cuando ocurren errores con zonas horarias.

5.0.2 En PHP 5 hasta 5.0.2, "now" y otros momentos relativos son computados erróneamente como la medianoche de hoy. Esto difiere de otras versiones donde es computado como el momento actual.
5.0.0 Los microsegundos comenzaron a estar permitidos, pero son ignorados.
4.4.0 En versiones de PHP anteriores a 4.4.0, "next" es computado incorrectamente como +2. Una solución típica para esto es usar "+1".

Ejemplos

Ejemplo #1 Un ejemplo de strtotime()

<?php
echo strtotime("now"), "\n";
echo 
strtotime("10 September 2000"), "\n";
echo 
strtotime("+1 day"), "\n";
echo 
strtotime("+1 week"), "\n";
echo 
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Ejemplo #2 Comprobar si falla

<?php
$cadena 
'No Válida';

// antes de PHP 5.1.0 se debería de comparar con -1, en vez de con false
if (($timestamp strtotime($cadena)) === false) {
    echo 
"La cadena ($cadena) es falsa";
} else {
    echo 
"$cadena == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>

Notas

Nota:

Si el número del año se especifica en un formato de dos dígitos, los valores entre 00-69 hacen referencia a 2000-2069 y 70-99 a 1970-1999. Vea las notas de abajo para las posibles diferencias en sistemas de 32 bit (las fechas posibles podrían terminar en 2038-01-19 03:14:07).

Nota:

El rango válido de una marca de tiempo es típicamente desde Fri, 13 Dec 1901 20:45:54 UTC a Tue, 19 Jan 2038 03:14:07 UTC. (Estas son las fechas que se corresponden con los valores máximo y mínimo de un entero con signo de 32 bit.) Adicionalmente, no todas las plataformas soportan marcas de tiempo negativas, por lo tanto el rango de la fecha puede estar limitado a fechas no anteriores a la época Unix. Esto significa que, p.ej., las fechas anteriores al 1 de Enero del 1970 no funcionarán en Windows, en algunas distribuciones de Linux, y en otros pocos sistemas operativos. PHP 5.1.0 y versiones posteriores superan esta limitación.

Para PHP versión 64-bit, el rángo válido de fechas es en la práctica infinito, ya que 64 bits pueden representar aproximadamente 293.000 millones de años en cualquier dirección.

Nota:

Las fechas en los formatos m/d/y o d-m-y no son ambiguas al observar el separador entre los distintos componentes: si el separador es una barra (/), se asume el formato americano m/d/y; mientras que si el separador es un guión (-) o un punto (.), se asume el formato europeo d-m-y.

Para evitar esta ambigüedad potencial es mejor usar fechas ISO 8601 (YYYY-MM-DD) o DateTime::createFromFormat() cuando sea posible.

Nota:

No es aconsejable utililzar esta función para operaciones matemáticas. Es mejor usar los métodos DateTime::add() y DateTime::sub() de PHP 5.3 y posterior, o el método DateTime::modify() de PHP 5.2.

Ver también



time

(PHP 4, PHP 5)

timeDevuelve la fecha Unix actual

Descripción

int time ( void )

Devuelve el momento actual medido como el número de segundos desde la Época Unix (1 de Enero de 1970 00:00:00 GMT).

Ejemplos

Ejemplo #1 Ejemplo de time()

<?php
$semana_sig 
time() + (24 60 60);
                   
// 7 días; 24 horas; 60 minutos; 60 segundos
echo 'Ahora:       'date('Y-m-d') ."\n";
echo 
'Semana Siguiente: 'date('Y-m-d'$semana_sig) ."\n";
// o usar strtotime():
echo 'Semana Siguiente: 'date('Y-m-d'strtotime('+1 week')) ."\n";
?>

El resultado del ejemplo sería algo similar a:

Now:       2005-03-30
Next Week: 2005-04-06
Next Week: 2005-04-06

Notas

Sugerencia

La marca de tiempo del inicio de la petición está disponible en $_SERVER['REQUEST_TIME'] desde PHP 5.1.

Ver también

  • date() - Dar formato a la fecha/hora local
  • microtime() - Devuelve la fecha Unix actual con microsegundos



timezone_abbreviations_list

(PHP 5 >= 5.2.0)

timezone_abbreviations_listAlias de DateTimeZone::listAbbreviations()

Descripción

Esta función es un alias de: DateTimeZone::listAbbreviations()



timezone_identifiers_list

(PHP 5 >= 5.2.0)

timezone_identifiers_listAlias de DateTimeZone::listIdentifiers()

Descripción

Esta función es un alias de: DateTimeZone::listIdentifiers()



timezone_location_get

(PHP 5 >= 5.3.0)

timezone_location_getAlias de DateTimeZone::getLocation()

Descripción

Esta función es un alias de: DateTimeZone::getLocation()



timezone_name_from_abbr

(PHP 5 >= 5.1.3)

timezone_name_from_abbrDevuelve el nombre de la zona horaria desde su abreviatura

Descripción

string timezone_name_from_abbr ( string $abbr [, int $gmtOffset = -1 [, int $isdst = -1 ]] )

Parámetros

abbr

La abreviatura de la zona horaria.

gmtOffset

Índice de GMT en segundos. Por defecto es -1 lo que significa que la primera zona horaria buscada que se corresponda con abbr es devuelta. De otro modo se busca el índice exacto y, sólo si no se encuentra, se devuelve la priemra zona horaria con cualquier índice.

isdst

Indicador del horario de verano. Por defecto a -1, lo que significa que si la zona horaria tiene horario de verano no se toma encosideración en la búsqueda. Si está establecido a 1, entonces se asuma que el parámetro gmtOffset es un índice con el horario de verano en efecto; si es 0, entonces se asume que gmtOffset es un índice sin horario de verano en efecto. Si abbr no existe, la zona horaria se busca únicamente mediante gmtOffset y isdst.

Valores devueltos

Devuelve el nombre de la zona horaria si se tuvo éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de timezone_name_from_abbr()

<?php
echo timezone_name_from_abbr("CET") . "\n";
echo 
timezone_name_from_abbr(""36000) . "\n";
?>

El resultado del ejemplo sería algo similar a:

Europe/Berlin
Europe/Paris

Ver también



timezone_name_get

(PHP 5 >= 5.2.0)

timezone_name_getAlias de DateTimeZone::getName()

Descripción

Esta función es un alias de: DateTimeZone::getName()



timezone_offset_get

(PHP 5 >= 5.2.0)

timezone_offset_getAlias de DateTimeZone::getOffset()

Descripción

Esta función es un alias de: DateTimeZone::getOffset()



timezone_open

(PHP 5 >= 5.2.0)

timezone_openAlias de DateTimeZone::__construct()

Descripción

Esta función es un alias de: DateTimeZone::__construct()



timezone_transitions_get

(PHP 5 >= 5.2.0)

timezone_transitions_getAlias de DateTimeZone::getTransitions()

Descripción

Esta función es un alias de: DateTimeZone::getTransitions()



timezone_version_get

(PHP 5 >= 5.3.0)

timezone_version_get Obtiene la versión de la base de datos timezonedb

Descripción

string timezone_version_get ( void )

Devuelve la versión actual de timezonedb.

Valores devueltos

Devuelve un string.

Ejemplos

Ejemplo #1 Obtener la versión de timezonedb

<?php
echo timezone_version_get();
?>

El resultado del ejemplo sería algo similar a:

2009.7


Tabla de contenidos



Formatos de Fecha y Hora soportados

Tabla de contenidos

Esta sección describe todos los diferentes formatos que entiende el analizador de strtotime(), DateTime y date_create(). Los formatos están agrupados por secciones. En la mayoría de los casos los formatos de diferentes secciones se pueden usar en la misma cadena de fecha/hora. Se dan ejemplos por cada uno de los formatos soportados, así como una descripción del formato. En los formatos, los caracteres entre comillas simples son insensibles a mayúsculas-minúsculas, ('t' podría ser t o T), los caracteres entre comillas dobles son sensibles a mayúsculas-minúsculas ("T" es solamente T).


Formatos de Hora

Símbolos Usados
Descripción Formatos Ejemplos
fracción . [0-9]+ ".21342", ".85"
hh "0"?[1-9] | "1"[0-2] "04", "7", "12"
HH [01][0-9] | "2"[0-4] "04", "7", "19"
meridiano [AaPp] .? [Mm] .? [\0\t ] "A.m.", "pM", "am."
MM [0-5][0-9] "00", "12", "59"
II [0-5][0-9] "00", "12", "59"
espacio [ \t]  
zh (zona horaria - en inglés tz) "("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+ "CEST", "Europe/Amsterdam", "America/Indiana/Knox"
corrección zh "GMT"? [+-] hh ":"? MM? "+0400", "GMT-07:00", "-07:00"
Notación de 12 Horas
Descripción Formato Ejemplos
Sólo hora, con meridiano hh espacio? meridiano "4 am", "5PM"
Horas y minutos, con meridiano hh [.:] MM espacio? meridiano "4:08 am", "7:19P.M."
Horas, minutos y segundos, con meridiano hh [.:] MM [.:] II espacio? meridiano "4:08:37 am", "7:19:19P.M."
MS SQL (Horas, minutos, segundos y fracción con meridiano), sólo PHP 5.3 y posterior hh ":" MM ":" II [.:] [0-9]+ meridiano "4:08:39:12313am"
Notación de 24 Horas
Descripción Formato Ejemplos
Horas y minutos 't'? HH [.:] MM "04:08", "19.19", "T23:43"
Horas y minutos, sin dos puntos 't'? HH MM "0408", "t1919", "T2343"
Horas, minutos y segundos 't'? HH [.:] MM [.:] II "04.08.37", "t19:19:19"
Horas, minutos y segundos, sin dos puntos 't'? HH MM II "040837", "T191919"
Horas, minutos, segundos y zona horaria 't'? HH [.:] MM [.:] II espacio? ( corrección zh | zh ) "040837CEST", "T191919-0700"
Horas, minutos, segundos y fracción 't'? HH [.:] MM [.:] II fracción "04.08.37.81412", "19:19:19.532453"
Información de zona horaria zh | corrección zh "CEST", "Europe/Amsterdam", "+0430", "GMT-06:00"


Formatos de Fecha

Símbolos Usados
Descripción Formato Ejemplos
sufijos de día (en inglés) "st" | "nd" | "rd" | "th"  
dd ([0-2]?[0-9] | "3"[01]) sufijos de día? "7th", "22nd", "31"
DD "0" [0-9] | [1-2][0-9] | "3" [01] "07", "31"
m 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' | 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' | "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII"  
M 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'  
mm "0"? [0-9] | "1"[0-2] "0", "04", "7", "12"
MM "0" [0-9] | "1"[0-2] "00", "04", "07", "12"
y [0-9]{1,4} "00", "78", "08", "8", "2008"
yy [0-9]{2} "00", "08", "78"
YY [0-9]{4} "2000", "2008", "1978"
Notaciones Localizadas
Descripción Formato Ejemplos
Mes y día americanos mm "/" dd "5/12", "10/27"
Mes, día y año americanos mm "/" dd "/" y "12/22/78", "1/17/2006", "1/17/6"
Año de cuatro dígitos, mes y día con baras YY "/" mm "/" dd "2008/6/30", "1978/12/22"
Año de cuatro dígitos y mes (GNU) YY "-" mm "2008-6", "2008-06", "1978-12"
Año, mes y día con guiones y "-" mm "-" dd "2008-6-30", "78-12-22", "8-6-21"
Día, mes y año de cuatro dígitos, con puntos, tabulaciones o guiones dd [.\t-] mm [.-] YY "30-6-2008", "22.12\t1978"
Día, mes y año de dos dígitos, con puntos o tabulaciones dd [.\t] mm "." yy "30.6.08", "22\t12\t78"
Día, mes textual y año dd ([ \t.-])* m ([ \t.-])* y "30-June 2008", "22DEC78", "14 III 1879"
Mes textual y año de cuatro dígitos (Día se restablece a 1) m ([ \t.-])* YY "June 2008", "DEC1978", "March 1879"
Año de cuatro dígitos y mes textual (Día se restablece a 1) YY ([ \t.-])* m "2008 June", "1978-XII", "1879.MArCH"
Mes textual, día y año m ([ .\t-])* dd [,.stndrh\t ]+ y "July 1st, 2008", "April 17, 1790", "May.9,78"
Mes textual y día m ([ .\t-])* dd [,.stndrh\t ]* "July 1st,", "Apr 17", "May.9"
Día y mes textual d ([ .\t-])* m "1 July", "17 Apr", "9.May"
Abreviatura de mes, día y año M "-" DD "-" y "May-09-78", "Apr-17-1790"
Año, abreviatura de mes y día y "-" M "-" DD "78-Dec-22", "1814-MAY-17"
Año (y sólo el año) YY "1978", "2008"
Mes textual (y sólo el mes) m "March", "jun", "DEC"
Notaciones ISO8601
Descripción Formato Ejemplos
Año, mes y día, de ocho dígitos YY MM DD "15810726", "19780417", "18140517"
Año de cuatro dígitos, mes y día con barras YY "/" MM "/" DD "2008/06/30", "1978/12/22"
Año de dos dígitos, mes y dís con barras yy "-" MM "-" DD "08-06-30", "78-12-22"
Año de cuatro dígitos con signo opcional, mes y día [+-]? YY "-" MM "-" DD "-0002-07-26", "+1978-04-17", "1814-05-17"

Nota:

Para los formatos y e yy, los años por debajo de 100 son tratados de manera especial cuando se usan los símbolos y o yy. Si el año cae en el rango de 0 (inclusive) a 69 (inclusive), se añade 2000. Si el año cae en el rango de 70 (inclusive) a 99 (inclusive) se añade entonces 1900. Esto significa que "00-01-01" se interpreta como "2000-01-01".

Nota:

El formato "Día, mes y año de dos dígitos, con puntos o tabulaciones" (dd [.\t] mm "." yy) solamente funciona con valores de años de 61 (inclusive) a 99 (inclusive) - fuera de esos años el formato de hora "HH [.:] MM [.:] SS" tiene precedencia.

Nota:

El formato "Año (y sólo el año)" solamente funciona si se encotró ya una cadena de hora -- de otro modo este formato es reconocido como HH MM.

Nota:

Es posible poner en exceso y en defecto los formatos dd y DD. Día 0 significa el último día del mes anterios, mientras en exceso empieza a contar desde el mes siguiente. Esto hace que "2008-08-00" equivalga a "2008-07-31" y "2008-06-31" sea equivalente a "2008-07-01" (junio tiene sólo 30 días).

También es posible poner en defecto los formatos mm y MM con el valor 0. Un valor de mes de 0 significa diciemebre del año anterior. Como ejemplo "2008-00-22" es equivalente a "2007-12-22".

Si se combinan los dos hechos anteriores y se ponen por defecto el día y el mes, sucede lo siguiente: "2008-00-00" primero se convierte a "2007-12-00" que después se convierte a "2007-11-30". Esto también sucede con la cadena "0000-00-00", que se transforma en "-0001-11-30" (el año -1 en el calendario ISO 8601, el cuál es 2 A.C. en el calendario gregoriano "proléptico").



Formatos Compuestos

Símbolos Usados
Descripción Formats Ejemplos
DD "0" [0-9] | [1-2][0-9] | "3" [01] "02", "12", "31"
día del año "00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6] "36"[0-6] "000", "012", "366"
fracción . [0-9]+ ".21342", ".85"
hh "0"?[1-9] | "1"[0-2] "04", "7", "12"
HH [01][0-9] | "2"[0-4] "04", "7", "19"
meridiano [AaPp] .? [Mm] .? [\0\t ] "A.m.", "pM", "am."
ii [0-5][0-9] "04", "8", "59"
II [0-5][0-9] "04", "08", "59"
M 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'  
MM [0-5][0-9] "00", "12", "59"
espacio [ \t]  
ss [0-5][0-9] "04", "8", "59"
SS [0-5][0-9] "04", "08", "59"
W "0"[1-9] | [1-4][0-9] | "5"[0-3] "05", "17", "53"
corrección zh "GMT"? [+-] hh ":"? MM? "+0400", "GMT-07:00", "-07:00"
YY [0-9]{4} "2000", "2008", "1978"
Notaciones Localizadas
Descripción Formato Ejemplos
Formato Log Común dd "/" M "/" YY : HH ":" II ":" SS espacio corrección zh "10/Oct/2000:13:55:36 -0700"
EXIF YY ":" MM ":" DD " " HH ":" II ":" SS "2008:08:07 18:11:31"
Año ISO con semana ISO YY "-"? "W" W "2008W27", "2008-W28"
Año ISO con semana a día ISO YY "-"? "W" W "-"? [0-7] "2008W273", "2008-W28-3"
MySQL YY "-" MM "-" DD " " HH ":" II ":" SS "2008-08-07 18:11:31"
PostgreSQL: Año con día del año YY "."? día del año "2008.197", "2008197"
SOAP YY "-" MM "-" DD "T" HH ":" II ":" SS fracción corrección zh? "2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00"
Fecha Unix "@" "-"? [0-9]+ "@1215282385"
XMLRPC YY MM DD "T" hh ":" II ":" SS "20080701T22:38:07", "20080701T9:38:07"
XMLRPC (Compacto) YY MM DD 't' hh II SS "20080701t223807", "20080701T093807"
WDDX YY "-" mm "-" dd "T" hh ":" ii ":" ss "2008-7-1T9:3:37"

Nota:

La "W" en los formatos "Año ISO con semana ISO" y "Año ISO con semana y día ISO" es sensible a mayúsculas-minúsculas, sólo se puede usar la "W" mayúscula.

La "T" en los formatos SOAP, XMRPC y WDDX es sensible a mayúsculas-minúsculas, sólo se puede usar la "T" mayúscula.

El formato "Unix Timestamp" establece la zona horaria a UTC.



Formatos Relativos

Símbolos Usados
Descripción Formato
nombre del día 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
texto de día 'weekday' | 'weekdays'
número [+-]?[0-9]+
ordinal 'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'
texto relativo 'next' | 'last' | 'previous' | 'this'
espacio [ \t]+
unidad (('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | texto de día
Notaciones Basadas en el Día
Formato Descripción Ejemplos
'yesterday' Medianoche de ayer "yesterday 14:00"
'midnight' La hora es establecida a 00:00:00  
'today' La hora es establecida a 00:00:00  
'now' Ahora - esto es simplemente ignorado  
'noon' La hora es establecida a 12:00:00 "yesterday noon"
'tomorrow' Medianoche de mañana  
'back of' hora 15 minutos después de la hora especificada "back of 7pm", "back of 15"
'front of' hora 15 minutos antes de la hora especificada "front of 5am", "front of 23"
'first day' ' of'? Esteblece el día al primer día del mes actual. Esta frase se usa mejor seguida de un nombre de mes. "first day of January 2008"
'last day' ' of'? Esteblece el día al último día del mes actual. Esta frase se usa mejor seguida de un nombre de mes. "last day of next month"
ordinal espacio nombre del día espacio 'of' Calcula el x-ésimo día de la semana del mes actual. "first sat of July 2008"
'last' espacio nombre del día espacio 'of' Calcula el último día de la semana del mes actual. "last sat of July 2008"
número espacio? (unidad | 'week') Trata elementos de hora relativos donde el valor es un número. "+5 weeks", "12 day", "-7 weekdays"
ordinal espacio unidad Trata elementos de hora relativos donde el valor es texto. "fifth day", "second month"
'ago' Anula todos los valores de los elementos de hora relativos encontrados anteriormente. "2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago ago"
nombre del día Avanza al siguiente día con este nombre. "Monday"
texto relativo espacio 'week' Trata el formato especial "weekday + last/this/next week". "Monday next week"

Nota:

Las declaraciones relativas son siempre procesadas después de las declaraciones no relativas. Esto hace que "+1 week july 2008" y "july 2008 +1 week" sean equivalentes.

Las excepciones a esta regla son: "yesterday", "midnight", "today", "noon" y "tomorrow". Téngase en cuenta que "tomorrow 11:00" y "11:00 tomorrow" son diferentes. Considerando la fecha de hoy como "July 23rd, 2008", el primero produce "2008-07-24 11:00" mientras que el segundo produce "2008-07-24 00:00". La razón de esto es que esas cinco declaraciones influyen directamente en el momento actual.

Nota:

Analice las siguiente observaciones cuando el día de la semana actual es el mismo que el día de la semana usado en la cadena de fecha/hora. Sin embargo, el día de la semana actual prodría haber sido (re-)calculado mediante partes no relativas de la cadena de fecha/hora.

  1. "nombre del día" no avanza a otro día. (Ejemplo: "Wed July 23rd, 2008" significa "2008-07-23").
  2. "número nombre del día" no avanza a otro día. (Ejemplo: "1 wednesday july 23rd, 2008" significa "2008-07-23").
  3. "número week nombre del día" añadirá primero el número de semanas, pero no avanzará a otro día. En este caso "número week" y "nombre del día" son dos bloques distintos. (Ejemplo: "+1 week wednesday july 23rd, 2008" significa "2008-07-30").
  4. "ordinal nombre del día" avanza a otro día. (Ejemplo "first wednesday july 23rd, 2008" significa "2008-07-30").
  5. "número week ordinal nombre del día" primero añadíra el número de semanas, y después avanzará a otro día. En este caso "número week" y "ordinal nombre del día" son dos bloques distintos. (Ejemplo: "+1 week first wednesday july 23rd, 2008" significa "2008-08-06").
  6. "ordinal nombre del día 'of' " no avanza a otro día. (Ejemplo: "first wednesday of july 23rd, 2008" significa "2008-07-02" ya que la frase específica con 'of' restablece el día del mes a '1' y el '23rd' aquí se ignora).

También observe que el "of" en "ordinal espacio nombre del día espacio 'of' " y "'last' espacio nombre del día espacio 'of' " hace algo especial.

  1. Establece el día del mes a 1.
  2. "ordinal nombre del día 'of' " no avanza a otro día. (Ejemplo: "first tuesday of july 2008" significa "2008-07-01").
  3. "ordinal nombre del día " avanza otro día. (Ejemplo: "first tuesday july 2008" significa "2008-07-08", véase también el punto 4 en la lista de arriba).
  4. "'last' nombre del día 'of' " toma el último nombre del día des mes actual. (Ejemplo: "last wed of july 2008" significa "2008-07-30")
  5. "'last' nombre del día" toma el último nombre del día desde el día actual. (Ejemplo: "last wed july 2008" significa "2008-06-25"; "july 2008" primero establece la fecha actual a "2008-07-01" y después "last wed" avanza al miércoles anterior, que es "2008-06-25").

Nota:

Los valores relativos al mes se calculan basándose en la longitud de los meses por que los que pasan. Un ejemplo sería "+2 month 2011-11-30", el cual produciría "2012-01-30". Esto es debido a que noviembre tiene 20 días de longitud, y diciembre tiene 31 días de longitud, produciendo un total de 61 días.




Listado de Timezones soportados

Tabla de contenidos

Aquí se podrá encontrar una lista completa de los timezones soportados por PHP, que están pensados para ser usados p.ej. date_default_timezone_set().

Nota: La versión más reciente de la base de datos de timezone se puede instalar vía PECL's » timezonedb.

Nota: Esta lista está basada en la versión de base de datos de zonas horarias 2012.3.


África

África
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara
Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau
Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca
Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti
Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare
Africa/Johannesburg Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali
Africa/Kinshasa Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda
Africa/Lubumbashi Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru
Africa/Mbabane Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena
Africa/Niamey Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome
Africa/Timbuktu Africa/Tripoli Africa/Tunis Africa/Windhoek  


América

América
America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina
America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy
America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan
America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion
America/Atikokan America/Atka America/Bahia America/Bahia_Banderas America/Barbados
America/Belem America/Belize America/Blanc-Sablon America/Boa_Vista America/Bogota
America/Boise America/Buenos_Aires America/Cambridge_Bay America/Campo_Grande America/Cancun
America/Caracas America/Catamarca America/Cayenne America/Cayman America/Chicago
America/Chihuahua America/Coral_Harbour America/Cordoba America/Costa_Rica America/Cuiaba
America/Curacao America/Danmarkshavn America/Dawson America/Dawson_Creek America/Denver
America/Detroit America/Dominica America/Edmonton America/Eirunepe America/El_Salvador
America/Ensenada America/Fort_Wayne America/Fortaleza America/Glace_Bay America/Godthab
America/Goose_Bay America/Grand_Turk America/Grenada America/Guadeloupe America/Guatemala
America/Guayaquil America/Guyana America/Halifax America/Havana America/Hermosillo
America/Indiana/Indianapolis America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Tell_City
America/Indiana/Vevay America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis America/Inuvik
America/Iqaluit America/Jamaica America/Jujuy America/Juneau America/Kentucky/Louisville
America/Kentucky/Monticello America/Knox_IN America/Kralendijk America/La_Paz America/Lima
America/Los_Angeles America/Louisville America/Lower_Princes America/Maceio America/Managua
America/Manaus America/Marigot America/Martinique America/Matamoros America/Mazatlan
America/Mendoza America/Menominee America/Merida America/Metlakatla America/Mexico_City
America/Miquelon America/Moncton America/Monterrey America/Montevideo America/Montreal
America/Montserrat America/Nassau America/New_York America/Nipigon America/Nome
America/Noronha America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem America/Ojinaga
America/Panama America/Pangnirtung America/Paramaribo America/Phoenix America/Port-au-Prince
America/Port_of_Spain America/Porto_Acre America/Porto_Velho America/Puerto_Rico America/Rainy_River
America/Rankin_Inlet America/Recife America/Regina America/Resolute America/Rio_Branco
America/Rosario America/Santa_Isabel America/Santarem America/Santiago America/Santo_Domingo
America/Sao_Paulo America/Scoresbysund America/Shiprock America/Sitka America/St_Barthelemy
America/St_Johns America/St_Kitts America/St_Lucia America/St_Thomas America/St_Vincent
America/Swift_Current America/Tegucigalpa America/Thule America/Thunder_Bay America/Tijuana
America/Toronto America/Tortola America/Vancouver America/Virgin America/Whitehorse
America/Winnipeg America/Yakutat America/Yellowknife    


Antártida

Antártida
Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Macquarie Antarctica/Mawson
Antarctica/McMurdo Antarctica/Palmer Antarctica/Rothera Antarctica/South_Pole Antarctica/Syowa
Antarctica/Vostok        


Ártico

Ártico
Arctic/Longyearbyen


Asia

Asia
Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr Asia/Aqtau
Asia/Aqtobe Asia/Ashgabat Asia/Ashkhabad Asia/Baghdad Asia/Bahrain
Asia/Baku Asia/Bangkok Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Calcutta Asia/Choibalsan Asia/Chongqing Asia/Chungking Asia/Colombo
Asia/Dacca Asia/Damascus Asia/Dhaka Asia/Dili Asia/Dubai
Asia/Dushanbe Asia/Gaza Asia/Harbin Asia/Hebron Asia/Ho_Chi_Minh
Asia/Hong_Kong Asia/Hovd Asia/Irkutsk Asia/Istanbul Asia/Jakarta
Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka Asia/Karachi
Asia/Kashgar Asia/Kathmandu Asia/Katmandu Asia/Kolkata Asia/Krasnoyarsk
Asia/Kuala_Lumpur Asia/Kuching Asia/Kuwait Asia/Macao Asia/Macau
Asia/Magadan Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia
Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Oral Asia/Phnom_Penh
Asia/Pontianak Asia/Pyongyang Asia/Qatar Asia/Qyzylorda Asia/Rangoon
Asia/Riyadh Asia/Saigon Asia/Sakhalin Asia/Samarkand Asia/Seoul
Asia/Shanghai Asia/Singapore Asia/Taipei Asia/Tashkent Asia/Tbilisi
Asia/Tehran Asia/Tel_Aviv Asia/Thimbu Asia/Thimphu Asia/Tokyo
Asia/Ujung_Pandang Asia/Ulaanbaatar Asia/Ulan_Bator Asia/Urumqi Asia/Vientiane
Asia/Vladivostok Asia/Yakutsk Asia/Yekaterinburg Asia/Yerevan  


Atlántico

Atlántico
Atlantic/Azores Atlantic/Bermuda Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faeroe
Atlantic/Faroe Atlantic/Jan_Mayen Atlantic/Madeira Atlantic/Reykjavik Atlantic/South_Georgia
Atlantic/St_Helena Atlantic/Stanley      


Australia

Australia
Australia/ACT Australia/Adelaide Australia/Brisbane Australia/Broken_Hill Australia/Canberra
Australia/Currie Australia/Darwin Australia/Eucla Australia/Hobart Australia/LHI
Australia/Lindeman Australia/Lord_Howe Australia/Melbourne Australia/North Australia/NSW
Australia/Perth Australia/Queensland Australia/South Australia/Sydney Australia/Tasmania
Australia/Victoria Australia/West Australia/Yancowinna    


Europa

Europa
Europe/Amsterdam Europe/Andorra Europe/Athens Europe/Belfast Europe/Belgrade
Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Bucharest Europe/Budapest
Europe/Chisinau Europe/Copenhagen Europe/Dublin Europe/Gibraltar Europe/Guernsey
Europe/Helsinki Europe/Isle_of_Man Europe/Istanbul Europe/Jersey Europe/Kaliningrad
Europe/Kiev Europe/Lisbon Europe/Ljubljana Europe/London Europe/Luxembourg
Europe/Madrid Europe/Malta Europe/Mariehamn Europe/Minsk Europe/Monaco
Europe/Moscow Europe/Nicosia Europe/Oslo Europe/Paris Europe/Podgorica
Europe/Prague Europe/Riga Europe/Rome Europe/Samara Europe/San_Marino
Europe/Sarajevo Europe/Simferopol Europe/Skopje Europe/Sofia Europe/Stockholm
Europe/Tallinn Europe/Tirane Europe/Tiraspol Europe/Uzhgorod Europe/Vaduz
Europe/Vatican Europe/Vienna Europe/Vilnius Europe/Volgograd Europe/Warsaw
Europe/Zagreb Europe/Zaporozhye Europe/Zurich    


India

India
Indian/Antananarivo Indian/Chagos Indian/Christmas Indian/Cocos Indian/Comoro
Indian/Kerguelen Indian/Mahe Indian/Maldives Indian/Mauritius Indian/Mayotte
Indian/Reunion        


Pacífico

Pacífico
Pacific/Apia Pacific/Auckland Pacific/Chatham Pacific/Chuuk Pacific/Easter
Pacific/Efate Pacific/Enderbury Pacific/Fakaofo Pacific/Fiji Pacific/Funafuti
Pacific/Galapagos Pacific/Gambier Pacific/Guadalcanal Pacific/Guam Pacific/Honolulu
Pacific/Johnston Pacific/Kiritimati Pacific/Kosrae Pacific/Kwajalein Pacific/Majuro
Pacific/Marquesas Pacific/Midway Pacific/Nauru Pacific/Niue Pacific/Norfolk
Pacific/Noumea Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn Pacific/Pohnpei
Pacific/Ponape Pacific/Port_Moresby Pacific/Rarotonga Pacific/Saipan Pacific/Samoa
Pacific/Tahiti Pacific/Tarawa Pacific/Tongatapu Pacific/Truk Pacific/Wake
Pacific/Wallis Pacific/Yap      


Otros

Otros
Brazil/Acre Brazil/DeNoronha Brazil/East Brazil/West Canada/Atlantic
Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland
Canada/Pacific Canada/Saskatchewan Canada/Yukon CET Chile/Continental
Chile/EasterIsland CST6CDT Cuba EET Egypt
Eire EST EST5EDT Etc/GMT Etc/GMT+0
Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2
Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7
Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Etc/GMT-10
Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2
Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7
Etc/GMT-8 Etc/GMT-9 Etc/GMT0 Etc/Greenwich Etc/UCT
Etc/Universal Etc/UTC Etc/Zulu Factory GB
GB-Eire GMT GMT+0 GMT-0 GMT0
Greenwich Hongkong HST Iceland Iran
Israel Jamaica Japan Kwajalein Libya
MET Mexico/BajaNorte Mexico/BajaSur Mexico/General MST
MST7MDT Navajo NZ NZ-CHAT Poland
Portugal PRC PST8PDT ROC ROK
Singapore Turkey UCT Universal US/Alaska
US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern
US/Hawaii US/Indiana-Starke US/Michigan US/Mountain US/Pacific
US/Pacific-New US/Samoa UTC W-SU WET
Zulu        
Advertencia

Por favor no utilice ninguna de las zonas horarias listadas aquí (excepto UTC), sólo exiten por razones de compatibilidad con versiones anteriores.






Extensiones específicas de la línea de comandos


Control de Terminal de Pantalla Ncurses


Introducción

ncurses (new curses) es una emulacion de software gratuito de curses en System V Rel 4.0 (y superior). Usa el formato terminfo, soporta rellenos, colores, resaltados múltiples, forma de caracteres y función de mapeo de teclas. Debido a la naturaleza interactiva de esta biblioteca, será de uso pequeño para escribir aplicaciones Web, pero puede ser útil al escribir scripts que tienen la intención de usar PHP desde la línea de comandos.

Las características disponibles, como los colores, dependen del terminal que se esté usando. Use funciones tales como ncurses_has_colors(), ncurses_can_change_color(), y ncurses_has_ic() para comprobar las capacidades individuales.

Nota:

Esta extensión se ha movido al repositorio de » PECL y ya no es más distribuída con PHP a partir de PHP 5.3.0.

ncurses está disponible para las siguientes plataformas:

  • AIX
  • BeOS
  • BSD (variantes) (FreeBSD, NetBSD, OpenBSD)
  • Cygwin
  • Digital Unix (aka OSF1)
  • GNU/Linux
  • HPUX
  • IRIX64
  • Mac OS X
  • OS/2
  • QNX
  • SCO OpenServer
  • Solaris
  • Tru64



Instalación/Configuración

Tabla de contenidos


Requerimientos

Necesita las bibliotecas y ficheros de cabecera de ncurses. Descargue la última versión desde » ftp://ftp.gnu.org/pub/gnu/ncurses/ o desde otro servidor copia GNU.



Instalación

Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/ncurses.

El soporte para caracteres anchos CRT en pantalla (ncursesw) se añadió en la versión 1.0.1 de esta versión de PECL.



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión recursos de ventana, panel y relleno.




Constantes predefinidas

Tabla de contenidos

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.


Códigos de error

En caso de error, las funciones de ncurses devuelven -1. Algunas funciones devuelven 0 en caso de éxito. Véase las páginas pertinenetes en la documentación para los valores de retorno reales.



Colores

Constantes de color de ncurses
constante sifnificado
NCURSES_COLOR_BLACK sin color (negro)
NCURSES_COLOR_WHITE blanco
NCURSES_COLOR_RED rojo - soportado cuando el terminal está en modo color
NCURSES_COLOR_GREEN verde - soportado cuando el terminal está en modo color
NCURSES_COLOR_YELLOW amarillo - soportado cuando el terminal está en modo color
NCURSES_COLOR_BLUE azul - soportado cuando el terminal está en modo color
NCURSES_COLOR_CYAN cian - soportado cuando el terminal está en modo color
NCURSES_COLOR_MAGENTA magenta - soportado cuando el terminal está en modo color


Claves

Constantes de clave de ncurses
constante significado
NCURSES_KEY_F0 - NCURSES_KEY_F64 teclas de función F1 - F64
NCURSES_KEY_DOWN flecha abajo
NCURSES_KEY_UP flecha arriba
NCURSES_KEY_LEFT flecha izquierda
NCURSES_KEY_RIGHT flecha derecha
NCURSES_KEY_HOME tecla inicio (arriba+flecha izquierda)
NCURSES_KEY_BACKSPACE retroceso
NCURSES_KEY_DL borra línea
NCURSES_KEY_IL insertar línea
NCURSES_KEY_DC borra carácter
NCURSES_KEY_IC insertar carcter o entrar en modo insertar
NCURSES_KEY_EIC salir del modo insertar carcácter
NCURSES_KEY_CLEAR limpiar pantalla
NCURSES_KEY_EOS limpiar hasta el final de la pantalla
NCURSES_KEY_EOL limpiar hasta el final de línea
NCURSES_KEY_SF avanzar una línea
NCURSES_KEY_SR retroceder una línea
NCURSES_KEY_NPAGE página siguiente
NCURSES_KEY_PPAGE página anterior
NCURSES_KEY_STAB establecer tabulación
NCURSES_KEY_CTAB limpiar tabulación
NCURSES_KEY_CATAB limpiar todas las tabulaciones
NCURSES_KEY_SRESET reset suave (parcial)
NCURSES_KEY_RESET reset o reset duro
NCURSES_KEY_PRINT imprimir
NCURSES_KEY_LL inferior izquierda
NCURSES_KEY_A1 superior izquierda del teclado numérico
NCURSES_KEY_A3 superio derecha del teclado numérico
NCURSES_KEY_B2 centro del teclado numérico
NCURSES_KEY_C1 inferior izquierda del teclado numérico
NCURSES_KEY_C3 nferior derecha del teclado numérico
NCURSES_KEY_BTAB retroceso tabulación
NCURSES_KEY_BEG principio
NCURSES_KEY_CANCEL cancelar
NCURSES_KEY_CLOSE cerrar
NCURSES_KEY_COMMAND cmd (comando)
NCURSES_KEY_COPY copiar
NCURSES_KEY_CREATE crear
NCURSES_KEY_END fin
NCURSES_KEY_EXIT salir
NCURSES_KEY_FIND buscar
NCURSES_KEY_HELP ayuda
NCURSES_KEY_MARK marcar
NCURSES_KEY_MESSAGE mensaje
NCURSES_KEY_MOVE mover
NCURSES_KEY_NEXT siguiente
NCURSES_KEY_OPEN abrir
NCURSES_KEY_OPTIONS opciones
NCURSES_KEY_PREVIOUS anterior
NCURSES_KEY_REDO re-hacer
NCURSES_KEY_REFERENCE ref (referencia)
NCURSES_KEY_REFRESH refrescar
NCURSES_KEY_REPLACE reemplazar
NCURSES_KEY_RESTART reiniciar
NCURSES_KEY_RESUME continuar
NCURSES_KEY_SAVE guardar
NCURSES_KEY_SBEG principio corrido
NCURSES_KEY_SCANCEL cancelar corrido
NCURSES_KEY_SCOMMAND comando corrido
NCURSES_KEY_SCOPY copiar corrido
NCURSES_KEY_SCREATE crear corrido
NCURSES_KEY_SDC borrar caracter corrido
NCURSES_KEY_SDL borrar línea corrido
NCURSES_KEY_SELECT seleccionar
NCURSES_KEY_SEND fin corrido
NCURSES_KEY_SEOL fin de línea corrido
NCURSES_KEY_SEXIT salir corrido
NCURSES_KEY_SFIND buscar corrido
NCURSES_KEY_SHELP ayuda corrido
NCURSES_KEY_SHOME inicio corrido
NCURSES_KEY_SIC entrada corrido
NCURSES_KEY_SLEFT flecha izquierda corrido
NCURSES_KEY_SMESSAGE mensaje corrido
NCURSES_KEY_SMOVE mover corrido
NCURSES_KEY_SNEXT siguiente corrido
NCURSES_KEY_SOPTIONS opciones corrido
NCURSES_KEY_SPREVIOUS anterior corrido
NCURSES_KEY_SPRINT imprimir corrido
NCURSES_KEY_SREDO re-hacer corrido
NCURSES_KEY_SREPLACE reemplazar corrido
NCURSES_KEY_SRIGHT flecha derecha corrido
NCURSES_KEY_SRSUME continuar corrido
NCURSES_KEY_SSAVE guardar corrido
NCURSES_KEY_SSUSPEND suspender corrido
NCURSES_KEY_UNDO deshacer
NCURSES_KEY_MOUSE ha ocurrido un evento del ratón
NCURSES_KEY_MAX valor máximo de tecla


Ratón

Constantes de ratón
constante significado
NCURSES_BUTTON1_RELEASED - NCURSES_BUTTON4_RELEASED botón (1-4) soltado
NCURSES_BUTTON1_PRESSED - NCURSES_BUTTON4_PRESSED botón (1-4) presionado
NCURSES_BUTTON1_CLICKED - NCURSES_BUTTON4_CLICKED botón (1-4) clicado
NCURSES_BUTTON1_DOUBLE_CLICKED - NCURSES_BUTTON4_DOUBLE_CLICKED botón (1-4) doble clicado
NCURSES_BUTTON1_TRIPLE_CLICKED - NCURSES_BUTTON4_TRIPLE_CLICKED botón (1-4) triple clicado
NCURSES_BUTTON_CTRL ctrl pulsada durante clic
NCURSES_BUTTON_SHIFT shift pulsada durante clic
NCURSES_BUTTON_ALT alt pulsada durante clic
NCURSES_ALL_MOUSE_EVENTS niformar de todos los eventos de ratón
NCURSES_REPORT_MOUSE_POSITION informar de la posición del ratón



Funciones de Ncurses


ncurses_addch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchAgregar un caracter en la posición actual y avanzar el cursor

Descripción

int ncurses_addch ( int $ch )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

ch



ncurses_addchnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchnstrAgregar cadena con atributos y longitud especificada en la posición actual

Descripción

int ncurses_addchnstr ( string $s , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

s

n



ncurses_addchstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addchstrAgregar una cadena con atributos en la posición actual

Descripción

int ncurses_addchstr ( string $s )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

s



ncurses_addnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addnstrAgregar una cadena con la longitud especificada en la posición actual

Descripción

int ncurses_addnstr ( string $s , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

s

n



ncurses_addstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_addstrImprimir texto en la posición actual

Descripción

int ncurses_addstr ( string $text )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text



ncurses_assume_default_colors

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_assume_default_colorsDefinir colores predeterminados para el color 0

Descripción

int ncurses_assume_default_colors ( int $fg , int $bg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

fg

bg



ncurses_attroff

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attroffDeshabilitar los atributos dados

Descripción

int ncurses_attroff ( int $attributes )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

attributes



ncurses_attron

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attronHabilitar los atributos dados

Descripción

int ncurses_attron ( int $attributes )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

attributes



ncurses_attrset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_attrsetEstablecer los atributos dados

Descripción

int ncurses_attrset ( int $attributes )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

attributes



ncurses_baudrate

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_baudrateDevuelve la tasa de baudios de la terminal

Descripción

int ncurses_baudrate ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_beep

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_beepProducir un beep en la terminal

Descripción

int ncurses_beep ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

ncurses_beep() envía una alerta auditiva (campana), y si no es posible produce un relampagueo en la pantalla.

Ver también



ncurses_bkgd

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdEstablecer la propiedad de segundo plano para la pantalla de la terminal

Descripción

int ncurses_bkgd ( int $attrchar )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

attrchar



ncurses_bkgdset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bkgdsetControla el segundo plano de la pantalla

Descripción

void ncurses_bkgdset ( int $attrchar )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

attrchar



ncurses_border

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_borderDibujar un borde alrededor de la pantalla usando caracteres con atributos

Descripción

int ncurses_border ( int $left , int $right , int $top , int $bottom , int $tl_corner , int $tr_corner , int $bl_corner , int $br_corner )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Dibuja las líneas y esquinas especificadas alrededor de la ventana principal.

¡Utilice ncurses_wborder() para los bordes alrededor de sub-ventanas!

Parámetros

Cada parámetro espera 0 para dibujar una línea, o 1 para ignorarla.

izquierda

derecha

arriba

abajo

esquina_sup_izq

Esquina superior izquierda

esquina_sup_der

Esquina superior derecha

esquina_inf_izq

Esquina inferior izquierda

esquina_inf_der

Esquina inferior derecha

Ver también

  • ncurses_wborder() - Dibuja un borde alrededor de la ventana usando caracteres con atributos



ncurses_bottom_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_bottom_panelMueve un panel visible al fondo de la pila

Descripción

int ncurses_bottom_panel ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_can_change_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_can_change_colorComprobar si las definiciones de color del terminal se pueden cambiar

Descripción

bool ncurses_can_change_color ( void )

Comprueba si el terminal tiene capacidades de color y si el programador puede cambiar las definiciones de color usando ncurses_init_color(). ncurses debe ser inicializado usando ncurses_init() antes de llamar a esta función.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE si el programador puede cambiar las definiciones de color, FALSE si no.

Ver también



ncurses_cbreak

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_cbreakDesactivar el buffer de entrada

Descripción

bool ncurses_cbreak ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Deshabilita el buffer de línea y el procesamiento de caracters (la interrumpción y el control de flujo de caracteres no son afectados), haciendo que los caracterse tecleados por el usuario estén disponibles inmediatamente para el programa.

Valores devueltos

Devuelve TRUE o NCURSES_ERR si ocurrión un error.

Ver también



ncurses_clear

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clearLimpiar la pantalla

Descripción

bool ncurses_clear ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Limpia la pantalla completamente sin usar caracteres en blanco.

Nota: ncurses_clear() limpia la pantalla sin usar caracteres en blanco, que tienen la misma apariencia del segundo plano actual. Para limpiar la pantalla con caracteres en blanco, use ncurses_erase().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



ncurses_clrtobot

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtobotLimpiar la pantalla desde la posición actual al final

Descripción

bool ncurses_clrtobot ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Elimina todas las líneas desde el cursor hasta el fin de la pantalla y crea caracteres en blanco. Los caracteres en blanco creados por ncurses_clrtobot() tienen la apariencia del segundo plano actual.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



ncurses_clrtoeol

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_clrtoeolLimpiar la pantalla desde la posición actual al final de la línea

Descripción

bool ncurses_clrtoeol ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Elimina la línea actual desde la posición actual hasta el final. Los caracteres en blanco creados por ncurses_clrtoeol() tienen la apariencia del segundo plano actual.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



ncurses_color_content

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_contentObtiene los componentes RGB de un color

Descripción

int ncurses_color_content ( int $color , int &$r , int &$g , int &$b )

Obtiene los componentes rojo, verde y azul de la definición de color dada. Las capacidades de color del terminal deben ser inicializadas con ncurses_start_color() antes de llamar a esta función.

Parámetros

color

El número del color del que se va a obtener información. Puede ser una de las constantes de color predefinidas.

r

Una referencia a la que devolver el componente rojo del color. El valor devuelto a la referencia estará entre 0 y 1000.

g

Una referencia a la que devolver el componente verde del color. El valor devuelto a la referencia estará entre 0 y 1000.

b

Una referencia a la que devolver el componente azul del color. El valor devuelto a la referencia estará entre 0 y 1000.

Valores devueltos

Returns -1 si la función tuvo éxito, y 0 si ncurses o las capacidades de color del terminal no han sido inicializadas.

Ver también



ncurses_color_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_color_setEstablecer los colores de primer plano y fondo activos

Descripción

int ncurses_color_set ( int $pair )

Establecer los colores de primer plano y fondo activos. Cualquier carácter escrito después de llamar a esta función tendrá estos colores. Esta función requiere colores de terminal para ser soportados e inicializados usando ncurses_start_color() con antelación.

ncurses utiliza pares de colores para especificar los colores de primer plano y fondo. Use ncurses_init_pair() para definir una pareja de colores.

Parámetros

pair

La pareja de colores que va a obtener los colores de primer plano y fondo para establecer los colores activos.

Valores devueltos

Devuelve -1 en caso de éxito, y 0 en caso de fallo.

Ejemplos

Ejemplo #1 Writing a string with a specified color to the screen

<?php
ncurses_init
();

// Si el terminal soporta colores, inicializar y establecer el color activo
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Escribir una cadena en la ubicación especificada
ncurses_mvaddstr(1010"¡Hola mundo! ¡Amarillo sobre texto azul!");

// Volcar la salida a la pantalla
ncurses_refresh();

ncurses_end();
?>

Ver también



ncurses_curs_set

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_curs_setEstablecer el estado del cursor

Descripción

int ncurses_curs_set ( int $visibility )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

visibility



ncurses_def_prog_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_prog_modeGuarda los modos de terminal (programa)

Descripción

bool ncurses_def_prog_mode ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Guarda los modos de terminal actuales para programa (en curses) para su uso por ncurses_reset_prog_mode().

Valores devueltos

Devuelve FALSE en caso de éxito, TRUE de lo contrario.

Ver también



ncurses_def_shell_mode

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_def_shell_modeGuarda los modos de terminal (intérprete de comandos)

Descripción

bool ncurses_def_shell_mode ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Guarda los modos de terminal actuales de intérprete de comandos (no en curses) para su uso con ncurses_reset_shell_mode().

Valores devueltos

Devuelve FALSE en caso de éxito, TRUE de lo contrario.

Ver también



ncurses_define_key

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_define_keyDefinir un código de tecla

Descripción

int ncurses_define_key ( string $definition , int $keycode )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

definicion

codigo_tecla



ncurses_del_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_del_panelRemover un panel de la pila y eliminarlo (pero no la ventana asociada)

Descripción

bool ncurses_del_panel ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_delay_output

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delay_outputRetrasar la salida en la terminal usando caracteres de relleno

Descripción

int ncurses_delay_output ( int $milliseconds )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

milliseconds



ncurses_delch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delchEliminar un caracter en la posición actual, mover el resto de la línea hacia la izquierda

Descripción

bool ncurses_delch ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Elimina el caracter bajo el cursor. Todos los caracteres a la derecha del cursor en la misma línea son desplazados una posición hacia la izquierda, y el último caracter en la línea es llenado con un caracter en blanco. La posición del cursor no cambia.

Valores devueltos

Devuelve FALSE en caso de tener éxito, o TRUE de lo contrario.

Ver también

  • ncurses_deleteln() - Eliminar una línea en la posición actual, mover el resto de la pantalla hacia arriba



ncurses_deleteln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_deletelnEliminar una línea en la posición actual, mover el resto de la pantalla hacia arriba

Descripción

bool ncurses_deleteln ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Elimina la línea actual bajo la posición del cursor. Todas las líneas por debajo de la línea actual son desplazadas una línea hacia arriba. La línea más baja es limpiada. La posición del cursor no cambia.

Valores devueltos

Devuelve FALSE en caso de éxito, TRUE de lo contrario.

Ver también

  • ncurses_delch() - Eliminar un caracter en la posición actual, mover el resto de la línea hacia la izquierda



ncurses_delwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_delwinEliminar una ventana ncurses

Descripción

bool ncurses_delwin ( resource $window )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_doupdate

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_doupdateEscribir todas las actualizaciones preparadas sobre la terminal

Descripción

bool ncurses_doupdate ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Compara la pantalla virtual con la pantalla física y actualiza la pantalla física. De esta forma es más efectivo que usando múltiples llamadas de actualización.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



ncurses_echo

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_echoActivar la repetición de entrada del teclado

Descripción

bool ncurses_echo ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Habilita el modo de repetición. Todos los caracteres escritos por el usuario son repetidos por ncurses_getch().

Valores devueltos

Devuelve FALSE de tener éxito, o TRUE si ocurrió algún error.

Ver también

  • ncurses_noecho() - Desactivar la repetición de entrada del teclado para deshabilitar el modo de repetición



ncurses_echochar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_echocharSalida de un caracter sencillo, incluyendo actualización

Descripción

int ncurses_echochar ( int $character )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

character



ncurses_end

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_endDejar de usar ncurses, limpiar la pantalla

Descripción

int ncurses_end ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_erase

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_eraseLimpiar pantalla de terminal

Descripción

bool ncurses_erase ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Llena la pantalla de terminal con caracteres en blanco.

Los caracteres creados tienen la apariencia del segundo plano actual, establecida por ncurses_bkgd().

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también



ncurses_erasechar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_erasecharDevuelve el caracter de borrado actual

Descripción

string ncurses_erasechar ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve el caracter de borrado actual.

Valores devueltos

El caracter de borrado actual, como una cadena.

Ver también



ncurses_filter

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_filterDefinir LINES para iniscr() y newterm() a 1

Descripción

void ncurses_filter ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_flash

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_flashRelampaguear la pantalla de terminal (campana visual)

Descripción

bool ncurses_flash ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Relampaguea la pantalla, y si no es posible, envía una aletra auditiva (campana).

Valores devueltos

Devuelve FALSE de tener éxito, TRUE de lo contrario.

Ver también



ncurses_flushinp

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_flushinpVolcar el búfer de entrada de teclado

Descripción

bool ncurses_flushinp ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Envía cualquier contenido que haya sido escrito y no haya sido leido aun por su programa.

Valores devueltos

Devuelve FALSE en caso de tener éxito, TRUE de lo contrario.



ncurses_getch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getchLeer un caracter desde el teclado

Descripción

int ncurses_getch ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_getmaxyx

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getmaxyxDevuelve el tamaño de una ventana

Descripción

void ncurses_getmaxyx ( resource $window , int &$y , int &$x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Obtiene los tamaños horizontal y vertical de la ventana dada y los coloca en las variables entregadas.

Las variables deben ser pasadas como referencias, de modo que sean actualizadas cuando el usuario cambie el tamaño de la terminal.

Parámetros

window

La ventana medida

y

Esto será establecido con la altura de la ventana

x

Esto será establecido con el ancho de la ventana

Valores devueltos

No devuelve ningún valor.



ncurses_getmouse

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getmouseLee los eventos del ratón

Descripción

bool ncurses_getmouse ( array &$mevent )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

ncurses_getmouse() lee los eventos del ratón de la cola.

Parámetros

mevent

Las opciones del evento serán distribuidas en este parámetro que ha de ser un array, pasado por referencia (véase el ejemplo de abajo).

En caso de éxito será distribuido un array con las siguientes claves:

  • "id" : Id para distinguir múltiples dispositivos

  • "x" : posición x relativa a la pantalla en las celdas de caracteres

  • "y" : posición y relativa a la pantalla en las celdas de caracteres

  • "z" : actualmente no soportado

  • "mmask" : Acción del ratón

Valores devueltos

Devuelve FALSE si un evento de ratón está realmente visible en la ventana dada, de otro modo devuelve TRUE.

Ejemplos

Ejemplo #1 Ejemplo de ncurses_getmouse()

<?php
switch (ncurses_getch()){
  case 
NCURSES_KEY_MOUSE:
    if (!
ncurses_getmouse($mevent)){
      if (
$mevent["mmask"] & NCURSES_MOUSE_BUTTON1_PRESSED){
        
$mouse_x $mevent["x"]; // Guardar la posición del ratón
        
$mouse_y $mevent["y"];
      }
    }
  break;

  default:
    
/* .... */
}
?>

Ver también



ncurses_getyx

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_getyxDevuelve la posición de cursor actual para una ventana

Descripción

void ncurses_getyx ( resource $window , int &$y , int &$x )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

y

x



ncurses_halfdelay

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_halfdelayColocar la terminal en modo de medio retraso

Descripción

int ncurses_halfdelay ( int $tenth )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

decimo



ncurses_has_colors

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_colorsComprueba si el terminal tiene capacidades de color

Descripción

bool ncurses_has_colors ( void )

Comprueba si el terminal tiene capacidades de color. Esta función se puede usar para escribir programas independientes del terminal. ncurses debe ser inicializado usando ncurses_init() antes de llamar a esta función.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve TRUE si el terminal tiene capacidades de color, FALSE si no.

Ejemplos

Ejemplo #1 Escribir una cadena con un color especificado en la pantalla

<?php
ncurses_init
();

// Si el terminal soporta colores, inicializar y establecer el color activo
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Escribir una cadena en la ubicación especificada
ncurses_mvaddstr(1010"¡Hola mundo! ¡Amarillo sobre texto azul!");

// Volcar la salida a la pantalla
ncurses_refresh();

ncurses_end();
?>

Ver también



ncurses_has_ic

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_icChequear por el soporte de inserción y borrado

Descripción

bool ncurses_has_ic ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Chequea si existe soporte de inserción y borrado de la terminal.

Valores devueltos

Devuelve TRUE cuando la terminal tiene soporte de inserción/borrado, FALSE de lo contrario.

Ver también



ncurses_has_il

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_ilChequea el soporte de inserción y borrado

Descripción

bool ncurses_has_il ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Chequea si existe soporte de inserción y borrado de líneas de la terminal.

Valores devueltos

Devuelve TRUE cuando la terminal tiene soporte de inserción/borrado de líneas, FALSE de lo contrario.

Ver también



ncurses_has_key

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_has_keyChequear por la presencia de una tecla de función en el teclado de la terminal

Descripción

int ncurses_has_key ( int $keycode )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

keycode



ncurses_hide_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_hide_panelRemover un panel de la pila, haciéndolo invisible

Descripción

int ncurses_hide_panel ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_hline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_hlineDibujar una línea horizontal en la posición actual usando un caracter con atributos, y de máximo n caracteres de largo

Descripción

int ncurses_hline ( int $charattr , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

caracter_atributos

n



ncurses_inch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_inchObtener el caracter y los atributos de la posición actual

Descripción

string ncurses_inch ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve el caracter desde de la posición actual.

Valores devueltos

Devuelve el caracter, como una cadena.



ncurses_init_color

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_init_colorDefinir un color de termimal

Descripción

int ncurses_init_color ( int $color , int $r , int $g , int $b )

Define o redefine el color dado. Cuando se llama a esta función, todas los casos del color dado en la pantalla, si los hay, son cambiados inmediatamente a la nueva definición.

Las capacidades de color deben ser soportadas por el terminal e inicializadas usando ncurses_start_color() antes de llamar a esta función Además, el terminal debe tener capacidad para cambiar de color; use ncurses_can_change_color() para comprobarlo.

Parámetros

color

El número de identificación del color a redefinir. Puede ser una de las constnates de color predeterminadas.

r

Un valor de color, entre 0 y 1000, para el componente rojo.

g

Un valor de color, entre 0 y 1000, para el componente verde.

b

Un valor de color, entre 0 y 1000, para el componente azul.

Valores devueltos

Devuelve -1 si la función tuvo éxito, y 0 si ncurses o las capacidades de color del terminal no han sido inicializadas o el terminal no tiene capacidad de cambiar de color.

Ver también



ncurses_init_pair

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_init_pairDefinir una pareja de colores

Descripción

int ncurses_init_pair ( int $pair , int $fg , int $bg )

Define o redefine la pareja de colores dada para obtener los colores de primer plano y fondo dados. Si la pareja de colores estaba previamente inicializada, se refresca la pantalla y todas los casos de ella son cambiados para reflejar la nueva definición.

Las capacidades de color deben ser inicializadas usando ncurses_start_color() antes de llamar a esta función. Por omisión, la primera pareja de colores (pareja de colores 0) se asume que es blanco sobre negro, pero se puede cambiar usando ncurses_assume_default_colors().

Parámetros

pair

El número de la pareja de colores a definir.

fg

El color de primer plano de la pareja de colroes. Pude ser uno de los colores predefinidos o uno definido por ncurses_init_color() si el terminal tiene capacidades de cambio de color.

bg

El color de fondo de la pareja de colores. Pude ser uno de los colores predefinidos o uno definido por ncurses_init_color() si el terminal tiene capacidades de cambio de color.

Valores devueltos

Devuelve -1 si la función tuvo éxito, y 0 si ncurses o el soporte para colores no fue inicializado.

Notas

Observe que las capacidades de cambio de color no son necesarias para definir pares de colores de colores preexistentes, excepto solo para los cambios de definiciones (componentes rojo, verde y azul) de los colores en sí por ncurses_init_color().

Ejemplos

Ejemplo #1 Escrivir una cadena con un color especificado en la pantalla

<?php
ncurses_init
();

// Si el terminal soporta colores, inicializar y establecer el color activo
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Escrivir una cadena en una ubicación especificada
ncurses_mvaddstr(1010"¡Hola mundo! ¡Amarillo sobre texto azul!");

// Volcar la salida a la pantalla
ncurses_refresh();

ncurses_end();
?>

Ver también



ncurses_init

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_initInicializar ncurses

Descripción

void ncurses_init ( void )

Inicializa la interfaz de ncurses. Esta función debe ser usada antes de otras llamadas funciones de ncurses.

Observe que ncurses_end() debe ser llamada antes de salir del programa, o el terminal no será restaurado a un modo no visual porpio.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

No devuelve ningún valor.

Ver también



ncurses_insch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_inschInsertar un caracter, moviendo el resto de la línea, incluyendo el caracter en la posición actual

Descripción

int ncurses_insch ( int $character )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

character



ncurses_insdelln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insdellnInsertar líneas antes de la línea actual, desplazando hacia abajo (los números negativos eliminan líneas y desplazan hacia arriba)

Descripción

int ncurses_insdelln ( int $count )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

count



ncurses_insertln

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insertlnInsertar una línea, mover el resto de la pantalla hacia abajo

Descripción

int ncurses_insertln ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Inserta una nueva línea antes de la línea actual. La línea más baja se perderá.



ncurses_insstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_insstrInsertar cadena en la posición actual, moviendo el resto de la línea hacia la derecha

Descripción

int ncurses_insstr ( string $text )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text



ncurses_instr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_instrLee una cadena desde la pantalla de terminal

Descripción

int ncurses_instr ( string &$buffer )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Lee una cadena desde la terminal y devuelve el número de caracteres leidos desde la posición del caracter actual hasta el fin de línea.

Parámetros

buffer

Los caracteres. Los atributos son retirados de los caracteres.

Valores devueltos

Devuelve el número de caracteres.



ncurses_isendwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_isendwinNcurses está en modo endwin, se puede realizar una salida normal por pantalla

Descripción

bool ncurses_isendwin ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Comprueba si ncurses está en modo endwin.

Valores devueltos

Devuelve TRUE, si ncurses_end() ha sido llamada sin ninguna llamada subsiguiente a ncurses_wrefresh(), FALSE si no.

Ver también



ncurses_keyok

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_keyokHabilitar o deshabilitar un código de tecla

Descripción

int ncurses_keyok ( int $keycode , bool $enable )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

keycode

enable



ncurses_keypad

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_keypadActiva o desactiva el teclado numérico

Descripción

int ncurses_keypad ( resource $window , bool $bf )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

bf



ncurses_killchar

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_killcharDevuelve el caracter de eliminación de línea actual

Descripción

string ncurses_killchar ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve el caracter de eliminación de línea actual.

Valores devueltos

Devuelve el caracter de eliminación de línea, como una cadena.

Ver también



ncurses_longname

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_longnameDevuelve la descripción de la terminal

Descripción

string ncurses_longname ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve una descripción detallada de la terminal.

Valores devueltos

Devuelve la descripción, como una cadena truncada a 128 caracteres. En caso de fallos, devuelve NULL.

Ver también



ncurses_meta

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_metaHabilita/deshabilita la meta-información de 8-bits de tecla

Descripción

int ncurses_meta ( resource $window , bool $8bit )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

8bit



ncurses_mouse_trafo

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mouse_trafoTransforma coordenadas

Descripción

bool ncurses_mouse_trafo ( int &$y , int &$x , bool $toscreen )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

toscreen



ncurses_mouseinterval

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mouseintervalEstablecer el tiempo de espera para clics de botón del mouse

Descripción

int ncurses_mouseinterval ( int $milliseconds )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

milliseconds



ncurses_mousemask

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mousemaskEstablece las opciones del ratón

Descripción

int ncurses_mousemask ( int $newmask , int &$oldmask )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Establece los eventos del ratón para ser reportados. Por omisión no se informará de ningún evento de ratón.

Los eventos de ratón están representados por NCURSES_KEY_MOUSE en el flujo de entrada de ncurses_wgetch(). Para leer la información del evento y sacar el evento de la cola, llame a ncurses_getmouse().

Parámetros

newmask

Las opciones de máscara del ratón pueden ser establecida con las siguienetes constantes predefinidas:

  • NCURSES_BUTTON1_PRESSED

  • NCURSES_BUTTON1_RELEASED

  • NCURSES_BUTTON1_CLICKED

  • NCURSES_BUTTON1_DOUBLE_CLICKED

  • NCURSES_BUTTON1_TRIPLE_CLICKED

  • NCURSES_BUTTON2_PRESSED

  • NCURSES_BUTTON2_RELEASED

  • NCURSES_BUTTON2_CLICKED

  • NCURSES_BUTTON2_DOUBLE_CLICKED

  • NCURSES_BUTTON2_TRIPLE_CLICKED

  • NCURSES_BUTTON3_PRESSED

  • NCURSES_BUTTON3_RELEASED

  • NCURSES_BUTTON3_CLICKED

  • NCURSES_BUTTON3_DOUBLE_CLICKED

  • NCURSES_BUTTON3_TRIPLE_CLICKED

  • NCURSES_BUTTON4_PRESSED

  • NCURSES_BUTTON4_RELEASED

  • NCURSES_BUTTON4_CLICKED

  • NCURSES_BUTTON4_DOUBLE_CLICKED

  • NCURSES_BUTTON4_TRIPLE_CLICKED

  • NCURSES_BUTTON_SHIFT>

  • NCURSES_BUTTON_CTRL

  • NCURSES_BUTTON_ALT

  • NCURSES_ALL_MOUSE_EVENTS

  • NCURSES_REPORT_MOUSE_POSITION

Como efecto secundario, establecer una máscara de ratón a cero en newmask descativa el puntero del ratón. Establecer un valor distinto de cero activa el puntero del ratón.

oldmask

Esto establecerá el valor anterior de la máscara de eventos del ratón.

Valores devueltos

Devuelve una máscar para indicar cual de los eventos de ratón especificados en el parámetro newmask pueden ser reportados. En caso de fallo completo devuelve 0.

Ejemplos

Ejemplo #1 Ejemplo de ncurses_mousemask()

<?php
$newmask 
NCURSES_BUTTON1_CLICKED NCURSES_BUTTON1_RELEASED;
$mask ncurses_mousemask($newmask$oldmask);
if (
$mask $newmask){
    
printf("Todas las opciones de ratón especificadas serán soportadas\n");
}
?>

Ver también



ncurses_move_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_move_panelMueve un panel de modo que su esquina superior izquierda se encuentre en [comienzo_x, comienzo_y]

Descripción

int ncurses_move_panel ( resource $panel , int $startx , int $starty )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel

startx

starty



ncurses_move

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_moveMover la posición de salida

Descripción

int ncurses_move ( int $y , int $x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x



ncurses_mvaddch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchMover la posición actual y agregar un caracter

Descripción

int ncurses_mvaddch ( int $y , int $x , int $c )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

c



ncurses_mvaddchnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchnstrMover la posición y agregar una cadena con atributos con la longitud especificada

Descripción

int ncurses_mvaddchnstr ( int $y , int $x , string $s , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

s

n



ncurses_mvaddchstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddchstrMover la posición y agregar una cadena con atributos

Descripción

int ncurses_mvaddchstr ( int $y , int $x , string $s )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

s



ncurses_mvaddnstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddnstrMover la posición y agregar una cadena con la longitud especificada

Descripción

int ncurses_mvaddnstr ( int $y , int $x , string $s , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

s

n



ncurses_mvaddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvaddstrMover la posición y agregar una cadena

Descripción

int ncurses_mvaddstr ( int $y , int $x , string $s )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

s



ncurses_mvcur

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvcurMover el cursor inmediatamente

Descripción

int ncurses_mvcur ( int $old_y , int $old_x , int $new_y , int $new_x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

old_y

old_x

new_y

new_x



ncurses_mvdelch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvdelchMover la posición y eliminar un caracter, desplazar el resto de la línea hacia la izquierda

Descripción

int ncurses_mvdelch ( int $y , int $x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x



ncurses_mvgetch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvgetchMover la posición y obtener el caracter en la nueva posición

Descripción

int ncurses_mvgetch ( int $y , int $x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x



ncurses_mvhline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvhlineEstablecer una nueva posición y dibujar una línea horizontal usando un caracter con atributos y una longitud máxima de n caracteres

Descripción

int ncurses_mvhline ( int $y , int $x , int $attrchar , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

attrchar

n



ncurses_mvinch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvinchMover la posición y obtener el caracter con atributos en la nueva posición

Descripción

int ncurses_mvinch ( int $y , int $x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x



ncurses_mvvline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvvlineEstablecer una nueva posición y dibujar una línea vertical usando un caracter con atributos y una longitud máxima de n caracteres

Descripción

int ncurses_mvvline ( int $y , int $x , int $attrchar , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

y

x

attrchar

n



ncurses_mvwaddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_mvwaddstrAñadir una cadena en una posicón nueva de la ventana

Descripción

int ncurses_mvwaddstr ( resource $window , int $y , int $x , string $text )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

y

x

text



ncurses_napms

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_napmsDormir

Descripción

int ncurses_napms ( int $milliseconds )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

milliseconds



ncurses_new_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_new_panelCrear un nuevo panel y asociarlo con una ventana

Descripción

resource ncurses_new_panel ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_newpad

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_newpadCrea un nuevo pad (ventana)

Descripción

resource ncurses_newpad ( int $rows , int $cols )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

rows

cols



ncurses_newwin

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_newwinCrear una nueva ventana

Descripción

resource ncurses_newwin ( int $rows , int $cols , int $y , int $x )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Crea una nueva ventana en donde dibujar elementos.

Cuando se creen ventanas adicionales, recuerde usar ncurses_getmaxyx() para verificar el espacio disponible, ya que el tamaño de terminal es individual y puede variar.

Parámetros

rows

Número de filas

cols

Número de columnas

y

coordenada y del origen

x

coordenada x del origen

Valores devueltos

Devuelve un ID de recurso para la nueva ventana.



ncurses_nl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nlTraducir línea nueva y retorno de carro / alimentación de línea

Descripción

bool ncurses_nl ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_nocbreak

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nocbreakCambiar la terminal a modo normal (cooked)

Descripción

bool ncurses_nocbreak ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve la terminal a modo normal (cooked). Inicialmente la terminal puede o no estar en modo cbreak, ya que el modo se hereda. De tal modo que un programa debería llamar a ncurses_cbreak() y ncurses_nocbreak() explícitamente.

Valores devueltos

Devuelve TRUE si ocurrió un error, o FALSE de lo contrario.

Ver también



ncurses_noecho

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_noechoDesactivar la repetición de entrada del teclado

Descripción

bool ncurses_noecho ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Previene la repetición de los caracteres escritos por el usuario.

Valores devueltos

Devuelve TRUE si ocurre un error, o FALSE de lo contrario.

Ver también



ncurses_nonl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_nonlNo traducir línea nueva y retorno de carro / alimentación de línea

Descripción

bool ncurses_nonl ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_noqiflush

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_noqiflushNo realizar volcados en caracteres de señales

Descripción

void ncurses_noqiflush ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_noraw

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_norawSalir del modo puro en la terminal

Descripción

bool ncurses_noraw ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Retira la terminal del modo puro. El modo puro (raw) es similar al modo cbrek, en tanto que los caracteres escritos son pasados inmediatamente al programa del usuario. Las diferencias consisten en que, en modo puro, los caracteres de control de interrupción, salida, suspensión y flujo son todos pasados sin ser interpretados, en lugar de generar una señal.

Valores devueltos

Devuelve TRUE si ocurrió un error, o FALSE de lo contrario.

Ver también



ncurses_pair_content

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_pair_contentObtiene los colores de primer plano y fondo de una pareja de colores

Descripción

int ncurses_pair_content ( int $pair , int &$f , int &$b )

Obtiene los colores de primer plano y fondo que constituyen la pareja de colores dada. La capacidad de color del terminal debe ser inicializada con ncurses_start_color() antes de llamar a esta función.

Parámetros

pair

EL númeero de la pareja de colores de la que obtener información.

f

Una referencia para la cual devuelve el color de primer plano de la pareja de colores. La información devuelta será un número de color aludiendo a uno de los colores predefinidos o a un color previamente definido por ncurses_init_color() si el terminal soporta el cambio de color.

b

Una referencia para la cual devuelve el color de fondo de la pareja de colores. La información devuelta será un número de color aludiendo a uno de los colores predefinidos o a un color previamente definido por ncurses_init_color() si el terminal soporta el cambio de color.

Valores devueltos

Devuelve -1 si la función tuvo éxito, y 0 si ncurses o las capacidades de color del terminal no han sido inicializadas.

Ver también



ncurses_panel_above

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_aboveDevuelve el panel encima del panel indicado

Descripción

resource ncurses_panel_above ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel

Valores devueltos

Si el panel es null, devuelve el panel al fondo de la pila.



ncurses_panel_below

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_belowDevuelve el panel por debajo del panel indicado

Descripción

resource ncurses_panel_below ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel

Parámetros

Si el panel no existe, devuelve el panel más arriba en la pila



ncurses_panel_window

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_panel_windowDevuelve la ventana asociada con el panel

Descripción

resource ncurses_panel_window ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_pnoutrefresh

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_pnoutrefreshCopia una región desde un pad a la pantalla virtual

Descripción

int ncurses_pnoutrefresh ( resource $pad , int $pminrow , int $pmincol , int $sminrow , int $smincol , int $smaxrow , int $smaxcol )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

pad

pminrow

pmincol

sminrow

smincol

smaxrow

smaxcol



ncurses_prefresh

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_prefreshCopia una región desde un pad a la pantalla virtual

Descripción

int ncurses_prefresh ( resource $pad , int $pminrow , int $pmincol , int $sminrow , int $smincol , int $smaxrow , int $smaxcol )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

pad

pminrow

pmincol

sminrow

smincol

smaxrow

smaxcol



ncurses_putp

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_putpAplicar la información de márgenes a la cadena e imprimirla

Descripción

int ncurses_putp ( string $text )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text



ncurses_qiflush

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_qiflushProducir volcado en caracteres de señales

Descripción

void ncurses_qiflush ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_raw

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_rawColocar la terminal en modo puro

Descripción

bool ncurses_raw ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Coloca la terminal en modo puro. El modo puro es similar al modo cbreak, en tanto que los caracteres escritos son pasados inmediatamente al programa del usuario. Las diferencias consisten en que, en modo puro, los caracteres de control de interrupción, salida, suspensión y flujo son todos pasados sin ser interpretados, en lugar de generar una señal.

Valores devueltos

Devuelve TRUE si ocurre algún error, o FALSE de lo contrario.

Ver también



ncurses_refresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_refreshRefrescar la pantalla

Descripción

int ncurses_refresh ( int $ch )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

ch



ncurses_replace_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_replace_panelReemplaza la ventana asociada con el panel

Descripción

int ncurses_replace_panel ( resource $panel , resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel

window



ncurses_reset_prog_mode

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_reset_prog_modeRestablece el modo de programa guardado por def_prog_mode

Descripción

int ncurses_reset_prog_mode ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_reset_shell_mode

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_reset_shell_modeRestablece el modo de intérprete de comandos guardado por def_shell_mode

Descripción

int ncurses_reset_shell_mode ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_resetty

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_resettyRestablece el estado guardado de la terminal

Descripción

bool ncurses_resetty ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Recupera el estado de la terminal, el cual fue guardado previamente al llamar ncurses_savetty().

Valores devueltos

Siempre devuelve FALSE.

Ver también



ncurses_savetty

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_savettyGuarda el estado de la terminal

Descripción

bool ncurses_savetty ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Guarda el estado actual de la terminal. El estado de terminal guardado puede ser recuperado con la función ncurses_resetty().

Valores devueltos

Siempre devuelve FALSE.

Ver también



ncurses_scr_dump

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_dumpVuelca el contenido de la pantalla en un archivo

Descripción

int ncurses_scr_dump ( string $filename )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

filename



ncurses_scr_init

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_initInicializar la pantalla desde un volcado en un archivo

Descripción

int ncurses_scr_init ( string $filename )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

filename



ncurses_scr_restore

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_restoreRecuperar la pantalla desde un volcado en un archivo

Descripción

int ncurses_scr_restore ( string $filename )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

filename



ncurses_scr_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scr_setHeredar la pantalla de un volcado en un archivo

Descripción

int ncurses_scr_set ( string $filename )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

filename



ncurses_scrl

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_scrlDesplazar el contenido de la ventana hacia arriba o abajo sin cambiar la posición actual

Descripción

int ncurses_scrl ( int $count )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

count



ncurses_show_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_show_panelColoca un panel invisible al comienzo de la pila, haciéndola visible

Descripción

int ncurses_show_panel ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_slk_attr

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attrDevuelve el atributo de la etiqueta suave de teclado

Descripción

int ncurses_slk_attr ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve el atributo de la etiqueta suave de teclado actual.

Valores devueltos

El atributo, como un entero.



ncurses_slk_attroff

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attroffDeshabilitar los atributos dados para las etiquetas suaves de teclado

Descripción

int ncurses_slk_attroff ( int $intarg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

intarg



ncurses_slk_attron

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attronHabilitar los atributos dados para las etiquetas suaves de funciones de teclado

Descripción

int ncurses_slk_attron ( int $intarg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

intarg



ncurses_slk_attrset

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_attrsetDefinir los atributos dados para las etiquetas suaves de funciones de teclado

Descripción

int ncurses_slk_attrset ( int $intarg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

intarg



ncurses_slk_clear

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_clearLimpia las etiquetas suaves de la pantalla

Descripción

bool ncurses_slk_clear ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

La función ncurses_slk_clear() limpia las etiquetas suaves de teclado de la pantalla.

Valores devueltos

Devuelve TRUE en caso de fallo, o FALSE de lo contrario.



ncurses_slk_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_colorEstablece el color para las etiquetas suaves de teclado

Descripción

int ncurses_slk_color ( int $intarg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

intarg



ncurses_slk_init

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_initInicializa las funciones de tecla de etiquetación suave

Descripción

bool ncurses_slk_init ( int $format )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Inicializa las funciones de tecla de etiquetación suave

Esta función debe ser llamada antes de llamar a ncurses_init() o a ncurses_newwin().

Parámetros

format

Si ncurses_init() utiliza finalmente una línea desde stdscr para emular etiquetas suaves, este parámetro determina cómo las etiquetas están dispuestas en la pantalla.

0 indica una disposición 3-2-3 de las etiquetas, 1 indica una disposición 4-4 y 2 indica el modo PC como 4-4-4, pero además se creará una línea de índice.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



ncurses_slk_noutrefresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_noutrefreshCopia las etiquetas suaves de teclado a la pantalla virtual

Descripción

bool ncurses_slk_noutrefresh ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_slk_refresh

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_refreshCopia las etiquetas suaves de teclado a la pantalla

Descripción

int ncurses_slk_refresh ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Copia etiquetas suaves de teclado desde la pantalla virtual a la pantalla física.



ncurses_slk_restore

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_restoreRecupera las etiquetas suaves de teclado

Descripción

int ncurses_slk_restore ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Recupera las etiquetas suaves de teclado después de que se ha completado un proceso ncurses_slk_clear().



ncurses_slk_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_setEstablece las etiquetas de teclado

Descripción

bool ncurses_slk_set ( int $labelnr , string $label , int $format )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

labelnr

label

format



ncurses_slk_touch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_slk_touchObliga a que se produzca salida cuando se ejecute ncurses_slk_noutrefresh

Descripción

int ncurses_slk_touch ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Obliga a que todas las etiquetas suaves sean desplegadas la próxima vez que se realice un llamado a ncurses_slk_noutrefresh().



ncurses_standend

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_standendDejar de usar el atributo 'standout'

Descripción

int ncurses_standend ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_standout

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_standoutComenzar a usar el atributo 'standout'

Descripción

int ncurses_standout ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_start_color

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_start_colorInicializa la funcionalidad de color

Descripción

int ncurses_start_color ( void )

Inicializa la funcionalidad de color en ncurses. Esta función debe ser llamada antes de llamar a cualquier función de manipulación de color y después de llamar a ncurses_init(). Es una buena práctica llamar a esta función justo después de ncurses_init().

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve 0 en caso de éxito, o -1 si la tabla de colores no pudo ser asignada o ncurses no fue inicializado.

Ejemplos

Ejemplo #1 Writing a string with a specified color to the screen

<?php
ncurses_init
();

// Si el terminal soporta colores, inicializar y establecer el color activo
if (ncurses_has_colors()) {
    
ncurses_start_color();
    
ncurses_init_pair(1NCURSES_COLOR_YELLOWNCURSES_COLOR_BLUE);
    
ncurses_color_set(1);
}

// Escribir una cadena en la ubicación especificada
ncurses_mvaddstr(1010"¡Hola mundo! ¡Amarillo sobre texto azul!");

// Volcar la salida a la pantalla
ncurses_refresh();

ncurses_end();
?>

Ver también



ncurses_termattrs

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_termattrsDevuelve un valor OR lógico de todas las banderas de atributos soportados por la terminal

Descripción

bool ncurses_termattrs ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_termname

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_termnameDevuelve el nombre (corto) de la terminal

Descripción

string ncurses_termname ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Devuelve el nombre corto de las terminales.

Valores devueltos

Devuelve el nombre corto de la terminal, truncado a 14 caracteres. En caso de fallo, devuelve NULL.

Ver también



ncurses_timeout

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_timeoutEstablecer el tiempo de espera para secuencias especiales de teclas

Descripción

void ncurses_timeout ( int $millisec )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

millisec



ncurses_top_panel

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_top_panelMueve un panel visible al tope de la pila

Descripción

int ncurses_top_panel ( resource $panel )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

panel



ncurses_typeahead

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_typeaheadEspecificar un descriptor de archivo diferente para el chequeo de escritura siguiente

Descripción

int ncurses_typeahead ( int $fd )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

fd



ncurses_ungetch

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_ungetchColocar un caracter de vuelta en la secuencia de entrada

Descripción

int ncurses_ungetch ( int $keycode )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

keycode



ncurses_ungetmouse

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_ungetmouseColoca un evento de mouse en la cola

Descripción

bool ncurses_ungetmouse ( array $mevent )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Coloca un evento KEY_MOUSE en la cola de eventos devueltos y asocia con él los datos de estado y coordenadas relativas-a-pantalla de celda de caracter especificadas en evento_mouse.

Parámetros

mevent

Una matriz asociativa especificando las opciones del evento:

  • "id" : Id para distinguir múltiples dispositivos

  • "x" : posición x relativa a la pantalla en celdas de caracter

  • "y" : posición y relativa a la pantalla en celdas de caracter

  • "z" : por el momento sin soporte

  • "mmask" : acción del mouse

Valores devueltos

Devuelve FALSE en caso de éxito, o TRUE de lo contrario.

Ver también



ncurses_update_panels

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_update_panelsRefresca la pantalla virtual, para reflejar las relaciones entre los paneles en la pila

Descripción

void ncurses_update_panels ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_use_default_colors

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_default_colorsAsignar los colores predeterminados de la terminal al id de color -1

Descripción

bool ncurses_use_default_colors ( void )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.



ncurses_use_env

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_envControlar el uso de información del entorno sobre el tamaño de la terminal

Descripción

void ncurses_use_env ( bool $flag )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

flag



ncurses_use_extended_names

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_use_extended_namesControlar el uso de nombres extendidos en descripciones de información de terminal

Descripción

int ncurses_use_extended_names ( bool $flag )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

flag



ncurses_vidattr

(PHP 4 >= 4.0.7, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_vidattrDesplegar la cadena en la terminal con el atributo de modo de video

Descripción

int ncurses_vidattr ( int $intarg )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

intarg



ncurses_vline

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_vlineDibujar una línea vertical en la posición actual usando un caracter con atributos y una longitud máxima de n caracteres

Descripción

int ncurses_vline ( int $charattr , int $n )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

charattr

n



ncurses_waddch

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_waddchAgrega un caracter en la posición actual de una ventana y avanza el cursor

Descripción

int ncurses_waddch ( resource $window , int $ch )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

ch



ncurses_waddstr

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_waddstrImprime un texto en la posición actual de una ventana

Descripción

int ncurses_waddstr ( resource $window , string $str [, int $n ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

str

n



ncurses_wattroff

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattroffDeshabilita los atributos para una ventana

Descripción

int ncurses_wattroff ( resource $window , int $attrs )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

attrs



ncurses_wattron

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattronHabilita los atributos para una ventana

Descripción

int ncurses_wattron ( resource $window , int $attrs )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

attrs



ncurses_wattrset

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wattrsetEstablecer los atributos para una ventana

Descripción

int ncurses_wattrset ( resource $window , int $attrs )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

attrs



ncurses_wborder

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wborderDibuja un borde alrededor de la ventana usando caracteres con atributos

Descripción

int ncurses_wborder ( resource $window , int $left , int $right , int $top , int $bottom , int $tl_corner , int $tr_corner , int $bl_corner , int $br_corner )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Dibuja las líneas y esquinas indicadas alrededor de la window dada.

Use ncurses_border() for borders around the main window.

Parámetros

Cada parámetro espera 0 para dibujar una línea, y 1 para saltarla.

window

La ventana en la cual operar

left

right

top

bottom

tl_corner

Esquina superior izquierda

tr_corner

Esquina superior derecha

bl_corner

Esquina inferior izquierda

br_corner

Esquina inferior derecha

Ver también

  • ncurses_border() - Dibujar un borde alrededor de la pantalla usando caracteres con atributos



ncurses_wclear

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wclearLimpia la ventana

Descripción

int ncurses_wclear ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wcolor_set

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wcolor_setEstablece parejas de colores en la ventana

Descripción

int ncurses_wcolor_set ( resource $window , int $color_pair )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

color_pair



ncurses_werase

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_weraseEliminar los contenidos de la ventana

Descripción

int ncurses_werase ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wgetch

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wgetchLee un caracter desde el teclado (en la ventana)

Descripción

int ncurses_wgetch ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_whline

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_whlineDibuja una línea horizontal en una ventana en la posición actual usando un caracter con atributos y un largo máximo de n caracteres

Descripción

int ncurses_whline ( resource $window , int $charattr , int $n )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

charattr

n



ncurses_wmouse_trafo

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wmouse_trafoTransforma coordenadas de ventana/stdscr

Descripción

bool ncurses_wmouse_trafo ( resource $window , int &$y , int &$x , bool $toscreen )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

x

y

toscreen



ncurses_wmove

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wmoveMueve la posición de salida de la ventana

Descripción

int ncurses_wmove ( resource $window , int $y , int $x )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

y

x



ncurses_wnoutrefresh

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wnoutrefreshCopia la ventana a la pantalla virtual

Descripción

int ncurses_wnoutrefresh ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wrefresh

(PHP 4 >= 4.2.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wrefreshRefrescar la ventana en la pantalla de terminal

Descripción

int ncurses_wrefresh ( resource $window )
Advertencia

Esta función ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Use esta función bajo su propio riesgo.

Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wstandend

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wstandendFinaliza el modo standout para una ventana

Descripción

int ncurses_wstandend ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wstandout

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wstandoutIngresar a modo standout en una ventana

Descripción

int ncurses_wstandout ( resource $window )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window



ncurses_wvline

(PHP 4 >= 4.3.0, PHP 5 < 5.3.0, PECL ncurses >= 1.0.0)

ncurses_wvlineDibuja una línea vertical en una ventana en la posición actual usando un caracter con atributos y una longitud máxima de n caracteres

Descripción

int ncurses_wvline ( resource $window , int $charattr , int $n )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

window

charattr

n


Tabla de contenidos




Newt


Introducción

Esta es una extensión del lenguaje PHP para la librería RedHat Newt, una ventana de terminal y librería widge para escribir aplicaciones con interfaz de usuario amigables. Una vez que esta extensión está activada en PHP ofrecerá el uso de widgets Newt, tales como ventanas, botones, casillas de verificación, botones de radio, etiquetas, editboxes, scrolls, textareas, scales etc. El uso de esta extensión es muy similar a la Newt API original del lenguaje de programación C.



Instalación/Configuración

Tabla de contenidos


Requerimientos

This module uses the functions of the RedHat Newt library. You need libnewt version >= 0.51.0.



Instalación

Esta extensión » PECL no se distribuye con PHP. Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/newt.

En PHP 4 el código fuente de estas extensiones PECL puede ser encontrado en el directorio ext/ dentro del código fuente de PHP o a través del anterior enlace a PECL. Para poder utilizar estas funciones, debe compilar PHP CGI o CLI con soporte newt mediante el uso de la opción de configuración --with-newt[=DIR] .

Nota:

Esta extensión no está disponible para la plataforma Windows.

Es posible que necesite las librerías curses y slang, con el fin de compilar esta extensión. Para especificar las ubicaciones de las librerías, use las siguientes opciones de configuración: --with-curses-dir=/path/to/libcurses --with-slang-dir=/path/to/libslang



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

This extension uses two resource types: "newt component" and "newt grid".

Resource type "newt component" is returned by functions, which create common newt widgets (for example: newt_button())

Resource type "newt grid" is a special link identifier for components, returned by newt grid factory functions (for example: newt_create_grid())




Constantes predefinidas

Tabla de contenidos

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.


Newt form exit reasons

Newt form exit reasons
constant meaning
NEWT_EXIT_HOTKEY hotkey defined by newt_form_add_hot_key() was pressed
NEWT_EXIT_COMPONENT some component has caused form to exit
NEWT_EXIT_FDREADY file descriptor specified in newt_form_watch_fd() is ready to be read or written to
NEWT_EXIT_TIMER time specified in newt_form_set_timer() has elapsed


Newt colorsets

Newt colorsets
constant meaning
NEWT_COLORSET_ROOT  
NEWT_COLORSET_BORDER  
NEWT_COLORSET_WINDOW  
NEWT_COLORSET_SHADOW  
NEWT_COLORSET_TITLE  
NEWT_COLORSET_BUTTON  
NEWT_COLORSET_ACTBUTTON  
NEWT_COLORSET_CHECKBOX  
NEWT_COLORSET_ACTCHECKBOX  
NEWT_COLORSET_ENTRY  
NEWT_COLORSET_LABEL  
NEWT_COLORSET_LISTBOX  
NEWT_COLORSET_ACTLISTBOX  
NEWT_COLORSET_TEXTBOX  
NEWT_COLORSET_ACTTEXTBOX  
NEWT_COLORSET_HELPLINE  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_EMPTYSCALE  
NEWT_COLORSET_FULLSCALE  
NEWT_COLORSET_DISENTRY  
NEWT_COLORSET_COMPACTBUTTON  
NEWT_COLORSET_ACTSELLISTBOX  
NEWT_COLORSET_SELLISTBOX  


Newt argument flags

Newt argument flags
constant meaning
NEWT_ARG_LAST  
NEWT_ARG_APPEND  


Newt Flags Sense

Newt Flags Sense
constant meaning
NEWT_FLAGS_SET  
NEWT_FLAGS_RESET  
NEWT_FLAGS_TOGGLE  


Newt Components Flags

Newt Components Flags
constant meaning
NEWT_FLAG_RETURNEXIT Exit form, when component is activated
NEWT_FLAG_HIDDEN Component is hidden
NEWT_FLAG_SCROLL Component is scrollable
NEWT_FLAG_DISABLED Component is disabled
NEWT_FLAG_BORDER  
NEWT_FLAG_WRAP Wrap text
NEWT_FLAG_NOF12 Don't exit form on pressing F12
NEWT_FLAG_MULTIPLE  
NEWT_FLAG_SELECTED Component is selected
NEWT_FLAG_CHECKBOX Component is checkbox
NEWT_FLAG_PASSWORD Entry component is password entry
NEWT_FLAG_SHOWCURSOR Show cursor


File Descriptor Flags

File Descriptor Flags
constant meaning
NEWT_FD_READ  
NEWT_FD_WRITE  
NEWT_FD_EXCEPT  


Checkbox Tree Flags

Checkbox Tree Flags
constant meaning
NEWT_CHECKBOXTREE_UNSELECTABLE  
NEWT_CHECKBOXTREE_HIDE_BOX  
NEWT_CHECKBOXTREE_COLLAPSED  
NEWT_CHECKBOXTREE_EXPANDED  
NEWT_CHECKBOXTREE_UNSELECTED  
NEWT_CHECKBOXTREE_SELECTED  


Entry Flags

Entry Flags
constant meaning
NEWT_ENTRY_SCROLL  
NEWT_ENTRY_HIDDEN  
NEWT_ENTRY_RETURNEXIT  
NEWT_ENTRY_DISABLED  


Listbox Flags

Listbox Flags
constant meaning
NEWT_LISTBOX_RETURNEXIT  


Textbox Flags

Textbox Flags
constant meaning
NEWT_TEXTBOX_WRAP Wrap text in the textbox
NEWT_TEXTBOX_SCROLL Scroll text in the textbox


Form Flags

Form Flags
constant meaning
NEWT_FORM_NOF12 Don't exit form on F12 press


Newt Keys

Newt Keys
constant meaning
NEWT_KEY_TAB  
NEWT_KEY_ENTER  
NEWT_KEY_SUSPEND  
NEWT_KEY_ESCAPE  
NEWT_KEY_RETURN  
NEWT_KEY_EXTRA_BASE  
NEWT_KEY_UP  
NEWT_KEY_DOWN  
NEWT_KEY_LEFT  
NEWT_KEY_RIGHT  
NEWT_KEY_BKSPC  
NEWT_KEY_DELETE  
NEWT_KEY_HOME  
NEWT_KEY_END  
NEWT_KEY_UNTAB  
NEWT_KEY_PGUP  
NEWT_KEY_PGDN  
NEWT_KEY_INSERT  
NEWT_KEY_F1  
NEWT_KEY_F2  
NEWT_KEY_F3  
NEWT_KEY_F4  
NEWT_KEY_F5  
NEWT_KEY_F6  
NEWT_KEY_F7  
NEWT_KEY_F8  
NEWT_KEY_F9  
NEWT_KEY_F10  
NEWT_KEY_F11  
NEWT_KEY_F12  
NEWT_KEY_RESIZE  


Newt Anchors

Newt Anchors
constant meaning
NEWT_ANCHOR_LEFT  
NEWT_ANCHOR_RIGHT  
NEWT_ANCHOR_TOP  
NEWT_ANCHOR_BOTTOM  


Grid Flags

Grid Flags
constant meaning
NEWT_GRID_FLAG_GROWX  
NEWT_GRID_FLAG_GROWY  
NEWT_GRID_EMPTY  
NEWT_GRID_COMPONENT  
NEWT_GRID_SUBGRID  



Ejemplos

Tabla de contenidos


Basic usage

This example is a PHP port of RedHat 'setup' utility dialog, executed in text mode.

Ejemplo #1 Newt Usage Example

<?php
newt_init 
();
newt_cls ();

newt_draw_root_text (00"Test Mode Setup Utility 1.12");
newt_push_help_line (null);
newt_draw_root_text (-300"(c) 1999-2002 RedHat, Inc");

newt_get_screen_size ($rows$cols);

newt_open_window ($rows/2-17$cols/2-103417"Choose a Tool");

$form newt_form ();

$list newt_listbox (3210);

foreach (array (
    
"Authentication configuration",
    
"Firewall configuration",
    
"Mouse configuration",
    
"Network configuration",
    
"Printer configuration",
    
"System services") as $l_item)
{
    
newt_listbox_add_entry ($list$l_item$l_item);
}

$b1 newt_button (512"Run Tool");
$b2 newt_button (2112"Quit");

newt_form_add_component ($form$list);
newt_form_add_components ($form, array($b1$b2));

newt_refresh ();
newt_run_form ($form);

newt_pop_window ();
newt_pop_help_line ();
newt_finished ();
newt_form_destroy ($form);
?>



Newt Funciones


newt_bell

(PECL newt >= 0.1)

newt_bellEnviar sonido bip a la terminal

Descripción

void newt_bell ( void )

Esta función envía un sonido bip a la terminal.

Nota:

Dependiendo de la configuración de la terminal, el bip puede que sea o no sea audible.

Valores devueltos

No devuelve ningún valor.



newt_button_bar

(PECL newt >= 0.1)

newt_button_barEsta función devuelve una tabla que contiene los botones creados

Descripción

resource newt_button_bar ( array &$buttons )

Esta función devuelve una table que contiene los botones creados.

Parámetros

buttons

Valores devueltos

Devuelve una tabla que contiene los botones creados.



newt_button

(PECL newt >= 0.1)

newt_buttonCrear un nuevo botón

Descripción

resource newt_button ( int $left , int $top , string $text )

Crea un nuevo botón.

Parámetros

left

Coordenada X del botón.

top

Coordenada Y del botón.

text

El texto que debe mostrarse en el botón.

Valores devueltos

Devuelve un recurso enlace al componente del botón creado, o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de newt_button()

<?php

$form 
newt_form();

$ok_button newt_button(512"Run Tool");
    
newt_form_add_component($form$ok_button);

?>

Ver también

  • newt_button_bar() - Esta función devuelve una tabla que contiene los botones creados



newt_centered_window

(PECL newt >= 0.1)

newt_centered_windowAbrir una ventana centrada de un tamaño específico

Descripción

int newt_centered_window ( int $width , int $height [, string $title ] )

Abre una ventana centrada de un tamaño específico.

Parámetros

width

Ancho de la ventana

height

Alto de la vetana

title

Título de la ventana

Valores devueltos

Valor no definido.

Ver también



newt_checkbox_get_value

(PECL newt >= 0.1)

newt_checkbox_get_valueObtener el valor del recurso checkbox

Descripción

string newt_checkbox_get_value ( resource $checkbox )

Esta función devuelve el caracter en la secuencia que indica el valor actual del checkbox.

Parámetros

checkbox

Valores devueltos

Devuelve el caracter indicando el valor del checkbox.



newt_checkbox_set_flags

(PECL newt >= 0.1)

newt_checkbox_set_flagsConfigura el recurso checkbox

Descripción

void newt_checkbox_set_flags ( resource $checkbox , int $flags , int $sense )

Esta función permite definir varias opciones en el recurso checkbox.

Parámetros

checkbox

flags

sense

Valores devueltos

No devuelve ningún valor.



newt_checkbox_set_value

(PECL newt >= 0.1)

newt_checkbox_set_valueEstablece el valor de la checkbox

Descripción

void newt_checkbox_set_value ( resource $checkbox , string $value )

Esta función permite establecer el valor actual del recurso checkbox.

Parámetros

checkbox

value

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree_add_item

(PECL newt >= 0.1)

newt_checkbox_tree_add_itemAñade un nuevo ítem al árbol checkbox

Descripción

void newt_checkbox_tree_add_item ( resource $checkboxtree , string $text , mixed $data , int $flags , int $index [, int $... ] )

Esta función permite añadir un nuevo ítem al árbol checkbox.

Parámetros

checkboxtree

text

data

flags

index

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree_find_item

(PECL newt >= 0.1)

newt_checkbox_tree_find_itemFinds an item in the checkbox tree

Descripción

array newt_checkbox_tree_find_item ( resource $checkboxtree , mixed $data )

Finds an item in the checkbox tree by item's data.

Parámetros

checkboxtree

data

Valores devueltos

Returns checkbox tree item resource, or NULL if it wasn't found.



newt_checkbox_tree_get_current

(PECL newt >= 0.1)

newt_checkbox_tree_get_currentReturns checkbox tree selected item

Descripción

mixed newt_checkbox_tree_get_current ( resource $checkboxtree )

This method returns checkbox tree selected tem.

Parámetros

checkboxtree

Valores devueltos

Returns current (selected) checkbox tree item.



newt_checkbox_tree_get_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_get_entry_value

Descripción

string newt_checkbox_tree_get_entry_value ( resource $checkboxtree , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

data

Valores devueltos



newt_checkbox_tree_get_multi_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_multi_selection

Descripción

array newt_checkbox_tree_get_multi_selection ( resource $checkboxtree , string $seqnum )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

seqnum

Valores devueltos



newt_checkbox_tree_get_selection

(PECL newt >= 0.1)

newt_checkbox_tree_get_selection

Descripción

array newt_checkbox_tree_get_selection ( resource $checkboxtree )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

Valores devueltos



newt_checkbox_tree_multi

(PECL newt >= 0.1)

newt_checkbox_tree_multi

Descripción

resource newt_checkbox_tree_multi ( int $left , int $top , int $height , string $seq [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

height

seq

flags

Valores devueltos



newt_checkbox_tree_set_current

(PECL newt >= 0.1)

newt_checkbox_tree_set_current

Descripción

void newt_checkbox_tree_set_current ( resource $checkboxtree , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

data

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree_set_entry_value

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry_value

Descripción

void newt_checkbox_tree_set_entry_value ( resource $checkboxtree , mixed $data , string $value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

data

value

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree_set_entry

(PECL newt >= 0.1)

newt_checkbox_tree_set_entry

Descripción

void newt_checkbox_tree_set_entry ( resource $checkboxtree , mixed $data , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkboxtree

data

text

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree_set_width

(PECL newt >= 0.1)

newt_checkbox_tree_set_width

Descripción

void newt_checkbox_tree_set_width ( resource $checkbox_tree , int $width )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

checkbox_tree

width

Valores devueltos

No devuelve ningún valor.



newt_checkbox_tree

(PECL newt >= 0.1)

newt_checkbox_tree

Descripción

resource newt_checkbox_tree ( int $left , int $top , int $height [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

height

flags

Valores devueltos



newt_checkbox

(PECL newt >= 0.1)

newt_checkbox

Descripción

resource newt_checkbox ( int $left , int $top , string $text , string $def_value [, string $seq ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

text

def_value

seq

Valores devueltos



newt_clear_key_buffer

(PECL newt >= 0.1)

newt_clear_key_bufferDiscards the contents of the terminal's input buffer without waiting for additional input

Descripción

void newt_clear_key_buffer ( void )

Discards the contents of the terminal's input buffer without waiting for additional input.

Valores devueltos

No devuelve ningún valor.

Ver también



newt_cls

(PECL newt >= 0.1)

newt_cls

Descripción

void newt_cls ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Valores devueltos

No devuelve ningún valor.



newt_compact_button

(PECL newt >= 0.1)

newt_compact_button

Descripción

resource newt_compact_button ( int $left , int $top , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

text

Valores devueltos



newt_component_add_callback

(PECL newt >= 0.1)

newt_component_add_callback

Descripción

void newt_component_add_callback ( resource $component , mixed $func_name , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

component

func_name

data

Valores devueltos

No devuelve ningún valor.



newt_component_takes_focus

(PECL newt >= 0.1)

newt_component_takes_focus

Descripción

void newt_component_takes_focus ( resource $component , bool $takes_focus )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

component

takes_focus

Valores devueltos

No devuelve ningún valor.



newt_create_grid

(PECL newt >= 0.1)

newt_create_grid

Descripción

resource newt_create_grid ( int $cols , int $rows )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

cols

rows

Valores devueltos



newt_cursor_off

(PECL newt >= 0.1)

newt_cursor_off

Descripción

void newt_cursor_off ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Valores devueltos

No devuelve ningún valor.



newt_cursor_on

(PECL newt >= 0.1)

newt_cursor_on

Descripción

void newt_cursor_on ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Valores devueltos

No devuelve ningún valor.



newt_delay

(PECL newt >= 0.1)

newt_delay

Descripción

void newt_delay ( int $microseconds )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

microseconds

Valores devueltos

No devuelve ningún valor.



newt_draw_form

(PECL newt >= 0.1)

newt_draw_form

Descripción

void newt_draw_form ( resource $form )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

Valores devueltos

No devuelve ningún valor.



newt_draw_root_text

(PECL newt >= 0.1)

newt_draw_root_textDisplays the string text at the position indicated

Descripción

void newt_draw_root_text ( int $left , int $top , string $text )

Displays the string text at the position indicated.

Parámetros

left

Column number

Nota:

If left is negative, the position is measured from the opposite side of the screen.

top

Line number

Nota:

If top is negative, the position is measured from the opposite side of the screen.

text

Text to display.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 A newt_draw_root_text() example

This code demonstrates drawing of titles in the both corners of the screen.

<?php
 newt_init
();
 
newt_cls();

 
newt_draw_root_text (20"Some root text");
 
newt_refresh();
 
sleep(1);

 
newt_draw_root_text (-300"Root text in the other corner");
 
newt_refresh();
 
sleep(1);

 
newt_finished();
?>

Ver también



newt_entry_get_value

(PECL newt >= 0.1)

newt_entry_get_value

Descripción

string newt_entry_get_value ( resource $entry )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

entry

Valores devueltos



newt_entry_set_filter

(PECL newt >= 0.1)

newt_entry_set_filter

Descripción

void newt_entry_set_filter ( resource $entry , callable $filter , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

entry

filter

data

Valores devueltos

No devuelve ningún valor.



newt_entry_set_flags

(PECL newt >= 0.1)

newt_entry_set_flags

Descripción

void newt_entry_set_flags ( resource $entry , int $flags , int $sense )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

entry

flags

sense

Valores devueltos

No devuelve ningún valor.



newt_entry_set

(PECL newt >= 0.1)

newt_entry_set

Descripción

void newt_entry_set ( resource $entry , string $value [, bool $cursor_at_end ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

entry

value

cursor_at_end

Valores devueltos

No devuelve ningún valor.



newt_entry

(PECL newt >= 0.1)

newt_entry

Descripción

resource newt_entry ( int $left , int $top , int $width [, string $init_value [, int $flags ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

width

init_value

flags

Valores devueltos



newt_finished

(PECL newt >= 0.1)

newt_finishedUninitializes newt interface

Descripción

int newt_finished ( void )

Uninitializes newt interface. This function be called, when program is ready to exit.

Valores devueltos

Returns 1 on success, 0 on failure.

Ver también



newt_form_add_component

(PECL newt >= 0.1)

newt_form_add_componentAdds a single component to the form

Descripción

void newt_form_add_component ( resource $form , resource $component )

Adds a single component to the form.

Parámetros

form

Form to which component will be added

component

Component to add to the form

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 A newt_form_add_component() example

<?php
$form 
newt_form();

$options = array("Authentication configuration""Firewall configuration",
"Mouse configuration""Network configuration""Printer configuration",
"System services");

$list newt_listbox(3210);

foreach (
$options as $l_item) {
    
newt_listbox_add_entry($list$l_item$l_item);
}

newt_form_add_component($form$list);
?>

Ver también



newt_form_add_components

(PECL newt >= 0.1)

newt_form_add_componentsAdd several components to the form

Descripción

void newt_form_add_components ( resource $form , array $components )

Adds several components to the form.

Parámetros

form

Form to which components will be added

components

Array of components to add to the form

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 A newt_form_add_components() example

<?php
$form 
newt_form();

$b1 newt_button(512"Run Tool");
$b2 newt_button(2112"Quit");

newt_form_add_components($form, array($b1$b2));
?>

Ver también



newt_form_add_hot_key

(PECL newt >= 0.1)

newt_form_add_hot_key

Descripción

void newt_form_add_hot_key ( resource $form , int $key )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

key

Valores devueltos

No devuelve ningún valor.



newt_form_destroy

(PECL newt >= 0.1)

newt_form_destroyDestroys a form

Descripción

void newt_form_destroy ( resource $form )

This function frees the memory resources used by the form and all of the components which have been added to the form (including those components which are on subforms). Once a form has been destroyed, none of the form's components can be used.

Parámetros

form

Form component, which is going to be destroyed

Valores devueltos

No devuelve ningún valor.

Ver también



newt_form_get_current

(PECL newt >= 0.1)

newt_form_get_current

Descripción

resource newt_form_get_current ( resource $form )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

Valores devueltos



newt_form_run

(PECL newt >= 0.1)

newt_form_runRuns a form

Descripción

void newt_form_run ( resource $form , array &$exit_struct )

This function runs the form passed to it.

Parámetros

form

Form component

exit_struct

Array, used for returning information after running the form component. Keys and values are described in the following table:

Form Exit Structure
Index Key Value Type Description
reason integer The reason, why the form has been exited. Possible values are defined here.
watch resource Resource link, specified in newt_form_watch_fd()
key integer Hotkey
component resource Component, which caused the form to exit

Valores devueltos

No devuelve ningún valor.

Ver también



newt_form_set_background

(PECL newt >= 0.1)

newt_form_set_background

Descripción

void newt_form_set_background ( resource $from , int $background )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

from

background

Valores devueltos

No devuelve ningún valor.



newt_form_set_height

(PECL newt >= 0.1)

newt_form_set_height

Descripción

void newt_form_set_height ( resource $form , int $height )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

height

Valores devueltos

No devuelve ningún valor.



newt_form_set_size

(PECL newt >= 0.1)

newt_form_set_size

Descripción

void newt_form_set_size ( resource $form )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

Valores devueltos

No devuelve ningún valor.



newt_form_set_timer

(PECL newt >= 0.1)

newt_form_set_timer

Descripción

void newt_form_set_timer ( resource $form , int $milliseconds )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

milliseconds

Valores devueltos

No devuelve ningún valor.



newt_form_set_width

(PECL newt >= 0.1)

newt_form_set_width

Descripción

void newt_form_set_width ( resource $form , int $width )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

width

Valores devueltos

No devuelve ningún valor.



newt_form_watch_fd

(PECL newt >= 0.1)

newt_form_watch_fd

Descripción

void newt_form_watch_fd ( resource $form , resource $stream [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

form

stream

flags

Valores devueltos

No devuelve ningún valor.



newt_form

(PECL newt >= 0.1)

newt_formCreate a form

Descripción

resource newt_form ([ resource $vert_bar [, string $help [, int $flags ]]] )

Create a new form.

Parámetros

vert_bar

Vertical scrollbar which should be associated with the form

help

Help text string

flags

Various flags

Valores devueltos

Returns a resource link to the created form component, or FALSE on error.

Ejemplos

Ejemplo #1 A newt_form() example

Displays a single button "Quit", which closes the application once it's pressed.

<?php
newt_init
();
newt_cls();

$myform newt_form();
$button newt_button (512"Quit");

newt_form_add_component ($myform$button);
newt_refresh ();
newt_run_form ($myform);

newt_finished ();
newt_form_destroy ($myform);
?>

Ver también



newt_get_screen_size

(PECL newt >= 0.1)

newt_get_screen_sizeFills in the passed references with the current size of the terminal

Descripción

void newt_get_screen_size ( int &$cols , int &$rows )

Fills in the passed references with the current size of the terminal.

Parámetros

cols

Number of columns in the terminal

rows

Number of rows in the terminal

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 A newt_get_screen_size() example

This code prints out the screen size of your terminal.

<?php
 newt_init
();
 
newt_get_screen_size (&$cols, &$rows);
 
newt_finished();

 print 
"Your terminal size is: {$cols}x{$rows}\n";
?>

El resultado del ejemplo sería:

Your terminal size is: 138x47



newt_grid_add_components_to_form

(PECL newt >= 0.1)

newt_grid_add_components_to_form

Descripción

void newt_grid_add_components_to_form ( resource $grid , resource $form , bool $recurse )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

form

recurse

Valores devueltos

No devuelve ningún valor.



newt_grid_basic_window

(PECL newt >= 0.1)

newt_grid_basic_window

Descripción

resource newt_grid_basic_window ( resource $text , resource $middle , resource $buttons )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text

middle

buttons

Valores devueltos



newt_grid_free

(PECL newt >= 0.1)

newt_grid_free

Descripción

void newt_grid_free ( resource $grid , bool $recurse )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

recurse

Valores devueltos

No devuelve ningún valor.



newt_grid_get_size

(PECL newt >= 0.1)

newt_grid_get_size

Descripción

void newt_grid_get_size ( resouce $grid , int &$width , int &$height )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

width

height

Valores devueltos

No devuelve ningún valor.



newt_grid_h_close_stacked

(PECL newt >= 0.1)

newt_grid_h_close_stacked

Descripción

resource newt_grid_h_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

element1_type

element1

Valores devueltos



newt_grid_h_stacked

(PECL newt >= 0.1)

newt_grid_h_stacked

Descripción

resource newt_grid_h_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

element1_type

element1

Valores devueltos



newt_grid_place

(PECL newt >= 0.1)

newt_grid_place

Descripción

void newt_grid_place ( resource $grid , int $left , int $top )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

left

top

Valores devueltos

No devuelve ningún valor.



newt_grid_set_field

(PECL newt >= 0.1)

newt_grid_set_field

Descripción

void newt_grid_set_field ( resource $grid , int $col , int $row , int $type , resource $val , int $pad_left , int $pad_top , int $pad_right , int $pad_bottom , int $anchor [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

col

row

type

val

pad_left

pad_top

pad_right

pad_bottom

anchor

flags

Valores devueltos

No devuelve ningún valor.



newt_grid_simple_window

(PECL newt >= 0.1)

newt_grid_simple_window

Descripción

resource newt_grid_simple_window ( resource $text , resource $middle , resource $buttons )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text

middle

buttons

Valores devueltos



newt_grid_v_close_stacked

(PECL newt >= 0.1)

newt_grid_v_close_stacked

Descripción

resource newt_grid_v_close_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

element1_type

element1

Valores devueltos



newt_grid_v_stacked

(PECL newt >= 0.1)

newt_grid_v_stacked

Descripción

resource newt_grid_v_stacked ( int $element1_type , resource $element1 [, int $... [, resource $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

element1_type

element1

Valores devueltos



newt_grid_wrapped_window_at

(PECL newt >= 0.1)

newt_grid_wrapped_window_at

Descripción

void newt_grid_wrapped_window_at ( resource $grid , string $title , int $left , int $top )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

title

left

top

Valores devueltos

No devuelve ningún valor.



newt_grid_wrapped_window

(PECL newt >= 0.1)

newt_grid_wrapped_window

Descripción

void newt_grid_wrapped_window ( resource $grid , string $title )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

grid

title

Valores devueltos

No devuelve ningún valor.



newt_init

(PECL newt >= 0.1)

newt_initInitialize newt

Descripción

int newt_init ( void )

Initializes the newt interface. This function must be called before any other newt function.

Valores devueltos

Returns 1 on success, 0 on failure.

Ver también



newt_label_set_text

(PECL newt >= 0.1)

newt_label_set_text

Descripción

void newt_label_set_text ( resource $label , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

label

text

Valores devueltos

No devuelve ningún valor.



newt_label

(PECL newt >= 0.1)

newt_label

Descripción

resource newt_label ( int $left , int $top , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

text

Valores devueltos



newt_listbox_append_entry

(PECL newt >= 0.1)

newt_listbox_append_entry

Descripción

void newt_listbox_append_entry ( resource $listbox , string $text , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

text

data

Valores devueltos

No devuelve ningún valor.



newt_listbox_clear_selection

(PECL newt >= 0.1)

newt_listbox_clear_selection

Descripción

void newt_listbox_clear_selection ( resource $listbox )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

Valores devueltos

No devuelve ningún valor.



newt_listbox_clear

(PECL newt >= 0.1)

newt_listbox_clear

Descripción

void newt_listbox_clear ( resource $listobx )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listobx

Valores devueltos

No devuelve ningún valor.



newt_listbox_delete_entry

(PECL newt >= 0.1)

newt_listbox_delete_entry

Descripción

void newt_listbox_delete_entry ( resource $listbox , mixed $key )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

key

Valores devueltos

No devuelve ningún valor.



newt_listbox_get_current

(PECL newt >= 0.1)

newt_listbox_get_current

Descripción

string newt_listbox_get_current ( resource $listbox )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

Valores devueltos



newt_listbox_get_selection

(PECL newt >= 0.1)

newt_listbox_get_selection

Descripción

array newt_listbox_get_selection ( resource $listbox )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

Valores devueltos



newt_listbox_insert_entry

(PECL newt >= 0.1)

newt_listbox_insert_entry

Descripción

void newt_listbox_insert_entry ( resource $listbox , string $text , mixed $data , mixed $key )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

text

data

key

Valores devueltos

No devuelve ningún valor.



newt_listbox_item_count

(PECL newt >= 0.1)

newt_listbox_item_count

Descripción

int newt_listbox_item_count ( resource $listbox )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

Valores devueltos



newt_listbox_select_item

(PECL newt >= 0.1)

newt_listbox_select_item

Descripción

void newt_listbox_select_item ( resource $listbox , mixed $key , int $sense )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

key

sense

Valores devueltos

No devuelve ningún valor.



newt_listbox_set_current_by_key

(PECL newt >= 0.1)

newt_listbox_set_current_by_key

Descripción

void newt_listbox_set_current_by_key ( resource $listbox , mixed $key )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

key

Valores devueltos

No devuelve ningún valor.



newt_listbox_set_current

(PECL newt >= 0.1)

newt_listbox_set_current

Descripción

void newt_listbox_set_current ( resource $listbox , int $num )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

num

Valores devueltos

No devuelve ningún valor.



newt_listbox_set_data

(PECL newt >= 0.1)

newt_listbox_set_data

Descripción

void newt_listbox_set_data ( resource $listbox , int $num , mixed $data )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

num

data

Valores devueltos

No devuelve ningún valor.



newt_listbox_set_entry

(PECL newt >= 0.1)

newt_listbox_set_entry

Descripción

void newt_listbox_set_entry ( resource $listbox , int $num , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

num

text

Valores devueltos

No devuelve ningún valor.



newt_listbox_set_width

(PECL newt >= 0.1)

newt_listbox_set_width

Descripción

void newt_listbox_set_width ( resource $listbox , int $width )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

listbox

width

Valores devueltos

No devuelve ningún valor.



newt_listbox

(PECL newt >= 0.1)

newt_listbox

Descripción

resource newt_listbox ( int $left , int $top , int $height [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

height

flags

Valores devueltos



newt_listitem_get_data

(PECL newt >= 0.1)

newt_listitem_get_data

Descripción

mixed newt_listitem_get_data ( resource $item )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

item

Valores devueltos



newt_listitem_set

(PECL newt >= 0.1)

newt_listitem_set

Descripción

void newt_listitem_set ( resource $item , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

item

text

Valores devueltos

No devuelve ningún valor.



newt_listitem

(PECL newt >= 0.1)

newt_listitem

Descripción

resource newt_listitem ( int $left , int $top , string $text , bool $is_default , resouce $prev_item , mixed $data [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

text

is_default

prev_item

data

flags

Valores devueltos



newt_open_window

(PECL newt >= 0.1)

newt_open_windowOpen a window of the specified size and position

Descripción

int newt_open_window ( int $left , int $top , int $width , int $height [, string $title ] )

Open a window of the specified size and position.

Parámetros

left

Location of the upper left-hand corner of the window (column number)

top

Location of the upper left-hand corner of the window (row number)

width

Window width

height

Window height

title

Window title

Valores devueltos

Returns 1 on success, 0 on failure.

Ver también



newt_pop_help_line

(PECL newt >= 0.1)

newt_pop_help_lineReplaces the current help line with the one from the stack

Descripción

void newt_pop_help_line ( void )

Replaces the current help line with the one from the stack.

Nota:

It's important not to call to newt_pop_help_line() more than newt_push_help_line().

Valores devueltos

No devuelve ningún valor.

Ver también



newt_pop_window

(PECL newt >= 0.1)

newt_pop_windowRemoves the top window from the display

Descripción

void newt_pop_window ( void )

Removes the top window from the display, and redraws the display areas which the window overwrote.

Valores devueltos

No devuelve ningún valor.

Ver también



newt_push_help_line

(PECL newt >= 0.1)

newt_push_help_lineSaves the current help line on a stack, and displays the new line

Descripción

void newt_push_help_line ([ string $text ] )

Saves the current help line on a stack, and displays the new line.

Parámetros

text

New help text message

Nota:

If not specified, the help line is cleared.

Valores devueltos

No devuelve ningún valor.

Ver también



newt_radio_get_current

(PECL newt >= 0.1)

newt_radio_get_current

Descripción

resource newt_radio_get_current ( resource $set_member )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

set_member

Valores devueltos



newt_radiobutton

(PECL newt >= 0.1)

newt_radiobutton

Descripción

resource newt_radiobutton ( int $left , int $top , string $text , bool $is_default [, resource $prev_button ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

text

is_default

prev_button

Valores devueltos



newt_redraw_help_line

(PECL newt >= 0.1)

newt_redraw_help_line

Descripción

void newt_redraw_help_line ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

Valores devueltos

No devuelve ningún valor.



newt_reflow_text

(PECL newt >= 0.1)

newt_reflow_text

Descripción

string newt_reflow_text ( string $text , int $width , int $flex_down , int $flex_up , int &$actual_width , int &$actual_height )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

text

width

flex_down

flex_up

actual_width

actual_height

Valores devueltos



newt_refresh

(PECL newt >= 0.1)

newt_refreshUpdates modified portions of the screen

Descripción

void newt_refresh ( void )

To increase performance, newt only updates the display when it needs to, not when the program tells it to write to the terminal. Applications can force newt to immediately update modified portions of the screen by calling this function.

Valores devueltos

No devuelve ningún valor.



newt_resize_screen

(PECL newt >= 0.1)

newt_resize_screen

Descripción

void newt_resize_screen ([ bool $redraw ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

redraw

Valores devueltos

No devuelve ningún valor.



newt_resume

(PECL newt >= 0.1)

newt_resumeResume using the newt interface after calling newt_suspend()

Descripción

void newt_resume ( void )

Resume using the newt interface after calling newt_suspend().

Valores devueltos

No devuelve ningún valor.

Ver también

  • newt_suspend() - Tells newt to return the terminal to its initial state



newt_run_form

(PECL newt >= 0.1)

newt_run_formRuns a form

Descripción

resource newt_run_form ( resource $form )

This function runs the form passed to it.

Parámetros

form

Form component

Valores devueltos

The component which caused the form to stop running.

Nota:

Notice that this function doesn't fit in with newt's normal naming convention. It is an older interface which will not work for all forms. It was left in newt only for legacy applications. It is a simpler interface than the new newt_form_run() though, and is still used quite often as a result. When an application is done with a form, it destroys the form and all of the components the form contains.

Ver también



newt_scale_set

(PECL newt >= 0.1)

newt_scale_set

Descripción

void newt_scale_set ( resource $scale , int $amount )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

scale

amount

Valores devueltos

No devuelve ningún valor.



newt_scale

(PECL newt >= 0.1)

newt_scale

Descripción

resource newt_scale ( int $left , int $top , int $width , int $full_value )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

width

full_value

Valores devueltos



newt_scrollbar_set

(PECL newt >= 0.1)

newt_scrollbar_set

Descripción

void newt_scrollbar_set ( resource $scrollbar , int $where , int $total )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

scrollbar

where

total

Valores devueltos

No devuelve ningún valor.



newt_set_help_callback

(PECL newt >= 0.1)

newt_set_help_callback

Descripción

void newt_set_help_callback ( mixed $function )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

function

Valores devueltos

No devuelve ningún valor.



newt_set_suspend_callback

(PECL newt >= 0.1)

newt_set_suspend_callbackSet a callback function which gets invoked when user presses the suspend key

Descripción

void newt_set_suspend_callback ( callable $function , mixed $data )

Set a callback function which gets invoked when user presses the suspend key (normally ^Z). If no suspend callback is registered, the suspend keystroke is ignored.

Parámetros

function

A callback function, which accepts one argument: data

data

This data is been passed to the callback function

Valores devueltos

No devuelve ningún valor.

Ver también

  • newt_suspend() - Tells newt to return the terminal to its initial state
  • newt_resume() - Resume using the newt interface after calling newt_suspend



newt_suspend

(PECL newt >= 0.1)

newt_suspendTells newt to return the terminal to its initial state

Descripción

void newt_suspend ( void )

Tells newt to return the terminal to its initial state. Once this is done, the application can suspend itself (by sending itself a SIGTSTP, fork a child program, or do whatever else it likes).

Valores devueltos

No devuelve ningún valor.

Ver también

  • newt_resume() - Resume using the newt interface after calling newt_suspend



newt_textbox_get_num_lines

(PECL newt >= 0.1)

newt_textbox_get_num_lines

Descripción

int newt_textbox_get_num_lines ( resource $textbox )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

textbox

Valores devueltos



newt_textbox_reflowed

(PECL newt >= 0.1)

newt_textbox_reflowed

Descripción

resource newt_textbox_reflowed ( int $left , int $top , char $*text , int $width , int $flex_down , int $flex_up [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

*text

width

flex_down

flex_up

flags

Valores devueltos



newt_textbox_set_height

(PECL newt >= 0.1)

newt_textbox_set_height

Descripción

void newt_textbox_set_height ( resource $textbox , int $height )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

textbox

height

Valores devueltos

No devuelve ningún valor.



newt_textbox_set_text

(PECL newt >= 0.1)

newt_textbox_set_text

Descripción

void newt_textbox_set_text ( resource $textbox , string $text )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

textbox

text

Valores devueltos

No devuelve ningún valor.



newt_textbox

(PECL newt >= 0.1)

newt_textbox

Descripción

resource newt_textbox ( int $left , int $top , int $width , int $height [, int $flags ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

width

height

flags

Valores devueltos



newt_vertical_scrollbar

(PECL newt >= 0.1)

newt_vertical_scrollbar

Descripción

resource newt_vertical_scrollbar ( int $left , int $top , int $height [, int $normal_colorset [, int $thumb_colorset ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

left

top

height

normal_colorset

thumb_colorset

Valores devueltos



newt_wait_for_key

(PECL newt >= 0.1)

newt_wait_for_keyDoesn't return until a key has been pressed

Descripción

void newt_wait_for_key ( void )

This function doesn't return until a key has been pressed. The keystroke is then ignored. If a key is already in the terminal's buffer, this function discards a keystroke and returns immediately.

Valores devueltos

No devuelve ningún valor.

Ver también

  • newt_clear_key_buffer() - Discards the contents of the terminal's input buffer without waiting for additional input



newt_win_choice

(PECL newt >= 0.1)

newt_win_choice

Descripción

int newt_win_choice ( string $title , string $button1_text , string $button2_text , string $format [, mixed $args [, mixed $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

button1_text

button2_text

format

args

Valores devueltos



newt_win_entries

(PECL newt >= 0.1)

newt_win_entries

Descripción

int newt_win_entries ( string $title , string $text , int $suggested_width , int $flex_down , int $flex_up , int $data_width , array &$items , string $button1 [, string $... ] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

text

suggested_width

flex_down

flex_up

data_width

items

button1

button2

Valores devueltos

Ejemplos

Ejemplo #1 A newt_win_entries() example

<?php

newt_init
();
newt_cls();

$entries[] = array('text' => 'First name:''value' => &$f_name);
$entries[] = array('text' => 'Last name:',  'value' => &$l_name);

$rc newt_win_entries("User information""Please enter your credentials:"507730$entries"Ok""Back");
newt_finished ();

if (
$rc != 2) {
    echo 
"Your name is: $f_name $l_name\n";
}
?>



newt_win_menu

(PECL newt >= 0.1)

newt_win_menu

Descripción

int newt_win_menu ( string $title , string $text , int $suggestedWidth , int $flexDown , int $flexUp , int $maxListHeight , array $items , int &$listItem [, string $button1 [, string $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

text

suggestedWidth

flexDown

flexUp

maxListHeight

items

listItem

button1

Valores devueltos

No devuelve ningún valor.



newt_win_message

(PECL newt >= 0.1)

newt_win_message

Descripción

void newt_win_message ( string $title , string $button_text , string $format [, mixed $args [, mixed $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

button_text

format

args

Valores devueltos

No devuelve ningún valor.



newt_win_messagev

(PECL newt >= 0.1)

newt_win_messagev

Descripción

void newt_win_messagev ( string $title , string $button_text , string $format , array $args )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

button_text

format

args

Valores devueltos

No devuelve ningún valor.



newt_win_ternary

(PECL newt >= 0.1)

newt_win_ternary

Descripción

int newt_win_ternary ( string $title , string $button1_text , string $button2_text , string $button3_text , string $format [, mixed $args [, mixed $... ]] )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.

Parámetros

title

Its description

button1_text

Its description

button2_text

Its description

button3_text

Its description

format

Its description

args

Its description

Valores devueltos

What the function returns, first on success, then on failure. See also the &return.success; entity


Tabla de contenidos




GNU Readline


Introducción

Las funciones readline implementan una interfaz con la biblioteca GNU Readline. Estas son funciones que ofrecen líneas de comando editables. Un ejemplo es Bash que permite utilizar las teclas de flecha para insertar caracteres o desplazarse a través del historial de comandos. Debido a la naturaleza interactiva de esta biblioteca, será de poca utilidad para la creación de aplicaciones Web, pero puede ser útil cuando se escriben scripts utilizando la línea de comandos.

Nota: Esta extensión no está disponible en plataformas Windows.



Instalación/Configuración

Tabla de contenidos


Requerimientos

Para usar las funciones readline, es necesario instalar libreadline. Se puede encontrar libreadline en la página principal del proyecto GNU Readline, en » http://cnswww.cns.cwru.edu/~chet/readline/rltop.html. Este proyecto es administrado por Chet Ramey, quien es también el autor de Bash.

También puede utilizar estas funciones con la libreria libedit, un reemplazo no-GPL para la biblioteca readline. La biblioteca libedit tiene licencia BSD y está disponible para su descarga desde » http://www.thrysoee.dk/editline/.



Instalación

Para utilizar estas funciones, debe compilar la versión CGI o CLI de PHP con soporte para readline. Es necesario configurar PHP --with-readline[=DIR] . Si desea utilizar el reemplazo de readline libedit, es necesario configurar PHP --with-libedit[=DIR] .



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración Readline
Nombre Por defecto Cambiable Historial de cambios
cli.pager "" PHP_INI_ALL Disponible desde PHP 5.4.0.
cli.prompt "\\b \\> " PHP_INI_ALL Disponible desde PHP 5.4.0.

He aquí una breve explicación de las directivas de configuración.

cli.pager string

Herramienta externa para mostrar la salida de la línea de comandos.

cli.prompt string

Véase Línea de Comandos.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Funciones Readline


readline_add_history

(PHP 4, PHP 5)

readline_add_historyAdds a line to the history

Descripción

bool readline_add_history ( string $line )

This function adds a line to the command line history.

Parámetros

line

The line to be added in the history.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



readline_callback_handler_install

(PHP 5 >= 5.1.0)

readline_callback_handler_installInitializes the readline callback interface and terminal, prints the prompt and returns immediately

Descripción

bool readline_callback_handler_install ( string $prompt , callable $callback )

Sets up a readline callback interface then prints prompt and immediately returns. Calling this function twice without removing the previous callback interface will automatically and conveniently overwrite the old interface.

The callback feature is useful when combined with stream_select() as it allows interleaving of IO and user input, unlike readline().

Parámetros

prompt

The prompt message.

callback

The callback function takes one parameter; the user input returned.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Readline Callback Interface Example

<?php
function rl_callback($ret)
{
    global 
$c$prompting;

    echo 
"You entered: $ret\n";
    
$c++;

    if (
$c 10) {
        
$prompting false;
        
readline_callback_handler_remove();
    } else {
        
readline_callback_handler_install("[$c] Enter something: "'rl_callback');
    }
}

$c 1;
$prompting true;

readline_callback_handler_install("[$c] Enter something: "'rl_callback');

while (
$prompting) {
    
$w NULL;
    
$e NULL;
    
$n stream_select($r = array(STDIN), $w$enull);
    if (
$n && in_array(STDIN$r)) {
        
// read a character, will call the callback when a newline is entered
        
readline_callback_read_char();
    }
}

echo 
"Prompting disabled. All done.\n";
?>

Ver también

  • readline_callback_handler_remove() - Removes a previously installed callback handler and restores terminal settings
  • readline_callback_read_char() - Reads a character and informs the readline callback interface when a line is received
  • stream_select() - Ejecuta el equivalente de la llamada al sistema select() sobre las matrices de flujos dadas con un tiempo de espera especificado por tv_sec y tv_usec



readline_callback_handler_remove

(PHP 5 >= 5.1.0)

readline_callback_handler_removeRemoves a previously installed callback handler and restores terminal settings

Descripción

bool readline_callback_handler_remove ( void )

Removes a previously installed callback handler and restores terminal settings.

Valores devueltos

Returns TRUE if a previously installed callback handler was removed, or FALSE if one could not be found.

Ejemplos

See readline_callback_handler_install() for an example of how to use the readline callback interface.

Ver también



readline_callback_read_char

(PHP 5 >= 5.1.0)

readline_callback_read_charReads a character and informs the readline callback interface when a line is received

Descripción

void readline_callback_read_char ( void )

Reads a character of user input. When a line is received, this function informs the readline callback interface installed using readline_callback_handler_install() that a line is ready for input.

Valores devueltos

No devuelve ningún valor.

Ejemplos

See readline_callback_handler_install() for an example of how to use the readline callback interface.

Ver también



readline_clear_history

(PHP 4, PHP 5)

readline_clear_historyClears the history

Descripción

bool readline_clear_history ( void )

This function clears the entire command line history.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



readline_completion_function

(PHP 4, PHP 5)

readline_completion_functionRegisters a completion function

Descripción

bool readline_completion_function ( callable $function )

This function registers a completion function. This is the same kind of functionality you'd get if you hit your tab key while using Bash.

Parámetros

function

You must supply the name of an existing function which accepts a partial command line and returns an array of possible matches.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



readline_info

(PHP 4, PHP 5)

readline_infoGets/sets various internal readline variables

Descripción

mixed readline_info ([ string $varname [, string $newvalue ]] )

Gets or sets various internal readline variables.

Parámetros

varname

A variable name.

newvalue

If provided, this will be the new value of the setting.

Valores devueltos

If called with no parameters, this function returns an array of values for all the setting readline uses. The elements will be indexed by the following values: done, end, erase_empty_line, library_version, line_buffer, mark, pending_input, point, prompt, readline_name, and terminal_name.

If called with one or two parameters, the old value is returned.



readline_list_history

(PHP 4, PHP 5)

readline_list_historyLists the history

Descripción

array readline_list_history ( void )

Gets the entire command line history.

Valores devueltos

Returns an array of the entire command line history. The elements are indexed by integers starting at zero.



readline_on_new_line

(PHP 5 >= 5.1.0)

readline_on_new_lineInform readline that the cursor has moved to a new line

Descripción

void readline_on_new_line ( void )

Tells readline that the cursor has moved to a new line.

Valores devueltos

No devuelve ningún valor.



readline_read_history

(PHP 4, PHP 5)

readline_read_historyReads the history

Descripción

bool readline_read_history ([ string $filename ] )

This function reads a command history from a file.

Parámetros

filename

Path to the filename containing the command history.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



readline_redisplay

(PHP 5 >= 5.1.0)

readline_redisplayRedibuja la vista

Descripción

void readline_redisplay ( void )

Redibuja readline para volver a dibujar la vista.

Valores devueltos

No devuelve ningún valor.



readline_write_history

(PHP 4, PHP 5)

readline_write_historyWrites the history

Descripción

bool readline_write_history ([ string $filename ] )

This function writes the command history to a file.

Parámetros

filename

Path to the saved file.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.



readline

(PHP 4, PHP 5)

readlineReads a line

Descripción

string readline ([ string $prompt ] )

Reads a single line from the user. You must add this line to the history yourself using readline_add_history().

Parámetros

prompt

You may specify a string with which to prompt the user.

Valores devueltos

Returns a single string from the user. The line returned has the ending newline removed.

Ejemplos

Ejemplo #1 readline() Example

<?php
//get 3 commands from user
for ($i=0$i 3$i++) {
        
$line readline("Command: ");
        
readline_add_history($line);
}

//dump history
print_r(readline_list_history());

//dump variables
print_r(readline_info());
?>


Tabla de contenidos





Extensiones de compresión y archivos


Bzip2


Introducción

Las funciones bzip2 se utilizan para poder leer y escribir transparentemente ficheros comprimidos con bzip2 (.bz2).



Instalación/Configuración

Tabla de contenidos


Requerimientos

Este módulo usa las funciones de la librería » bzip2 por Julian Seward. Este módulo requiere bzip2/libbzip2 version >= 1.0.x.



Instalación

El soporte de Bzip2 en PHP no está activado por defecto. Se necesita usar la opción de configuración --with-bz2[=DIR] al compilar PHP para activar soporte de bzip2.



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión define un tipo de recurso: apunta a un archivo identificando el fichero bz2 a trabajar.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Ejemplos

Este ejemplo abre un fichero temporal y escribe una cadena de prueba en el, muestra el contenido del fichero.

Ejemplo #1 Pequeño ejemplo de bzip2

<?php

$filename 
"/tmp/testfile.bz2";
$str "Esto es una cadena de prueba.\n";

// Abriendo fichero para escribir
$bz bzopen($filename"w");

// escribe la cadena en el fichero
bzwrite($bz$str);

// cierra el fichero
bzclose($bz);

// abre el fichero para escritura
$bz bzopen($filename"r");

// lee 10 caracteres
echo bzread($bz10);

// muestra salida hasta el final del fichero (o los siguientes 1024 caracteres) y lo cierra.
echo bzread($bz);

bzclose($bz);

?>


Funciones de Bzip2


bzclose

(PHP 4 >= 4.0.4, PHP 5)

bzcloseCierra un fichero bzip2

Descripción

int bzclose ( resource $bz )

Cierra el dado puntero del fichero bzip2.

Parámetros

bz

El puntero del fichero. Debe ser un puntero válido a un fichero abierto con bzopen() satisfactoriamente.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también

  • bzopen() - Abre un fichero comprimido con bzip2



bzcompress

(No hay información de versión disponible, podría estar únicamente en SVN)

bzcompressComprime una cadena en datos codificados en bzip2

Descripción

mixed bzcompress ( string $source [, int $blocksize = 4 [, int $workfactor = 0 ]] )

bzcompress() comprime la cadena dada y la devuelve como datos codificados con bzip2.

Parámetros

source

La cadena a comprimir.

blocksize

Especifica el blocksize usado durante la compresión y debería ser un número entre 1 y 9 siendo 9 la máxima compresión, pero también utiliza más recursos.

workfactor

Controla como se comportan las fases de compresión cuando se presenta en el peor de los casos, datos que se repiten continuamente. El valor puede estar entre 0 y 250 siendo 0 un caso especial.

Independientemente de workfactor, el valor generado de salida es el mismo.

Valores devueltos

La cadena comprimida, o el número de error en caso de error.

Ejemplos

Ejemplo #1 Comprimiendo datos

<?php
$str 
"sample data";
$bzstr bzcompress($str9);
echo 
$bzstr;
?>

Ver también



bzdecompress

(PHP 4 >= 4.0.4, PHP 5)

bzdecompressDescomprime datos codificados con bzip2

Descripción

mixed bzdecompress ( string $source [, int $small = 0 ] )

bzdecompress() descomprime el string pasado por parámetro que contiene los datos codificados en bzip2.

Parámetros

source

String a descomprimir.

small

Si es TRUE, se usará un algoritmo de descompresión alternativo que utiliza menos memoria (disminuye el requisito máximo de memoria a entorno a 2300K) pero por otra parte es la mitad de lento aproximadamente.

Consulte la » documentación de bzip2 para más información sobre este comportamiento.

Valores devueltos

El string descromprimido, o el número de error en caso de error.

Ejemplos

Ejemplo #1 Descompresión de un String

<?php
$start_str 
"This is not an honest face?";
$bzstr bzcompress($start_str);

echo 
"String Comprimido: ";
echo 
$bzstr;
echo 
"\n<br />\n";

$str bzdecompress($bzstr);
echo 
"String Descomprimido: ";
echo 
$str;
echo 
"\n<br />\n";
?>

Ver también

  • bzcompress() - Comprime una cadena en datos codificados en bzip2



bzerrno

(PHP 4 >= 4.0.4, PHP 5)

bzerrnoDevuelve el número de erro de bzip2

Descripción

int bzerrno ( resource $bz )

Devuelve el número de error de cualquier error bzip2 devuelto por el puntero del fichero dado.

Parámetros

bz

El puntero del fichero. Debe ser un puntero a un fichero abierto con bzopen() satisfactoriamente.

Valores devueltos

Devuelve el número de error como entero.

Ver también

  • bzerror() - Devuelve el número de error y la cadena del error de bzip2 en un array
  • bzerrstr() - Devuelve una cadena de error de bzip2



bzerror

(PHP 4 >= 4.0.4, PHP 5)

bzerror Devuelve el número de error y la cadena del error de bzip2 en un array

Descripción

array bzerror ( resource $bz )

Devuelve el número de error y la cadena de error de cualquier error bzip2 devuelto por el puntero del fichero dado.

Parámetros

bz

El puntero del fichero. Debe ser un puntero a un fichero abierto con bzopen() satisfactoriamente.

Valores devueltos

Devuelve un array asociativo, con el código de error en la entrada errno y el mensaje de error en la entrada errstr.

Ejemplos

Ejemplo #1 Ejemplo de bzerror()

<?php
$error 
bzerror($bz);

echo 
$error["errno"];
echo 
$error["errstr"];
?>

Ver también

  • bzerrno() - Devuelve el número de erro de bzip2
  • bzerrstr() - Devuelve una cadena de error de bzip2



bzerrstr

(PHP 4 >= 4.0.4, PHP 5)

bzerrstrDevuelve una cadena de error de bzip2

Descripción

string bzerrstr ( resource $bz )

Obtiene la cadena de error de cualquier error bzip2 devuelto por el puntero dado.

Parámetros

bz

El puntero del fichero. Debe ser un puntero a un fichero abierto con bzopen() satisfactoriamente.

Valores devueltos

Devuelve una cadena que contiene el mensaje de error.

Ver también

  • bzerrno() - Devuelve el número de erro de bzip2
  • bzerror() - Devuelve el número de error y la cadena del error de bzip2 en un array



bzflush

(PHP 4 >= 4.0.4, PHP 5)

bzflushFuerza la escritura de todos los datos del búfer

Descripción

int bzflush ( resource $bz )

Fuerza la escritura de todos los datos del búfer bzip2 para el puntero del fichero bz.

Parámetros

bz

El puntero del fichero. Debe ser un puntero a un fichero abierto con bzopen() satisfactoriamente.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también

  • bzread() - Lectura segura de ficheros bzip2
  • bzwrite() - Escribe en un fichero bzip2 de forma segura binariamente



bzopen

(PHP 4 >= 4.0.4, PHP 5)

bzopenAbre un fichero comprimido con bzip2

Descripción

resource bzopen ( string $filename , string $mode )

bzopen() abre un fichero bzip2 (.bz2) para lectura o escritura.

Parámetros

filename

El nombre del fichero a abrir.

mode

Similar a la función fopen(), solamente 'r' (lectura) y 'w' (escritura) están soportados. Todo lo demás hará que bzopen devuelva FALSE.

Valores devueltos

Si al abrir el fichero se produce un error, bzopen() devolverá FALSE, en caso contrario devolverá el puntero del nuevo fichero abierto.

Ejemplos

Ejemplo #1 Ejemplo de bzopen()

<?php

$file 
"/tmp/foo.bz2";
$bz bzopen($file"r") or die("No se pudo abrir el fichero $file para lectura");

bzclose($bz);

?>

Ver también



bzread

(PHP 4 >= 4.0.4, PHP 5)

bzreadLectura segura de ficheros bzip2

Descripción

string bzread ( resource $bz [, int $length = 1024 ] )

bzread() lee del puntero de fichero bzip2 pasado como parámetro.

La lectura finaliza una vez que se han leído length bytes (descomprimidos) o cuando se alcanza EOF, lo primero que suceda.

Parámetros

bz

El puntero al fichero. Tiene que ser válido y debe apuntar a un fichero que se haya abierto con éxito con bzopen().

length

Si no se especifica, bzread() leerá bloques de 1024 bytes (descomprimidos) al momento. Un máximo de 8192 bytes descomprimidos serán leídos.

Valores devueltos

Devuelve la información descomprimida, o FALSE en caso de error.

Ejemplos

Ejemplo #1 ejemplo de bzread()

<?php

$file 
"/tmp/foo.bz2";
$bz bzopen($file"r") or die("No se ha podido abrir $file");

$decompressed_file '';
while (!
feof($bz)) {
  
$decompressed_file .= bzread($bz4096);
}
bzclose($bz);

echo 
"El contenido de $file es: <br />\n";
echo 
$decompressed_file;

?>

Ver también

  • bzwrite() - Escribe en un fichero bzip2 de forma segura binariamente
  • feof() - Comprueba si el puntero a un archivo está al final del archivo
  • bzopen() - Abre un fichero comprimido con bzip2



bzwrite

(PHP 4 >= 4.0.4, PHP 5)

bzwriteEscribe en un fichero bzip2 de forma segura binariamente

Descripción

int bzwrite ( resource $bz , string $data [, int $length ] )

bzwrite() escribe una cadena en el fichero gzip2 dado.

Parámetros

bz

El puntero del fichero. Debe apuntar a un fichero abierto satisfactoriamente con bzopen().

data

Los datos a escribir.

length

Si se proporciona, la escritura terminará después de que el length (no comprimido) en bytes hayan sido escritos o se haya llegado al final de data, lo que llegue primero.

Valores devueltos

Devuelve el número de bytes escritos, o FALSE en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de bzwrite()

<?php
$str 
"uncompressed data";
$bz bzopen("/tmp/foo.bz2""w");
bzwrite($bz$strstrlen($str));
bzclose($bz);
?>

Ver también

  • bzread() - Lectura segura de ficheros bzip2
  • bzopen() - Abre un fichero comprimido con bzip2


Tabla de contenidos

  • bzclose — Cierra un fichero bzip2
  • bzcompress — Comprime una cadena en datos codificados en bzip2
  • bzdecompress — Descomprime datos codificados con bzip2
  • bzerrno — Devuelve el número de erro de bzip2
  • bzerror — Devuelve el número de error y la cadena del error de bzip2 en un array
  • bzerrstr — Devuelve una cadena de error de bzip2
  • bzflush — Fuerza la escritura de todos los datos del búfer
  • bzopen — Abre un fichero comprimido con bzip2
  • bzread — Lectura segura de ficheros bzip2
  • bzwrite — Escribe en un fichero bzip2 de forma segura binariamente



LZF


Introducción

LZF es un algoritmo de compresión muy rápido, ideal para ahorrar espacio con solamente un ligero costo de velocidad. Puede optimizarse para velocidad o espacio a la hora de compilar. Esta extensión utiliza la librería » liblzf por Marc Lehmann para sus operaciones.



Instalación/Configuración

Tabla de contenidos


Requerimientos

No se requiere de ninguna biblioteca externa para compilar esta extensión.



Instalación

Esta extensión » PECL no se distribuye con PHP. Información para la instalación de esta extensión PECL puede ser encontrada en el capítulo del manual titulado Instalación de extensiones PECL. Información adicional tal como nuevos lanzamientos, descargas, archivos fuente, mantenimiento de información, y un CHANGELOG, se encontrará aquí: » http://pecl.php.net/package/lzf.

Pata utilizar estas funciones se debe compilar PHP con soporte para lzf empleando la opción de configuración --with-lzf[=DIR] . También se puede pasar --enable-lzf-better-compression para optimizar LZF para espacio en vez de para velocidad.

Los usuarios de Windows habilitarán php_lzf.dll dentro de php.ini para utilizar estas funciones. No hay una DLL disponible para esta extensión PECL actualmente. Vea también la sección Compilando en Windows .



Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración definidas en php.ini.



Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.




Constantes predefinidas

Esta extensión no tiene ninguna constante definida.



Funciones LZF


lzf_compress

(PECL lzf >= 0.1.0)

lzf_compress Compresión LZF

Descripción

string lzf_compress ( string $data )

lzf_compress() comprime el string data dado utilizando codificación LZF.

Parámetros

data

El string a comprimir.

Valores devueltos

Devuelve los datos comprimidos o FALSE si ocurrió un error.

Ver también



lzf_decompress

(PECL lzf >= 0.1.0)

lzf_decompress Descompresión LZF

Descripción

string lzf_decompress ( string $data )

lzf_compress() descomprime la cadena data dada que contiene los datos codificados en lzf.

Parámetros

data

La cadena comprimida.

Valores devueltos

Devuelve los datos descomprimidos o FALSE si ocurrió un error.

Ver también



lzf_optimized_for

(PECL lzf >= 1.0.0)

lzf_optimized_for Determina para qué fue optimizada la extensión LZF

Descripción

int lzf_optimized_for ( void )

Determina para qué fue optimizada la extensión LZF durante la compilación.

Valores devueltos

Devuelve 1 si LZF fue optimizada para velocidad, 0 para compresión.


Tabla de contenidos




Phar


Introducción

La extensión phar proporciona una manera de poner aplicaciones PHP enteras dentro de un únivo fichero llamado "phar" (PHP Archive) para una distribución e instalación sencilla.. Además de proporcionar este servicio, la extensión phar también provee de un método de abstracción de formato de fichero para crear y manipular ficheros tar y zip a través de la clase PharData, tal como PDO proporciona una interfaz unificada para acceder a diferentes bases de datos. A diferencia de PDO, la cual no puede realizar conversiones entre bases de datos diferentes, Phar también realiza conversiones entre los formatos de ficheros tar, zip phar con una sencilla línea de código. Véase Phar::convertToExecutable() para un ejemplo.

¿Qué es phar? Lo archivos Phar están mejor caracterizados como una forma conveniente de agrupar varios ficheros en un único fichero. Como tal, un archvo phar proporciona una forma para distribuir una aplicación PHP completa en un único fichero y ejecutarla desde ese mismo fichero sin necesidad de extraerlo en el disco. Además, los archivos phar pueden ser ejecutados por PHP fácilmente al igual que cualquier otro fichero, tanto desde la línea de comandos como desde un servidor web. Phar a web server. Phar es como una memoria USB para aplicaciones PHP.

Phar implementa esta funcionalidad a través de una Envoltura de Flujo. Normalmente, para utilizar un fichero externo dentro de un script de PHP, se debería usar include

Ejemplo #1 Utilizar un fichero externo

<?php
 
include '/ruta/al/fichero/externo.php';
 
?>

Puede considerarse que PHP traduce realemte /ruta/al/fichero/externo.php a una envoltura de flujo como file:///ruta/al/fichero/externo.php, y bajo la cubierta de hecho hace uso de funciones de flujo de envolturas de flujo de ficheros para acceder a todos los ficheros locales.

Para utilizar un fichero llamado fichero.php contenido en un archivo phar /ruta/a/miphar.phar, la sintaxis es muy similar a la sintaxis file:// de arriba.

Ejemplo #2 Utilizar un fichero dentro de un archivo phar

<?php
 
include 'phar:///ruta/a/miphar.phar/fichero.php';
 
?>

De hecho, se puede tratar un archivo phar exactamente como si fuera un disco externo, usando cualquiera de las funciones relacionadas con fopen(), opendir() y funciones relacionadas con mkdir() para leer, cambiar, o crear nuevos ficheros y directorios dentro del archivo phar. Esto permite que aplicaciones de PHP completas sean distribuidas en un único fichero y ejecutarlas directamente desde ese fichero.

El uso más común de un archivo phar es distribuir una aplicación completa en un único fichero. Por ejemplo, el Instalador de PEAR que se incluye con las versiones de PHP está distribuido como un archivo phar. Para usar un archivo phar distribuido de esta forma, se puede ejecutar en línea de comandos o mediante un servidor web.

Los archivos phar pueden ser distribuidos como archivos tar, zip, o como formato de fichero phar personalizado diseñado específicamente por la extensión phar. Cada formato de fichero tiene sus ventajas y desventajas. Los formatos de fichero tar y zip se pueden leer o extraer mediante cualquier herramienta de terceros que pueda leer el formato, pero necesia la extensión phar para ejecutarlo con PHP. El formato de fichero phar es personalizado y único para la extensión phar, y sólo puede ser creado por la extensión phar o el paquete de PEAR » PHP_Archive, pero tiene la ventaja de que las apliaciones creadas en este formato se ejecutarán incluso si la extensión phar no está habilitada.

En otras palabra, incluso con la extensión phar deshabilitada, se puede ejecutar o incluir un archivo basado en phar. El acceso a ficheros dentro de un archivo phar solamente es posible con la extesnión phar a menos que el archivo phar fuese creado por PHP_Archive.

La extensión phar también es capaz de convertir un archivo phar desde los formatos de fichero tar a zip o a phar en un único comando:

Ejemplo #3 Convertir un archivo phar, desde phar al formato de fichero tar

<?php
 $phar 
= new Phar('miphar.phar');
 
$pgz $phar->convertToExecutable(Phar::TARPhar::GZ); // crea miphar.phar.tar.gz
 
?>

Phar puede comprimir ficheros individuales o un archivo entero usando la compresión gzip o la bzip2, y puede verificar la integridad del archivo automáticamente a través del uso de las signaturas md5(), sha1(), sha256(), o sha512().

Por último, la extensión Phar se preocupa de la seguridad, y deshabilita el acceso a la escritura de archivos phar ejecutables de manera predeterminada, y requiere la deshabilitación a nivel de sistema del ajuste phar.readonly de php.ini para crear o modificar archivos phar. Los archivos tar y zip normales sin una rutina de interoperabilidad ejecutable siempre pueden ser creador o modificados utilizando la clase PharData.

Si está creando aplicaciones para su distribución, le interesará leer Cómo crear Archivos Phar. Si desea más información de las diferencias entre los tres formatos de ficheros que soporta phar, debería leer Phar, Tar y Zip.

Si usa aplicaciones phar, existen consejos útiles en Cómo utilizar Archivos Phar

La palabra phar es una contracción de PHP y Archive y está basada indirectamente en el familiar jar (Java Archive) para los desarrolladores Java.

La implementación de archivos Phar está basada en el paquete de PEAR » PHP_Archive, y los detalles de implementación son similares, aunque la extensión Phar es mucho más potente. Además, la extensión Phar permite a la mayoría de las aplicaciones de PHP ejecutarse sin modificaciones, mientras que los archivos phar basados en PHP_Archive a menudo requieren una extensa modificiación para que funcionen.



Instalación/Configuración

Tabla de contenidos


Requerimientos

Phar requiere PHP 5.2.0 o superior. Las caracteristicas adicionales requieren la extensión SPL para aprovechar la iteración y el acceso a arrays del contenido de un fichero de Phar. El flujo phar no requiere ninguna extensión adicional para que funcione.

Opcionalmente, se puede habilitar las extensiones zlib y bzip2 para aprovechar el soporte de phar comprimidos. Además, para aprovechar la firma OpenSSL, debe estar habilidata la extensión OpenSSL.

Observe que un error en el filtro de flujos zlib.deflate corregido en la versión 5.2.6 y posteriores de PHP puede ocasionar el truncamiento de archivos phar comprimidos con gzip bzip2.



Instalación

La extensión Phar está integrada a partir de la versión 5.3.0 de PHP. Phar se puede instalar a través de la extensión PECL con las versiones anteriores de PHP, y la » página Phar de PECL contiene información adicional y su hostoria.

Los usuarios de Windows deben incluir el fichero php_phar.dll en php.ini para usar esta extensión.



Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de Configuración de Flujos y Sistema de Ficheros
Nombre Por defecto Cambiable Historial de cambios
phar.readonly "1" PHP_INI_ALL  
phar.require_hash "1" PHP_INI_ALL  
phar.extract_list "" PHP_INI_ALL Disponible desde phar 1.1.0 a 1.2.3, eliminado en 2.0.0.
phar.cache_list "" PHP_INI_SYSTEM Disponible desde phar 2.0.0.

He aquí una breve explicación de las directivas de configuración.

phar.readonly boolean

Esta opción deshabilita la modificación o creación de archivos Phar usando el flujo phar o el soporte para escritura de objetos Phar. Este ajuste debería estar siempre activado en máquinas de producción, ya que el soporte para escritura conveniente de la extensión phar podría permitir la simple creación de un virus basado en PHP al asociarse con otras vulnerabilidades de seguridad comunes.

Nota:

Este ajuste sólo puede ser desactivado en php.ini por motivos de seguridad. Si phar.readonly está deshabilitado en php.ini, un usuario puede habilitar phar.readonly en un script o deshabilitarlo después. Si phar.readonly está habilitado en php.ini, un scrip puede "re-habilitar" inofensivamente la variable INI, pero no puede deshabilitarla.

phar.require_hash boolean

Esta opción forzará a todos los archivos Phar abiertos a que contengan algún tipo de signatura (actualmente está soportadas MD5, SHA1, SHA256 y SHA512), y rehusará procesar cualquer archivo Phar que no contenga una signatura.

Nota:

Este ajuste sólo puede ser desactivado en php.ini por motivos de seguridad. Si phar.require_hash está deshabilitado en php.ini, un usuario puede habilitar phar.require_hash en un script o deshabilitarlo después. Si phar.require_hash está habilitado en php.ini, un scrip puede "re-habilitar" inofensivamente la variable INI, pero no puede deshabilitarla.

Este ajuste no afecta a la lectura de ficheros tar planos con la clase PharData.

phar.extract_list string

Este ajuste INI ha sido eliminado desde phar 2.0.0

Permite el mapeo desde una ruta completa a un archivo phar o su alias hacia la ubicación de sus ficheros extraídos. El formato del parámetro es nombre=archivo,nombre2=archivo2. Esto permite la extracción de ficheros phar al disco, y permite a phar acutar como una especie de mapeador para extraer ficheros de discos. A menudo, esto se reailza por motivos de rendimiento, o para ayudar a la depuración de un phar.

Ejemplo #1 phar.extract_list usage example

in php.ini:
phar.extract_list = archivo=/ruta/completa/al/archivo/,archivo2=/ruta/completa/al/archivo2
<?php
include "phar://archivo/contenido.php";
include 
"phar://archivo2/foo.php";
?>

phar.cache_list string

Este ajuste INI fue añadido en 2.0.0

Permite mapear archivos phar para que sean preanalizados en el arranque del servidor web, proporcionando una mejora de rendimiento que saca ficheros en ejecución de un archivo phar casi tan rápido como si esos ficheros se ejecutaran desde una instalación tradicional basada en disco.

Ejemplo #2 Ejemplo de uso de phar.cache_list

en php.ini (windows):
phar.cache_list =C:\ruta\a\phar1.phar;C:\ruta\a\phar2.phar
en php.ini (unix):
phar.cache_list =/ruta/a/phar1.phar:/ruta/a/phar2.phar



Tipos de recursos

La extensión Phar proporciona el flujo phar, el cual permite el acceso a ficheros contenidos en un phar de manera transparente. Véase también la descripción de formato de fichero Phar.




Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

Constantes de compresión de Phar
Constante Valor Descripción
Phar::NONE (integer) 0x00000000 sin compresión
Phar::COMPRESSED (integer) 0x0000F000 máscara de bit que puede ser usada con banderas de fichero para determinar si está presente algún tipo de compresión
Phar::GZ (integer) 0x00001000 compression zlib (gzip)
Phar::BZ2 (integer) 0x00002000 compression bzip2
Constanten de formato de fichero de Phar
Constante Valor Descripción
Phar::SAME (integer) 0 conservar el mismo formato de fichero
Phar::PHAR (integer) 1 formato de fichero phar
Phar::TAR (integer) 2 formato de fichero tar
Phar::ZIP (integer) 3 formato de fichero zip
Constantes de signatura de Phar
Constante Valor Descripción
Phar::MD5 (integer) 0x0001 singnatura con el algoritmo hash md5
Phar::SHA1 (integer) 0x0002 singnatura con el algoritmo hash sha1
Phar::SHA256 (integer) 0x0003 singnatura con el algoritmo hash sha256 (requiere la extensión Hash)
Phar::SHA512 (integer) 0x0004 singnatura con el algoritmo hash sha512 (requiere la extensión Hash)
Phar::OPENSSL (integer) 0x0010 signatura con la pareja de claves pública/privada de OpenSSL. Esta es una signatura de clave asimétrica verdadera.
Constantes de sobrescritura MIME de webPhar de Phar
Constante Valor Descripción
Phar::PHP (integer) 1 usada para ordenar al parámetro de sobrescritura MIME de Phar::webPhar() que la extensión debería ser analizada como un fichero de PHP
Phar::PHPS (integer) 2 usada para ordenar al parámetro de sobrescritura MIME de Phar::webPhar() que la extensión debería ser analizada como un fichero fuente de PHP a través de highlight_file()


Utilizar Archivos Phar

Tabla de contenidos


Utilizar Archivos Phar: Introduction

Los archivos phar son similares en concepto a los archivo JAR de Java, pero están adaptados a las necesidades y a la flexibilidad de aplicoines de PHP. Un archivo Phar se usa para distribuir una aplicación o biblioteca PHP completa en un único fichero. Una aplicación de un archivo Phar se utiliza exactamente de la misma manera que otra aplicación PHP:

php aplicacion.phar
  

Utilizar una biblioteca de archivo Phar es idéntico a usar cualquier otra biblioteca de PHP:

<?php
include 'biblioteca.phar';
?>

La envoltura de flujos phar proporciona el núcleo de la extensión Phar, y está explicada en detalle aquí. La envoltura de flujos phar permite el acceso a los ficheros dentro de un archivo phar utilizando las funciones estándar de ficheros de PHP fopen(), opendir(), y y otras que trabajan sobre ficheros normales. La envoltura de flujos phar soporta todas las operaciones de lectura/escritura tanto en ficheros como en directorios.

<?php
include 'phar://biblioteca.phar/fichero/interno.php';
header('Content-type: image/jpeg');
// a los phar se puede acceder con la ruta completa o mediante un alias
echo file_get_contents('phar:///ruta_completa/a/biblioteca.phar/imagenes/wow.jpg');
?>

La clase Phar implementa una funcionalidad avanzada para acceder a ficheros y crear arhivos phar. La clas Phar está explicada en detalle aquí.

<?php
try {
    
// abrir un phar existente
    
$p = new Phar('biblioteca.phar'0);
    
// Phar extiende la clase DirectoryIterator de SPL
    
foreach (new RecursiveIteratorIterator($p) as $fichero) {
        
// $fichero en una clase PharFileInfo, y hereda de SplFileInfo
        
echo $fichero->getFileName() . "\n";
        echo 
file_get_contents($fichero->getPathName()) . "\n"// mostrar el contenido;
    
}
    if (isset(
$p['fichero/interno.php'])) {
        
var_dump($p['fichero/interno.php']->getMetadata());
    }

    
// crear un nuevo phar - phar.readonly debe ser 0 en php.ini
    // phar.readonly está habilitado por omisión por motivos de seguridad.
    // En servidores de producción, los archivos Phar nunca se crean,
    // sólo se ejecutan.
    
if (Phar::canWrite()) {
        
$p = new Phar('nuevo_phar.tar.phar'0'nuevo_phar.tar.phar');
        
// hacerlo un archivo phar basado en tar, comprimido con gzip (.tar.gz)
        
$p $p->convertToExecutable(Phar::TARPhar::GZ);

        
// crear una transacción -  no se escribe nada en nuevo_phar.phar
        // hasta que stopBuffering() sea llamado, aunque se necesita almacenamiento temporal
        
$p->startBuffering();
        
// añadir todos los ficheros de /ruta/del/proyecto, guardándolos en el phar con el prefijo "proyecto"
        
$p->buildFromIterator(new RecursiveIteratorIterator(new DirectoryIterator('/ruta/del/proyecto')), '/ruta/del/');

        
// añadir un nuevo fichero mediante la API de acceso a arrays
        
$p['fichero1.txt'] = 'Información';
        
$fp fopen('fichero_enorme.dat''rb');
        
// copiar toda la información del flujo
        
$p['datos/fichero_enorme.dat'] = $fp;

        if (
Phar::canCompress(Phar::GZ)) {
            
$p['datos/fichero_enorme.dat']->compress(Phar::GZ);
        }

        
$p['imagenes/wow.jpg'] = file_get_contents('imagenes/wow.jpg');
        
// cualquier valor se puede guardar como metainformación específica del fichero
        
$p['imagenes/wow.jpg']->setMetadata(array('mime-type' => 'image/jpeg'));
        
$p['index.php'] = file_get_contents('index.php');
        
$p->setMetadata(array('bootstrap' => 'index.php'));

        
// cuardar el archivo phar en el disco
        
$p->stopBuffering();
    }
} catch (
Exception $e) {
    echo 
'No se pudo abrir Phar: '$e;
}
?>

Además, la verificación del contenido de ficheros phar se puede realizar utilizando cualquiera de los algoritmos hash simétricos soportados (MD5, SHA1, SHA256 y SHA512 si la extensión Hash está habilitada) y utilizando firmas de clave pública/privada asimétricas de OpenSSL (nuevo en Phar 2.0.0). Para aprovechar la firmas de OpenSSL, se necesita generar una pareja de claves pública/privada, y utilizar la clave privada para establecer la firma usando Phar::setSignatureAlgorithm(). Además, la clave pública se extrae usando este código:

<?php
$public 
openssl_get_publickey(file_get_contents('private.pem'));
$pkey '';
openssl_pkey_export($public$pkey);
?>
debe ser guardada junto al archivo phar que verifica. Si el archivo phar es guardado como /ruta/a/mi.phar, la clave pública debe guardarse como /ruta/a/mi.phar.pubkey, o phar no será capaz de verificar la firma OpenSSL.

A partir de la verisón 2.0.0, la clase Phar también proporciona tres métodos estáticos, Phar::webPhar(), Phar::mungServer() y Phar::interceptFileFuncs(), los cuales son cruiciales para empaquetar aplicaciones PHP diseñadas para un uso en sistemas de ficheros normales y aplicación basadas en web. Phar::webPhar() implementa un controlador principal que direcciona llamadas HTTP a la ubicación correcta dentro del archivo phar. Phar::mungServer() se utiliza para modificar los valores del array $_SERVER para hacer que las aplicaciones procesen estos valores. Phar::interceptFileFuncs() ordena a Phar que intercepte llamdas a fopen(), file_get_contents(), opendir(), y a todas las funciones basadas en estadísticas (file_exists(), is_readable(), etc.) y direccione todas las rutas relativas a las ubicaciones dentro del archivo phar.

Como ejemplo, empaquetar una versión de la popular aplicación phpMyAdmin para usarla cono un archivo phar, requiere solamente este sencillo script, y después se puede acceder a phpMyAdmin.phar.tar.php como un fichero normal desde el servidor web después de modificar el usuario/contraseña:

<?php
@unlink('phpMyAdmin.phar.tar.php');
copy('phpMyAdmin-2.11.3-english.tar.gz''phpMyAdmin.phar.tar.php');
$a = new Phar('phpMyAdmin.phar.tar.php');
$a->startBuffering();
$a["phpMyAdmin-2.11.3-english/config.inc.php"] = '<?php
/* Servers configuration */
$i = 0;

/* Server localhost (config:root) [1] */
$i++;
$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';
$cfg[\'Servers\'][$i][\'extension\'] = \'mysqli\';
$cfg[\'Servers\'][$i][\'connect_type\'] = \'tcp\';
$cfg[\'Servers\'][$i][\'compress\'] = false;
$cfg[\'Servers\'][$i][\'auth_type\'] = \'config\';
$cfg[\'Servers\'][$i][\'user\'] = \'root\';
$cfg[\'Servers\'][$i][\'password\'] = \'\';


/* End of servers configuration */
if (strpos(PHP_OS, \'WIN\') !== false) {
    $cfg[\'UploadDir\'] = getcwd();
} else {
    $cfg[\'UploadDir\'] = \'/tmp/pharphpmyadmin\';
    @mkdir(\'/tmp/pharphpmyadmin\');
    @chmod(\'/tmp/pharphpmyadmin\', 0777);
}'
;
$a->setStub('<?php
Phar::interceptFileFuncs();
Phar::webPhar("phpMyAdmin.phar", "phpMyAdmin-2.11.3-english/index.php");
echo "phpMyAdmin está intentando ejecutarse desde un navegador web\n";
exit -1;
__HALT_COMPILER();
'
);
$a->stopBuffering();
?>



Utilizar Archivos Phar: la envoltura de flujos phar

La envoltura de flujos phar soporta completamente fopen() para leer y escribir (no añadir), unlink(), stat(), fstat(), fseek(), rename() y operaciones de flujo de directorios opendir() y a partir de la versión 2.0.0, rmdir() y mkdir().

También se pueden manipular compresiones de ficheros individuales y metadatos por fichero en un archivo Phar usando contextos de flujo:

<?php
$contexto 
stream_context_create(array('phar' =>
                                    array(
'compress' => Phar::GZ)),
                                    array(
'metadata' => array('user' => 'cellog')));
file_put_contents('phar://mi.phar/fichero.php'0$contexto);
?>

La envoltura de flujos phar no opera sobre ficheros remotos, y no puede operar sobre ficheros remotos, and cannot operate on remote files, and so is allowed even when the allow_url_fopen and allow_url_include INI options are disabled.

Aunque es posible crear archivos phar desde cero simplemente usando operaciones de flujos, es mejor utilizar la funcionalidad interna de la clase Phar. La envoltura de flujos se usa mejor para operaciones de sólo lectura.



Utilizar Archivos Phar: las clases Phar y PharData

La clase Phar admite la lectura y la manipulación de archivos Phar, así como la iteración a través de la funcionalidad de la clase RecursiveDirectoryIterator. Con el soporte para la interfaz ArrayAccess, se puede acceder a los ficheros que están dentro de un archivo Phar como si fueran parte de un array asociativo.

La clase PharData extiende la clase Phar, y permite crear y modificar archivos tar y zip no ejecutables (datos) incluso si phar.readonly=1 en php.ini. Por lo tanto, PharData::setAlias() y PharData::setStub() están desactivados ya que los conceptos de alias y rutina de interoperabilidad (stub) son válidos únicamente para archivos phar ejecutables.

Observe que al crear un archivo Phar, se debería pasar la ruta completa al contructor del objeto de la clase Phar. Las rutas relativas causarán un error en la inicialización.

Asumiendo que $p es un objeto de la clase Phar inicializado como sigue:

<?php
$p 
= new Phar('/ruta/a/miphar.phar'0'miphar.phar');
?>

se creará un archivo Phar vacío en /ruta/a/miphar.phar, o si /ruta/a/miphar.phar ya existe, se abrirá de nuevo. El literal miphar.phar demuestra el concepto de un alias que puede ser usado para referenciar a /ruta/a/miphar.phar en URLs, como en:

<?php
// estas dos llamadas a file_get_contents() son equivalentes si
// /ruta/a/miphar.phar tiene un alias especificado como "miphar.phar"
// en su manifiesto, o si el phar fue inicializado con la
// configuración del objeto Phar del ejemplo anterior
$f file_get_contents('phar:///ruta/a/miphar.phar/loquesea.txt');
$f file_get_contents('phar://miphar.phar/loquesea.txt');
?>

Con el recién creado objeto $p de la clase Phar, lo siguiente es posible:

  • $a = $p['fichero.php'] creates a PharFileInfo class that refers to the contents of phar://miphar.phar/fichero.php
  • $p['fichero.php'] = $v crea un nuevo fichero (phar://miphar.phar/fichero.php), o sobrescribe un fichero existente dentro de miphar.phar. $v puede ser una cadena o un puntero de fichero abierto, en cuyo caso todo el contenido del fichero se usará para crear el nuevo fichero. Observe que $p->addFromString('fichero.php', $v) es funcionalmente equivalente a lo de más arriba. También es posible añadir el contenido de un fichero con $p->addFile('/path/to/fichero.php', 'fichero.php'). Por ultimo, se puede crear un directorio vacío con $p->addEmptyDir('vacio').
  • isset($p['fichero.php']) se puede usar para determinar si phar://miphar.phar/fichero.php existe dentro de miphar.phar.
  • unset($p['fichero.php']) borra phar://miphar.phar/fichero.php de miphar.phar.

Además, el objeto de la clase Phar es la única manera de acceder a metainformación específica de Phar, a través de Phar::getMetadata(), y la única manera de establecer o recuperar una rutina de interoperabilidad (stub) del cargador de PHP de un archivo Phar a través de Phar::getStub() y Phar::setStub(). Además, la compresión del archivo completo Phar de una vez, sólo puede ser manipulada utilizando la clase Phar.

La lista completa de la funcionalidad de objetos de la clase Phar está documentada más adelante.

La clase PharFileInfo extiende a la clase SplFileInfo, y añade varios métodos para manipular detalles específicos de Phar de un fichero contenido en un Phar, tales como la manipulación de la compresión y la metainformación.




Creación de archivos Phar

Tabla de contenidos


Creación de archivos Phar: Introducción

Para ser escrita completamente en un futuro próximo. Antes de leer esto, asegúrese de leer Como utilizar archivos PHAR.

Un buen lugar para empezar es leer acerca de Phar::buildFromIterator(), y los detalles de la elección del formato de fichero disponible para los archivos. Una adecuada comprensión de lo que es y hace una rutina de interoperabilidad (stub), es crucial para la creación de un archivo PHAR, así Phar::setStub() y Phar::createDefaultStub() son buenos lugares para comenzar. Si va a distribuir una aplicación basada en web es fundamental saber qué es y cómo funciona Phar::webPhar() y el método relacionado Phar::mungServer(). Cualquier aplicación que tenga acceso a sus propios ficheros también debe considerar el uso de Phar::interceptFileFuncs().




¿Qué hace de un phar un phar y no un tar o un zip?

Tabla de contenidos


Ingredientes de todos los archivos Phar, independientes del formato de fichero

Todos los archivos Phar contienen tres o cuatro secciones:

  1. una rutina de interoperabilidad (stub)

  2. un manifiesto describiendo el contenido

  3. el contenido de ficheros

  4. [opcional] una firma para verificar la integridad del Phar (solamente el formtado de fichero phar)



Rutina de interoperabilidad del fichero Phar

Una rutina de interoperabilidad de un Phar es un simple fichero PHP. La rutina de interoperabilidad más pequeña posible es:

<?php __HALT_COMPILER();

Una rutina de interoperabilidad debe contener como mínimo el token __HALT_COMPILER(); en su conclusión. Normalmente, una rutina de interoperabilidad contendrá funcionalidad cargadora como:

<?php
Phar
::mapPhar();
include 
'phar://miphar.phar/index.php';
__HALT_COMPILER();

No existen restricciones para el contenido de una rutina de interoperabilidad de Phar, excepto el requerimiento de que concluya con __HALT_COMPILER();. La etiqueta de cierre de PHP

?>
se puede incluir u omitir, pero no puede haber más de un espacio entre el ; y la etiqueta de cierre
?>
o la extensión phar no podrá procesar el manifiesto del archivo Phar.

En un archivo phar basado en tar o zip, la rutina de interoperabilidad es alamcenada en el fichero .phar/stub.php. La rutina de interoperabilidad predeterminada para archivos Phar basados en phar contiene aproximadamente 7k de código para extraer el contenido del phar y ejecutarlo. Véase Phar::createDefaultStub() para más información.

El alias de phar se alamcena en un archivo phar basado en zip en el fichero .phar/alias.txt como texto plano.



Comparación cara a cara de Phar, Tar y Zip

¿Cuáles son los aspectos positivos y negativos de los tres formatos de fichero soportados en la extensión phar? Esta tabla intenta responder esta pregunta.

Matriz de características: Phar contra Tar contra Zip
Característica Phar Tar Zip
Formato de Fichero Estádar No
Puede ser ejecutado con la extensión Phar [1] No No
Compresión por fichero No
Compresión de archivo entero No
Validación de firmas del archivo entero Sí (PHP 5.3.1+)
Soporte para aplicaciones específicas de web
Metainformación por fichero
Metainformación del archivo entero
Modificación creación de archivos [2]
Soporte completa para todas las funciones de envoltura de flujos
Puede ser creado/modificado incluso si phar.readonly=1 [3] No

Sugerencia

[1] PHP solamente puede acceder directamente al contenido de un archivo Phar sin la extensión Phar si está utilizando una rutina de interoperabilidad que extraiga el contenido del archivo phar. La rutina de interoperabilidad creada por Phar::createDefaultStub() extrae el archivo phar y ejecuta su contenido desde un directorio temporal si no se encuentra la extensión phar.

Sugerencia

[2] Todos los accesos de escritura requieren que phar.readonly sea deshabilitado en php.ini o directamente or la línea de comandos.

Sugerencia

[3] Solamente se pueden crear archivos tar y zip sin .phar en su nombre de fichero y sin una rutina de interoperabilidad ejecutable .phar/stub.php si phar.readonly=1.



Archivos phar basados en tar

Los archivos basados en el formato de fichero tar siguen el formato de fichero USTAR más moderno. El diseño de la cabecera de fichero tar los hace más eficientes en el acceso que el formato de fichero zip, y casi tan efiniciente que el formato de fichero phar. Los nombres de fichero están limitados a 255 bytes, incluyentdo la ruta completa dentro de archivo phar. No existe límite en el número de ficheros que un archivo phar basado en tar puede contener. Estos archivos pueden ser comprimidos completamente en los formatos gzip o bzip2 y aún ser ejecutados por la extensión Phar.

Para comprimir un archivo entero, use Phar::compress(). Para descomprimir un archvo entero, use Phar::decompress().



Archivos phar basados en zip

Los archivos basados en el formato de fichero zip soportan varias característica incorporadas del formato de fichero zip. La metainformación por fichero y del archivo entero es almacenda en el comentario del fichero zip y en el comentario del archivo zip como una cadena serializada. Los comentarios zip preexistentes serán leídos de manera satisfactoria como una cadena. La lectura/escritura de la compresión por fichero está soportada con la compresión zlib, y el acceso a lectura está soportado con la compresión bzip2. No existe límite en el número de ficheros que un archivo phar basado en zip puede contener. Los directorios vacíos son almacenados en el archivo zip como ficheros con una barra al final, como mi/directorio/



El Formato de Fichero Phar

El formato de fichero phar está dispuesto literalmente como rutina_de_interoperabilidad/manifiesto/contenido/firma, y almacena la información crucial de lo que está incluido en el archivo phar en su manifiesto.

El manifiesto de phar es un formato altamente optimizado que permite especificaciones por fichero de compresión de ficheros, permisos de ficheros, e incluso metainformación definida por el usuario como el usuario o grupo del fichero. Todos los valores mayores que 1 byte son almacenados en el orden de byte little-endian, con la excepción de la versión de la API, que por motivos históricos es almacenada como 3 en el orden big-endian.

Todas las banderas sin utilizar están reservadas para un uso futuro, y no deben usarse para almacenar información personalizada.to store custom information. Use la característica de metainformación por fichero para alamacenar información personalizada sobre ficheros en particular.

El formato de fichero básico de un manifiesto Phar es como sigue:

Formato del manifiesto global de Phar
Tamaño en bytes Descripción
4 bytes Longitud del manifiesto en bytes (límite 1 MB)
4 bytes Número de ficheros en el Phar
2 bytes Versión de la API del manifiesto de Phar (actualmente 1.0.0)
4 bytes Banderas mapeadas en bit globales de Phar
4 bytes Longitud del alisa del Phar
?? Alias del Phar (la longitud basada en lo anterior)
4 bytes Longitud de la metainformación del Phar (0 para ninguna)
?? Metainformación de Phar serializada, almacenada en el formato de serialize()
al menos 24 * número de entradas bytes entradas para cada fichero



Banderas mapeadas en bit globales de Phar

Aquí están las banderas mapeadas en bit actualmente reconocidas por la extensión Phar para el mapeo de bit plano global de Phar:

Valores de mapeo de bit reconocidos
Valor Descripción
0x00010000 Si se establece, el Phar contendrá una firma de verificaición
0x00001000 Si se establece, el Phar contendrá al menos 1 fichero que está comprimido con la compresión zlib
0x00002000 Si se establece, el Phar contendrá al menos 1 fichero que está comprimido con la compresión bzip



Definición de la entrada de fichero del manifiesto de Phar

Cada fichero en el manifiesto contiene la siguiente información:

Entrada de fichero del manifiesto de Phar
Tamaño en bytes Descripción
4 bytes Longitud del nombre del fichero en bytes
?? Nombre del fichero (la longitud especificada en lo anterior)
4 bytes Tamaño del fichero sin comprimir en bytes
4 bytes Marca de tiempo Unix del fichero
4 bytes Tamaño del fichero comprimido en bytes
4 bytes Suma de verificación CRC32 del contenido del fichero si comprimir
4 bytes Banderas mapeadas en bit específicas del fichero
4 bytes Longitud de la metainformación del fichero serializada (0 para ninguna)
?? Metainformación del fichero serializada, almacenada en el formato de serialize()

Observe que a partir de la versión 1.1.1 de la API, los directorios vacíos son almacenados como nombres de fichero con una barra al final, como mi/directorio/

Los valores de mapeo de bit específicos de fichero reconocidos son:

Valores de mapeo de bit reconocidos
Valor Descripción
0x000001FF Estos bits están reservador para la definición de los permisos de fichero específicos de un fichero. Los permisos son usados por fstat() y se pueden utilizar para recrear permisos deseados en la extracción.
0x00001000 Si se establece, el fichero es comprimido con la compresión zlib
0x00002000 Si se establece, el fichero es comprimido con la compresión bzip



Formato de la firma de Phar

Los archivos Phar que contienen una firma siempre la tienen añadida al final del archivo Phar después del cargador, el manifiesto y el contenido de ficheros. Los dos formatos de firma soportados en este momento son MD5 y SHA1.

Formato de firma
Longitud en bytes Descripción
16 ó 20 bytes La firma real, 20 bytes para una firma SHA1, 16 bytes para una firma MD5, 32 bytes para una firma SHA256, y 64 bytes para una firma SHA512.
4 bytes Banderas de firma. 0x0001 se usa para definir una firma MD5, 0x0002 se usa para definir una firma SHA1, 0x0004 se usa para definir una firma SHA256, y 0x0008 se usaupara definir una firma SHA512. El soporte para las firmas SHA256 y SHA512 se introdujo con la versión 1.1.0 de la API.
4 bytes GBMB mágico usado para definir la presencia de una firma.




La clase Phar

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

La clase Phar proporciona una interfaz de alto nivel para el acceso y la creación de archivos phar.

Sinopsis de la Clase

Phar extends RecursiveDirectoryIterator implements Countable , ArrayAccess {
/* Propiedades */
/* Métodos */
void addEmptyDir ( string $dirname )
void addFile ( string $file [, string $localname ] )
void addFromString ( string $localname , string $contents )
string apiVersion ( void )
array buildFromDirectory ( string $base_dir [, string $regex ] )
array buildFromIterator ( Iterator $iter [, string $base_directory ] )
bool canCompress ([ int $type = 0 ] )
bool canWrite ( void )
object compress ( int $compression [, string $extension ] )
bool compressAllFilesBZIP2 ( void )
bool compressAllFilesGZ ( void )
void compressFiles ( int $compression )
__construct ( string $fname [, int $flags [, string $alias ]] )
PharData convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
Phar convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
bool copy ( string $oldfile , string $newfile )
int count ( void )
string createDefaultStub ([ string $indexfile [, string $webindexfile ]] )
object decompress ([ string $extension ] )
bool decompressFiles ( void )
bool delMetadata ( void )
bool delete ( string $entry )
bool extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
mixed getMetadata ( void )
bool getModified ( void )
array getSignature ( void )
string getStub ( void )
array getSupportedCompression ( void )
array getSupportedSignatures ( void )
string getVersion ( void )
bool hasMetadata ( void )
void interceptFileFuncs ( void )
bool isBuffering ( void )
mixed isCompressed ( void )
bool isFileFormat ( int $format )
bool isValidPharFilename ( string $filename [, bool $executable = true ] )
bool isWritable ( void )
bool loadPhar ( string $filename [, string $alias ] )
bool mapPhar ([ string $alias [, int $dataoffset = 0 ]] )
void mount ( string $pharpath , string $externalpath )
void mungServer ( array $munglist )
bool offsetExists ( string $offset )
int offsetGet ( string $offset )
void offsetSet ( string $offset , string $value )
bool offsetUnset ( string $offset )
string running ([ bool $retphar = true ] )
bool setAlias ( string $alias )
bool setDefaultStub ([ string $index [, string $webindex ]] )
void setMetadata ( mixed $metadata )
void setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )
bool setStub ( string $stub )
void startBuffering ( void )
void stopBuffering ( void )
bool uncompressAllFiles ( void )
bool unlinkArchive ( string $archive )
void webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )
}

Phar::addEmptyDir

(Unknown)

Phar::addEmptyDirAñadir un directorio vacío al archvo phar

Descripción

void Phar::addEmptyDir ( string $dirname )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Con este método se crea un directorio vacío con la ruta dada por dirname. Este método es similar a ZipArchive::addEmptyDir().

Parámetros

dirname

El nombre de directorio vacío a crear en el archivo phar

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::addEmptyDir()

<?php
try {
    
$a = new Phar('/ruta/a/phar.phar');

    
$a->addEmptyDir('/ruta/completa/a/fichero');
    
// demuestra cómo se almacena este fichero
    
$b $a['ruta/completa/a/fichero']->isDir();
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



Phar::addFile

(Unknown)

Phar::addFileAñadir un fichero desde el sistema de ficheros al archivo phar

Descripción

void Phar::addFile ( string $file [, string $localname ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Con este método, cualquier fichero o URL se puede añadir al arcivo phar. Si se especifica el segundo parámetro opcional localname, el fichero será almacenado en el archivo con el nombre dado por el parámetro, si no se usará el parámetro file como la ruta para almacentar dentro del archivo. Las URLs deben tener un nombre local o se lanzará una excepción. Este método es similar a ZipArchive::addFile().

Parámetros

file

La ruta completa o relativa del fichero del disco a ser añadido al archivo phar.

localname

Ruta con la que el fichero será almacenado en el archivo.

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::addFile()

<?php
try {
    
$a = new Phar('/ruta/a/phar.phar');

    
$a->addFile('/ruta/completa/a/fichero');
    
// demuestra cómo se almacena este fichero
    
$b $a['ruta/completa/a/fichero']->getContent();

    
$a->addFile('/ruta/completa/a/fichero''mi/fichero.txt');
    
$c $a['mi/fichero.txt']->getContent();

    
// demostrar el uso de una URL
    
$a->addFile('http://www.ejemplo.com''ejemplo.html');
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



Phar::addFromString

(Unknown)

Phar::addFromStringAñadir un fichero desde el sistema de ficheros al archivo phar

Descripción

void Phar::addFromString ( string $localname , string $contents )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Con este método, cuanquierl cadena se puede añadir al archivo phar. El fichero será almacenado en el archivo con localname como su ruta. Este método es similar a ZipArchive::addFromString().

Parámetros

localname

Ruta con la que el fichero será almacenado en el archivo.

contents

El contenido del fichero a almacenar

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::addFromString()

<?php
try {
    
$a = new Phar('/ruta/a/phar.phar');

    
$a->addFromString('ruta/a/fichero.txt''mi sencillo fichero');
    
$b $a['ruta/a/fichero.txt']->getContent();

    
// para añadir contenido desde un gestor de flujos para ficheros grandes, use offsetSet()
    
$c fopen('/ruta/a/fichero_enorme.bin');
    
$a['fichero_grande.bin'] = $c;
    
fclose($c);
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



Phar::apiVersion

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::apiVersionDevolver la versión de la API

Descripción

string Phar::apiVersion ( void )

Devuelve la versión de la API del formato de fichero phar que será usado al crear phars. La extensión Phar soporta la lectura de la versión de la API 1.0.0 o superior. Se requiere la versión 1.1.0 de la API para los algoritmos hash SHA-256 y SHA-512, y la versión 1.1.1 de la API para almacenar directorios vacíos.

Parámetros

Valores devueltos

La cadena de la versión de la API como "1.0.0".

Ejemplos

Ejemplo #1 Un ejemplo de Phar::apiVersion()

<?php
echo Phar::apiVersion();
?>

El resultado del ejemplo sería:

1.1.1



Phar::buildFromDirectory

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::buildFromDirectoryConstruir un archivo phar desde los ficheros de un directorio

Descripción

array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Rellena un archivo phar con el contenido de un directorio. El segundo parámtro opcional es una expresión regular (pcre) que se utiliza para excluir ficheros. Cualquier nombre de fichero que coincida con la expresión regular será incluido, todos los demás serán excluidos. Para un control más exhaustivo, use Phar::buildFromIterator().

Parámetros

base_dir

La ruta completa o relativa al directorio que contiene todos los ficheros a añadir al archivo.

regex

Una expresión regular de pcre opcional que se usa para filtrar la lista de ficheros. Solamente las rutas de fichero que coincidan con la expresión regular serán incluidas en el archivo.

Valores devueltos

Phar::buildFromDirectory() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no puede instanciar los iteradores intermos del directorio, o una excepción de tipo PharException si hubo errores al guardar el archivo phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::buildFromDirectory()

<?php
// crear con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar'0'proyecto.phar');
// añadir todos los ficheros del proyecto
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));

$phar2 = new Phar('proyecto2.phar'0'proyecto2.phar');
// añadir todos los ficheros del, incluir solamente los ficheros php
$phar2->buildFromDirectory(dirname(__FILE__) . '/proyecto''/\.php$/');
$phar2->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Ver también



Phar::buildFromIterator

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::buildFromIteratorConstruir un archivo phar desde un iterador

Descripción

array Phar::buildFromIterator ( Iterator $iter [, string $base_directory ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Rellena un archivo phar desde un iterador. Están soportados dos estilos de iteradores, los iteradores que mapean el nombre de fichero dentro del phar al nombre del fichero en disco, y los iteradores como DirectoryIterator que devuelven objetos de la clase SplFileInfo. Se requiere el segundo parámetro para los iteradores que devuelven objetos de la clase SplFileInfo.

Parámetros

iter

Cualquier iterador que mapee de forma asociativa el fichero phar a la ubiciación o que devuelva objetos de la clase SplFileInfo

base_directory

Para los iteradores que devuelven objetos de la clase SplFileInfo, es la porción de cada ruta completa de fichero a eliminar cuando de añada al archivo phar

Valores devueltos

Phar::buildFromIterator() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::buildFromIterator() con SplFileInfo

Para la mayoría de los archivos tar/zip, el archivo reflejará la distribución real de directorios, y el segundo estilo es el más útil. Por ejemplo, para crear un archivo phar que contenga los ficheros n esta distribución de muestra de directorios:

/ruta/al/proyecto/
                  config/
                         dist.xml
                         debug.xml
                  lib/
                      fichero1.php
                      fichero2.php
                  src/
                      procesa_algo.php
                  www/
                      index.php
                  cli/
                      index.php

Este código podría usarse para añadir estos ficheros al archivo phar "proyecto.phar":

<?php
// crear con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar'0'proyecto.phar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
RecursiveDirectoryIterator('/ruta/al/proyecto')),
    
'/ruta/al/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

El fichero proyecto.phar se puede usar inmediatamente. Phar::buildFromIterator() no establece valores como la compresión y metainformación, que se puede hacer después de crear el archivo phar.

Como observación interesante, Phar::buildFromIterator() también se puede usar para copiar el contenido de un archivo phar existente, ya que los objetos de la clase Phar descienden de la clase DirectoryIterator:

<?php
// crear con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar'0'proyecto.phar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
Phar('/ruta/a/otro_phar.phar')),
    
'phar:///ruta/a/otro_phar.phar/ruta/al/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Ejemplo #2 Un ejemplo de Phar::buildFromIterator() con otros iteradores

La segunda forma de iterador se puede usar con cualquier iterador que devuelva un mapeo clave => valor, tal como un objeto de la clase ArrayIterator:

<?php
// crear con el alias "proyecto.phar"
$phar = new Phar('proyecto.phar'0'proyecto.phar');
$phar->buildFromIterator(
    new 
ArrayIterator(
     array(
        
'fichero/interno.php' => dirname(__FILE__) . '/algun_fichero.php',
        
'otro/fichero.jpg' => fopen('/rota/a/archivo_grande.jpg''rb'),
     )));
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Errores/Excepciones

Este método lanza una excepción de tipo UnexpectedValueException cuando el iterador devuelve valores incorrectos, tales como una clave de tipo integer en lugar de una cadena, una excepción de tipo BadMethodCallException cuando se pasa un iterador basado en SplFileInfo sin un parámetro base_directory, o una excepción de tipo PharException si hubo errores al guardar el archivo phar.

Ver también



Phar::canCompress

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::canCompressDevuelve si la extensión phar soporta la compresión usando zlib o bzip2

Descripción

bool Phar::canCompress ([ int $type = 0 ] )

Este método debería usarse para comprobar si es posible una compresicón antes de cargar un archivo phar que contiene ficheros comprimidos.

Parámetros

type

Se puede usar tanto Phar::GZ o Phar::BZ2 para comprobar si la compresión es posible con un algoritmo de compresión específico (zlib o bzip2).

Valores devueltos

TRUE si la compresión/descompresión está disponible, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::canCompress()

<?php
if (Phar::canCompress()) {
    echo 
file_get_contents('phar://phar_comprimido.phar/fichero/interno.txt');
} else {
    echo 
'La compresión no está disponible';
}
?>

Ver también



Phar::canWrite

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::canWriteDevolver si la extensión phar soporta la escritura y creación de archivos phar

Descripción

bool Phar::canWrite ( void )

Este método estático determina si ha sido deshabilitado el acceso a escritura en el php.ini del sistema mediante la variable INI phar.readonly.

Parámetros

Valores devueltos

TRUE si el acceso a escritura esta habilitado, FALSE si está deshabilitado.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::canWrite()

<?php
if (Phar::canWrite()) {
    
file_put_contents('phar://miphar.phar/fichero.txt''hola, qué tal');
}
?>

Ver también



Phar::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::compressComprimir el archivo Phar entero usando la compresión Gzip o Bzip2

Descripción

object Phar::compress ( int $compression [, string $extension ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos phar basados en tar y en phar, este método comprime el archivo entero usando la compresión gzip o bzip2. El fichero resultante puede ser procesado con el comando gunzip/bunzip, o se puede acceder a él directa y transparentemente con la extensión Phar.

Para archivos phar basados en Zip, este método falla con el lanzamiento de una excepción. La extensión zlib debe estar habilitada para poder comprimir con la compresión gzip, y la extensión bzip2 debe estar habilitada para poder comprimir con la compresión bzip2. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Además, este método renombra automáticamente el archivo, añadiéndole .gz, .bz2 o eliminado la extensión si se pasa Phar::NONE para eliminar la compresión. De forma alternativa, se puede expecificar una extensión de fichero con el segundo parámetro.

Parámetros

compression

La compresión debe ser Phar::GZ o Phar::BZ2 para añadir compresión, o Phar::NONE para eliminarla.

extension

Por omisión, la extensión es .phar.gz o .phar.bz2 para comprimir archivos phar, y .phar.tar.gz o .phar.tar.bz2 para comprimir archivos tar. Para la descompresión, las extensiones de fichero predeterminadas son .phar y .phar.tar.

Valores devueltos

Devuelve un objeto de la clase Phar.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::compress()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero1.txt'] = 'hola';
$p['mifichero12.txt'] = 'hola';
$p1 $p->compress(Phar::GZ); // copia a /ruta/a/mi.phar.gz
$p2 $p->compress(Phar::BZ2); // copia a /ruta/a/mi.phar.bz2
$p3 $p2->compress(Phar::NONE); // excepción: /ruta/a/mi.phar ya existe
?>

Ver también



Phar::compressAllFilesBZIP2

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::compressAllFilesBZIP2Comprimir todos los ficheros del archivo Phar actual usando la compresión Bzip2

Descripción

bool Phar::compressAllFilesBZIP2 ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando Phar::compress(), Phar::decompress(), Phar::compressFiles() y Phar::decompressFiles().

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método comprime todos los ficheros del archivo phar usando la compresíon bzip2. La extensión bzip2 debe estar habilitada para aprovechar esta característica. Además, si cualqiuer fichero ya está comprimido con la compresión gzip, la extensión zlib debe estar habilitada para poder descomprimir los ficheros antes de re-comprimirlos con la compresión bzip2. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2 no está disponible, o si cualquier fichero está comprimido usando la compresión gzip y la extensión zlib no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::compressAllFilesBZIP2()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressedBZIP2());
    
var_dump($fichero->isCompressedGZ());
}
$p->compressAllFilesBZIP2();
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressedBZIP2());
    
var_dump($fichero->isCompressedGZ());
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)
string(13) "mifichero.txt"
bool(true)
bool(true)
bool(false)
string(14) "mifichero2.txt"
bool(true)
bool(true)
bool(false)

Ver también



Phar::compressAllFilesGZ

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::compressAllFilesGZComprimir todos los ficheros del archivo Phar actual usando la compresión Gzip

Descripción

bool Phar::compressAllFilesGZ ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando Phar::compress(), Phar::decompress(), Phar::compressFiles() y Phar::decompressFiles().

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos phar basados en tar, este método comprime el archivo entero usando la compresión gzip. El fichero resultante se puede procesar con el comando gunzip, o se puede acceder a él directa y transparentemente con al extensión Phar.

Para archivos phar basados en Zip, este método comprime todos los ficheros del archivo Phar usando la compresión gzip. La extensión zlib debe estar habilitada para aprovechar esta característica. Además, si cualqiuer fichero ya está comprimido con la compresión bzip2, la extensión bzip2 debe estar habilitada para poder descomprimir los ficheros antes de re-comprimirlos con la compresión gzip. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o si cualquier fichero está comprimido usando la compresión bzip2 y la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::compressAllFilesGZ()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressedBZIP2());
    
var_dump($fichero->isCompressedGZ());
}
$p->compressAllFilesGZ();
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressedBZIP2());
    
var_dump($fichero->isCompressedGZ());
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)
string(13) "mifichero.txt"
bool(true)
bool(false)
bool(true)
string(14) "mifichero2.txt"
bool(true)
bool(false)
bool(true)

Ver también



Phar::compressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::compressFilesComprime todos los ficheros del archivo Phar actual

Descripción

void Phar::compressFiles ( int $compression )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos phar basados en tar, este método lanza una excepción de tipo BadMethodCallException, ya que la compresión de ficheros individuales dentro de un archivo tar no está soportada por el formato de fichero. Use Phar::compress() para comprimir un archivo phar entero basado en tar.

Para achivos phar basados en Zip y phar, este método comprime todos los ficheros del archivo Phar usando la compresión especificada. Las extensiones zlib o bzip2 deben estar habilitadas para aprovechar esta característica. Además, si cualquier fichero ya está comprimido con la compresión bzip2/zlib, la extensión respectiva debe estar habilitada para poder descomprimir los ficheros antes de re-comprimirlos. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Parámetros

compression

La compresión debe ser Phar::GZ o Phar::BZ2 para añadir compresión, o Phar::NONE para eliminarla.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o si cualquier fichero está comprimido con la compresión bzip2 y la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::compressFiles()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)
string(13) "mifichero.txt"
int(4096)
bool(false)
bool(true)
string(14) "mifichero2.txt"
int(4096)
bool(false)
bool(true)

Ver también



Phar::__construct

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::__constructConstruir un objeto de archivo Phar

Descripción

Phar::__construct ( string $fname [, int $flags [, string $alias ]] )

Parámetros

fname

Ruta a un archivo Phar existente o para ser creado

flags

Banderas a pasar a la clase padre RecursiveDirectoryIterator.

alias

Alias con el que referirse al archivo Phar en las llamadas a funcionalidades de flujos.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si se llama dos veces, o una excepción de tipo UnexpectedValueException si no se puede abrir el archivo phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::__construct()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'FilesystemIterator::CURRENT_AS_FILEINFO FilesystemIterator::KEY_AS_FILENAME,
                  
'mi.phar');
} catch (
UnexpectedValueException $e) {
    die(
'No se pudo abrir mi.phar');
} catch (
BadMethodCallException $e) {
    echo 
'Técnicamente esto no puede suceder';
}
// esto funciona ahora
echo file_get_contents('phar://mi.phar/ejemplo.txt');
// y funciona si hemos escrito
echo file_get_contents('phar:///ruta/a/mi.phar/ejemplo.txt');
?>



Phar::convertToData

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::convertToDataConvertir un archivo phar en un fichero tar o zip no ejecutable

Descripción

PharData Phar::convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )

Este método se usa para convertir un archivo phar ejecutable en un fichero tar o zip. Para hacer del tar o zip un fichero no ejecutable, se eliminan los ficheros del phar de rutina de interoperabilidad y de alias del recién creado nuevo archivo.

Si no se especifica ningún cambio, este método lanza una excepción de tipo BadMethodCallException si el archivo está en el formato de fichero phar. Para archivos en el formato tar o zip, este método convierte el archivo en un archivo no ejecutable.

En caso de éxito, el metodo crea un nuevo archivo en disco y devuelve un objeto de la clase PharData. El archivo antiguo no se elimina del disco, y debería hacerse manualmente después de que el proceso haya finalizado.

Parámetros

format

Este parámetro debería ser Phar::TAR o Phar::ZIP. Si se establece a NULL, se conservará el formato de fichero existente.

compression

Este parámetro debería ser Phar::NONE para no comprimir el archivo completo, Phar::GZ para la compresión basada en zlib, y Phar::BZ2 para la compresión basada en bzip.

extension

Este parámetro se utiliza para sobrescribir la extensión de fichero predeterminada de un archivo convertido. Observe que .phar no puede ser usado en ningún lugar del nombre de fichero de un archivo tar o zip no ejecutable.

Si se convierte a un archivo basado en tar, las extensiones predeterminadas son .tar, .tar.gz, y .tar.bz2 dependiendo de la compresión especificada. Para archivos basados en zip, la extensión predetermianda es .zip.

Valores devueltos

El método devuelve un objeto PharData en caso de éxito, y lanza una excepción en caso de error.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no se puede comprimir, se ha especificado un método de compresión desconocido, el archivo solicitado está almacenado en buffer con Phar::startBuffering() y no se ha cerrado con Phar::stopBuffering(), y una excepción de tipo PharException si se encontró algún problema durante el proceso de la creación de phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::convertToData()

Utilizar Phar::convertToData():

<?php
try {
    
$tarphar = new Phar('miphar.phar.tar');
    
// observe que miphar.phar.tar *no* está desvinculado.
    // convertirlo a un formato de fichero tar no ejecutable,
    // se crea miphar.tar
    
$tar $tarphar->convertToData();
    
// convertirlo a un formato zip no ejecutable, se crea miphar.zip
    
$zip $tarphar->convertToData(Phar::ZIP);
    
// crear miphar.tbz
    
$tgz $tarphar->convertToData(Phar::TARPhar::BZ2'.tbz');
    
// crear miphar.phar.tgz
    
$phar $tarphar->convertToData(Phar::PHAR); // lanza una excepción
} catch (Exception $e) {
    
// manejar el error aquí
}
?>

Ver también



Phar::convertToExecutable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::convertToExecutableConvertir un archivo phar en otro formato de archivo phar ejecutable

Descripción

Phar Phar::convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método se utiliza para convertir un archivo phar en otro formato de fichero. Por ejemplo, se puede utilizar para crear un archivo phar ejecutable basado en tar desde un archivo phar ejecutable basado en zip, o desde un archivo phar ejecutable en el formato de fichero phar. Además, se puede utilizar para aplicar la compresión al archivo completo a un archivo basado en phar o tar.

Si no se especifica ningún cambio, este método lanza una excepción de tipo BadMethodCallException

En caso de éxito, el metodo crea un nuevo archivo en disco y devuelve un objeto de la clase PharData. El archivo antiguo no se elimina del disco, y debería hacerse manualmente después de que el proceso haya finalizado.

Parámetros

format

Este parámetro debería ser Phar::PHAR, Phar::TAR, o Phar::ZIP. Si se establece a NULL, se conservará el formato de fichero existente.

compression

Este parámetro debería ser Phar::NONE para no comprimir el archivo completo, Phar::GZ para la compresión basada en zlib, y Phar::BZ2 para la compresión basada en bzip.

extension

Este parámetro se utiliza para sobrescribir la extensión de fichero predeterminada de un archivo convertido. Observe que todos los archivos phar basados en zip o en tar deben contener .phar en su extensión de fichero para poder ser procesados como un archivo phar.

Si se convierte a un archivo basado en phar, las extensiones predeterminadas son .phar, .phar.gz, o .phar.bz2 dependiendo de la compresión especificada. Para archivos phar basados en tar, las extensiones predeterminadas son .phar.tar, .phar.tar.gz, y .phar.tar.bz2. Para archivos phar basados en zip, la estensión predeterminada es .phar.zip.

Valores devueltos

El método devuelve un objeto Phar en caso de éxito, y lanza una excepción en caso de error.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no se puede comprimir, se ha especificado un método de compresión desconocido, el archivo solicitado está almacenado en buffer con Phar::startBuffering() y no se ha cerrado con Phar::stopBuffering(), una excepción de tipo UnexpectedValueException si el soporte para escritura está deshabilitado, y una excepción de tipo PharException si se encontró algún problema durante el proceso de la creación de phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::convertToExecutable()

Utilizar Phar::convertToExecutable():

<?php
try {
    
$tarphar = new Phar('miphar.phar.tar');
    
// convertirlo al formato de fichero phar
    // observe que miphar.phar.tar *no* está desvinculado
    
$phar $tarphar->convertToExecutable(Phar::PHAR); // crea miphar.phar
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
    
// crea miphar.phar.tgz
    
$comprimido $phar->convertToExecutable(Phar::TARPhar::GZ'.phar.tgz');
} catch (
Exception $e) {
    
// manejar el error aquí
}
?>

Ver también



Phar::copy

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::copyCopiar un fichero interno de un archivo phar a otro fichero nuevo dentro del phar

Descripción

bool Phar::copy ( string $oldfile , string $newfile )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Copia un fichero interno de un archivo phar a otro fichero nuevo dentro del phar. Esta es una alternativa orientada a objetos para usar copy() con la envoltura de flujos phar.

Parámetros

oldfile

newfile

Valores devueltos

Devuelve TRUE en caso de éxito, pero es más seguro encerrar la llamada al método en un bloque try/catch y asumir el éxito si no se lanza ninguna excepción.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException si el fichero origen no exite, el fichero destino ya existe, el acceso a escritura está deshabilitado, la apertura de cualquiera de los dos ficheros falla, la lectura del fichero fuente falla, o una excepción de tipo PharException si la escritura de los cambios del phar falla.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::copy()

Este ejemplo muestra el uso de Phar::copy() y su equivalente con envoltura de flujos. La principal diferencia entre los dos enfoques es el manejo de errores. Todos los métodos de Phar lanzan excepciones, mientras que la envoltura de flujos utiliza trigger_error().

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar['a'] = 'hola';
    
$phar->copy('a''b');
    echo 
$phar['b']; // imprime "hola"
} catch (Exception $e) {
    
// manejar errores
}

// el equivalente con envoltura de flujos del código de arriba.
// Se dispara E_WARNINGS en caso de error en vez de excepciones.
copy('phar://miphar.phar/a''phar//miphar.phar/c');
echo 
file_get_contents('phar://miphar.phar/c'); // imprimie "hola"
?>



Phar::count

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::countDevuelve el número de entradas (ficheros) en el archivo Phar

Descripción

int Phar::count ( void )

Parámetros

Valores devueltos

El número de archivos que contiene Phar, o 0 (el número cero) si no contiene.

Ejemplos

Ejemplo #1 Phar::count() ejemplo

<?php
// asegurarse de que no existe
@unlink('brandnewphar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar'0'brandnewphar.phar');
} catch (
Exception $e) {
    echo 
'No se pudo crear Phar:'$e;
}
echo 
'El nuevo Phar tiene ' $p->count() . " entradas\n";
$p['file.txt'] = 'hi';
echo 
'El nuevo Phar tiene ' $p->count() . " entradas\n";
?>

El resultado del ejemplo sería:

El nuevo Phar tiene 0 entradas
El nuevo Phar tiene 1 entradas



Phar::createDefaultStub

(Unknown)

Phar::createDefaultStubCrear una rutina de interoperabilidad específica del formato de fichero phar

Descripción

string Phar::createDefaultStub ([ string $indexfile [, string $webindexfile ]] )

Este método está destinado a la creación de rutinas de interoperabilidad (stubs) específicas del formato de fichero phar, y no está destinado a ustilizarlo con archivo phar basados en tar o zip.

Los archivos Phar contienen una rutina de interoperabilidad cargadora (en inglés stub) escrita en PHP que se ejecuta cuando el archivo es ejecutado en el propio PHP mediante inclusión:

<?php
include 'miphar.phar';
?>
o por simple ejecución:
php miphar.phar
    

Este método proporciona una manera simple y sencilla de crear una rutina de interoperabilidad que ejecutará un fichero inicial desde el archivo phar. Además, se pueden especificar diferentes ficheros para ejecutar el archivo phar desde la línea de comandos o a través de un servidor web. La rutina de interoperabilidad cargadora también llama a Phar::interceptFileFuncs() para permitir empaquetar de manera sencilla una aplicación PHP que accede al sistema de ficheros. Si la extensión phar no está presente, la rutina de interoperabilidad cargadora extraerá el archivo phar en un directorio temporal y después operará sobre los archivos. Una función d cierre borra los ficheros temporales a la salida.

Valores devueltos

Devuelve una cadena que contiene una rutina de interoperabildad personalizada (stub) que permite al archivo Phar creado funcionar con o sin la extensón Phar habilitada.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException si cualquier parámetro es mayor de 400 bytes.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::createDefaultStub()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
} catch (
Exception $e) {
    
// manejar errores
}
?>

Ver también

  • Phar::setStub() - Establecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar
  • Phar::getStub() - Devolver el cargador de PHP o la rutina de interoperabilidad de un archivo Phar



Phar::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::decompressDescomprimir un archivo Phar entero

Descripción

object Phar::decompress ([ string $extension ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos phar basados en tar y phar, este método descomprime el archivo entero.

Para archivos phar basados en Zip, este método este método falla con el lanzamiento de una excepción. La extensión zlib debe estar habilitada para descomprimir un archivo comprimido con la compresión gzip, y la extensión bzip2 debe estar habilitada para descomprimir un archivo comprimido con la compresión bzip2. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Además, este método cambia automáticamente la extensión del archivo, .phar por omisión para archivos phar, o .phar.tar para archivos phar basados en tar. De forma alternativa, se puede expecificar una extensión de fichero con el segundo parámetro.

Parámetros

extension

Para la descompresión, las extensiones de fichero predeterminadas son .phar y .phar.tar. Use este parámetro para especificar otra extensión de fichero. Observe que todos los archivos phar ejecutables deben contener .phar en su nombre de fichero.

Valores devueltos

Devuelve un objeto de la clase Phar.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::decompress()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar.gz');
$p['mifichero1.txt'] = 'hola';
$p['mifichero12.txt'] = 'hola';
$p3 $p2->decompress(); // crea /ruta/a/mi.phar
?>

Ver también



Phar::decompressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::decompressFilesDescomprimir todos los ficheros del archivo Phar actual

Descripción

bool Phar::decompressFiles ( void )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos phar basados en tar, este método lanza una excepción de tipo BadMethodCallException, ya que la compresión de ficheros individuales dentro de un archivo tar no está soportada por el formato de fichero. Use Phar::compress() para comprimir un archivo phar entero basado en tar.

Para achivos phar basados en Zip y phar, este método descomprime todos los ficheros del archivo Phar. Las extensiones zlib o bzip2 deben estar habilitadas para aprovechar esta característica si cualquier fichero está comprimido con la compresión bzip2/zlib. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o si cualquier fichero está comprimido con la compresión bzip2 y la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::decompressFiles()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
$p->compressFiles(Phar::GZ);
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
int(4096)
bool(false)
bool(true)
string(14) "mifichero2.txt"
int(4096)
bool(false)
bool(true)
string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)

Ver también



Phar::delMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::delMetadataEliminar la metainformación global del phar

Descripción

bool Phar::delMetadata ( void )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Elimina la metainformación global del phar

Parámetros

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::delMetaData()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
var_dump($phar->getMetadata());
    
$phar->setMetadata("hola, qué tal");
    
var_dump($phar->getMetadata());
    
$phar->delMetadata();
    
var_dump($phar->getMetadata());
} catch (
Exception $e) {
    
// manejar errores
}
?>

El resultado del ejemplo sería:

NULL
string(14) "hola, qué tal"
NULL

Ver también



Phar::delete

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::deleteBorrar un fichero dentro de un archivo phar

Descripción

bool Phar::delete ( string $entry )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Borra un fichero dentro de un archivo. Esto es el equivalente funcional de llamar a unlink() en el equivalente de envoltura de flujos, tal como se muestra en el ejemplo de abajo.

Parámetros

entry

La ruta dentro de un archivo para borrar el fichero.

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si se produjo algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::delete()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar->delete('desvincular/yo.php');
    
// esto es equivalente a:
    
unlink('phar://miphar.phar/desvincular/yo.php');
} catch (
Exception $e) {
    
// manejar errores
}
?>

Ver también



Phar::extractTo

(Unknown)

Phar::extractToExtraer el contenido de un archivo phar a un directorio

Descripción

bool Phar::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Extrae todos los ficheros de un archivo phar al disco. Los ficheros y directorios extraídos conservan los mismos permisos que los almacenados en el archivo. Los parámetros opcionales permiten controlar qué ficheros serán extraídos, y si los ficheros existentes en disco podrán ser sobrescritos. El segundo parámetro files puede ser el nombre de un fichero o directorio a extraer, o un array de nombre de ficheros y directorios a extraer. Por omisión, este método no sobrescribirá los ficheros existentes, aunque el tercer parámetro se puede establecer a true para habilitar la sobrescritura de ficheros. Este método es similar a ZipArchive::extractTo().

Parámetros

pathto

Ruta dentro de un archivo al fichero a borrar.

files

El nombre de un fichero o directorio a extraer, o un array de ficheros/directorios a extraer.

overwrite

Esteblecer a TRUE para habilitar la sobrescritura de ficheros existentes

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::extractTo()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar->extractTo('/ruta/completa'); // extraer todos los ficheros
    
$phar->extractTo('/otra/ruta''fichero.txt'); // extraer solamente fichero.txt
    
$phar->extractTo('/esta/ruta',
        array(
'fichero1.txt''fichero2.txt')); // extraer solamente 2 ficheros
    
$phar->extractTo('/tercera/ruta'nulltrue); // extraer todos los ficheros y sobrescribirlos
} catch (Exception $e) {
    
// manejar errores
}
?>

Ver también



Phar::getMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getMetadataDevolver la metainformación de un archivo phar

Descripción

mixed Phar::getMetadata ( void )

Recupera la información de un archivo. La metainformación puede ser cualquier variable de PHP que pueda ser serializada.

Parámetros

No tiene parámetros.

Valores devueltos

Cualquier variable de PHP que pueda ser serializada y almacenada como metainformación del archivo Phar, o NULL si no hay metainformación almacenada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::getMetadata()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.php'] = '<?php echo "hola";';
    
$p->setMetadata(array('bootstrap' => 'fichero.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'No se pudo crear y/o modificar el phar:'$e;
}
?>

El resultado del ejemplo sería:

array(1) {
  ["bootstrap"]=>
  string(11) "fichero.php"
}

Ver también



Phar::getModified

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getModifiedDevolver si el phar fue modificado

Descripción

bool Phar::getModified ( void )

Este método se puede usar para determinar si un phar tiene un fichero interno eliminado, o el contenido de un fichero ha cambiado de alguna forma.

Parámetros

No tiene parámetros.

Valores devueltos

TRUE si el phar ha sido modificado desde su apertura, FALSE si no.



Phar::getSignature

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getSignatureDevolver la firma MD5/SHA1/SHA256/SHA512/OpenSSL de un archivo Phar

Descripción

array Phar::getSignature ( void )

Devuelve la firma de verificación de un archivo phar en una cadena hexadecimal.

Parámetros

Valores devueltos

Un array con las firmas del archivo abierto en la clave hash, y MD5, SHA-1, SHA-256, SHA-512, o OpenSSL en la clave hash_type. Esta firma es un hash calculado sobre el contenido entero del phar, y puede ser usada para verificar la integridad del archivo. Se requiere absolutamente una firma válida de todos los archivos phar ejecutables si la variable INI phar.require_hash está establecida a true.



Phar::getStub

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getStubDevolver el cargador de PHP o la rutina de interoperabilidad de un archivo Phar

Descripción

string Phar::getStub ( void )

Los archivos Phar contienen una rutina de interoperabilidad cargadora (en inglés stub) escrita en PHP que se ejecuta cuando el archivo es ejecutado en el propio PHP mediante inclusión:

<?php
include 'myphar.phar';
?>
o por simple ejecución:
php myphar.phar
    

Valores devueltos

Devuelve una cadena que contiene la rutina de interoperabilidad cargadora (stub) del archivo Phar actual.

Errores/Excepciones

Lanza una excepción de tipo RuntimeException si no es posible leer la rutina de interoperabilidad del archivo Phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::getStub()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
echo 
$p->getStub();
echo 
"==NEXT==\n";
$p->setStub("<?php
function __autoload(
$clase)
{
    include 'phar://' . str_replace('_', '/', 
$clase);
}
Phar::mapPhar('miphar.phar');
include 'phar://miphar.phar/arrancar.php';
__HALT_COMPILER(); ?>"
);
echo 
$p->getStub();
?>

El resultado del ejemplo sería:

<?php __HALT_COMPILER(); ?>
==NEXT==
<?php
function __autoload($clase)
{
    include 'phar://' . str_replace('_', '/', $clase);
}
Phar::mapPhar('miphar.phar');
include 'phar://miphar.phar/arrancar.php';
__HALT_COMPILER(); ?>

Ver también

  • Phar::setStub() - Establecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar
  • Phar::createDefaultStub() - Crear una rutina de interoperabilidad específica del formato de fichero phar



Phar::getSupportedCompression

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::getSupportedCompressionDevolver un array de los algoritmos de compresión soportados

Descripción

array Phar::getSupportedCompression ( void )

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve un array que contiene Phar::GZ o Phar::BZ2, dependiendo de la disponibilidad de la extensión zlib o de la extensión bz2.

Ver también



Phar::getSupportedSignatures

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::getSupportedSignaturesDevolver un array con los tipos de firmas soportados

Descripción

array Phar::getSupportedSignatures ( void )

Devuelve un array con los tipos de firmas soportados

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve un array que contiene cualquiera de las firmas MD5, SHA-1, SHA-256, SHA-512, o OpenSSL.

Ver también



Phar::getVersion

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::getVersionDevolver información de la versión del archivo Phar

Descripción

string Phar::getVersion ( void )

Devuelve la versión de la API de un archvo Phar abierto.

Parámetros

Valores devueltos

La versión de la API del arcivo abierto. No se debe confundir con la versión de la API que la extensión phar cargada usará para crear nuevos phars. Cada archivo Phar tiene la versión de la API codificada dentro de su manifiesto. Véase la documentación del formato de fichero Phar para más información.

Ver también



Phar::hasMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::hasMetadataDevolver si el phar tiene metainformación global

Descripción

bool Phar::hasMetadata ( void )

Devuelve si el phar tiene metainformación global establecida.

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve TRUE si la metainformación ha sido establecida, y FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::hasMetadata()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
var_dump($phar->hasMetadata());
    
$phar->setMetadata(array('cosa' => 'hola'));
    
var_dump($phar->hasMetadata());
    
$phar->delMetadata();
    
var_dump($phar->hasMetadata());
} catch (
Exception $e) {
    
// manejar errores
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)
bool(false)

Ver también



Phar::interceptFileFuncs

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::interceptFileFuncsOrdenar a phar interceptar fopen, file_get_contents, opendir, y todas las funciones relacionadas con estadísticas

Descripción

void Phar::interceptFileFuncs ( void )

Ordena a phar interceptar fopen(), readfile(), file_get_contents(), opendir(), y todas las funciones relacionadas con estadísticas. Si cualquiera de estas tres funciones es llamada desde dentro de un archivo phar con una ruta relativa, la llamada es modificada para acceder al fichero dentro del archivo phar. Se asume que las rutas absolutas son intentos para cargar ficheros externos desde el sistema de ficheros.

Esta función hace posible ejecutar aplicaciones de PHP diseñadas para ejecutarse desde un disco duro como una aplicación phar.

Parámetros

No tiene parámetros.

Valores devueltos

Ejemplos

Ejemplo #1 Un ejemplo de Phar::interceptFileFuncs()

<?php
Phar
::interceptFileFuncs();
include 
'phar://' __FILE__ '/fichero.php';
?>

Se asume que este phar está en /ruta/a/miphar.phar y que contiene fichero.php y fichero2.txt, si fichero.php contiene este código:

Ejemplo #2 Un ejemplo de Phar::interceptFileFuncs()

<?php
echo file_get_contents('fichero2.txt');
?>

Normalmente, PHP buscará fichero2.txt en el directorio actual, que traducirá como el directorio del fichero.php, o el direcotorio actual de un usuario de la línea de comandos. En el código del ejemplo anterior, Phar::interceptFileFuncs() ordena a PHP que considere el directorio actual como phar:///ruta/a/miphar.phar/ y por lo tanto abra phar:///ruta/a/miphar.phar/fichero2.txt.



Phar::isBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::isBufferingDeterminar si las operaciones de escritura de Phar está siendo almacenadas en buffer, o están siendo volcadas directamente al disco

Descripción

bool Phar::isBuffering ( void )

Este método se puede usar para determinar si un Phar guardará los cambios al disco inmediatamente, o si se necesita una llamada Phar::stopBuffering() para habilitar el guardado de los cambios.

La escritura en buffer de Phar es por archivo, el almacenamiento activo en buffer del archivo Phar foo.phar no afecta a los cambios hechos al archivo Phar bar.phar.

Valores devueltos

Devuelve TRUE si las operaciones de escritura están siendo almacenadas en buffer, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::isBuffering()

<?php
$p 
= new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
$p2 = new Phar('phar_existente.phar');
$p['fichero1.txt'] = 'hola';
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
?>
=2=
<?php
$p
->startBuffering();
var_dump($p->isBuffering());
var_dump($p2->isBuffering());
$p->stopBuffering();
?>
=3=
<?php
var_dump
($p->isBuffering());
var_dump($p2->isBuffering());
?>

El resultado del ejemplo sería:

bool(false)
bool(false)
=2=
bool(true)
bool(false)
=3=
bool(false)
bool(false)

Ver también

  • Phar::startBuffering() - Iniciar las operaciones de escritura en buffer de Phar, no modifica el objeto Phar del disco
  • Phar::stopBuffering() - Detener las peticiones de escritura en buffer del archivo Phar, y guardar los cambios en disco



Phar::isCompressed

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::isCompressedDevuelve Phar::GZ oPHAR::BZ2 si el archivo phar entero está comprimido (.tar.gz/tar.bz, etc.)

Descripción

mixed Phar::isCompressed ( void )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Devuelve Phar::GZ o PHAR::BZ2 si el archivo phar entero está comprimido (.tar.gz/tar.bz, etc.). Los archivos phar basados en Zip no pueden ser comprimidos como un fichero, y por lo tanto, este método devolverá siempre FALSE si se requiere un archivo phar basado en zip.

Parámetros

No tiene parámetros.

Valores devueltos

Phar::GZ, Phar::BZ2 o FALSE

Ejemplos

Ejemplo #1 Un ejemplo de Phar::isCompressed()

<?php
try {
    
$phar1 = new Phar('miphar.zip.phar');
    
var_dump($phar1->isCompressed());
    
$phar2 = new Phar('sin_comprimir.tar.phar');
    
var_dump($phar2->isCompressed());
    
$phar2->compressAllFilesGZ();
    
var_dump($phar2->isCompressed() == Phar::GZ);
} catch (
Exception $e) {
}
?>

El resultado del ejemplo sería:

bool(false)
bool(false)
bool(true)

Ver también



Phar::isFileFormat

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::isFileFormatDevolver true si el archivo phar está basado en el formato de fichero tar/phar/zip dependiendo del parámetro

Descripción

bool Phar::isFileFormat ( int $format )

Parámetros

format

Phar::PHAR, Phar::TAR, o Phar::ZIP para comprobar el formato del archivo.

Valores devueltos

Devuelve TRUE si el archivo phar coincide con el formato de fichero solicitado por el parámetro

Errores/Excepciones

Se lanza una excepción de tipo PharException si el parámetro es un especificador de formato de fichero desconocido.

Ver también



Phar::isValidPharFilename

(PHP >= 5.3.0, PECL phar >= 1.2.0)

Phar::isValidPharFilenameDevolver si el nombre de fichero dado es un nombre de fichero phar válido

Descripción

bool Phar::isValidPharFilename ( string $filename [, bool $executable = true ] )

Devuelve si el nombre de fichero dado es un nombre de fichero phar válido que será reconocido como un archivo phar por la extensión phar. Este método se puede usar para comprobar un nombre sin tener que instanciar un archivo phar y capturar la inevitable excepción que será lanzada si se especifica un nombre no válido.

Parámetros

filename

El nombre o la ruta completa al archivo phar aún no creado

executable

Este parámetro determina si el nombre de fichero debería ser tratado como un archivo phar ejecutable o un archivo de datos no ejecutable

Valores devueltos

Devuelve TRUE si el nombre de fichero es válido, FALSE si no.



Phar::isWritable

(Unknown)

Phar::isWritableDevolver si el archivo phar se puede modificar

Descripción

bool Phar::isWritable ( void )

Este método devuelve TRUE si phar.readonly es 0, y el archivo phar real del disco no es de sólo lectura.

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve TRUE si el archivo phar puede ser modificado

Ver también



Phar::loadPhar

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::loadPharCargar cualquier archivo phar con un alias

Descripción

bool Phar::loadPhar ( string $filename [, string $alias ] )

Este método se puede usar para leer el contenido de una archivo Phar externo. Esto es más útil para asignar un alias a un phar, por lo que las referencias subsiguientes al phar puedan usar el alias más corto, o para cargar archivos Phar que contengan solamente datos y no estén concebidos para la ejecución/inclusión en scripts de PHP.

Parámetros

filename

La ruta completa o relativa al archivo phar a abrir

alias

El alias que puede usarse para referirse al archivo phar. Observe que muchos archivos phar especifican un alias explícito dentro del archivo phar, y que una excepción de tipo PharException será lanzada si en este caso se especifica un nuevo alias.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo PharException si se pasa un alias y en archivo phat ya tiene uno explícito

Ejemplos

Ejemplo #1 Un ejemplo de Phar::loadPhar()

Phar::loadPhar puede usarse en cualquier lugar para cargar un archivo Phar externo, mientras que Phar::mapPhar debería usarse en una rutina de interoperabilidad cargadora para un Phar.

<?php
try {
    
Phar::loadPhar('/ruta/a/phar.phar''mi.phar');
    echo 
file_get_contents('phar://mi.phar/fichero.txt');
} catch (
PharException $e) {
    echo 
$e;
}
?>

Ver también

  • Phar::mapPhar() - Leer el fichero (un phar) que está en ejecución y registrar su manifiesto



Phar::mapPhar

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::mapPharLeer el fichero (un phar) que está en ejecución y registrar su manifiesto

Descripción

bool Phar::mapPhar ([ string $alias [, int $dataoffset = 0 ]] )

Este método estático solamente se puede usar dentro de una rutina de interoperabilidad cargadora de un archivo Phar para inicializar el phar cuando sea directamente ejecutado, o cuando se incluya en otro scrip.

Parámetros

alias

El alias que puede usarse en las URL phar:// para referirse a este archivo, en vez de su ruta completa.

dataoffset

Variable sin uso, está aquí por compatibilidad con los PHP_Archive de PEAR.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Se lanza una excepción de tipo PharException si no se llama directamente dentro de la ejecución de PHP, si no se encuentra el token __HALT_COMPILER(); en el fichero fuente actual, o si el fichero no se puede abrir para lectura.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::mapPhar()

mapPhar debería usarse dentro de una rutina de interoperabilidad cargadora de phar. Utilice loadPhar para cargar un phar externo en memoria.

Aquí está una rutina de interoperabilidad de Phar de muestra que usa mapPhar.

<?php
function __autoload($clase)
{
    include 
'phar://mi.phar/' str_replace('_''/'$clase) . '.php';
}
try {
    
Phar::mapPhar('mi.phar');
    include 
'phar://mi.phar/inicio.php';
} catch (
PharException $e) {
    echo 
$e->getMessage();
    die(
'No se puede inicializar el Phar');
}
__HALT_COMPILER();

Ver también



Phar::mount

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::mountMontar un fichero o ruta externos en una ubicación virtual dentro de un archivo phar

Descripción

void Phar::mount ( string $pharpath , string $externalpath )

Al igual que con el concepto del sistema de ficheros de Unix de montar dispositivos externos en rutas dentro del árbol de directorios, Phar::mount() siempre se refiere a ficheros y directorios externos como si estuvieran dentro de un archivo phar. Esto perimte una potente abstracción tal como referirse a ficheros de configuración externos como si estuvieran dentro del archivo.

Parámetros

pharpath

La ruta interna a usar dentro del archivo phar como la ubicación de la ruta montada. Debe ser una ruta relativa dentro del archivo phar, y no debe existir.

externalpath

Una ruta o un URL a un fichero o directorio externo a montar dentro del archivo phar.

Valores devueltos

No devuelve nada. Lanza una excepción de tipo PharException en caso de fallo.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún problema al montar la ruta.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::mount()

El siguiente ejemplo muestra el acceso a un fichero de configuración externo como si fuera una ruta dentro de un archivo phar.

Lo primero, el código dentro de un archivo phar:

<?php
$configuración 
simplexml_load_string(file_get_contents(
    
Phar::running(false) . '/config.xml'));
?>

Lo siguiente, el código externo utilizado para montar el fichero de configuración:

<?php
// primero se establece la asociación entre el config.xml abstracto
// y el real del disco
Phar::mount('phar://config.xml''/home/example/config.xml');
// ahora ejecutar la aplicación
include '/ruta/a/archivo.phar';
?>

Otro método es poner el codigo de montaje dentro de la rutina de interoperabilidad del archivo phar. Aquí está un ejemplo de establecer un fichero de configuración predeterminado si no se especifica una configuración de usuario:

<?php
// primero se establece la asociación entre el config.xml abstracto
// y el real del disco
if (defined('EXTERNAL_CONFIG')) {
    
Phar::mount('config.xml'EXTERNAL_CONFIG);
    if (
file_exists(__DIR__ '/extra_config.xml')) {
        
Phar::mount('extra.xml'__DIR__ '/extra_config.xml');
    }
} else {
    
Phar::mount('config.xml''phar://' __FILE__ '/default_config.xml');
    
Phar::mount('extra.xml''phar://' __FILE__ '/default_extra.xml');
}
// ahora ejecutar la aplicación
include 'phar://' __FILE__ '/index.php';
__HALT_COMPILER();
?>

...y el código externo para cargar este archivo phar:

<?php
define
('EXTERNAL_CONFIG''/inicio/ejemplo/config.xml');
// ahora ejecutar la aplicación
include '/ruta/a/archivo.phar';
?>



Phar::mungServer

(Unknown)

Phar::mungServerDefinir una lista de hasta 4 variables $_SERVER que debería ser modificadas para la ejecución

Descripción

void Phar::mungServer ( array $munglist )

Phar::mungServer() solamente debería ser llamado dentro de la rutina de interoperabilidad de un archivo phar.

Define una lista de hasta 4 variables $_SERVER que deberían ser modificadas para la ejecución. Las variables que pueden ser modificadas para eliminar rastros de una ejecución de un phar son REQUEST_URI, PHP_SELF, SCRIPT_NAME y SCRIPT_FILENAME.

Por sí solo, este método no hace nada. Solamente al combinarlo con Phar::webPhar() hace que tenga efecto, y sólo cuando el fichero solicitado es un fichero de PHP a ser procesado. Observe que las variables PATH_INFO y PATH_TRANSLATED son siempre modificadas.

Los valores originales de las variables que son modificadas son almacenados en el array SERVER con el prefijo PHAR_, así por ejemplo SCRIPT_NAME sería guardado como PHAR_SCRIPT_NAME.

Parámetros

munglist

Un array que contiene como índices de cadenas REQUEST_URI, PHP_SELF, SCRIPT_NAME y SCRIPT_FILENAME. Otros valores lanzan una excepción, y Phar::mungServer() es sensible a mayúsculas-minúsculas.

Valores devueltos

No devuelve nada.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException si se encontró algún problema con la información pasada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::mungServer()

<?php
// rutina de interoperabilidad de ejemplo
Phar::mungServer(array('REQUEST_URI'));
Phar::webPhar();
__HALT_COMPILER();
?>

Ver también

  • Phar::webPhar() - mapPhar para archivos phar basados en web. Controlador principal para aplicaciones web
  • Phar::setStub() - Establecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar



Phar::offsetExists

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetExistsDetermina si un fichero existe en un phar

Descripción

bool Phar::offsetExists ( string $offset )

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo Phar utilizando los corchetes de acceso al array.

offsetExists() es llamado siempre que isset() sea llamada.

Parámetros

offset

El nombre del fichero (ruta relativa) a buscar en un Phar.

Valores devueltos

Devuelve TRUE si el fichero existe dentro del phar, o FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::offsetExists()

<?php
$p 
= new Phar(dirname(__FILE__) . '/mi.phar'0'mi.phar');
$p['primer_fichero.txt'] = 'primer fichero';
$p['segundo_fichero.txt'] = 'segundo_fichero';
// las siguientes líneas llama a offsetExists() indirectamente
var_dump(isset($p['primer_fichero.txt']));
var_dump(isset($p['no_existe.txt']));
?>

El resultado del ejemplo sería:

bool(true)
bool(false)

Ver también



Phar::offsetGet

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetGetObtener un objeto de la clase PharFileInfo para un fichero específico

Descripción

int Phar::offsetGet ( string $offset )

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo Phar utilizando los corchetes de acceso al array. Phar::offsetGet() se usa para recuperar ficheros de un archivo Phar.

Parámetros

offset

El nombre del fichero (ruta relativa) a buscar en un Phar.

Valores devueltos

Devuelve un objeto de la clase PharFileInfo que puede usarse para iterar sobre el contenido de un fichero o para recuperar información sobre el fichero actual.

Errores/Excepciones

Este método lanza una extepción de tipo BadMethodCallException si el fichero no existe en el archivo Phar.

Ejemplos

Ejemplo #1 Ejemplo de Phar::offsetGet()

Ya que todas las clases implementan la iterfaz ArrayAccess, Phar::offsetGet() es automáticamente llamada a utilizar el operador [].

<?php
$p 
= new Phar(dirname(__FILE__) . '/miphar.phar'0'miphar.phar');
$p['existe.txt'] = "el fichero existe\n";
try {
    
// automáticamente llama a offsetGet()
    
echo $p['existe.txt'];
    echo 
$p['no_existe.txt'];
} catch (
BadMethodCallException $e) {
    echo 
$e;
}
?>

El resultado del ejemplo sería:

el fichero existe
Entry no_existe.txt does not exist

Ver también



Phar::offsetSet

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetSetEstablecer el contenido de un fichero interno a aquel de un fichero externo

Descripción

void Phar::offsetSet ( string $offset , string $value )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo Phar utilizando los corchetes de acceso al array. offsetSet se utiliza para modificar un fichero existente, o añadir un nuevo fichero al archivo Phar.

Parámetros

offset

El nombre del fichero (ruta relativa) a modificar en un Phar.

value

El contenido del fichero.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Si phar.readonly es 1, lanza una excepción de tipo BadMethodCallException, ya que modificar un Phar sólo está permitido cuando phar.readonly está establecido a 0. Lanza un excepción de tipo PharException si existe cualquier problema volcando los cambios hechos al archivo Phar al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::offsetSet()

No se debería acceder directamente a offsetSet, en su lugar se utiliza el operador [] para acceder al array.

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
try {
    
// llama a offsetSet
    
$p['fichero.txt'] = 'Hola qué tal';
} catch (
Exception $e) {
    echo 
'No se pudo modificar fichero.txt:'$e;
}
?>

Ver también



Phar::offsetUnset

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::offsetUnsetEliminar un fichero de un phar

Descripción

bool Phar::offsetUnset ( string $offset )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo Phar utilizando los corchetes de acceso al array. offsetUnset se utiliza para borrar un fichero existente, y es llamado por el constructor de lenguaje unset().

Parámetros

offset

El nombre del fichero (ruta relativa) a eliminar en un Phar.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Si phar.readonly es 1, lanza una excepción de tipo BadMethodCallException, ya que modificar un Phar sólo está permitido cuando phar.readonly está establecido a 0. Lanza un excepción de tipo PharException si existe cualquier problema volcando los cambios hechos al archivo Phar al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::offsetUnset()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
try {
    
// borra fichero.txt de mi.phar llamando a offsetUnset
    
unset($p['fichero.txt']);
} catch (
Exception $e) {
    echo 
'No se pudo borrar fichero.txt: '$e;
}
?>

Ver también



Phar::running

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::runningDevolover la ruta completa del disco o el URL completo de phar del archivo Phar que está en ejecución

Descripción

string Phar::running ([ bool $retphar = true ] )

Devuelve la ruta completa del archivo phar en ejecución. Este método tiene la intención de utilizarse como la constante mágica __FILE__, y solamente tiene efecto dentro de un archivo phar en ejecución.

Dentro de una rutina de interoperabilidad de un archivo, Phar::running() devuelve "". Use simplemente __FILE__ para acceder al phar que está ejecutándose acualmente dentro de una rutina de interoperabilidad.

Parámetros

retphar

Si es FALSE, se devuelve la ruta completa del disco del archivo phar. Si es TRUE, se devuelve el URL phar completo.

Valores devueltos

Devuelve el nombre de fichero si es válido, si no una cadena vacía.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::running()

Para el siguiente ejemplo se asume que el archivo phar está ubicado en /ruta/a/phar/mi.phar.

<?php
$a 
Phar::running(); // $a es "phar:///ruta/a/mi.phar"
$b Phar::running(false); // $b es "/ruta/a/mi.phar"
?>



Phar::setAlias

(PHP >= 5.3.0, PECL phar >= 1.2.1)

Phar::setAliasEstablecer el alias para un archivo Phar

Descripción

bool Phar::setAlias ( string $alias )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Establece el alias par un archivo Phar, y lo escribe como el alias permanente para este archivo phar. Un alias puede usarse internamente a un archivo phar para asegurarse de que el uso de la envoltura de flujo phar para acceder a ficheros internos, siempre funcione sin tener en cuenta la ubicación del archivo phar en el sistema de ficheros. Otra alternativa es confiar en la intercepción de Phar de include o utilizar Phar::interceptFileFuncs() y usar rutas relativas.

Parámetros

alias

Una cadena abreviada para referirse a este archivo en el acceso con la envoltura de flujo phar.

Valores devueltos

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException cuando el acceso a escritura está deshabilitado, y una excepción de tipo PharException si el alias ya está en uso o se encontró algún problema al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::setAlias()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar->setAlias('mip.phar');
} catch (
Exception $e) {
    
// manejar errores
}
?>

Ver también



Phar::setDefaultStub

(Unknown)

Phar::setDefaultStubEstablecer el cargador o la rutina de interoperabilidad de un archivo Phar al cargador predeterminado

Descripción

bool Phar::setDefaultStub ([ string $index [, string $webindex ]] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método es un método cómodo que combina la funcionalidad de Phar::createDefaultStub() y Phar::setStub().

Parámetros

index

La ruta relativa dentro del archivo phar a ejectuar si se accede desde la línea de comandos

webindex

La ruta relativa dentro del archivo phar a ejectuar si se accede desde un servidor web

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Se lanza una excepción de tipo UnexpectedValueException si phar.readonly está habilitado en php.ini. Se lanza una excepción de tipo PharException si se encuentra cualquier problema al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::setDefaultStub()

<?php
try {
    
$phar = new Phar('miphar.phar');
    
$phar->setDefaultStub('cli.php''web/index.php');
    
// esto es lo mismo que:
    // $phar->setStub($phar->createDefaultStub('cli.php', 'web/index.php'));
} catch (Exception $e) {
    
// manejar errores
}
?>

Ver también

  • Phar::setStub() - Establecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar
  • Phar::createDefaultStub() - Crear una rutina de interoperabilidad específica del formato de fichero phar



Phar::setMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setMetadataEstablecer la metainformación de un archivo phar

Descripción

void Phar::setMetadata ( mixed $metadata )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Phar::setMetadata() debería usarse para almacenar información personalizada que describa algo sobre el archivo phar como una entidad completa. PharFileInfo::setMetadata() debería usarse para metainformación específica de cada fichero. La metainformación puede ralentizar la velocidad de carga de un archivo phar si la información es grande.

Algunos posibles usos para la metainformación incluyen especificar qué fichero dentro del archivo debería usarse para cargar el archivo, o la ubicación de un fichero de manifiesto como el fichero package.xml de » PEAR. Sin embargo, se puede almacenar cualquier información útil que describa el archivo phar.

Parámetros

metadata

Cualquier variable de PHP que contenga la información a almacenar que describa el archivo phar

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::setMetadata()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.php'] = '<?php echo "hola"';
    
$p->setMetadata(array('bootstrap' => 'fichero.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'No se pudo crear y/o modificar el phar:'$e;
}
?>

El resultado del ejemplo sería:

array(1) {
  ["bootstrap"]=>
  string(11) "fichero.php"
}

Ver también



Phar::setSignatureAlgorithm

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::setSignatureAlgorithmEstablecer el algoritmo de firma para un phar y aplicarlo

Descripción

void Phar::setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Establece el algoritmo de firma para un phar y lo aplica. El algoritmo de firma debe ser una de las constantes Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, o Phar::OPENSSL.

Observe que todos los archivos phar ejecutables tienen una firma creada automáticamente, SHA1 por omisión. Los archivos de datos basados en tar o en zip (archivos creados con la clase PharData class) deben tener su signatura creada y establecerla explícitamente mediante Phar::setSignatureAlgorithm().

Parámetros

sigtype

Una de las constantes Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, o Phar::OPENSSL

privatekey

El contenido de una clave privada OpenSSL, como la extraída de un certificado o de un fichero de clave OpenSSL:

<?php
$private 
openssl_get_privatekey(file_get_contents('private.pem'));
$pkey '';
openssl_pkey_export($private$pkey);
$p->setSignatureAlgorithm(Phar::OPENSSL$pkey);
?>
Véase la Introducción de phar para instrucciones sobre la designación y ubicaión del fichero de clave pública.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException para muchos errores, y una excepción de tipo PharException si ocurrió algún problema al volcar los cambios al disco.

Ver también



Phar::setStub

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setStubEstablecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar

Descripción

bool Phar::setStub ( string $stub )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método se utiliza para añadir una rutina de interoperabilidad cargadora a un nuevo archivo Phar, o reemlazar la rutina de interoperabilidad de un archivo Phar existente.

La rutina de interoperabilidad cargadora de un archivo Phar se utiliza siempre que un archivo esté incluido directamente como en este ejemplo:

<?php
include 'miphar.phar';
?>

Al cargador no se accede cuando se incluye un archivo a través de la envoltura de flujos phar como aquí:

<?php
include 'phar://miphar.phar/un_fichero.php';
?>

Parámetros

stub

Una cadena o un gestor de flujo abierto para usarlo como la rutina de interoperabilidad ejecutable de este archivo phar.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Se lanza una excepción de tipo UnexpectedValueException si phar.readonly está habilitado en php.ini. Se lanza una excepción de tipo PharException si se encuentra cualquier problema al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::setStub()

<?php
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['a.php'] = '<?php var_dump("Hola");';
    
$p->setStub('<?php var_dump("Primero"); Phar::mapPhar("nuevo_phar.phar"); __HALT_COMPILER(); ?>');
    include 
'phar://nuevo_phar.phar/a.php';
    
var_dump($p->getStub());
    
$p['b.php'] = '<?php var_dump("Mundo");';
    
$p->setStub('<?php var_dump("Segundo"); Phar::mapPhar("nuevo_phar.phar"); __HALT_COMPILER(); ?>');
    include 
'phar://nuevo_phar.phar/b.php';
    
var_dump($p->getStub());
} catch (
Exception $e) {
    echo 
'Las operaciones de escritura sobre nuevo_phar.phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

string(4) "Hola"
string(84) "<?php var_dump("Primero"); Phar::mapPhar("nuevo_phar.phar"); __HALT_COMPILER(); ?>"
string(5) "Mundo"
string(84) "<?php var_dump("Segundo"); Phar::mapPhar("nuevo_phar.phar"); __HALT_COMPILER(); ?>"

Ver también

  • Phar::getStub() - Devolver el cargador de PHP o la rutina de interoperabilidad de un archivo Phar
  • Phar::createDefaultStub() - Crear una rutina de interoperabilidad específica del formato de fichero phar



Phar::startBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::startBufferingIniciar las operaciones de escritura en buffer de Phar, no modifica el objeto Phar del disco

Descripción

void Phar::startBuffering ( void )

Aunque es técnicamente innecesario, el método Phar::startBuffering() puede proporcionar un aumento significativo de rendimiento al crear o modificar un archivo Phar con un gran número de ficheros. Normalmente, cada vez que un fichero dentro de un archivo Phar es creado o modificado de alguna manera, el archivo Phar entero se re-creará con los cambios. De esta forma, el archivo estará actualizado con la actividad realizada sobre él.

Sin embargo, esto puede ser innecesario al crear simplemente un nuevo archivo Phar, que tendría más sentido escribir el archivo entero de una vez. De forma similar, a menudo es necesario realizar una serie de cambios y asegurarse de que todos son posibles antes de hacer cualquier cambio en disco, similar al concepto de transacciones en bases de datos relacionales. La pareja de métodos Phar::startBuffering()/Phar::stopBuffering() está prevista para este propósito.

La escritura en buffer de Phar es por archivo, el almacenamiento activo en buffer del archivo Phar foo.phar no afecta a los cambios hechos al archivo Phar bar.phar.

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::startBuffering()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
} catch (
Exception $e) {
    echo 
'No se pudo crear el phar:'$e;
}
echo 
'El nuevo phar tiene ' $p->count() . " entradas\n";
$p->startBuffering();
$p['fichero.txt'] = 'hola';
$p['fichero2.txt'] = 'qué tal';
$p['fichero2.txt']->setCompressedGZ();
$p['fichero3.txt'] = 'cara de niño';
$p['fichero3.txt']->setMetadata(42);
$p->setStub("<?php
function __autoload(
$clase)
{
    include 'phar://miphar.phar/' . str_replace('_', '/', 
$clase) . '.php';
}
Phar::mapPhar('miphar.phar');
include 'phar://miphar.phar/inicio.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
?>

Ver también

  • Phar::stopBuffering() - Detener las peticiones de escritura en buffer del archivo Phar, y guardar los cambios en disco
  • Phar::isBuffering() - Determinar si las operaciones de escritura de Phar está siendo almacenadas en buffer, o están siendo volcadas directamente al disco



Phar::stopBuffering

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::stopBufferingDetener las peticiones de escritura en buffer del archivo Phar, y guardar los cambios en disco

Descripción

void Phar::stopBuffering ( void )

Phar::stopBuffering() se usa junto con el método Phar::startBuffering(). Phar::startBuffering() puede proporcionar un aumento significativo de rendimiento al crear o modificar un archivo Phar con un gran número de ficheros. Normalmente, cada vez que un fichero dentro de un archivo Phar es creado o modificado de alguna manera, el archivo Phar entero se re-creará con los cambios. De esta forma, el archivo estará actualizado con la actividad realizada sobre él.

Sin embargo, esto puede ser innecesario al crear simplemente un nuevo archivo Phar, que tendría más sentido escribir el archivo entero de una vez. De forma similar, a menudo es necesario realizar una serie de cambios y asegurarse de que todos son posibles antes de hacer cualquier cambio en disco, similar al concepto de transacciones en bases de datos relacionales. La pareja de métodos Phar::startBuffering()/Phar::stopBuffering() está prevista para este propósito.

La escritura en buffer de Phar es por archivo, el almacenamiento activo en buffer del archivo Phar foo.phar no afecta a los cambios hechos al archivo Phar bar.phar.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Se lanza una excepción de tipo PharException si se encontró algún problema volcando los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::stopBuffering()

<?php
$p 
= new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
$p['fichero1.txt'] = 'hola';
$p->startBuffering();
var_dump($p->getStub());
$p->setStub("<?php
function __autoload(\$clase)
{
    include 'phar://nuevo_phar.phar/' . str_replace('_', '/', \$clase) . '.php';
}
Phar::mapPhar('nuevo_phar.phar');
include 'phar://nuevo_phar.phar/incio.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
var_dump($p->getStub());
?>

El resultado del ejemplo sería:

string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($clase)
{
    include 'phar://' . str_replace('_', '/', $clase);
}
Phar::mapPhar('nuevo_phar.phar');
include 'phar://nuevo_phar.phar/incio.php';
__HALT_COMPILER();"

Ver también

  • Phar::startBuffering() - Iniciar las operaciones de escritura en buffer de Phar, no modifica el objeto Phar del disco
  • Phar::isBuffering() - Determinar si las operaciones de escritura de Phar está siendo almacenadas en buffer, o están siendo volcadas directamente al disco



Phar::uncompressAllFiles

(PECL phar < 2.0.0)

Phar::uncompressAllFilesDescomprimir todos los ficheros del archivo Phar actual

Descripción

bool Phar::uncompressAllFiles ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando Phar::compress(), Phar::decompress(), Phar::compressFiles() y Phar::decompressFiles().

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método descomprime todos los ficheros del archivo Phar. Si cualquier ficheros ya está comprimido con la compresión gzip, la extensión zlib debe estar habilitada para poder descomprimirlo, y cualquier fichero comprimido con la compresión bzip2 queriere de la extensión bzip2 para descomprimirlo. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2 no está habilitada y cualquier fichero está comprimido con la compresión bzip2, o si cualquer fichero está comprimido con la compresión gzip y la extensión zlib no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::uncompressAllFiles()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$p['mifichero2.txt'] = 'hola';
    
$p->compressAllFilesGZ();
    foreach (
$p as $fichero) {
        
var_dump($fichero->getFileName());
        
var_dump($fichero->isCompressed());
        
var_dump($fichero->isCompressedBZIP2());
        
var_dump($fichero->isCompressedGZ());
    }
    
$p->uncompressAllFiles();
    foreach (
$p as $fichero) {
        
var_dump($fichero->getFileName());
        
var_dump($fichero->isCompressed());
        
var_dump($fichero->isCompressedBZIP2());
        
var_dump($fichero->isCompressedGZ());
    }
} catch (
Exception $e) {
    echo 
'Las operaciones de escritura sobre mi.phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
bool(true)
bool(false)
bool(true)
string(14) "mifichero2.txt"
bool(true)
bool(false)
bool(true)
string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)

Ver también



Phar::unlinkArchive

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::unlinkArchiveElimiar completamente un archivo phar del disco y de la memoria

Descripción

bool Phar::unlinkArchive ( string $archive )

Elimina un archivo phar del disco y de la memoria.

Parámetros

archive

La ruta en el disco al archivo phar.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Se lanza una excepción de tipo PharException si existe cualquier fichero abierto que apunte al archivo phar, o cualquier objeto existente de las clases Phar, PharData, o PharFileInfo que haga referencia al archivo phar.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::unlinkArchive()

<?php
// uso simple
Phar::unlinkArchive('/ruta/a/mi.phar');

// ejemplo más común:
$p = new Phar('mi.phar');
$fp fopen('phar://mi.phar/fichero.txt''r');
// esto crea 'mi.phar.gz'
$gp $p->compress(Phar::GZ);
// eliminar todas las referencias al archivo
unset($p);
fclose($fp);
// ahora, eliminar todas los indicions del archivo
Phar::unlinkArchive('mi.phar');
?>

Ver también



Phar::webPhar

(PHP >= 5.3.0, PECL phar >= 2.0.0)

Phar::webPharmapPhar para archivos phar basados en web. Controlador principal para aplicaciones web

Descripción

void Phar::webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )

Phar::mapPhar() para archivos phar basados en web. Este método procesa $_SERVER['REQUEST_URI'] y direcciona una petición de un navegador web a un fichero interno dentro de un archivo phar. En esencia, simula un servidor web, direccionando las peticiones al fichero correcto, enviando las cabeceras correctas y procesando ficheros PHP según sea necesario. Este poderoso método es parte de lo que hace sencillo convertir una apliación PHP existene en un archivo phar. Combinado con Phar::mungServer() y Phar::interceptFileFuncs(), cualquier aplicación web se puede utilizar sin modificaciones desde un archivo phar.

Phar::webPhar() debería llamarse solamente desde la rutina de interoperabilidad (stub) de un archivo phar (aquí hay más información de lo que es una rutina de interorperabilidad).

Parámetros

alias

El alias que puede usarse en las URL phar:// para referirse a este archivo, en vez de su ruta completa.

index

La ubicación dentro del phar del índice de directorios.

f404

La ubicación del script a ejecutar cuando no se encuentra el fichero. Este script debería mostrar las cabeceras HTTP 404 apropiadas.

mimetypes

Un array que mapea extensiones de fichero adicionales a tipos de MIME. Si el mapeo predeterminado es suficiente, se ha de pasar un array vacío. Por omisión, estas extensiones son mapeadas a estos tipos de MIME:

<?php
$mimes 
= array(
    
'phps' => Phar::PHPS// pasa a highlight_file()
    
'c' => 'text/plain',
    
'cc' => 'text/plain',
    
'cpp' => 'text/plain',
    
'c++' => 'text/plain',
    
'dtd' => 'text/plain',
    
'h' => 'text/plain',
    
'log' => 'text/plain',
    
'rng' => 'text/plain',
    
'txt' => 'text/plain',
    
'xsd' => 'text/plain',
    
'php' => Phar::PHP// procesado como PHP
    
'inc' => Phar::PHP// procesado como PHP
    
'avi' => 'video/avi',
    
'bmp' => 'image/bmp',
    
'css' => 'text/css',
    
'gif' => 'image/gif',
    
'htm' => 'text/html',
    
'html' => 'text/html',
    
'htmls' => 'text/html',
    
'ico' => 'image/x-ico',
    
'jpe' => 'image/jpeg',
    
'jpg' => 'image/jpeg',
    
'jpeg' => 'image/jpeg',
    
'js' => 'application/x-javascript',
    
'midi' => 'audio/midi',
    
'mid' => 'audio/midi',
    
'mod' => 'audio/mod',
    
'mov' => 'movie/quicktime',
    
'mp3' => 'audio/mp3',
    
'mpg' => 'video/mpeg',
    
'mpeg' => 'video/mpeg',
    
'pdf' => 'application/pdf',
    
'png' => 'image/png',
    
'swf' => 'application/shockwave-flash',
    
'tif' => 'image/tiff',
    
'tiff' => 'image/tiff',
    
'wav' => 'audio/wav',
    
'xbm' => 'image/xbm',
    
'xml' => 'text/xml',
);
?>

rewrites

Un array que mapea URI al fichero interno, simulando la directiva mod_rewrite de apache. Por ejemplo:

<?php
array(
    
'mi_info' => 'mi_info.php'
);
?>
direccionaría las llamadas a http://<host>/miphar.phar/mi_info al fichero phar:///path/to/miphar.phar/mi_info.php, conservando GET/POST. Eso no funciona completamente como mod_rewrite, ya que no coincidiría con http://<host>/miphar.phar/mi_info/otro.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza una excepción de tipo PharException cuando no se puede abrir el fichero interno para salida, o si se llama desde un lugar que no sea una rutina de interoperabilidad. Si se pasa un array no válido a mimetypes o a rewrites, se lanza una excepción de tipo UnexpectedValueException.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::webPhar()

Con el ejemplo siguiente, el phar creado mostrará Hola Mundo si uno explora /miphar.phar/index.php o /miphar.phar, y mostrará la fuente de index.phps si uno explora /miphar.phar/index.phps.

<?php
// creating the phar archive:
try {
    
$phar = new Phar('miphar.phar');
    
$phar['index.php'] = '<?php echo "Hola Mundo"; ?>';
    
$phar['index.phps'] = '<?php echo "Hola Mundo"; ?>';
    
$phar->setStub('<?php
Phar::webPhar();
__HALT_COMPILER(); ?>'
);
} catch (
Exception $e) {
    
// manejar errores
}
?>

Ver también

  • Phar::mungServer() - Definir una lista de hasta 4 variables $_SERVER que debería ser modificadas para la ejecución
  • Phar::interceptFileFuncs() - Ordenar a phar interceptar fopen, file_get_contents, opendir, y todas las funciones relacionadas con estadísticas


Tabla de contenidos



La clase PharData

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

La clase PharData proporciona una interfaz de alto nivel para el acceso y la creación de archivos tar y zip no ejecutables. Debido a que estos archivos no contienen una rutina de interoperabilidad y no pueden ser ejecutados por la extensión phar, es posible crear y manipular ficheros zip y tar normales con la clase PharData incluso si la opción del php.ini phar.readonly está establecida a 1.

Sinopsis de la Clase

PharData extends Phar {
/* Propiedades */
/* Métodos */
bool addEmptyDir ( string $dirname )
void Phar::addFile ( string $file [, string $localname ] )
bool addFromString ( string $localname , string $contents )
array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )
array buildFromIterator ( Iterator $iter [, string $base_directory ] )
object compress ( int $compression [, string $extension ] )
bool compressFiles ( int $compression )
__construct ( string $fname [, int $flags [, string $alias [, int $format = Phar::TAR ]]] )
PharData convertToData ([ int $format [, int $compression [, string $extension ]]] )
Phar convertToExecutable ([ int $format [, int $compression [, string $extension ]]] )
bool copy ( string $oldfile , string $newfile )
object decompress ([ string $extension ] )
bool decompressFiles ( void )
bool delMetadata ( void )
bool delete ( string $entry )
bool extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
bool isWritable ( void )
void offsetSet ( string $offset , string $value )
bool offsetUnset ( string $offset )
bool setAlias ( string $alias )
bool setDefaultStub ([ string $index [, string $webindex ]] )
void Phar::setMetadata ( mixed $metadata )
void Phar::setSignatureAlgorithm ( int $sigtype )
bool setStub ( string $stub )
/* Métodos heredados */
void Phar::addEmptyDir ( string $dirname )
void Phar::addFile ( string $file [, string $localname ] )
void Phar::addFromString ( string $localname , string $contents )
string Phar::apiVersion ( void )
array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )
array Phar::buildFromIterator ( Iterator $iter [, string $base_directory ] )
bool Phar::canCompress ([ int $type = 0 ] )
bool Phar::canWrite ( void )
object Phar::compress ( int $compression [, string $extension ] )
void Phar::compressFiles ( int $compression )
Phar::__construct ( string $fname [, int $flags [, string $alias ]] )
PharData Phar::convertToData ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
Phar Phar::convertToExecutable ([ int $format = 9021976 [, int $compression = 9021976 [, string $extension ]]] )
bool Phar::copy ( string $oldfile , string $newfile )
int Phar::count ( void )
string Phar::createDefaultStub ([ string $indexfile [, string $webindexfile ]] )
object Phar::decompress ([ string $extension ] )
bool Phar::decompressFiles ( void )
bool Phar::delMetadata ( void )
bool Phar::delete ( string $entry )
bool Phar::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )
mixed Phar::getMetadata ( void )
bool Phar::getModified ( void )
array Phar::getSignature ( void )
string Phar::getStub ( void )
string Phar::getVersion ( void )
bool Phar::hasMetadata ( void )
bool Phar::isBuffering ( void )
mixed Phar::isCompressed ( void )
bool Phar::isFileFormat ( int $format )
bool Phar::isValidPharFilename ( string $filename [, bool $executable = true ] )
bool Phar::isWritable ( void )
bool Phar::loadPhar ( string $filename [, string $alias ] )
bool Phar::mapPhar ([ string $alias [, int $dataoffset = 0 ]] )
void Phar::mount ( string $pharpath , string $externalpath )
void Phar::mungServer ( array $munglist )
bool Phar::offsetExists ( string $offset )
int Phar::offsetGet ( string $offset )
void Phar::offsetSet ( string $offset , string $value )
bool Phar::offsetUnset ( string $offset )
string Phar::running ([ bool $retphar = true ] )
bool Phar::setAlias ( string $alias )
bool Phar::setDefaultStub ([ string $index [, string $webindex ]] )
void Phar::setMetadata ( mixed $metadata )
void Phar::setSignatureAlgorithm ( int $sigtype [, string $privatekey ] )
bool Phar::setStub ( string $stub )
void Phar::startBuffering ( void )
void Phar::stopBuffering ( void )
bool Phar::unlinkArchive ( string $archive )
void Phar::webPhar ([ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, array $rewrites ]]]]] )
}

PharData::addEmptyDir

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addEmptyDirAñadir un directorio vacío al archivo tar/zip

Descripción

bool PharData::addEmptyDir ( string $dirname )

Con este método se crea un directorio vacío con la ruta dada por dirname. Este método es similar a ZipArchive::addEmptyDir().

Parámetros

dirname

El nombre de directorio vacío a crear en el archivo tar o zip

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::addEmptyDir()

<?php
try {
    
$a = new PharData('/ruta/a/phar.phar');

    
$a->addEmptyDir('/ruta/completa/a/fichero');
    
// demuestra cómo se almacena este fichero
    
$b $a['ruta/completa/a/fichero']->isDir();
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



PharData::addFile

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addFileAñadir un fichero desde el sistema de ficheros al archivo tar/zip

Descripción

void Phar::addFile ( string $file [, string $localname ] )

Con este método, cualquier fichero o URL se puede añadir al arcivo tar/zip. Si se especifica el segundo parámetro opcional localname, el fichero será almacenado en el archivo con el nombre dado por el parámetro, si no se usará el parámetro file como la ruta para almacentar dentro del archivo. Las URLs deben tener un nombre local o se lanzará una excepción. Este método es similar a ZipArchive::addFile().

Parámetros

file

La ruta completa o relativa del fichero del disco a ser añadido al archivo phar.

localname

Ruta con la que el fichero será almacenado en el archivo.

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::addFile()

<?php
try {
    
$a = new PharData('/ruta/a/phar.phar');

    
$a->addFile('/ruta/completa/a/fichero');
    
// demuestra cómo se almacena este fichero
    
$b $a['ruta/completa/a/fichero']->getContent();

    
$a->addFile('/ruta/completa/a/fichero''mi/fichero.txt');
    
$c $a['mi/fichero.txt']->getContent();

    
// demostrar el uso de una URL
    
$a->addFile('http://www.ejemplo.com''ejemplo.html');
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



PharData::addFromString

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::addFromStringAñadir un fichero desde el sistema de ficheros al archivo tar/zip

Descripción

bool PharData::addFromString ( string $localname , string $contents )

Con este método, cuanquierl cadena se puede añadir al archivo tar/zip. El fichero será almacenado en el archivo con localname como su ruta. Este método es similar a ZipArchive::addFromString().

Parámetros

localname

Ruta con la que el fichero será almacenado en el archivo.

contents

El contenido del fichero a almacenar

Valores devueltos

No devuelve ningún valor, se lanza una excepción en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::addFromString()

<?php
try {
    
$a = new PharData('/ruta/a/phar.phar');

    
$a->addFromString('ruta/a/fichero.txt''mi sencillo fichero');
    
$b $a['ruta/a/fichero.txt']->getContent();

    
// para añadir contenido desde un gestor de flujos para ficheros grandes, use offsetSet()
    
$c fopen('/ruta/a/fichero_enorme.bin');
    
$a['fichero_grande.bin'] = $c;
    
fclose($c);
} catch (
Exception $e) {
    
// manejar los errores aquí
}
?>

Ver también



PharData::buildFromDirectory

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::buildFromDirectoryConstruir un archivo tar/zip desde los ficheros de un directorio

Descripción

array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

Rellena un archivo phar con el contenido de un directorio. El segundo parámtro opcional es una expresión regular (pcre) que se utiliza para excluir ficheros. Cualquier nombre de fichero que coincida con la expresión regular será incluido, todos los demás serán excluidos. Para un control más exhaustivo, use PharData::buildFromIterator().

Parámetros

base_dir

La ruta completa o relativa al directorio que contiene todos los ficheros a añadir al archivo.

regex

Una expresión regular de pcre opcional que se usa para filtrar la lista de ficheros. Solamente las rutas de fichero que coincidan con la expresión regular serán incluidas en el archivo.

Valores devueltos

Phar::buildFromDirectory() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no puede instanciar los iteradores intermos del directorio, o una excepción de tipo PharException si hubo errores al guardar el archivo phar.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::buildFromDirectory()

<?php
$phar 
= new PharData('proyecto.tar');
// añadir todos los ficheros del proyecto
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto');

$phar2 = new PharData('proyecto2.zip');
// añadir todos los ficheros del, incluir solamente los ficheros php
$phar->buildFromDirectory(dirname(__FILE__) . '/proyecto''/\.php$/');
?>

Ver también



PharData::buildFromIterator

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::buildFromIteratorConstruir un archivo tar o zip desde un iterador

Descripción

array PharData::buildFromIterator ( Iterator $iter [, string $base_directory ] )

Rellena un archivo tar o zip desde un iterador. Están soportados dos estilos de iteradores, los iteradores que mapean el nombre de fichero dentro del tar/zip al nombre del fichero en disco, y los iteradores como DirectoryIterator que devuelven objetos de la clase SplFileInfo. Se requiere el segundo parámetro para los iteradores que devuelven objetos de la clase SplFileInfo.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::buildFromIterator() con SplFileInfo

Para la mayoría de los archivos tar/zip, el archivo reflejará la distribución real de directorios, y el segundo estilo es el más útil. Por ejemplo, para crear un archivo tar/zip que contenga los ficheros n esta distribución de muestra de directorios:

/ruta/al/proyecto/
                 config/
                        dist.xml
                        debug.xml
                 lib/
                     fichero1.php
                     fichero2.php
                 src/
                     procesa_algo.php
                 www/
                     index.php
                 cli/
                     index.php

Este código podría usarse para añadir estos ficheros al archivo tar "proyecto.tar":

<?php
$phar 
= new PharData('proyecto.tar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
RecursiveDirectoryIterator('/ruta/al/proyecto')),
    
'/ruta/al/proyecto');
?>

El fichero project.tar se puede usar inmediatamente. PharData::buildFromIterator() no establece valores como la compresión y metainformación, que se puede hacer después de crear el archivo tar/zip.

Como observación interesante, PharData::buildFromIterator() también se puede usar para copiar el contenido de un archivo phar, tar o zip existentese, ya que los objetos de la clase PharData descienden de la clase DirectoryIterator:

<?php
$phar 
= new PharData('proyecto.tar');
$phar->buildFromIterator(
    new 
RecursiveIteratorIterator(
     new 
Phar('/ruta/a/otro_phar.phar')),
    
'phar:///ruta/a/otro_phar.phar/ruta/al/proyecto');
$phar->setStub($phar->createDefaultStub('cli/index.php''www/index.php'));
?>

Ejemplo #2 Un ejemplo de PharData::buildFromIterator() con otros iteradores

La segunda forma de iterador se puede usar con cualquier iterador que devuelva un mapeo clave => valor, tal como un objeto de la clase ArrayIterator:

<?php
$phar 
= new PharData('proyecto.tar');
$phar->buildFromIterator(
    new 
ArrayIterator(
     array(
        
'fichero/interno.php' => dirname(__FILE__) . '/algun_fichero.php',
        
'otro/fichero.jpg' => fopen('/rota/a/archivo_grande.jpg''rb'),
     )));
?>

Parámetros

iter

Cualquier iterador que mapee de forma asociativa el fichero tar/zip a la ubiciación o que devuelva objetos de la clase SplFileInfo

base_directory

Para los iteradores que devuelven objetos de la clase SplFileInfo, es la porción de cada ruta completa de fichero a eliminar cuando de añada al archivo tar/zip

Valores devueltos

PharData::buildFromIterator() devuelve un array asociativo que que mapea la ruta interna del fichero a la ruta completa del mismo en el sistema de ficheros.

Errores/Excepciones

Este método lanza una excepción de tipo UnexpectedValueException cuando el iterador devuelve valores incorrectos, tales como una clave de tipo integer en lugar de una cadena, una excepción de tipo BadMethodCallException cuando se pasa un iterador basado en SplFileInfo sin un parámetro base_directory, o una excepción de tipo PharException si hubo errores al guardar el archivo phar.

Ver también



PharData::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::compressComprimir el archivo tar/zip entero usando la compresión Gzip o Bzip2

Descripción

object PharData::compress ( int $compression [, string $extension ] )

Para archivos tar, este método comprime el archivo entero usando la compresión gzip o bzip2. El fichero resultante puede ser procesado con el comando gunzip/bunzip, o se puede acceder a él directa y transparentemente con la extensión Phar.

Para archivos phar basados en Zip, este método falla con el lanzamiento de una excepción. La extensión zlib debe estar habilitada para poder comprimir con la compresión gzip, y la extensión bzip2 debe estar habilitada para poder comprimir con la compresión bzip2.

Además, este método renombra automáticamente el archivo, añadiéndole .gz, .bz2 o eliminado la extensión si se pasa Phar::NONE para eliminar la compresión. De forma alternativa, se puede expecificar una extensión de fichero con el segundo parámetro.

Parámetros

compression

La compresión debe ser Phar::GZ o Phar::BZ2 para añadir compresión, o Phar::NONE para eliminarla.

extension

Por omisión, la extensión es .tar.gz o .tar.bz2 para comprimir un tar, y .tar para descomprimirlo.

Valores devueltos

Devuelve un objeto de la clase PharData.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la extensión zlib no está disponible, o la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::compress()

<?php
$p 
= new PharData('/ruta/a/mi.tar');
$p['myfile.txt'] = 'hi';
$p['myfile2.txt'] = 'hi';
$p1 $p->compress(Phar::GZ); // copia a /ruta/a/mi.phar.gz
$p2 $p->compress(Phar::BZ2); // copia a /ruta/a/mi.phar.bz2
$p3 $p2->compress(Phar::NONE); // excepción: /ruta/a/mi.phar ya existe
?>

Ver también

  • Phar::compress() - Comprimir el archivo Phar entero usando la compresión Gzip o Bzip2



PharData::compressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::compressFilesComprime todos los ficheros del archivo tar/zip actual

Descripción

bool PharData::compressFiles ( int $compression )

Para archivos phar basados en tar, este método lanza una excepción de tipo BadMethodCallException, ya que la compresión de ficheros individuales dentro de un archivo tar no está soportada por el formato de fichero. Use Phar::compress() para comprimir un archivo phar entero basado en tar.

Para achivos basados en Zip, este método comprime todos los ficheros del archivo usando la compresión especificada. Las extensiones zlib o bzip2 deben estar habilitadas para aprovechar esta característica. Además, si cualquier fichero ya está comprimido con la compresión bzip2/zlib, la extensión respectiva debe estar habilitada para poder descomprimir los ficheros antes de re-comprimirlos.

Parámetros

compression

La compresión debe ser Phar::GZ o Phar::BZ2 para añadir compresión, o Phar::NONE para eliminarla.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible, o si cualquier fichero está comprimido con la compresión bzip2 y la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::compressFiles()

<?php
$p 
= new Phar('/ruta/a/mi.phar'0'mi.phar');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
$p->compressFiles(Phar::GZ);
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)
string(13) "mifichero.txt"
int(4096)
bool(false)
bool(true)
string(14) "mifichero2.txt"
int(4096)
bool(false)
bool(true)

Ver también



PharData::__construct

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::__constructConstruir un objeto de archivo tar o zip no ejecutable

Descripción

PharData::__construct ( string $fname [, int $flags [, string $alias [, int $format = Phar::TAR ]]] )

Parámetros

fname

Ruta a un archivo tar/zip existente o para ser creado

flags

Banderas a pasar a la clase padre RecursiveDirectoryIterator.

alias

Alias con el que referirse al archivo Phar en las llamadas a funcionalidades de flujos.

format

Una de las constantes de formato de fichero disponiblies dentro de la clase Phar.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si se llama dos veces, o una excepción de tipo UnexpectedValueException si no se puede abrir el archivo phar.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::__construct()

<?php
try {
    
$p = new PharData('/ruta/a/mi.tar'CURRENT_AS_FILEINFO KEY_AS_FILENAME);
} catch (
UnexpectedValueException $e) {
    die(
'No se pudo abrir mi.tar');
} catch (
BadMethodCallException $e) {
    echo 
'Técnicamente esto no puede suceder';
}
echo 
file_get_contents('phar:///ruta/a/mi.tar/ejemplo.txt');
?>



PharData::convertToData

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::convertToDataConvertir un archivo phar en un fichero tar o zip no ejecutable

Descripción

PharData PharData::convertToData ([ int $format [, int $compression [, string $extension ]]] )

Este método se usa para convertir un archivo tar o zip no ejecutable a otro formato no ejecutable.

Si no se especifica ningún cambio, este método lanza una excepción de tipo BadMethodCallException Este método debería usarse para convertir un archivo tar a formato zip o viceversa. Aunque es posible cambiar la compresión de un archivo tar simplemente usando este método, es mejor utilizad el método PharData::compress() para una consistencia lógica.

En caso de éxito, el metodo crea un nuevo archivo en disco y devuelve un objeto de la clase PharData. El archivo antiguo no se elimina del disco, y debería hacerse manualmente después de que el proceso haya finalizado.

Parámetros

format

Este parámetro debería ser Phar::TAR o Phar::ZIP. Si se establece a NULL, se conservará el formato de fichero existente.

compression

Este parámetro debería ser Phar::NONE para no comprimir el archivo completo, Phar::GZ para la compresión basada en zlib, y Phar::BZ2 para la compresión basada en bzip.

extension

Este parámetro se utiliza para sobrescribir la extensión de fichero predeterminada de un archivo convertido. Observe que .phar no puede ser usado en ningún lugar del nombre de fichero de un archivo tar o zip no ejecutable.

Si se convierte a un archivo basado en tar, las extensiones predeterminadas son .tar, .tar.gz, y .tar.bz2 dependiendo de la compresión especificada. Para archivos basados en zip, la extensión predetermianda es .zip.

Valores devueltos

El método devuelve un objeto PharData en caso de éxito, y lanza una excepción en caso de error.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no se puede comprimir, se ha especificado un método de compresión desconocido, el archivo solicitado está almacenado en buffer con Phar::startBuffering() y no se ha cerrado con Phar::stopBuffering(), y una excepción de tipo PharException si se encontró algún problema durante el proceso de la creación de phar.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::convertToData()

Utilizar PharData::convertToData():

<?php
try {
    
$tarphar = new PharData('miphar.tar');
    
// observe que miphar.phar.tar *no* está desvinculado.
    // convertirlo a un formato de fichero tar no ejecutable,
    // se crea miphar.zip
    
$zip $tarphar->convertToData(Phar::ZIP);
    
// crear miphar.tbz
    
$tgz $tarphar->convertToData(Phar::TARPhar::BZ2'.tbz');
    
// crear miphar.phar.tgz
    
$phar $tarphar->convertToData(Phar::PHAR); // lanza una excepción
} catch (Exception $e) {
    
// manejar el error aquí
}
?>

Ver también



PharData::convertToExecutable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::convertToExecutableConvertir un archivo tar/zip no ejecutable en un archivo phar ejecutable

Descripción

Phar PharData::convertToExecutable ([ int $format [, int $compression [, string $extension ]]] )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Este método se utiliza para convertir un arhivo tar o zip no ejecutable en un archivo phar ejecutable. Se puede usar cualquiera de los tres formatos de fichero (phar, tar o zip), y también se puede realizar la compresión del archivo completo.

Si no se especifica ningún cambio, este método lanza una excepción de tipo BadMethodCallException

En caso de éxito, el metodo crea un nuevo archivo en disco y devuelve un objeto de la clase PharData. El archivo antiguo no se elimina del disco, y debería hacerse manualmente después de que el proceso haya finalizado. If successful, the method creates a new archive on disk and returns a Phar object. The old archive is not removed from disk, and should be done manually after the process has finished.

Parámetros

format

Este parámetro debería ser Phar::PHAR, Phar::TAR, o Phar::ZIP. Si se establece a NULL, se conservará el formato de fichero existente.

compression

Este parámetro debería ser Phar::NONE para no comprimir el archivo completo, Phar::GZ para la compresión basada en zlib, y Phar::BZ2 para la compresión basada en bzip.

extension

Este parámetro se utiliza para sobrescribir la extensión de fichero predeterminada de un archivo convertido. Observe que todos los archivos phar basados en zip o en tar deben contener .phar en su extensión de fichero para poder ser procesados como un archivo phar.

Si se convierte a un archivo basado en phar, las extensiones predeterminadas son .phar, .phar.gz, o .phar.bz2 dependiendo de la compresión especificada. Para archivos phar basados en tar, las extensiones predeterminadas son .phar.tar, .phar.tar.gz, y .phar.tar.bz2. Para archivos phar basados en zip, la estensión predeterminada es .phar.zip.

Valores devueltos

El método devuelve un objeto Phar en caso de éxito, y lanza una excepción en caso de error.

Errores/Excepciones

Este método lanza una excepción de tipo BadMethodCallException cuando no se puede comprimir, se ha especificado un método de compresión desconocido, el archivo solicitado está almacenado en buffer con Phar::startBuffering() y no se ha cerrado con Phar::stopBuffering(), una excepción de tipo UnexpectedValueException si el soporte para escritura está deshabilitado, y una excepción de tipo PharException si se encontró algún problema durante el proceso de la creación de phar.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::convertToExecutable()

Utilizar PharData::convertToExecutable():

<?php
try {
    
$tarphar = new PharData('miphar.tar');
    
// convertirlo al formato de fichero phar
    // observe que miphar.tar *no* está desvinculado
    
$phar $tarphar->convertToExecutable(Phar::PHAR); // crea miphar.phar
    
$phar->setStub($phar->createDefaultStub('cli.php''web/index.php'));
    
// crea miphar.phar.tgz
    
$comprimido $tarphar->convertToExecutable(Phar::TARPhar::GZ'.phar.tgz');
} catch (
Exception $e) {
    
// manejar el error aquí
}
?>

Ver también



PharData::copy

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::copyCopiar un fichero interno de un archivo phar a otro fichero nuevo dentro del phar

Descripción

bool PharData::copy ( string $oldfile , string $newfile )

Copia un fichero interno de un archivo tar/zip a otro fichero nuevo dentro del mismo archivo. Esta es una alternativa orientada a objetos para usar copy() con la envoltura de flujos phar.

Parámetros

oldfile

newfile

Valores devueltos

Devuelve TRUE en caso de éxito, pero es más seguro encerrar la llamada al método en un bloque try/catch y asumir el éxito si no se lanza ninguna excepción.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException si el fichero origen no exite, el fichero destino ya existe, el acceso a escritura está deshabilitado, la apertura de cualquiera de los dos ficheros falla, la lectura del fichero fuente falla, o una excepción de tipo PharException si la escritura de los cambios del phar falla.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::copy()

Este ejemplo muestra el uso de PharData::copy() y su equivalente con envoltura de flujos. La principal diferencia entre los dos enfoques es el manejo de errores. Todos los métodos de PharData lanzan excepciones, mientras que la envoltura de flujos utiliza trigger_error().

<?php
try {
    
$phar = new PharData('miphar.tar');
    
$phar['a'] = 'hola';
    
$phar->copy('a''b');
    echo 
$phar['b']; // imprime "phar://miphar.tar/b"
} catch (Exception $e) {
    
// manejar errores
}

// el equivalente con envoltura de flujos del código de arriba.
// Se dispara E_WARNINGS en caso de error en vez de excepciones.
copy('phar://miphar.tar/a''phar//miphar.tar/c');
echo 
file_get_contents('phar://miphar.tar/c'); // imprime "hola"
?>



PharData::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::decompressDescomprimir un archivo Phar entero

Descripción

object PharData::decompress ([ string $extension ] )

Para archivos phar basados en tar, este método descomprime el archivo entero.

Para archivos phar basados en Zip, este método este método falla con el lanzamiento de una excepción. La extensión zlib debe estar habilitada para descomprimir un archivo comprimido con la compresión gzip, y la extensión bzip2 debe estar habilitada para descomprimir un archivo comprimido con la compresión bzip2.

Además, este método renombra automáticamente la extensión de fichero del archivo, .tar por omisión. De forma alternativa, se puede expecificar una extensión de fichero con el segundo parámetro.

Parámetros

extension

Para la descompresión, las extensión de fichero predeterminada es .phar.tar. Use este parámetro para especificar otra extensión de fichero. Observe que todos los archivos no ejecutables no pueden contener .phar en su nombre de fichero.

Valores devueltos

Devuelve un objeto de la clase PharData.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la extensión zlib no está disponible, o la extensión bzip2 no está habilitada.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::decompress()

<?php
$p 
= new PharData('/ruta/a/mi.phar'0'mi.phar.gz');
$p['mifichero1.txt'] = 'hola';
$p['mifichero12.txt'] = 'hola';
$p3 $p2->decompress(); // crea /ruta/a/mi.phar
?>

Ver también



PharData::decompressFiles

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::decompressFilesDescomprimir todos los ficheros del archivo zip actual

Descripción

bool PharData::decompressFiles ( void )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Para archivos basados en tar, este método lanza una excepción de tipo BadMethodCallException, ya que la compresión de ficheros individuales dentro de un archivo tar no está soportada por el formato de fichero. Use Phar::compress() para comprimir un archivo phar entero basado en tar.

Para achivos phar basados en Zip y phar, este método descomprime todos los ficheros del archivo. Las extensiones zlib o bzip2 deben estar habilitadas para aprvechar esta característica si cualquier fichero está comprimido con la compresión bzip2/zlib.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la extensión zlib no está disponible, o si cualquier fichero está comprimido con la compresión bzip2 y la extensión bzip2 no está habilitada. Throws BadMethodCallException if the zlib extension is not available, or if any files are compressed using bzip2 compression and the bzip2 extension is not enabled.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::decompressFiles()

<?php
$p 
= new PharData('/ruta/a/mi.zip');
$p['mifichero.txt'] = 'hola';
$p['mifichero2.txt'] = 'hola';
$p->compressFiles(Phar::GZ);
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
$p->decompressFiles();
foreach (
$p as $fichero) {
    
var_dump($fichero->getFileName());
    
var_dump($fichero->isCompressed());
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
var_dump($fichero->isCompressed(Phar::GZ));
}
?>

El resultado del ejemplo sería:

string(13) "mifichero.txt"
int(4096)
bool(false)
bool(true)
string(14) "mifichero2.txt"
int(4096)
bool(false)
bool(true)
string(13) "mifichero.txt"
bool(false)
bool(false)
bool(false)
string(14) "mifichero2.txt"
bool(false)
bool(false)
bool(false)

Ver también



PharData::delMetadata

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::delMetadataEliminar la metainformación global de un archivo zip

Descripción

bool PharData::delMetadata ( void )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Elimina la metainformación global de un archivo zip

Parámetros

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::delMetaData()

<?php
try {
    
$phar = new PharData('miphar.zip');
    
var_dump($phar->getMetadata());
    
$phar->setMetadata("hola, qué tal");
    
var_dump($phar->getMetadata());
    
$phar->delMetadata();
    
var_dump($phar->getMetadata());
} catch (
Exception $e) {
    
// manejar errores
}
?>

El resultado del ejemplo sería:

NULL
string(14) "hola, qué tal"
NULL

Ver también



PharData::delete

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::deleteBorrar un fichero dentro de un archivo tar/zip

Descripción

bool PharData::delete ( string $entry )

Borra un fichero dentro de un archivo. Esto es el equivalente funcional de llamar a unlink() en el equivalente de envoltura de flujos, tal como se muestra en el ejemplo de abajo.

Parámetros

entry

La ruta dentro de un archivo para borrar el fichero.

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si se produjo algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::delete()

<?php
try {
    
$phar = new PharData('miphar.zip');
    
$phar->delete('desvincular/yo.php');
    
// esto es equivalente a:
    
unlink('phar://miphar.phar/desvincular/yo.php');
} catch (
Exception $e) {
    
// manejar errores
}
?>

Ver también



PharData::extractTo

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::extractToExtraer el contenido de un archivo tar/zip a un directorio

Descripción

bool PharData::extractTo ( string $pathto [, string|array $files [, bool $overwrite = false ]] )

Extrae todos los ficheros de un archivo tar/zip al disco. Los ficheros y directorios extraídos conservan los mismos permisos que los almacenados en el archivo. Los parámetros opcionales permiten controlar qué ficheros serán extraídos, y si los ficheros existentes en disco podrán ser sobrescritos. El segundo parámetro files puede ser el nombre de un fichero o directorio a extraer, o un array de nombre de ficheros y directorios a extraer. Por omisión, este método no sobrescribirá los ficheros existentes, aunque el tercer parámetro se puede establecer a true para habilitar la sobrescritura de ficheros. Este método es similar a ZipArchive::extractTo().

Parámetros

pathto

Ruta dentro de un archivo al fichero a borrar.

files

El nombre de un fichero o directorio a extraer, o un array de ficheros/directorios a extraer.

overwrite

Esteblecer a TRUE para habilitar la sobrescritura de ficheros existentes

Valores devueltos

Devuelve TRUE en caso de éxito, pero es mejor comprobar si lanza alguna excepción, y asumir el éxito si no se lanza ninguna.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún error al volcar los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::extractTo()

<?php
try {
    
$phar = new PharData('miphar.tar');
    
$phar->extractTo('/ruta/completa'); // extraer todos los ficheros
    
$phar->extractTo('/otra/ruta''fichero.txt'); // extraer solamente fichero.txt
    
$phar->extractTo('/esta/ruta',
        array(
'fichero1.txt''fichero2.txt')); // extraer solamente 2 ficheros
    
$phar->extractTo('/tercera/ruta'nulltrue); // extraer todos los ficheros y sobrescribirlos
} catch (Exception $e) {
    
// manejar errores
}
?>

Ver también



PharData::isWritable

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::isWritableDevolver si el archivo tar/zip se puede modificar

Descripción

bool PharData::isWritable ( void )

Este método devuelve TRUE si el archivo tar/zip archive del disco no es de sólo lectura. A diferencia de Phar::isWritable(), los archivos tar/zip de sólo datos se pueden modificar incluso si phar.readonly está establecido a 1.

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve TRUE si el archivo tar/zip puede ser modificado

Ver también



PharData::offsetSet

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::offsetSetEstablecer el contenido de un fichero dentro de un tar/zip a aquel de un fichero o cadena externos

Descripción

void PharData::offsetSet ( string $offset , string $value )

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo tar/zip utilizando los corchetes de acceso al array. offsetSet se utiliza para modificar un fichero existente, o añadir un nuevo fichero al archivo tar/zip.

Parámetros

offset

El nombre del fichero (ruta relativa) a modificar en un archivo tar o zip.

value

El contenido del fichero.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza un excepción de tipo PharException si existe cualquier problema volcando los cambios hechos al archivo tar/zip al disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::offsetSet()

No se debería acceder directamente a offsetSet, en su lugar se utiliza el operador [] para acceder al array.

<?php
$p 
= new PharData('/ruta/a/mi.phar'0'mi.phar');
try {
    
// llama a offsetSet
    
$p['fichero.txt'] = 'Hola qué tal';
} catch (
Exception $e) {
    echo 
'No se pudo modificar fichero.txt:'$e;
}
?>

Ver también

  • Phar::offsetSet() - Establecer el contenido de un fichero interno a aquel de un fichero externo



PharData::offsetUnset

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::offsetUnsetEliminar un ficerho de un archivo tar/zip

Descripción

bool PharData::offsetUnset ( string $offset )

Ésta es una implementación de la interfaz ArrayAccess que permite la manipulación directa del contenido de un archivo tar/zip utilizando los corchetes de acceso al array. offsetUnset se utiliza para borrar un fichero existente, y es llamado por el constructor de lenguaje unset().

Parámetros

offset

El nombre del fichero (ruta relativa) a eliminar en un archivo tar o zip.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza un excepción de tipo PharException si existe cualquier problema volcando los cambios hechos al archivo tar/zip al disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharData::offsetUnset()

<?php
$p 
= new PharData('/ruta/a/mi.phar'0'mi.phar');
try {
    
// borra fichero.txt de mi.phar llamando a offsetUnset
    
unset($p['fichero.txt']);
} catch (
Exception $e) {
    echo 
'No se pudo borrar fichero.txt: '$e;
}
?>

Ver también



PharData::setAlias

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setAliasfunción sin sentido (Phar::setAlias no es válido para PharData)

Descripción

bool PharData::setAlias ( string $alias )

Los archivos tar/zip no ejecutables no pueden tener un alias, por lo que este método simplemente lanza una excepción.

Parámetros

alias

Una cadena abreviada para referirse a este archivo en el acceso con la envoltura de flujo phar. Este parámetro es ignorado.

Valores devueltos

Errores/Excepciones

Lanza una excepción de tipo PharException en todas las llamdas al método

Ver también



PharData::setDefaultStub

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setDefaultStubfunción sin sentido (Phar::setStub no es válido para PharData)

Descripción

bool PharData::setDefaultStub ([ string $index [, string $webindex ]] )

Los archivos tar/zip no ejecutables no pueden tener una rutina de interoperabilidad, por lo que este método simplemente lanza una excepción.

Parámetros

index

La ruta relativa dentro del archivo phar a ejectuar si se accede desde la línea de comandos

webindex

La ruta relativa dentro del archivo phar a ejectuar si se accede desde un servidor web

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo PharException en todas las llamadas al método

Ver también

  • Phar::setDefaultStub() - Establecer el cargador o la rutina de interoperabilidad de un archivo Phar al cargador predeterminado



Phar::setMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

Phar::setMetadataEstablecer la metainformación de un archivo phar

Descripción

void Phar::setMetadata ( mixed $metadata )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Phar::setMetadata() debería usarse para almacenar información personalizada que describa algo sobre el archivo phar como una entidad completa. PharFileInfo::setMetadata() debería usarse para metainformación específica de cada fichero. La metainformación puede ralentizar la velocidad de carga de un archivo phar si la información es grande.

Algunos posibles usos para la metainformación incluyen especificar qué fichero dentro del archivo debería usarse para cargar el archivo, o la ubicación de un fichero de manifiesto como el fichero package.xml de » PEAR. Sin embargo, se puede almacenar cualquier información útil que describa el archivo phar.

Parámetros

metadata

Cualquier variable de PHP que contenga la información a almacenar que describa el archivo phar

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::setMetadata()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.php'] = '<?php echo "hola"';
    
$p->setMetadata(array('bootstrap' => 'fichero.php'));
    
var_dump($p->getMetadata());
} catch (
Exception $e) {
    echo 
'No se pudo crear y/o modificar el phar:'$e;
}
?>

El resultado del ejemplo sería:

array(1) {
  ["bootstrap"]=>
  string(11) "fichero.php"
}

Ver también



Phar::setSignatureAlgorithm

(PHP >= 5.3.0, PECL phar >= 1.1.0)

Phar::setSignatureAlgorithmEstablecer el algoritmo de firma para un phar y aplicarlo

Descripción

void Phar::setSignatureAlgorithm ( int $sigtype )

Nota:

Este método requiere que la opción de php.ini phar.readonly esté establecida a 0 para que trabaje con objetos Phar. De otra manera, se lanzará una excepción de tipo PharException.

Establece el algoritmo de firma para un phar y lo aplica. El algoritmo de firma debe ser una de las constantes Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, o Phar::OPENSSL. (PGP aún no está soportado y se recurre a SHA-1).

Parámetros

sigtype

Una de las constantes Phar::MD5, Phar::SHA1, Phar::SHA256, Phar::SHA512, or Phar::PGP

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Lanza una excepción de tipo UnexpectedValueException para muchos errores, una excepción de tipo BadMethodCallException si se llamó para un archivo basao en zip o en tar, y una excepción de tipo PharException si ocurrió algún problema al volcar los cambios al disco.

Ver también



PharData::setStub

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharData::setStubfunción sin sentido (Phar::setStub no es válido para PharData)

Descripción

bool PharData::setStub ( string $stub )

Los archivos tar/zip no ejecutables no pueden tener una rutina de interoperabilidad, por lo que este método simplemente lanza una excepción.

Parámetros

stub

Una cadena o un gestor de flujo abierto para usarlo como la rutina de interoperabilidad ejecutable de este archivo phar. Este parámetro es ignorado.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo PharException en todas las llamadas al método

Ver también

  • Phar::setStub() - Establecer el cargador de PHP o la rutina de interoperabilidad de un archivo Phar


Tabla de contenidos



La clase PharFileInfo

(No hay información de versión disponible, podría estar únicamente en SVN)

Introducción

La clase PharFileInfo proporciona una interfaz de alto nivel para el contenido y los atributos de un único fichero dentro de un archivo phar.

Sinopsis de la Clase

PharFileInfo extends SplFileInfo {
/* Propiedades */
/* Métodos */
void chmod ( int $permissions )
bool compress ( int $compression )
__construct ( string $entry )
bool decompress ( void )
bool delMetadata ( void )
int getCRC32 ( void )
int getCompressedSize ( void )
mixed getMetadata ( void )
int getPharFlags ( void )
bool hasMetadata ( void )
bool isCRCChecked ( void )
bool isCompressed ([ int $compression_type = 9021976 ] )
bool isCompressedBZIP2 ( void )
bool isCompressedGZ ( void )
bool setCompressedBZIP2 ( void )
bool setCompressedGZ ( void )
void setMetadata ( mixed $metadata )
bool setUncompressed ( void )
}

PharFileInfo::chmod

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::chmodEsteblecer los bits de permiso específicos del fichero

Descripción

void PharFileInfo::chmod ( int $permissions )

PharFileInfo::chmod() permite el ajuste del bit de permiso ejecutable de un fichero, así como el bit de sólo lectura. El bit de escritura se ignora, y se establece en tiempo de ejecución basándose en la variable INI phar.readonly. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto si el fichero está dentro de un archivo Phar. Los ficheros dentro de archivos PharData no tienen esta restricción.

Parámetros

permissions

Los permisos (véase chmod())

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::chmod()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar('nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.sh'] = '#!/usr/local/lib/php
    <?php echo "hi"; ?>'
;
    
// establecer el bit ejecutable
    
$p['fichero.sh']->chmod(0555);
    
var_dump($p['fichero.sh']->isExecutable());
} catch (
Exception $e) {
    echo 
'No se pudo crear/modificar el phar: '$e;
}
?>

El resultado del ejemplo sería:

bool(true)



PharFileInfo::compress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharFileInfo::compressComprimir la entrada del Phar actual con la compresión zlib o bzip2

Descripción

bool PharFileInfo::compress ( int $compression )

Este método comprime el fichero dentro de un archivo Phar usando la compresión bzip2 o zlib. Las extensiones bzip2 o zlib deben estar habilitadas para aprovechar esta característica. Además, si el fichero ya está comprimido, la extensión respectiva debe estar habilitada para poder descomprimir el fichero. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto si el fichero está dentro de un archivo Phar. Los ficheros dentro de archivos PharData no tienen esta restricción.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2/zlib no está disponible.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::compress()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    
var_dump($fichero->isCompressed(Phar::BZ2));
    
$p['mifichero.txt']->compress(Phar::BZ2);
    
var_dump($fichero->isCompressed(Phar::BZ2));
} catch (
Exception $e) {
    echo 
'Falló la operación de crear/modificar mi.phar: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)

Ver también



PharFileInfo::__construct

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::__constructConstruir un objeto de entrada Phar

Descripción

PharFileInfo::__construct ( string $entry )

Este método no debería llamarse directamente. En su lugar, un objeto de la clase PharFileInfo se inicializa al llamar a Phar::offsetGet() a traves del acceso a un array.

Parámetros

entry

La URL completa para recuperar un fichero. Si se desea recuperar la informacion del fichoer mi/fichero.php desde el phar boo.phar, la entrada debería ser phar://boo.phar/mi/fichero.php.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si __construct() es llamado dos veces. Lanza una excepción de tipo UnexpectedValueException si la URL del phar solicitado está malformada, el phar solicitado no se puede abrir, o el fichero no se puede encontrar dentro del phar.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::__construct()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['fichero_prueba.txt'] = "hola\nqué tal\namigo";
    
$fichero $p['fichero_prueba.txt'];
    foreach (
$fichero as $línea => $texto) {
        echo 
"línea número $línea$texto";
    }
    
// esto también funciona
    
$fichero = new PharFileInfo('phar:///ruta/a/mi.phar/fichero_prueba.txt');
    foreach (
$fichero as $línea => $texto) {
        echo 
"línea número $línea$texto";
    }
} catch (
Exception $e) {
    echo 
'Las operaciones Phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

línea número 1: hola
línea número 2: qué tal
línea número 3: amigo
línea número 1: hola
línea número 2: qué tal
línea número 3: amigo



PharFileInfo::decompress

(PHP >= 5.3.0, PECL phar >= 2.0.0)

PharFileInfo::decompressDescomprimir la entrada Phar actual dentro del phar

Descripción

bool PharFileInfo::decompress ( void )

Este método descompribe el fichero dentro de un archivo Phar. Dependiendo de cómo esté comprimido el fichero, las extensiones bzip2 o zlib deben estar habilitadas para aprovechar esta característica. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto si el fichero está dentro de un archivo Phar. Los ficheros dentro de archivos PharData no tienen esta restricción.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2/zlib no está disponible.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::decompress()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    
$fichero->compress(Phar::GZ);
    
var_dump($fichero->isCompressed());
    
$p['mifichero.txt']->decompress();
    
var_dump($fichero->isCompressed());
} catch (
Exception $e) {
    echo 
'La operación de crear/modificar mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

int(4096)
bool(false)

Ver también



PharFileInfo::delMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

PharFileInfo::delMetadataEliminar la metainformación de una entrada

Descripción

bool PharFileInfo::delMetadata ( void )

Eliminar la metainformación de una entrada, si existe.

Parámetros

No parameters.

Valores devueltos

Devuelve TRUE en caso de éxito, FALSE si la entrada no tiene metainformación. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto si el fichero está dentro de un archivo Phar. Los ficheros dentro de archivos PharData no tienen esta restricción.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún error al volcar los cambios al disco, y una excepción de tipo BadMethodCallException si el acceso a escritura está deshabilitado.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::delMetaData()

<?php
try {
    
$a = new Phar('miphar.phar');
    
$a['hola'] = 'hola';
    
var_dump($a['hola']->delMetadata());
    
$a['hola']->setMetadata('qué tal');
    
var_dump($a['hola']->delMetadata());
    
var_dump($a['hola']->delMetadata());
} catch (
Exception $e) {
    
// manejar errores
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)
bool(false)

Ver también



PharFileInfo::getCRC32

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::getCRC32Devolver el códido CRC32 o lanzar una exepción si la CRC no ha sido verificado

Descripción

int PharFileInfo::getCRC32 ( void )

Este método devuelve la suma de verificación crc32() del fichero dentro de un archivo Phar.

Valores devueltos

La suma de verificaicón crc32() de un fichero dentro de un archivo Phar.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si el fichero no tiene aún su CRC32 verificado. Esto sería imposible con un uso normal, ya que la CRC es verificada al abrir el fichero para lectura o escritura.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::getCRC32()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    echo 
$fichero->getCRC32();
} catch (
Exception $e) {
    echo 
'Las operaciones de escritura sobre mi.phar.phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

1872820616



PharFileInfo::getCompressedSize

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::getCompressedSizeDevolver el tamaño real de un fichero (con compresión) dentro de un archivo Phar

Descripción

int PharFileInfo::getCompressedSize ( void )

Devuelve el tamaño del fichero dentro del archivo Phar. Los ficheros no comprimidos devolverán el mismo valor que si se utilizara filesize() en vez de filesize()

Valores devueltos

El tamaño en bytes del fichero dentro del archivo Phar en disco.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::getCompressedSize()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    echo 
$fichero->getCompressedSize();
} catch (
Exception $e) {
    echo 
'Las operaciones de escritura sobre mi.phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

2

Ver también



PharFileInfo::getMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::getMetadataDevolver la metainformación específica de un fichero almacenada con un fichero

Descripción

mixed PharFileInfo::getMetadata ( void )

Devuelve la metainformación que fue almacenada en el manifiesto del archivo Phar para este fichero.

Parámetros

Valores devueltos

Cualquier variable de PHP que pueda ser serializada y almacenada como metainformación del fichero, o NULL si no hay metainformación almacenada.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::getMetadata()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.txt'] = 'hello';
    
$p['fichero.txt']->setMetadata(array('usuario' => 'bill''tipo-mime' => 'text/plain'));
    
var_dump($p['fichero.txt']->getMetadata());
} catch (
Exception $e) {
    echo 
'No se pudo crear y/o modificar nuevo_phar.phar:'$e;
}
?>

El resultado del ejemplo sería:

array(2) {
  ["usuario"]=>
  string(4) "bill"
  ["tipo-mime"]=>
  string(10) "text/plain"
}

Ver también



PharFileInfo::getPharFlags

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::getPharFlagsDevolver las banderas de una entrada de fichero

Descripción

int PharFileInfo::getPharFlags ( void )

Este método devuelve las banderas establecidas en el manifiesto de un Phar. Siempre devolverá 0 en la implementacion actual.

Valores devueltos

Las banderas del Phar (siempre 0 en la implementacion actual)

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::getPharFlags()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    
var_dump($fichero->getPharFlags());
} catch (
Exception $e) {
    echo 
'No se pudo crear/modificar my.phar: '$e;
}
?>

El resultado del ejemplo sería:

int(0)



PharFileInfo::hasMetadata

(PHP >= 5.3.0, PECL phar >= 1.2.0)

PharFileInfo::hasMetadataDevolver la metainformación de una entrada

Descripción

bool PharFileInfo::hasMetadata ( void )

Devuelve la metainformación de una fichero dentro de un archivo phar.

Parámetros

No tiene parámetros.

Valores devueltos

Devuelve FALSE si no está establecida la metainformación o es NULL, TRUE si la metainformación no es NULL

Ver también



PharFileInfo::isCRCChecked

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::isCRCCheckedDevolver si la entrada de fichero tiene su CRC verificada

Descripción

bool PharFileInfo::isCRCChecked ( void )

Este método devuelve si un fichero dentro de un archivo Phar tiene su CRC verificada.

Valores devueltos

TRUE si el fichero tiene su CRC verificada, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::isCRCChecked()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    
var_dump($fichero->isCRCChecked());
} catch (
Exception $e) {
    echo 
'Las operaciones de creación/modificación sobre mi.phar fallaron: '$e;
}
?>

El resultado del ejemplo sería:

bool(true)



PharFileInfo::isCompressed

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::isCompressedDevolver si la entrada está comprimida

Descripción

bool PharFileInfo::isCompressed ([ int $compression_type = 9021976 ] )

Este método devuelve si un fichero está comprimido dentro de un archivo Phar con la compresión Gzip o Bzip2.

Parámetros

compression_type

Una de las constantes Phar::GZ o Phar::BZ2, por defecto es cualquier compresión.

Valores devueltos

TRUE si el fichero está comprimido dentro del archivo Phar, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::isCompressed()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$p['mifichero2.txt'] = 'hola';
    
$p['mifichero2.txt']->setCompressedGZ();
    
$fichero $p['mifichero.txt'];
    
$fichero2 $p['mifichero2.txt'];
    
var_dump($fichero ->isCompressed());
    
var_dump($fichero 2->isCompressed());
} catch (
Exception $e) {
    echo 
'La creación/modificación del phar mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)

Ver también



PharFileInfo::isCompressedBZIP2

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::isCompressedBZIP2Devolver si la entrada está comprimida con bzip2

Descripción

bool PharFileInfo::isCompressedBZIP2 ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando PharFileInfo::isCompressed(), PharFileInfo::decompress(), y PharFileInfo::compress().

Este método devuelve si un fichero está comprimido dentro de un archivo Phar con la compresión Bzip2.

Valores devueltos

TRUE si el fichero está comprimido con Bzip2 dentro del archivo Phar, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::isCompressedBZIP2()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$p['mifichero2.txt'] = 'hola';
    
$p['mifichero3.txt'] = 'hola';
    
$p['mifichero2.txt']->setCompressedGZ();
    
$p['mifichero3.txt']->setCompressedBZIP2();
    
$fichero $p['mifichero.txt'];
    
$fichero2 $p['mifichero2.txt'];
    
$fichero3 $p['mifichero3.txt'];
    
var_dump($fichero->isCompressedBZIP2());
    
var_dump($fichero2->isCompressedBZIP2());
    
var_dump($fichero3->isCompressedBZIP2());
} catch (
Exception $e) {
    echo 
'La creación/modificación del phar mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(false)
bool(true)

Ver también



PharFileInfo::isCompressedGZ

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::isCompressedGZDevolver si la entrada está comprimida con gz

Descripción

bool PharFileInfo::isCompressedGZ ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando PharFileInfo::isCompressed(), PharFileInfo::decompress(), y PharFileInfo::compress().

Este método devuelve si un fichero está comprimido dentro de un archivo Phar con la compresión Gzip.

Valores devueltos

TRUE si el fichero está comprimido con Gzip dentro del archivo Phar, FALSE si no.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::isCompressedGZ()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$p['mifichero2.txt'] = 'hola';
    
$p['mifichero3.txt'] = 'hola';
    
$p['mifichero2.txt']->setCompressedGZ();
    
$p['mifichero3.txt']->setCompressedBZIP2();
    
$fichero $p['mifichero.txt'];
    
$fichero2 $p['mifichero2.txt'];
    
$fichero3 $p['mifichero3.txt'];
    
var_dump($fichero->isCompressedGZ());
    
var_dump($fichero2->isCompressedGZ());
    
var_dump($fichero3->isCompressedGZ());
} catch (
Exception $e) {
    echo 
'La creación/modificación del phar mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)
bool(false)

Ver también



PharFileInfo::setCompressedBZIP2

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::setCompressedBZIP2Comprimir la entrada actual de un Phar dentro del phar usando la compresión Bzip2

Descripción

bool PharFileInfo::setCompressedBZIP2 ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando PharFileInfo::isCompressed(), PharFileInfo::decompress(), y PharFileInfo::compress().

Este método comprime el fichero dentro del archivo Phar usando la compresión bzip2. La extensión bzip2 debe estar habilitada para aprovechar esta característica. Además, si el fichero ya está comprimido con la compresión gzip, la extensión zlib debe estar habilitada para poder descomprimir el fichero. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2 no está disponible.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::setCompressedBZIP2()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hi';
    
$fichero $p['mifichero.txt'];
    
var_dump($fichero->isCompressedBZIP2());
    
$p['mifichero.txt']->setCompressedBZIP2();
    
var_dump($fichero->isCompressedBZIP2());
} catch (
Exception $e) {
    echo 
'La operación de creación/modificación sobre mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)

Ver también



PharFileInfo::setCompressedGZ

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::setCompressedGZComprimir la entrada actual de un Phar dentro del phar usando la compresión gz

Descripción

bool PharFileInfo::setCompressedGZ ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando PharFileInfo::isCompressed(), PharFileInfo::decompress(), y PharFileInfo::compress().

Este método comprime el fichero dentro del archivo Phar usando la compresión gzip. La extensión zlib debe estar habilitada para aprovechar esta característica. Además, si el fichero ya está comprimido con la compresión bzip2 , la extensión bzip2 debe estar habilitada para poder descomprimir el fichero. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión zlib no está disponible.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::setCompressedGZ()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hi';
    
$fichero $p['mifichero.txt'];
    
var_dump($fichero->isCompressedGZ());
    
$p['mifichero.txt']->setCompressedGZ();
    
var_dump($fichero->isCompressedGZ());
} catch (
Exception $e) {
    echo 
'La operación de creación/modificación sobre mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(false)
bool(true)

Ver también



PharFileInfo::setMetadata

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::setMetadataEstablecer la metainformación específica de un fichero almacenda con un fichero

Descripción

void PharFileInfo::setMetadata ( mixed $metadata )

PharFileInfo::setMetadata() solamente debería usarse para almacenar información personalizada en un fichero que con pueda ser representado con la información almacenada existente con un fichero. La metainformación puede ralentizar significativamente la velocidad de carga de un archivo phar si la información es grande, o si existen muchos ficheros que contienen metainformación. Es importante observar que esos permisos de fichero están soportados nativamente dentro de un phar; es posible establecerlo con el método PharFileInfo::chmod(). Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto si el fichero está dentro de un archivo Phar. Los ficheros dentro de archivos PharData no tienen esta restricción.

Algunos posibles usos para la metainformación incluten pasar un usuario/grupo que debería establecerse al extraer el fichero desde el phar al disco. Otros usos podrían incluir explicitamente especificar un tipo MIME a devolver. Sin embargo, cualquier información útil que describa un fichero, excepto la que no debería estar contenida dentro del mismo, puede ser almacenada.

Parámetros

metadata

Cualquier variable de PHP que contenga información a almacenar junto a un fichero

Valores devueltos

No devuelve ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::setMetadata()

<?php
// asegurarse de que no existe
@unlink('nuevo_phar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/nuevo_phar.phar'0'nuevo_phar.phar');
    
$p['fichero.txt'] = 'hola';
    
$p['fichero.txt']->setMetadata(array('usuario' => 'bill''tipo-mime' => 'text/plain'));
    
var_dump($p['fichero.txt']->getMetadata());
} catch (
Exception $e) {
    echo 
'No se pudo crear y/o modificar el phar:'$e;
}
?>

El resultado del ejemplo sería:

array(2) {
  ["usuario"]=>
  string(4) "bill"
  ["tipo-mime"]=>
  string(10) "text/plain"
}

Ver también



PharFileInfo::setUncompressed

(PHP >= 5.3.0, PECL phar >= 1.0.0)

PharFileInfo::setUncompressedDescomprimir la entrada actual del Phar dentro del phar, si está comprimida

Descripción

bool PharFileInfo::setUncompressed ( void )

Nota:

Este método ha sido eliminado de la extensión Phar a partir de la versión 2.0.0. Implementaciones alternativas están disponibles utilizando PharFileInfo::isCompressed(), PharFileInfo::decompress(), y PharFileInfo::compress().

Este método descompribe el fichero dentro de un archivo Phar. Dependiendo de cómo esté comprimido el fichero, las extensiones bzip2 o zlib deben estar habilitadas para aprovechar esta característica. Al igual que con toda la funcionalidad que modifica el contenido de un Phar, la variable INI phar.readonly debe estar desactivada para poder realizar esto.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones

Lanza una excepción de tipo BadMethodCallException si la variable INI phar.readonly está activada, la extensión bzip2/zlib no está disponible.

Ejemplos

Ejemplo #1 Un ejemplo de PharFileInfo::setUncompressed()

<?php
try {
    
$p = new Phar('/ruta/a/mi.phar'0'mi.phar');
    
$p['mifichero.txt'] = 'hola';
    
$fichero $p['mifichero.txt'];
    
$fichero->setCompressedGZ();
    
var_dump($fichero->isCompressed());
    
$p['mifichero.txt']->setUncompressed();
    
var_dump($fichero->isCompressed());
} catch (
Exception $e) {
    echo 
'La operación de crear/modificar mi.phar falló: '$e;
}
?>

El resultado del ejemplo sería:

bool(true)
bool(false)

Ver también