Вы находитесь на странице: 1из 973

Copyright

Manual de PHP
Prefacio
Conceptos bsicos
Introduccin
Un tutorial sencillo
Instalacin y configuracin
Consideraciones generales de instalacin
Instalacin sobre sistemas Unix
Instalacin en Mac OS X
Instalacin en sistemas Windows
Instalacin en las plataformas de Nube Informtica
Manejador de Procesos FastCGI (FPM)
Instalacin de extensiones PECL
Problemas?
Configuracin en tiempo de ejecucin
Referencia del lenguaje
Sintaxis bsica
Tipos
Variables
Constantes
Expresiones
Operadores
Estructuras de Control
Funciones
Clases y Objetos
Espacios de Nombres
Excepciones
Generadores
Referencias Explicadas
Variables predefinidas
Excepciones predefinidas
Interfaces y clases predefinidas
Opciones de contexto y parmetros
Protocolos y Envolturas soportados
Seguridad
Introduccin
Consideraciones generales
Installed as CGI binary
Instalado como mdulo de Apache
Seguridad del Sistema de Archivos
Seguridad de Bases de Datos
Reportando errores
Usando Register Globals
Datos Enviados por el Usuario
Comillas Mgicas
Ocultando PHP
Mantenerse al da
Caractersticas
Autenticacin HTTP con PHP


Cookies
Sesiones
Manejo de XForms
Manejando la carga de archivos
Usando archivos remotos
Manejo de Conexiones
Conexiones Persistentes a Bases de Datos
Safe Mode
Funcionamiento en la lnea de comandos Usando PHP desde la
lnea de comandos
Recoleccin de Basura
Referencia de funciones
Afecta el comportamiento de PHP
Manipulacin de formatos de audio
Servicios de autenticacin
Extensiones relacionadas con fecha y hora
Extensiones especficas de la lnea de comandos
Extensiones de compresin y archivos
Procesamiento de tarjetas de crdito
Extensiones criptogrficas
Extensiones de bases de datos
Extensiones relacionadas con el sistema de ficheros
Soporte para lenguaje humano y codificacin de caracteres
Procesamiento y generacin de imgenes
Extensiones relacionadas con Email
Extensiones matemticas
Salida MIME que no es texto
Extensiones de control de procesos
Otras extensiones bsicas
Otros servicios
Extensiones para motores de bsqueda
Extensiones especficas para Servidores
Extensiones de sesiones
Procesamiento de texto
Extensiones relacionadas con variable y tipo
Servicios web
Extensiones especficas de Windows
Manipulacin XML
El ncleo de PHP: Gua del Hacker
Preface
Memory management
Working with Variables
Writing Functions
Writing Classes
Working with Resources
Working with INI settings
Trabajar con flujos
The "counter" Extension - A Continuing Example
The PHP 5 build system
Extension structure


PDO Driver How-To
Extension FAQs
Zend Engine 2 API reference
Zend Engine 2 Opcodes
Zend Engine 1
FAQ FAQ: Preguntas frequentes
Informacin general
Listas de correos
Consiguiendo PHP
Problemas con bases de datos
Instalacin
Problemas de Compilacin
Usando PHP
Hash de Contraseas Hash de contraseas seguro
PHP y HTML
PHP y COM
PHP y otros lenguajes
Migracin de PHP 4 a PHP 5
Preguntas Varias
Apndices
Historia de PHP y Proyectos Relacionados
Migrating from PHP 5.4.x to PHP 5.5.x
Migrando de PHP 5.3.x hacia PHP 5.4.x
Migrando de PHP 5.2.x a PHP 5.3.x
Migracin de PHP 5.1.x a PHP 5.2.x
Migracin de PHP 5.0.x a PHP 5.1.x
Migracin desde PHP 4 a PHP 5.0.x
Clases y Objetos (PHP 4)
Depuracin en PHP
Opciones de configuracin
Directivas de php.ini
Categorizacin de Extensiones
Listado de funciones alias
Lista de palabras reservadas
Lista de Tipos de Recurso
Lista de Filtros Disponibles
Lista de Transportes de Sockets Soportados
Tablas de comparacin de tipos de PHP
Lista de componentes lxicos del analizador
Guia de Entorno de Usuario para Nombres
Acerca del manual
Creative Commons Attribution 3.0
Listado de ndices
Registro de cambios
Prefacio
PHP, acrnimo de "PHP: Hypertext Preprocessor", es un lenguaje de
'scripting' de propsito general y de cdigo abierto que est especialmente
pensado para el desarrollo web y que puede ser embebido en pginas
HTML. Su sintaxis recurre a C, Java y Perl, y es fcil de aprender. La meta
printcipal de este lenguaje es permitir a los desarrolladores web escribir


dinmica y rpidamente pginas web generadas; aunque se puede hacer
mucho ms con PHP.
Este manual consiste principalmente en una referencia de funciones,
aunque tambin contiene una referencia del lenguaje, explicaciones de
algunas de las caractersticas importantes de PHP, y otra
informacin suplementaria.
Este manual se puede descargar en diferentes formatos
en http://www.php.net/download-docs.php. Puede encontrarse ms
informacin sobre cmo se desarrolla este manual en el apndice 'Acerca de
este manual'. Si est interesado en la Historia de PHP, visite el apndice
correspondiente.
Qu es PHP?
PHP (acrnimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de
cdigo abierto muy popular especialmente adecuado para el desarrollo web y que
puede ser incrustado en HTML.
Bien, 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>Ejemplo</title>
</head>
<body>

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

</body>
</html>
En lugar de usar muchos comandos para mostar HTML (como en C o en Perl), las
pginas de PHP contienen HTML con cdigo incrustado que hace "algo" (en este
caso, mostrar "Hola, soy un script de PHP!). El cdigo de PHP est encerrado entre
las etiquetas especiales de comienzo y final <?php y ?> que permiten entrar y salir
del "modo PHP".
Lo que distingue a PHP de algo como Javascript del lado del cliente es que el
cdigo es ejecutado en el servidor, generando HTML y envindolo al cliente. El
cliente recibir el resultado de ejecutar el script, aunque no se sabra el cdigo
subyacente que era. El servidor web puede ser incluso configurado para que procese
todos los ficheros HTML con PHP, por lo que no hay manera de que los usuarios
puedan saber qu se tiene debajo de la manga.
Lo mejor de usar PHP es que es extremadamente simple para el principiante, pero a
su vez ofrece muchas caractersticas avanzadas para los programadores
profesionales. No sienta miedo de leer la larga lista de caractersticas de PHP. En
unas pocas horas podr empezar a escribir sus primeros scripts.
Aunque el desarrollo de PHP est centrado en programacin de scripts del lado del
servidor, se puede utilizar para muchas otras cosas. Siga leyendo y descubra ms en


la seccin Qu puede hacer PHP?, o vaya directo al tutorial introductorio si
solamente est interesado en programacin web.

Summary this chapter...

1. PHP : Hypertext PreProcessor.
2. Open Source Scripting Language - provides Publicity.
3. Loosely Typed language - provides Low Learning Curve.
4. Gets Embedded into HTML - provides High Productivity.
5. Strictly Server Side Processing only - provides Encapsulation.
6. PHP code is written between the tag <?php ?> or <? ?>
Qu puede hacer PHP?
Cualquier cosa. PHP est enfocado principalmente a la programacin de scripts del
lado del servidor, por lo que se puede hacer cualquier cosa que pueda hacer otro
programa CGI, como recopilar datos de formularios, generar pginas con
contenidos dinmicos, o enviar y recibir cookies. Aunque PHP puede hacer mucho
ms.
Existen principalmente tres campos principales donde se usan scripts de PHP.
Scripts del lado del servidor. Este es el campo ms tradicional y el foco
principal. Se necesitan tres cosas para que esto funcione. El analizador de
PHP (mdulo CGI o servidor), un servidor web y un navegador web. Es
necesario ejecutar el servidor, con una instalacin de PHP conectada. Se
puede acceder al resultado del programa PHP con un navegador, viendo la
pgina de PHP a travs del servidor. Todo esto se puede ejecutar en su
mquina si est experimentado con la programacin de PHP. Vase la
seccin sobre las instrucciones de instalacin para ms informacin.
Scripts desde la lnea de comandos. Se puede crear un script de PHP y
ejecutarlo sin necesidad de un servidor o navegador. Solamente es
necesario el analizador de PHP para utilizarlo de esta manera. Este tipo de
uso es ideal para scripts ejecutados regularmente usando cron (en *nix o
Linux) o el Planificador de tareas (en Windows). Estos scripts tambin
pueden usarse para tareas simples de procesamiento de texto. Vase la
seccin Uso de PHP en la lnea de comandos para ms informacin.
Escribir aplicaciones de escritorio. Probablemente PHP no sea el lenguaje
ms apropiado para crear aplicaciones de escritorio con una interfaz grfica
de usuario, pero si se conoce bien PHP, y se quisiera utilizar algunas
caractersticas avanzadas de PHP en aplicaciones del lado del cliente, se
puede utilizar PHP-GTK para escribir dichos programas. Tambin es posible
de esta manera escribir aplicaciones independientes de una plataforma.
PHP-GTK es una extensin de PHP, no disponible en la distribucin principal.
Si est interesado en PHP-GTK, puede visitar su propio sitio web.
PHP puede usarse en todos los principales sistemas operativos, incluyendo Linux,
muchas variantes de Unix (incluyendo HP-UX, Solaris y OpenBSD), Microsoft
Windows, Mac OS X, RISC OS y probablemente otros ms. PHP admite la mayora
de servidores web de hoy en da, incluyendo Apache, IIS, y muchos otros. Esto


incluye cualquier servidor web que pueda utilizar el binario de PHP FastCGI, como
lighttpd y nginx. PHP funciona tanto como mdulo como procesador de CGI.
De modo que con PHP se tiene la libertad de elegir el sistema operativo y el
servidor web. Adems, se tiene la posibilidad de utilizar programacin por
procedimientos o programacin orientada a objetos (POO), o una mezcla de
ambas.
Con PHP no se est limitado a generar HTML. Entre las capacidades de PHP se
incluyen la creacin de imgenes, ficheros PDF e incluso pelculas Flash (usando
libswf y Ming) generadas sobre la marcha. Tambin se puede generar fcilmente
cualquier tipo de texto, como XHTML y cualquier otro tipo de fichero XML. PHP
puede autogenerar stos ficheros y guardarlos en el sistema de ficheros en vez de
imprimirlos en pantalla, creando una cach en el lado del servidor para contenido
dinmico.
Una de las caractersticas ms potentes y destacables de PHP es su soporte para
un amplio abanico de bases de datos. Escribir una pgina web con acceso a una
base de datos es increiblemente simple utilizando una de las extensiones
especficas de bases de datos (p.ej., para mysql), o utilizar una capa de
abstraccin como PDO, o conectarse a cualquier base de datos que admita el
estndar de Conexin Abierta a Bases de Datos por medio de la extensin ODBC.
Otras bases de datos podran utilizar cURL o sockets, como lo hace CouchDB.
PHP tambin cuenta con soporte para comunicarse con otros servicios usando
protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows)
y muchos otros. Tambin se pueden crear sockets de red puros e interactuar
usando cualquier otro protocolo. PHP tiene soporte para el intercambio de datos
complejos de WDDX entre virtualmente todos los lenguajes de programacin web.
Y hablando de interconexin, PHP posee soporte para la instalacin de objetos
Java y usarlos de forma transparente como objetos de PHP.
PHP tiene tiles caractersticas de procesamiento de texto, las cuales incluyen las
expresiones regulares compatibles con Perl (PCRE), y muchas extensiones y
herramientas para el acceso y anlisis de documentos XML. PHP estandariza todas
las extensiones XML sobre el fundamento slido de libxml2, y ampla este conjunto
de caractersticas aadiendo soporte para SimpleXML, XMLReader y XMLWriter.
Existen otras extensiones interesantes, las cuales estn
categorizadas alfabticamente y por categora. Y hay extensiones adicionales de
PECL que podran estar documentadas o no dentro del manual de PHP, tal
como XDebug.
Como se puede apreciar, esta pgina no es suficiente para enumerar todas las
caractersticas y beneficios que PHP ofrece. Consulte las seccionesInstalacin de
PHP y Referencia de las funciones para una explicacin de las extensiones
mencionadas aqu.
Qu necesito?


En este manual se asume que se cuenta con un servidor que tiene soporte
activado para PHP y que todos los ficheros con la extensin .php son tratados por
PHP. En la mayora de servidores, sta es la extensin predeterminada para los
ficheros de PHP, aunque puede preguntar al administrador de su servidor para
estar seguro. Si el servidor tiene soporte para PHP, entonces no es necesario hacer
nada. Simplemente cree sus ficheros .php, gurdelos en su directorio web y el
servidor los analizar por usted. No hay necesidad de compilar nada o instalar
otras herramientas. Piense en estos ficheros habilitados para PHP como simples
ficheros de HTML con el aadido de una nueva familia de etiquetas mgicas que
permiten todo tipo de cosas. La mayora de las compaas de hospedaje de
pginas web ofrecen soporte para usar PHP, pero si por alguna razn no lo hacen,
considere leer la seccin Enlaces de PHP para ms informacin acerca de
compaas de hospedaje que tienen soporte para PHP.
Digamos que quiere ahorrar el preciado ancho de banda y trabajar localmente. En
este caso, querr instalar un servidor web, como Apache, y por supuesto PHP.
Lo ms seguro es que tambin quiera instalar una base de datos como MySQL.
Puede instalarlos de forma independiente o bien puede elegir una manera ms
sencilla. Este manual contiene Instrucciones de instalacin de PHP(asumiendo que
tiene algn tipo de servidor web ya configurado). Si tuviera problemas con la
instalacin, sugerimos que formule sus preguntas en nuestra lista de correo de
instalacin. Si elige la manera ms sencilla, localice un paquete
preconfigurado para su sistema operativo, el cual instala automticamente todo
esto con nicamente unos pocos clics de ratn. Es sencillo configurar un servidor
web con soporte para PHP en cualquier sistema operativo, incluyendo MacOSX,
Linux y Windows. En Linux, podra encontrar til rpmfind y PBone para
localizar los RPMs. Tambin puede visitar apt-get para buscar paquetes para
Debian..
Su primera pgina con PHP
Comienze por crear un fichero llamado hola.php y pngalo en el directorio raz de
su servidor web (DOCUMENT_ROOT) con el siguiente contenido:
Ejemplo #1 Nuestro primer script de PHP: hola.php
<html>
<head>
<title>Prueba de PHP</title>
</head>
<body>
<?php echo '<p>Hola Mundo</p>'; ?>
</body>
</html>
Utilice su navegador web para acceder al fichero con el URL de su servidor,
finalizado con la referencia al fichero /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 configuracin de su servidor web. Si todo est configurado


correctamente, el fichero ser analizado por PHP y se enviar el siguiente
contenido a su navegador:
<html>
<head>
<title>Prueba de PHP</title>
</head>
<body>
<p>Hola mundo</p>
</body>
</html>
Este programa es extremadamente simple y realmente no es necesario usar PHP
para crear una pgina como esta. Lo nico que muestra es: Hola mundo usando
la sentencia echo de PHP. Observe que el fichero no necesita ser ejecutable o
especial de ninguna forma. El servidor reconoce que este fichero necesita ser
interpretado por PHP debido al uso de la extensin ".php", ya que el servidor est
configurado para enviarlo a PHP. Piense como si fuera un fichero HTML normal que
tiene una serie de etiquetas especiales disponibles con las que puede hacer
muchas cosas interesantes.
Si intent usar este ejemplo y no produjo ningn resultado, se le pregunt si
deseaba descargar el fichero, o se mostr todo el fichero como texto, lo ms
seguro es que PHP no se encuentre habilitado en su servidor o no est configurado
adecuadamente. Pdale a su administrador que lo habilite usando el
captulo Instalacin del manual. Si est trabajando localmente, lea tambin el
captulo dedicado a la instalacin para asegurarse de que todo est configurado
adecuadamente. Asegrese de que est accediendo al fichero mediante http y que
el servidor muestre el resultado. Si est abriendo el fichero desde el sistema de
ficheros, probablemente no ser analizado por PHP. Si el problema persiste, no
dude en usar alguna de las mltiples opciones del Soporte para PHP.
El objetivo de este ejemplo es el formato de las etiquetas especiales de PHP. En
este ejemplo usamos <?php para indicar el inicio de una etiqueta de PHP.
Despus ponemos la sentencia y abandonamos el modo PHP aadiendo la etiqueta
de cierre ?>. De esta manera, se puede entrar y salir del modo PHP en un fichero
HTML cada vez que se quiera. Para ms informacin, lea la seccin del manual
titulada Sintaxis bsica de PHP.
Nota: Una observacin sobre los avances de lnea
Los avances de lnea tienen poco sentido en HTML, aunque sigue siendo buena
idea hacer que el cdigo HTML se vea limpio y claro poniendo avances de lnea.
PHP automticamente eliminar los avances de lnea que estn despus de una
etiqueta de cierre ?>. Esto puede ser muy til al poner muchos bloques de PHP o
incluir ficheros que contienen PHP y que se supone que no deben mostarar nada.
Al mismo tiempo, puede resultar un poco confuso. Se puede poner un espacio
despus de la etiqueta de cierre ?> para mostrar forzosamente un espacio y un
avance de lnea, o se puede poner un avance de lnea explcito en el ltimo
echo/print dentro del bloque de PHP.


Nota: Una observacin sobre los editores de texto
Hay muchos editores de texto y Entornos de Desarrollo Integrados (IDE por sus
siglas en Ingls) que se pueden usar para crear, editar, y gestionar ficheros de
PHP. Se puede encontrar una lista parcial de stos en Lista de editores de PHP.
Si desea recomendar un editor, por favor visite la pgina mencionada
anteriormente y pregunte al mantenedor de la pgina para que lo incluyan en la
lista. Contar con un editor que resalte la sintaxis puede ser de mucha ayuda.
Nota: Una observacin sobre los procesadores de texto
Los procesadores de texto como StarOffice Writer, Microsoft Word y Abiword no
son buenas opciones para editar ficheros de PHP. Si desea usar uno de stos
programas para probar este script, debe asegurarse de guardar el documento
como texto sin formato o PHP no ser capaz de leerlo y ejecutarlo.
Nota: Una observacin sobre el Bloc de Notas de Windows
Si escribe sus scripts de PHP usando el Bloc de Notas de Windows, debe
asegurarse de que sus ficheros sean guardados con la extensin .php. (El Bloc de
Notas automticamente aade la extensin .txt a los ficheros a menos que siga los
siguientes pasos para prevenirlo). Cuando guarde el fichero y el programa le
pregunte qu nombre desea dar al fichero, entrecomille el nombre (es decir,
"hola.php"). Una alternativa es hacer clic en el men desplegable "Documentos de
Texto (*.txt)" del cuadro de dilogo "Guardar como", y cambiar a la opcin "Todos
los archivos (*.*)". Aqu puede escribir el nombre del fichero sin las comillas.
Ahora que ha creado un pequeo script de PHP que funciona correctamente, es
hora de crear el script de PHP ms famoso: hacer una llamada a la
funcin phpinfo() para obtener mucha informacin til acerca de su sistema y
configuracin, como las variables predefinidas disponibles, los mdulos de PHP
cargados, y los ajustes de configuracin. Tmese algo de tiempo para revisar esta
importante informacin.
Ejemplo #2 Obtener la informacin del sistema desde PHP
<?php phpinfo(); ?>
Algo til
Hagamos ahora algo que puede ser ms til. Vamos a comprobar qu tipo de
navegador est utilizando el usuario vistante. Para hacerlo, vamos a comprobar el
string del agente de usuario que el navegador enva como parte de la peticin
HTTP. Esta informacin es almacenada en una variable. En PHP, las variables
siempre comienzan con un signo de dlar. La variable que nos interesa ahora
es $_SERVER['HTTP_USER_AGENT'].
Nota:


$_SERVER es una variable especial reservada por PHP que contiene toda la
informacin del servidor web. Es conocida como una Superglobal. Consulte la
pgina del manual sobre Superglobales para ms informacin. Estas variables
especiales fueron introducidas en la versin 4.1.0 de PHP. Antes se podan usar
en su lugar los antiguos arrays $HTTP_*_VARS, tales como $HTTP_SERVER_VARS.
Aunque estn obsoletos, estos antiguos arrays todava existen. (Vase tambin la
nota sobre cdigo antiguo.)
Para mostrar esta variable, se puede hacer simplemente:
Ejemplo #1 Imprimir una variable (elemento de array)
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
Un ejemplo del resultado de este script podra ser:

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Hay muchos tipos de variables en PHP. En el ejemplo anterior se muestra un
elemento de un Array. Los arrays pueden ser muy tiles.
$_SERVER es simplemente una variable que se encuentra disponible
automticamente en PHP. Se puede encontrar una lista en la seccin Variables
reservadas del manual, o se puede obtener una lista completa observando la salida
de la funcin phpinfo() usada en el ejemplo de la seccin anterior.
Puede usar mltiples sentencias de PHP dentro de una etiqueta PHP y crear
pequeos bloques de cdigo que realicen ms que un solo 'echo'. Por ejemplo, si
se quisiera detectar el uso de Internet Explorer, se podra hacer 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 este script sera:
Est usando Internet Explorer.<br />
Aqu hemos introducido un par de conceptos nuevos. Tenemos una sentencia if. Si
est familiarizado con la sintaxis bsica del lenguaje C, debera parecerle lgico.
De lo contrario, probablemente debera conseguir un libro que le introduzca a PHP,
y leer el primer par de captulos, o leer la parte del manual titulada Referencia del
lenguaje.
El segundo concepto que introducimos fue la funcin llamada strpos(). strpos() es
una funcin integrada en PHP que busca un cadena dentro de otra. En este caso


estamos buscando 'MSIE' (tambin llamado aguja) dentro
de $_SERVER['HTTP_USER_AGENT'] (tambin llamado pajar). Si la cadena se
encuentra dentro del pajar, la funcin devuelve la posicin de la aguja relativa al
inicio del pajar. De lo contrario, devuelve FALSE. Si no devuelve FALSE, la
expresin if se evala como TRUE y se ejecuta el cdigo entre llaves {}. De lo
contrario, el cdigo no ser ejecutado. Tmese la libertad de crear ejemplos
similares, con if, else, y otras funciones como strtoupper() y strlen(). Cada pgina
del manual relacionada tambin contiene ejemplos. Si no est seguro de cmo
usar estas funciones, es recomendable que lea las pginas del manual sobre Cmo
interpretar una definicin de funcin y la seccin sobre Funciones de PHP.
Podemos dar un paso ms y mostrar cmo se puede entrar y salir del modo PHP
incluso en medio de un bloque de cdigo de PHP:
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() debe haber devuelto falso</h3>
<p>No est usando Internet Explorer</p>
<?php
}
?>
Un ejemplo del resultado del script podra ser:
<h3>strpos() debe haber devuelto no falso</h3>
<p>Est usando Internet Explorer</p>
En vez de usar una sentencia echo de PHP para mostrar algo, salimos del modo
PHP y enviamos solamente HTML. Este es un punto muy importante y potente que
debemos observar aqu, y es que la fluidez lgica del script permanece intacta.
Slamente uno de los bloques HTML terminar siendo enviado al navegador
dependiendo del resultado de strpos(). En otras palabras, depende de si la
cadena MSIE fue encontrada o no.
Tratar con formularios
Otra de las caractersticas ms potentes de PHP es la forma en que gestiona
formularios HTML. El concepto bsico que es importante entender es que cualquier
elemento de un formulario estar disponible automticamente en sus scripts de
PHP. Por favor, lea la seccin del manual sobreVariables desde fuentes
externas para obtener ms informacin y ejemplos sobre cmo usar formularios
con PHP. Observemos un ejemplo:
Ejemplo #1 Un formulario HTML sencillo


<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 formulario. Es solamente un formulario HTML sin
ninguna clase de etiqueta especial. Cuando el usuario rellena este formulario y
oprime el botn de envo, se llama a la pgina accion.php. En este fichero se
podra escribir algo as:
Ejemplo #2 Mostrar informacin de nuestro formulario
Hola <?php echo htmlspecialchars($_POST['nombre']); ?>.
Usted tiene <?php echo (int)$_POST['edad']; ?> aos.
Un ejemplo del resultado de este script podra ser:
Hola Jos. Usted tiene 22 aos.
Excepto las partes de htmlspecialchars() y de (int), debera ser obvio qu es lo
que hace el cdigo. htmlspecialchars() se asegura de que cualquier carcter que es
especial en html sea codificado adecuadamente, de manera que nadie pueda
inyectar etiquetas HTML o Javascript en la pgina. El campo edad, ya que sabemos
que es un nmero, podemos convertirlo a un valor de tipo integer que
automticamente se deshar de cualquier carcter no numrico. Tambin se puede
hacer lo mismo con PHP con la extensin filter. Las
variables $_POST['nombre'] y $_POST['edad'] son establecidas automticamente
por PHP. Anteriormente hemos usado la superglobal $_SERVER; arriba
introdujimos la superglobal $_POST, la cual contiene todos los datos de POST.
Observe que el mtodo de nuestro formulario es POST. Si hubisemos usado el
mtodo GET, nuestra informacin estara en su lugar en la superglobal $_GET.
Tambin se podra usar la superglobal $_REQUEST, si no le preocupa la fuente de
los datos solicitados. Contiene toda la informacin mezclada de los datos de GET,
POST y COOKIE. Vea tambin la funcin import_request_variables().
En PHP, tambin puede tratar con entradas de XForms; aunque probablemente al
principio se sienta cmodo con los formularios de HTML, los cuales estn
ampliamente respaldados. A pesar de que trabajar con XForms no es para
principiantes, podran interesarle. Si es as, en la seccin de caractersticas hay
una pequea introduccin a la manipulacin de datos recibidos desde XForms.
siso dot abraham at gmail dot com
2 months ago
Para principiantes.
El html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Formulario</title>
</head>
<body>


<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>
</body>
</html>
El php
<?php echo " Hola " . htmlspecialchars($_POST['nombre']);
echo " Usted tiene ".(int)$_POST['edad']." aos de edad.";
?>
Usar cdigo antiguo en nuevas versiones de PHP
Ahora que PHP ha crecido y se ha convertido en un lenguaje popular, hay muchos
ms repositorios y bibliotecas que contienen cdigo que puede reutilizar. Los
desarrolladores de PHP han intentado preservar la retrocompatibilidad, es decir, si
un script fue escrito para una versin antigua, funcionar (idealmente) sin ningn
cambio en una versin reciente de PHP. En la prctica, son necesarios
normalmente algunos cambios.
Dos de los cambios ms importantes que afectan el cdigo antiguo son:
La obsolescencia de los antiguos arrays $HTTP_*_VARS (que necesitan ser
indicados como globales al utilizarlos dentro de una funcin o mtodo). Los
siguientes arrays superglobales fueron introducidos en PHP 4.1.0.
Son: $_GET, $_POST, $_COOKIE, $_SERVER, $_FILES,$_ENV, $_REQUEST,
y $_SESSION. Los antiguos arrays $HTTP_*_VARS,
como $HTTP_POST_VARS, todava existen. A partir de PHP 5.0.0, los arrays
de variables predefinidas de tipo long de PHP se pueden desactivar con la
directiva register_long_arrays .
Las variables externas ya no son registradas en el mbito global de forma
predeterminada. En otras palabras, a partir de PHP 4.2.0, la directiva de
PHP register_globals est desactivada (off) por defecto en php.ini. El mejor
mtodo para acceder a estos valores es por medio de las variables
superglobales mencionadas anteriormente. Los scripts, libros y tutoriales
antiguos podran contar con que est directiva est activada (on). Si
fuera on, por ejemplo, se podra usar $id desde el
URL http://www.example.com/foo.php?id=42. Ya est activada o
desactivada,$_GET['id'] est siempre disponible.
Consideraciones generales de instalacin
Antes de empezar con la instalacin, primero necesita saber para qu quiere
utilizar PHP. Existen tres campos principales donde se puede utilizar PHP tal y
como se describe en la seccin: Qu se puede hacer con PHP?
Aplicaciones web y sitios web (scripting del lado del servidor)
Scripting en la lnea de comandos
Aplicaciones de escritorio (GUI)


Para la primera forma mencionada, que es la ms comn, se necesitan tres cosas:
PHP, un servidor web y un navegador web. Seguramente ya disponga del
navegador web y, dependiendo de la configuracin del sistema operativo, quiz ya
tenga un servidor web (p.ej. Apache en Linux y MacOS X; IIS en Windows).
Tambin 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
mdulo de interfaz directo (tambin llamado SAPI). Entre estos servidores se
incluyen Apache, Microsoft Internet Information Server, Netscape y iPlanet.
Muchos otros servidores tienen soporte para ISAPI, el mdulo de interfaz de
Microsoft (OmniHTTPd por ejemplo). Si PHP no tiene soporte para el mdulo 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 tambin est interesado en usar PHP bajo la lnea de comandos (p.ej. escribir
scripts que autogeneran imgenes de forma offline, o procesar ficheros de texto
dependiendo de los argumentos que se les pasen), siempre necesitar el
ejecutable de lnea de comandos. Para ms informacin, lea la seccin
sobre escribir aplicaciones PHP desde la lnea de comandos. En este caso, no se
necesita ningn servidor o navegador.
Con PHP tambin se pueden escribir aplicaciones GUI de escritorio usando la
extensin PHP-GTK. Este enfoque no tiene nada que ver con escribir pginas web,
ya que no se muestra nada de HTML, pero gestiona ventanas y objetos dentro de
ellas. Para ms informacin acerca de PHP-GTK, por favor visite el sitio dedicado
a esta extensin. PHP-GTK no est incluido en la distribucin oficial de PHP.
De aqu en adelante, esta seccin trata de la configuracin de PHP para servidores
web sobre Unix y Windows con interfaces de mdulo de servidor y ejecutables
CGI. Tambin se puede encontrar informacin sobre ejecutables de lnea de
comandos en las siguientes secciones.
El cdigo 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.
Instalacin sobre sistemas Unix
Tabla de contenidos
Apache 1.3.x sobre sistemas Unix
Apache 2.x sobre sistemas Unix
Lighttpd 1.4 en sistemas Unix
Servidores Sun, iPlanet y Netscape sobre Sun Solaris
CGI y configuraciones de lnea de comandos


Notas de instalacin especficas para HP-UX
Notas de instalacin para OpenBSD
Solaris sugerencias especficas de instalacin
Notas de instalacin en Debian GNU/Linux
Esta seccin le guiar a travs de la configuracin general e instalacin de PHP
sobre sistemas Unix. Asegrese de investigar cualquier seccin especfica a su
plataforma o servidor web antes de comenzar el proceso.
Tal como el manual lo esboza en la seccin Consideraciones generales de
instalacin, se est tratando principalmente con configuraciones de PHP centradas
en web en esta seccin, aunque tambin se cubrir el preparar PHP para usarse en
lnea de comando.
Existen varias maneras de instalar PHP para la plataforma Unix, ya sea con un
proceso de compilar y configurar, o a travs de varios mtodos pre-
empaquetados. Esta documentacin est enfocada principalmente alrededor del
proceso de compilar y configurar PHP. Muchos sistemas estilo Unix tienen algn
tipo de sistema de instalacin de paquetes. Esto puede ayudar en preparar una
configuracin standard, pero si se requiere tener un conjunto diferente de
caractersticas (tales como un servidor seguro, o un manejador diferente de base
de datos), podra ser necesario construir PHP y/o el servidor web. Si no se est
familiarizado con la construccin y el compilado de su propio software, vale la pena
revisar para ver si alguien ya ha construido una versin empaquetada de PHP con
las caractersticas que se necesitan.
Conocimientos y software necesarios para compilar:
Habilidades bsicas en Unix (ser capaz de operar "make" y un compilador
de C)
Un compilador ANSI C
Un servidor web
Cualquier componente especfico para mdulos (tales como GD, PDF libs,
etc.)
Cuando compile directamente de una fuente Git o despus de realizar
modificaciones usted necesita tambin:
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: Versin 0.13.4 o superior
flex: Versin 2.5.4 (para PHP <= 5.2)
bison: Versin 1.28 (preferido), 1.35, o 1.75
El proceso inicial de preparacin y configuracin de PHP es controlado por el uso
de las opciones de lnea de comando del script configure. Es posible obtener una
lista de todas las opciones disponibles junto con una descripcin corta
ejecutando ./configure --help. El manual documenta las diferentes opciones por
separado. Se encontrarn las opciones principales en el apndice, mientras que las


diferentes opciones especficas de las extensiones se describen en las pginas de
referencia.
Cuando PHP est configurado, se est listo para compilar el mdulo y/o
ejecutables. El comando make debera hacerse cargo de esto. Si falla y no se
puede encontrar el porque, vase la seccin de problemas.


Apache 1.3.x sobre sistemas Unix
Esta seccin contiene notas y consejos especficos a instalaciones Apache de PHP
sobre plataformas Unix. Tambin se tienen instrucciones y notas para Apache 2 en
una pgina por separado.
Se pueden seleccionar argumentos para agregar a configure en la lnea 10 debajo
de la lista de opciones principales de configure y de opciones especficas a
extensiones descritas en sus respectivos lugares en el manual. Los nmeros de
versin 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 instalacin (Versin de mdulo 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 habilitarn. 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 despus de la instalacin,
solamente se necesita repetir los ltimos tres pasos. Slo hace falta
reiniciar apache para que el nuevo mdulo tenga efecto. Una recompilacin de
Apache no es necesaria.



Ntese que a menos que se mencione lo contrario, 'make install' tambin
instalar PEAR,
varias herramientas de PHP tales como phpize, instalar la lnea de comando
(CLI) de PHP, y ms.

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 ubicacin, 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 mdulo de PHP. La ruta de acceso al lado
derecho
de el enunciado LoadModule debe apuntar a la ruta del mdulo de PHP
en su sistema. El make install anterior podra haber agregado esto ya
por usted, pero asegrese de revisarlo.

LoadModule php5_module libexec/libphp5.so

15. Y en la seccin AddModule de httpd.conf, en algn 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 extensin .php como PHP. Se podra
hacer que cualquier extensin o extensiones sean procesadas como PHP
simplemente aadiendo ms, con
cada una separada por un espacio. Se agregar .phtml para demostrarlo.

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

Tambin es comn configurar la extensin .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 slo causar que el servidor recargue
utilizando
una seal HUP o USR1.)
Alternativamente, para instalar PHP como un objeto esttico:
Ejemplo #2 Instrucciones de instalacin (Instalacin de mdulo esttico
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 lnea anterior es correcta! S, ya se sabe que libphp5.a an 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 instalacin entonces se necesita dar "make install"
tambin)

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 aadir:
AddType application/x-httpd-php .php
Dependiendo de la instalacin de Apache y la variante de Unix, hay muchas
maneras posibles de detener y reiniciar el servidor. Abajo hay algunas lneas
tpicas 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 varan 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 librera compartida libphp5.so que se carga en Apache utilizando
una lnea LoadModule en el fichero de Apache httpd.conf. El soporte para
PostgreSQL est incluido dentro de esta librera.
./configure --with-apxs --with-pgsql=shared
Esto crear una librera compartida libphp5.so para Apache, pero tambin crear
una librera compartida pgsql.so que se carga en PHP ya sea usando la directiva de
extensin en el fichero php.ini o cargndola explcitamente en un script utilizando
la funcin dl().
./configure --with-apache=/path/to/apache_source --with-pgsql
Esto crear una librera libmodphp5.a, un mod_php5.c y algunos ficheros
acompaantes y cpiese estos dentro del directorio src/modules/php5en el
rbol de fuentes de Apache. Entonces se compila Apache utilizando --activate-
module=src/modules/php5/libphp5.a y el sistema de compilacin de Apache
crear libphp5.a y lo enlazar estticamente 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 librera compartidapgsql.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 mtodo. 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 (mtodo esttico) significa que PHP cargar y ejecutar ms rpido.
Para ms informacin, ver la pgina web de Apache sobre soporte DSO.
Nota:
El httpd.conf por omisin de Apache actualmente se distribuye con una seccin
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 tambin muy comn) PHP no ser capaz de abrir ficheros.
Nota:
Asegrese de que se especifica la versin instalada de apxs cuando se utiliza --
with-apxs=/path/to/apxs . NO se debe utilizar la versin 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 seccin contiene notas y consejos especficos a las instalaciones de Apache
2.x de PHP sobre sistemas Unix.
Advertencia
No se recomienda utilizar un MPM threaded en produccin con Apache 2. Use MPM
prefork, que es el MPM por defecto en Apache 2.0 y 2.2. Para informacin sobre
cmo, lea la correspondiente entrada de la FAQ sobre utilizar Apache2 con un MPM
threaded
La Documentacin de Apache es la fuente de informacin ms autorizada acerca
del servidor Apache 2.x. Ah se puede encontrar ms informacin acerca de las
opciones de instalacin.
La versin ms reciente de Apache HTTP Server puede obtenerse del Sitio de
descargas de Apache, y una versin apropiada de PHP de los lugares
anteriormente mencionados. Esta gua rpida solamente cubre lo bsico para
comenzar con Apache 2.x y PHP. Para obtener ms informacin lea
la Documentacin de Apache. Los nmeros de versin han sido omitidos aqu,
para asegurar que las instrucciones no sean incorrectas. En los ejemplos
siguientes, 'NN' deber ser reemplazado con la versin especfica 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 versin
ms reciente, y la que se recomienda, si es que esa opcin est disponible. Sin
embargo, las instrucciones aqu funcionarn ya sea para 2.0 2.2.
1. Obtngase el servidor HTTP Apache de la ubicacin listada con anterioridad,
y desempquese:
2. gzip -d httpd-2_x_NN.tar.gz
3. tar -xf httpd-2_x_NN.tar
4. De la misma manera, obtener y desempacar las fuentes de PHP:
5. gunzip php-NN.tar.gz
6. tar -xf php-NN.tar


7. Compilar e instalar Apache. Consltese la documentacin de instalacin de
Apache para mayores detalles sobre la compilacin de Apache.
8. cd httpd-2_x_NN
9. ./configure --enable-so
10. make
11. make install
12. Ahora se tiene Apache 2.x.NN disponible debajo de /usr/local/apache2,
configurado con soporte para mdulos cargables y con el MPM (Mdulo de
multiproceso) prefork estndar. Para probar la instalacin sese el
procedimiento para iniciar el servidor Apache, por ej.:
13. /usr/local/apache2/bin/apachectl start
y detngase el servidor para proceder con la configuracin para PHP:
/usr/local/apache2/bin/apachectl stop
14. 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. Ntese que algunas
distribuciones pueden renombrar apxs cmo 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 configuracin despus de la
instalacin, se deben volver a ejecutar los pasos configure, make, y make
install. Solamente se necesita reiniciar apache para que el nuevo mdulo
tenga efecto. Una recompilacin de Apache no es necesaria.
Ntese que a menos que se indique lo contrario, 'make install' tambin
instalar PEAR, varias herramientas de PHP tales como phpize, instalar la
interfaz de lnea de comando (CLI) de PHP, y ms.
15. Configurar php.ini
16. 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 ubicacin, utilice --with-config-file-
path=/alguna/trayectoria en el paso 5.
Si en vez de eso se elige php.ini-production, asegrese de leer la lista de
cambios al interior, ya que afectan como se comporta PHP.


17. Edtese httpd.conf para cargar el mdulo PHP. La trayectoria a la derecha de
la sentencia LoadModule debe apuntar a la trayectoria del mdulo PHP en el
sistema. El make install anterior podra ya haber agregado esto
automticamente, pero asegrese de revisar.
LoadModule php5_module modules/libphp5.so
18. Indicar a Apache que procese ciertas extensiones como PHP. Por ejemplo,
hgase 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 extensin o extensiones sean procesadas como PHP simplemente
aadindolas. Se agregar .php para demostrarlo.
19. <FilesMatch \.php$>
20. 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 ms, se utilizara
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 cdigo 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 cdigo 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 cdigo fuente php no debe habilitarse en sistemas de produccin,
donde podra exponer informacin confidencial o de alguna otra manera
sensible incluida en cdigo fuente.
21. Utilcese el procedimiento normal para iniciar el servidor Apache, por ej.:
22. /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 mdulo SAPI. Por supuesto existen muchas opciones
ms de configuracin disponibles para Apache y PHP. Para ms informacin
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 opcin 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
decisin, y tener al menos un ligero entendimiento acerca de las implicaciones. La
documentacin de Apache al respecto de MPM-Modules discute los MPM en forma
mucho ms detallada.
Nota:
Las Preguntas frecuentes de Apache MultiViews discute acerca del uso de
multiviews con PHP.
Nota:
Para compilar una versin multihilo de Apache, el sistema destino debe soportar
hilos. En este caso, PHP tambin debe compilarse con la opcin Zend Thread
Safety (ZTS) experimental. Bajo esta configuracin, no todas las extensiones se
encontrarn disponibles. La configuracin recomendada es compilar Apache con el
MPM-module prefork por omisin.
Lighttpd 1.4 en sistemas Unix
Esta seccin contiene anotaciones y consejos especficos para la instalacin de PHP
en Lighttpd 1.4 para sistemas Unix.
Por favor, antes de continuar consulte el sistema de seguimiento de
Lighttpd para saber cmo instalar Lighttpd apropiadamente.
La SAPI recomendada para conectar PHP a Lighttpd es Fastcig. Esta SAPI viene
habilitada por omisin 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 haba 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 dinmicamente.
PHP crear nuevos procesos hijos segn 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 nmero 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 cachs como APC slo estarn disponibles
para los procesos gestionados por PHP. Si se establece "min-procs" a un nmero
superior a 1, el nmero 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 ms laborioso, es posible lanzar procesos sin spawn-fcgi. La variable
de entorno PHP_FCGI_CHILDREN controla cuntos procesos hijo de PHP se
lanzarn 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 creacin de procesos php.
Ejemplo #2 Lanzando oyentes FastCGI
#!/bin/sh

# Ubicacin del binario php-cgi


PHP=/usr/local/bin/php-cgi

# Ubicacin del fichero PID
PHP_PID=/tmp/php.pid

# Enlazando a una direccin
#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"

Conexin a instancias FCGI remotas
Para poder tener aplicaciones escalables, pueden lanzarse instancias de fastcgi en
mltiples equipos remotos.
Ejemplo #3 Conexin 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 seccin contiene notas y consejos especficos 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 mdulo
NSAPI para generar listados de directorio y pginas de errores personalizados.
Funciones adicionales para compatibilidad con Apache tambin se encuentran
disponibles. Para soporte en servidores web actuales, lase la nota sobre
subpeticiones.
Se puede encontrar ms informacin 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 instalacin apropiado para la
opcin--with-nsapi=[DIR]. El directorio por omisin es
comnmente /opt/netscape/suitespot/. Por favor tambin lase /php-xxx-
version/sapi/nsapi/nsapi-readme.txt.


1. Instalar los siguientes paquetes de http://www.sunfreeware.com/ o
algn 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 distribucin .gz, de lo contrario ir a
4).
4. tar xvf php-x.x.x.tar
5. Cambiarse al directorio de PHP ya extrado: 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:
7. ./configure --with-mysql=/usr/local/mysql \
8. --with-nsapi=/opt/netscape/suitespot/ \
--enable-libgcc
9. Ejecutar make seguido por make install.
Despus de realizar la instalacin base y de leer el fichero readme apropiado, es
posible que sea necesario realizar algunos pasos adicionales de configuracin.
Instrucciones de configuracin para Sun/iPlanet/Netscape
Primeramente quizs sea necesario agregar algunas rutas de acceso al
entorno LD_LIBRARY_PATH para que el servidor encuentre todas las libreras
compartidas. Esto puede hacerse de mejor manera en el script de arranque del
servidor web. El script de arranque se encuentra comnmente localizado
en: /ruta/al/servidor/https-servername/start. Quizs tambin sea necesario editar
los ficheros de configuracin que estn ubicados en: /ruta/al/servidor/https-
servername/config/.
1. Agregar la siguiente lnea a mime.types (se puede hacer esto por medio del
servidor de administracin):
2. type=magnus-internal/x-httpd-php exts=php
3. 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 lneas despus de mime types init.


4. Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans"
shlib="/opt/netscape/suitespot/bin/libphp4.so"
5. Init fn="php4_init" LateInit="yes" errorString="Failed to initialize
PHP!" [php_ini="/path/to/php.ini"]
(PHP >= 4.3.3) El parmetro php_ini es opcional pero con l se puede
colocar php.ini en el directorio de configuracin del servidor web.
6. Configurar el objeto por omisin en obj.conf (para clases de servidor virtual
[versin 6.0+] en su vserver.obj.conf):
7. <Object name="default">
8. .
9. .
10. .
11. .#NOTA esta siguiente lnea debera ocurrir despus de todos las lneas
'ObjectType' y antes de todas las lneas 'AddLog'
12. Service fn="php4_execute" type="magnus-internal/x-httpd-php"
[inikey=value inikey=value ...]
13. .
14. .
15. </Object>
(PHP >= 4.3.3) Como parmetros adicionales se pueden agregar algunos
valores especiales de php.ini, por ejemplo se puede fijar
unadocroot="/ruta/a/raz_de_documentos" especfica 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
dezlib.output_compression="On"
16. Esto es slo necesario si se quiere configurar un directorio que solamente
consiste de scripts de PHP (igual que un directorio cgi-bin):
17. <Object name="x-httpd-php">
18. ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
19. Service fn=php4_execute [inikey=value inikey=value ...]
20. </Object>
Despus de configurar un directorio en el servidor de administracin y
asignarle el estilo x-httpd-php. Todos los ficheros en ste se ejecutarn
como PHP. Esto est bien para esconder el uso de PHP renombrando los
ficheros a .html.
21. Configuracin de la autenticacin: La autenticacin PHP no puede ser
utilizada con ninguna otra autenticacin. TODA AUTENTICACION LE ES
PASADA AL SCRIPT DE PHP. Para configurar la autenticacin de PHP para el
servidor entero, agregar la lnea siguiente al objeto por omisin:
22. <Object name="default">
23. AuthTrans fn=php4_auth_trans
24. .
25. .


26. .
27. </Object>
28. Para utilizar autenticacin de PHP en slo un directorio, agregar lo
siguiente:
29. <Object ppath="d:\ruta\al\directorio\auntenticado\*">
30. AuthTrans fn=php4_auth_trans
31. </Object>
Nota:
El tamao de la pila que utiliza PHP depende de la configuracin del servidor web.
Si se tienen fallas generales con scripts de PHP muy grandes, se recomienda
elevarlo con el servidor de administracin (en la seccin "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 vlida!
Nota:
Por qu hay variables CGI (invlidas) en el ambiente?
Respuesta: Esto es por que se inici el proceso del servidor web desde el servidor
de administracin que ejecuta el script de arranque del servidor web, que se
quera iniciar, como un script de CGI (Un script de CGI dentro del servidor de
administracin!). 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 administracin. Utilizar la lnea de comando como usuario root
e iniciarlo manualmente - se ver que no hay variables de ambiente a la CGI.
Simplemente cmbiense los scripts para obtener las variables CGI de la manera
correcta para PHP 4.x utilizando la superglobal $_SERVER. Si se tienen scripts ms
antiguos que usan $HTTP_HOST, etc., se debe
activar register_globals en php.ini y cambiar el orden de las variables tambin
(importante: quitar "E" de sta, porque no se necesita el entorno aqu):
variables_order = "GPCS"
register_globals = On


Uso especial para pginas de error o listados personalizados de
directorios (PHP >= 4.3.3)
Se puede utilizar PHP para generar pginas de errores para "404 Not Found" o
similares. Agregar la siguiente lnea al objeto en obj.conf por cada pgina 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 cdigo de error HTTP. Favor de borrar cualquier otra
directiva Error que pudiese interferir con la propia. Si se desea colocar una pgina
para todos los errores que puedan existir, dejar fuera el parmetro code. El script
puede obtener el cdigo 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
lnea por omisin 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 pginas, de error y listados de directorio la URI original y la URI
traducida estn en las
variables $_SERVER['PATH_INFO'] y$_SERVER['PATH_TRANSLATED'].
Nota acerca de nsapi_virtual() y subpeticiones (PHP >= 4.3.3)
El mdulo NSAPI ahora soporta la funcin nsapi_virtual() (alias: virtual()) para
realizar subpeticiones en el servidor web e insertar el resultado en la pgina web.
Esta funcin utiliza algunas caractersticas no documentadas de la librera NSAPI.
En Unix el mdulo automticamente busca las funciones necesarias y las utiliza si
estn disponibles. Si no, se deshabilita nsapi_virtual().
Nota:
Pero se advierte: El soporte para nsapi_virtual() es EXPERIMENTAL!!!
CGI y configuraciones de lnea 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 mdulos, por lo general debe irse por esta solucin por
razones de rendimiento. Sin embargo, la versin CGI permite a los usuarios
ejecutar diferentes pginas con PHP bajo diferentes identificadores de usuarios.
Advertencia


Al usar el modo CGI, su servidor esta expuesto a diferentes ataques. Por favor,
leer la seccin Seguridad con CGI para aprender como defenderse de estos
ataques.
Pruebas
Si has construido PHP como un programa CGI, puede probar su construccin
escribiendo make test. Siempre es una buena idea probar su construccin. De
esta manera usted puede encontrar un problema al principio con PHP en la
plataforma, en lugar de tener que luchar con l ms adelante.
Utilizacin de variables
Algunos servidores suministrando variables de entorno no se definen en las
actuales CGI/1.1 specification. Slo las siguientes variables no se
definen: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE,
PATH_INFO, PATH_TRANSLATED, QUERY_STRING,REMOTE_ADDR, REMOTE_HOS
T, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_
NAME, SERVER_PORT,SERVER_PROTOCOL, and SERVER_SOFTWARE. Todo lo
dems debe ser tratado como "extensiones de proveedor".
Notas de instalacin para OpenBSD
Esta seccin contiene notas y consejos especficos a la instalacin de PHP
sobre OpenBSD 3.6.
Utilizando paquetes binarios
Utilizar paquetes binarios para instalar PHP sobre OpenBSD es el mtodo ms
simple y recomendado. El paquete principal ha sido separado de los distintos
mdulos, 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 bsico (adems de gettext e iconv). Seguido, tmese un vistazo a los
paquetes de mdulos, 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 mdulos en el
fichero php.ini.
Ejemplo #1 Ejemplo de instalacin 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 libreras de PEAR)
# pkg_add php4-pear-4.3.8.tgz
Leer la pgina del manual packages(7) para mas informacin sobre paquetes
binarios en OpenBSD.
Utilizando portes
Tambin se puede compilar PHP a partir de fuentes utilizando el rbol de portes.
Sin embargo, esto slo 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 mdulos soportados de
PHP. Si se encuentra que no se desea crear alguno de estos mdulos, utilice el
sabor o FLAVOR no_*. Por ejemplo, para evitar compilar el mdulo imap, fijar el
sabor o FLAVOR a no_imap.
Problemas comunes
La instalacin por omisin 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 sesin de PHP sean
almacenados, o utilizar un medio alternativo de almacenamiento de
sesiones. Adems, 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/servicestendrn que ser movidos
a /var/www/etc. El paquete PEAR de OpenBSD automticamente se instala
dentro de los directorios correctos del chroot, as que no hace falta ninguna
modificacin especial ah. Ms informacin sobre el Apache de OpenBSD
est disponible en las preguntas frecuentes OpenBSD.
El paquete de OpenBSD 3.6 para la extensin gd requiere que XFree86
sea instalado. Si no se desea utilizar algunas de las caractersticas de
fuentes tipogrficas 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 estticamente. Dado que es difcil generar paquetes binarios
utilizando este mtodo, ahora es depreciado. An 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 algn comentario al respecto, el responsable
actual del port es Anil Madhavapeddy (avsm arroba openbsd punto org).


Solaris sugerencias especficas de instalacin
Esta seccin contiene notas y sugerencias especficas para la instalacin 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 informacin
sobre porqu usar versiones GNU de algunas de estas herramientas.
Para descomprimir la distribucin 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 cdigo PHP puede que se
necesite tambin
flex (versin PHP 5.2 o posterior)
re2c
bison
m4
autoconf
automake
Adems, usted tendr que instalar (y posiblemente compilar) cualquier software
adicional especfico para la configuracin, tales como Oracle o MySQL.
Empleo de paquetes
Se puede simplificar el procesao de intalacin de Solaris mediante el uso de
pkgadd para instalar la mayora de sus componentes necesarios. El Sistema de
Empaquetado de Imagen (IPS) para Solaris 11 Express contiene tambin la
mayora de los componentes requeridos para la instalacin usando el comando
pkg.
Notas de instalacin en Debian GNU/Linux
Esta seccin contiene notas y consejos especficos 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
tambin, esta pgina del manual contiene informacin especfica para otras
opciones, tales como utilizar ya sea los comandos apt-get o aptitude. En esta
pgina del manual estos dos comandos se pueden utilizar indistintamente.
Utilizando APT
Primero, ntese que otros paquetes relacionados podran ser deseables
como libapache2-mod-php5 para integracin con Apache 2, y php-pearpara
PEAR.
Segundo, antes de instalar un paquete, es sensato asegurarse de que la lista de
paquetes est al da. Tpicamente, esto se realiza ejecutando el comando apt-get
update.
Ejemplo #1 Ejemplo de Instalacin en Debian con Apache 2
# apt-get install php5-common libapache2-mod-php5 php5-cli
APT instalar automticamente el mdulo PHP 5 para Apache 2 junto con todas
sus dependencias, y luego lo activar. Apache debera 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 configuracin
En la seccin anterior, PHP se instal nicamente con los mdulos principales. Es
muy probable que se deseen mdulos adicionales, tales comoMySQL, cURL, GD,
etc. Estos tambin pueden ser instalados va el comando apt-get.
Ejemplo #3 Mtodos para listar paquetes relacionados con PHP 5
# apt-cache search php5
# aptitude search php5
# aptitude search php5 |grep -i mysql
Los ejemplos mostrarn una gran cantidad de paquetes incluyendo varios
especficos a PHP como php5-cgi, php5-cli y php5-dev. Determine cuales son
necesarios e instlelos como cualquier otro ya sea con apt-get o aptitude. Y ya
que Debian realiza revisin 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 automticamente las lneas 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 extensin, 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 estn interpretando por el servidor web,
entonces es probable que PHP no haya sido agregado al fichero de
configuracin del servidor web, que en Debian puede
ser /etc/apache2/apache2.conf o algo semejante. Vase el manual de
Debian para mayores detalles.
Si una extensin fue aparentemente instalada y an as las funciones no
aparecen definidas, asegurar de que el fichero ini apropiado est siendo
cargado y/o que el servidor web fue reiniciado despus de la instalacin.
Hay dos comandos bsicos para instalar paquetes en Debian (y otras
variantes de linux): apt-get y aptitude. Pero, explicar las sutiles
diferencias entre estos comandos va ms all del alcance de este manual.
Usando el paquete PHP
PHP est incluido en los Macs desde la versin OS X 10.0.0. Habilitar PHP con el
servidor web por defecto requiere descomentar unas cuantas lneas en el fichero
de configuracin de Apache httpd.conf donde CGI y/o CLI estn activados por
defecto (son fcilmente accesibles a travs del programa Terminal).
Siguiendo las instrucciones que se ofrecen a continuacin se podr habilitar PHP de
una forma rpida para un entorno de desarrollo local. Es muy
recomendable tener siempre actualizado PHP a la ltima versin. Como casi todo
el software vivo, y PHP no es una excepcin, se crean nuevas versiones para
resolver errores y aadir nuevas funcionalidades. Consulte la documentacin de
instalacin de Mac OS X adecuada para ms detalles. Las siguientes instrucciones
para obtener una configuracin estn orientadas a los principiantes que deseen
obtener una configuracin totalmente operativa. Se anima a todos los usuarios a
compilar o instalar una nueva versin ya empaquetada.
La instalacin tpica 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 configuracin de Apache. Por defecto, la
localizacin de dicho fichero es: /private/etc/apache2/httpd.confMediante


el Finder o el Spotlight puede ser algo complicado encontrar dicho fichero
ya que por defecto es privado y pertenece al usuarioroot.
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, tecle lo siguiente en
el Terminal (tras lo cual le preguntar por la contrasea): 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 lneas (eliminando el smbolo #) que
sean similares a las que se muestran a continuacin (a menudo estas lneas
se encuentran separadas, asi que tendr que localizar ambas en el fichero):
3. # LoadModule php5_module libexec/httpd/libphp5.so
4.
5. # AddModule mod_php5.c
Fjese en la localizacin/ruta de acceso. Cuando compile PHP en el futuro,
las lineas arriba indicadas debern ser reemplazadas o comentadas.
6. Asegrese que las extensiones que desee puedan ser interpretadas como
PHP (por ejemplo: .php .html y .inc)
Como las siguientes sentencias ya existan en el httpd.conf (desde el Max
Panther), una vez se habilite PHP los ficheros .php automticamente 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.
7. Asegrese que DirectoryIndex carga el fichero por defecto index
deseado Esto tambien se configura en httpd.conf. Normalmente se
usanindex.php y index.html. Por defecto index.php est habilitado porque
est incluido en la comprobacin de PHP mostrada arriba. Ajuste a
conveniencia.
8. 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 empleandophpinfo() se
puede obtener esta informacin. Si no se est usando php.ini, PHP usar los
valores por defecto. Vase tambin las preguntas frecuentes relacionadas
en finding php.ini.
9. Localize o configure el DocumentRoot ste es el directorio raz 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 tpica
es/Library/WebServer/Documents pero puede ser configurada
en httpd.conf. Como alternativa, el DocumentRoot por defecto para usuarios
individuales es /Users/yourusername/Sites
10. Cree un fichero phpinfo()
La funcin phpinfo() muestra informacin sobre PHP. Considere la creacin
de un fichero en el DocumentRoot que contenga el siguiente cdigo PHP:
<?php phpinfo(); ?>
11. Reinicie Apache, y cargue el fichero PHP creado arriba
Para reiniciar, ejecute sudo apachectl graceful en el shell o
desactive/active la opcin "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 opcin, y la URL sera parecida
a: http://localhost/~yourusername/info.php
CLI (o CGI en versiones antiguas) tambin es llamado de forma correcta php y
posiblemente existe como /usr/bin/php. Abra el Terminal, lea laseccin de lnea de
comando del manual de PHP, y ejecute php -v para comprobar la versin de PHP
del binario PHP. Una llamada a phpinfo()tambin le mostrar esta informacin.
Windows Installer (PHP 5.1.0 y anteriores)
El instalador de Windows de PHP est disponible en la pgina 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 tambin. El instalador no
incluye ninguna extensin externas de PHP adicionales (php_*.dll) ya que slo se
encontrar los del paquetes de Windows Zip y descarga de PECL


Nota:
Si bien el instalador de Windows es una manera fcil de trabajar con PHP, es
restringido en muchos aspectos como, por ejemplo, la configuracin automtica de
extensiones no es soportada. El uso de la instalacin no es un mtodo preferido
para la instalacin 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 instalacin. Dos tipos de instalacin son soportadas - estndar, que
proporciona los parmetros por defecto para todos las configuraciones que puede,
y avanzado, que hace preguntas a medida que avanza.
El asistente de instalacin recopila informacin suficiente para configurar el
fichero php.ini y configurar ciertos servidores web para utilizar PHP. Uno de los
servidores web que el programa de instalacin de PHP no configura es Apache, por
lo que tendrs que configurarlo manualmente.
Una vez que haya terminado la instalacin, 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 configuracin de PHP no es segura. Si a usted le
gustara tener una segura instalacin de PHP, es mejor que vayas en el modo
manual, y establecer todos los opcin con cuidado. Esta configuracin automtica
disminuiye el trabajo de instalacin de PHP, pero no es destinado a ser usado en
los servidores en lnea.
Windows Installer (PHP 5.2 y posterior)
Para crear el instalador de las ltimas versiones de PHP en Windows se ha usado la
tecnologa MSI en conjunto con Wix Toolkit ( http://wix.sourceforge.net/). Esta
aplicacin se encarga de instalar y configurar tanto PHP, como las extensiones
base y PECL. Adems, tambin permite configurar muchos de los servidores web
ms 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
mtodos de instalacin.


Instalacin Normal
Ejecute el instalador MSI y siga las instrucciones que le indica el asistente de
instalacin. En primer lugar, se le solicitar que seleccione el Servidor Web que
desea configurar, junto con algunos detalles de configuracin 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 acompaa 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 subcategoras del elemento seleccionado (por
ejemplo, al marcar esta opcin en "PDO", se instalarn 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 Reparacin de Instalacin (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. Tambin 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.
Instalacin Silenciosa
El instalador tambin permite ser ejecutado en modo silencioso, muy til para
Administradores de Sistemas que desean implantar PHP fcilmente. Para usar el
modo silencioso:

msiexec.exe /i php-VERSION-win32-install.msi /q
Puede especificar el directorio de instalacin como parmetro 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 Configuracin 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 extensin 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 omisin)
ScriptExecutable - ejecutable php-win.exe
ext_php_* - varias extensiones ( por ejemplo: ext_php_mysql para MySQL )
apache13 - mdulo de Apache 1.3
apache20 - mdulo de Apache 2.0
apache22 - mdulo de Apache 2.2
apacheCGI - Ejecutable CGI de Apache
iis4ISAPI - mdulo ISAPI de IIS
iis4CGI - ejecutable CGI de IIS
iis4FastCGI - ejecutable CGI de IIS
NSAPI - mdulo de servidores Sun/iPlanet/Netscape
netserve - ejecutable CGI de Servidores Web NetServe
Xitami - ejecutable CGI de Xitami
Sambar - mdulo ISAPI del Servidor Sambar
CGI - ejecutable php-cgi.exe
PEAR - instalador PEAR
Manual - manual de PHP en formato CHM
Si desea ms informacin sobre instalaciones MSI desde la lnea 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 lnea de
comandos o del entorno grfico. El instalador comprobar sus opciones de
instalacin actuales, eliminar la instalacin antigua, y reinstalar PHP con las
mismas opciones que ya tena. Se recomienda utilizar este mtodo para mantener
PHP actualizado, en lugar de sobrescribir a mano cada fichero del directorio de
instalacin.
Manual de Instalacin
Esta seccin contiene instrucciones para instalar y configurar manualmente PHP en
Windows de Microsoft. Para las instrucciones sobre cmo utilizar el instalador de
PHP para instalar y configurar PHP y un servidor web en Windows,
consulte Windows Installer (PHP 5.2 y posteriores).
Seleccin y descarga de el paquete de distribucin PHP
Descarga la distribucin binaria de PHP zip PHP para Windows: Binarios y
Fuentes . Hay varias versiones diferentes del paquete zip - Seleccione por la
versin que sea adecuado para el servidor web utilizado:


Si se utiliza PHP con IIS a continuacin 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 continuacin los archivos
binarios VC9 de PHP que se deben utilizar.
Si se utiliza PHP con Apache 1 o Apache 2 a continuacin 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 eleccin, por
ejemplo C:\PHP\. La estructura de directorios y archivos extrados 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 continuacin se muestra la lista de los mdulos y archivos ejecutables incluidos
en la distribucin del archivo zip de PHP:
go-pear.bat - el script de configuracin de PEAR. Consulte Instalacin
(PEAR) para ms detalles.
php-cgi.exe - ejecutable CGI que se puede utilizar cuando se ejecuta PHP
en IIS a travs de CGI o FastCGI.
php-win.exe - el ejecutable para la ejecucin de scripts en PHP sin
necesidad de utilizar una ventana de lnea de comandos de PHP (Por
ejemplo, las aplicaciones PHP que utilizan Windows GUI).
php.exe - el ejecutable para la ejecucin de scripts PHP dentro de una
interfaz de lnea 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
Despus de que el contenido del paquete de PHP se ha extrado, copie el php.ini-
production en php.ini en la misma carpeta. Si es necesario, tambin es posible
colocar el php.ini en cualquier otro lugar. Pero se requieren pasos adicionales de
configuracin como se describe enConfiguracin de PHP.
El fichero php.ini le dice a PHP cmo se configura, y cmo trabajar con el ambiente
que se ejecuta. Aqu hay una serie de ajustes para el ficherophp.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 ms informacin.
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 ms baja
en el php.inificheros que se encuentra en el extension_dir .
extension = xxxxx.dll - Para cada extensin 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 instalacin 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 continuacin.
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 relacin con el archivo donde los
errores de PHP debe estar registrado. Este archivo debe tener permisos de
escritura para el servidor web. Los lugares ms 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 proteccin de la instalacin de la gua 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 despus de
la especificacin 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 excepcin HTTP 500.
Directivas opcionales
max_execution_time = ## - Esta directiva le dice a PHP, el importe
mximo de tiempo que puede ejecutar cualquier script determinado. El
defecto es 30 segundos. Aumentar el valor de esta directiva, si la aplicacin
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 mayora de las aplicaciones PHP. Algunos de los ms complejos
puede ser que necesite ms.
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 produccin con el fin de no revelar ninguna informacin
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 operacin de
fichero fuera de las rutas especificadas se producir un error. Esta directiva
es especialmente til para bloquear la instalacin de PHP en entornos de
alojamiento compartido para evitar que scripts PHP de acceso a los archivos
fuera del directorio raz del sitio web.
upload_max_filesize = ###M and post_max_size = ###M - El tamao
mximo permitido de un archivo subido y los datos posteriores,
respectivamente. Los valores de estas directivas sern aumenta si las
aplicaciones PHP necesita realizar grandes cargas, como por ejemplo fotos o
archivos de vdeo.
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.
Adems de ejecutar PHP a travs de un servidor web, PHP puede ejecutar desde la
lnea de comandos como un script .BAT. Ver PHP lnea de comandos de Microsoft
Windows para ms detalles.
Microsoft IIS 5.1 y IIS 6.0
Esta seccin 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
configuracin 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 instalacin
Nota:
Non-thread-safe build de PHP se recomienda cuando se utiliza IIS. Non-thread-
safe builds estn disponibles en PHP para Windows: Binarios y Fuentes.
Configure el CGI- y configure FastCGI-specific en el archivo php.ini como se
muestra a continuacin:
Ejemplo #1 Configuracin 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 extensin para IIS 5.1 y 6.0. La extensin
est disponible para 32-bit y plataformas de 64-bit - seleccionar el paquete de
descarga adecuada para la plataforma.
Configure la extensin FastCGI para manejar las solicitudes especficas de PHP
ejecutando el comando que se muestra a continuacin. Vuelva a colocar el valor de
el parmetro "-path" con la ruta absoluta del fichero en el fichero php-cgi.exe.
Ejemplo #2 Configuracin de la extensin 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 extensin *.php , lo
que resultar en todas las URLs que terminan con .php siendo manejado por la
extensin FastCGI. Asimismo, se configurar la extensin FastCGI a usar en el
ejecutable php-cgi.exe para procesar las solicitudes de PHP.
Nota:
En este punto la necesidad de instalacin y configuracin de los pasos se han
completado. El resto de instrucciones a continuacin son opcionales, pero
altamente recomendable para lograr una funcionalidad ptima y el rendimiento de
PHP en IIS.
Suplantacin y acceso a ficheros del sistema
Se recomienda habilitar la suplantacin FastCGI en PHP cuando este utilizando IIS.
Esto es controlado por la directiva fastcgi.impersonate en el fichero php.ini.
Cuando suplantacin est activado, PHP realizar todas las operaciones de ficheros
de sistema en favor de la cuenta de usuario que se ha determinado por la
autentificacin 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 autenticacin IIS en cada sitio web.
Por ejemplo IIS 5.1 and IIS 6.0, en su configuracin predeterminada, se ha
habilitado la autenticacin annima con una funcin 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 continuacin la cuenta
IUSR_<MACHINE_NAME> debe tener permiso para escribir en ellos.
Para determinar qu cuenta de usuario es utilizado por IIS autenticacin annima,
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"

Para modificar la configuracin de permisos en ficheros y carpetas, utilice la
interfaz de usuario de el Explorador de Windows o el comando icacls.
Ejemplo #3 Configuracin 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 aadir 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 botn "Add..." y enter en "index.php" para el " Contenido de
la pgina por defecto :".

FastCGI y Reciclaje de configuracin de PHP
Configurar la extensin IIS FastCGI para el reciclaje de procesos PHP utilizando los
comandos de abajo. Los controles de configuracin de
FastCGIinstanceMaxRequests nmero de solicitudes que sern procesadas por un
solo proceso php-cgi.exe antes de el cierre de la extensin FastCGI. La variable
PHP de entorno PHP_FCGI_MAX_REQUESTS controla cuntas peticiones de un
nico proceso php-cgi.exe se encargar antes de que se recicle as mismo.
Asegrese de que el valor especificado por la configuracin
FastCGI InstanceMaxRequests es menor o igual al valor especificado
para PHP_FCGI_MAX_REQUESTS.
Ejemplo #4 Configuracin 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
Configuracin de los ajustes de tiempo de espera FastCGI
Aumentar la configuracin de tiempo de espera para la extensin 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. Vase Configuracin de Extensin
FastCGI para IIS 6.0 para ms informacin sobre los ajustes.
Ejemplo #5 Configuracin 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 ubicacin 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 configuracin
desde una ubicacin personalizada, ejecute el comando que se muestra a
continuacin. La ruta de acceso absoluta al directorio con el fichero php.ini debe
ser especifica con un valor de variable de entornoPHPRC.
Ejemplo #6 Cambiar la ubicacin 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 seccin 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 configuracin de IIS 5.1 and IIS 6.0 on
Windows XP and Windows Server 2003 refirase a Microsoft IIS 5.1 and IIS 6.0.
Habilitacin de apoyo FastCGI en IIS
Mdulo FastCGI est deshabilitado en la instalacin por defecto de IIS. Los pasos
para que pueda variar segn la versin 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 dilogo "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 instalacin

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 continuacin, aadir 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 verificacin en grupo
"Desarrollo de Aplicaciones" ;
4. Click "Next" y luego "Install" ay espere a que la instalacin se complete.



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 estn disponibles en PHP para Windows: binarios y fuentes.
Configure el CGI y la configuracin especfica de FastCGI php.ini fichero como se
muestra a continuacin:
Ejemplo #1 CGI y FastCGI en la configuracin php.ini
fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0
Configurar la asignacin de IIS controlador para PHP utilizando la interfaz de
usuario Administrador de IIS o una herramienta de lnea de comandos.


El uso de IIS interfaz de usuario de Manager para crear una asignacin de
controlador para PHP
Siga estos pasos para crear una asignacin 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 "Caractersticas" Pgina de abrir el "Handler Mappings" feature;

4. En el "Actions" haga click en panel "Add Module Mapping...";
5. En el "Add Module Mapping" dilogo 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" botn y luego configurar la
asignacin de invocar controlador slo si la solicitud se asigna a un archivo
o una carpeta;
7. Haga clic en Aceptar en todos los cuadros de dilogo para guardar la
configuracin.

Utilizando la herramienta de lnea de comandos para crear una asignacin
de controlador para PHP
Utilice el comando mostrado a continuacin para crear un grupo de IIS FastCGI
proceso que utilizar php-cgi.exe ejecutable para la tramitacin de solicitudes de
PHP. Vuelva a colocar el valor del parmetro fullPath con la ruta absoluta al
fichero php-cgi.exe.
Ejemplo #2 >Creacin 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 ejecucin del
comando que se muestra a continuacin. Vuelva a colocar el valor del
parmetro scriptProcessor con la ruta de acceso absoluta al fichero php-cgi.exe.
Ejemplo #3 Creacin 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 asignacin de controlador de IIS para la extensin de
archivo *.php, lo que resultar en todas las direcciones URL que terminan con. Php
siendo manejado por el mdulo FastCGI.
Nota:
En este punto la necesidad de instalacin y configuracin de los pasos se han
completado. Las instrucciones a continuacin son opcionales, pero altamente
recomendable para lograr una funcionalidad ptima y el rendimiento de PHP en
IIS.
Suplantacin de identidad y acceso a archivos del sistema
Se recomienda habilitar la suplantacin en PHP FastCGI cuando IIS utilizando. Esta
est controlado por la directiva fastcgi.impersonate en el ficherophp.ini. Cuando
est habilitada la suplantacin, PHP realizar todas las operaciones del sistema de
ficheros en nombre de la cuenta de usuario que ha sido determinado por la
autentificacin de IIS. Esto asegura que, aunque el proceso mismo PHP es
compartido a travs de diferentes sitios web IIS, los scripts PHP en los sitios web
no ser capaz de acceder a los dems ficheros, siempre y cuando las cuentas de
usuario se utilizan para la autenticacin de IIS en cada sitio web.
Por ejemplo IIS 7, en su configuracin por defecto, se ha habilitado la
autenticacin annima 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 annima 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 produccin configuracin XML
aspecto de elemento para el atributo userName.
Ejemplo #4 La determinacin de la cuenta utilizada como IIS identidad
annima
%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 vaca, entonces
significa que la identidad del grupo de aplicaciones se utiliza como un identidad
annima para ese sitio web.
Para modificar la configuracin de permisos de archivos y carpetas, utilice la
interfaz de usuario del Explorador de Windows o comando icacls.
Ejemplo #5 Configuracin 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 acta como un documento predeterminado. Para aadir 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 configuracin de PHP Reciclaje
Configurar la configuracin de IIS FastCGI PHP para el reciclaje de los procesos
mediante los comandos de abajo. La configuracin
FastCGIinstanceMaxRequests controla cuntas peticiones se procesado por un solo
peoceso php-cgi.exe antes de IIS se cierra. La variable de entorno
PHPPHP_FCGI_MAX_REQUESTS controla el nmero pide una sola proceso php-
cgi.exe se encargar antes de que se recicla s misma. Asegrese de que el valor
especificado para la configuracin FastCGI InstanceMaxRequests es menor o igual
al valor especificado para PHP_FCGI_MAX_REQUESTS.
Ejemplo #7 Configuracin 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 configuracin 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 configuracin de tiempo de espera. Asegrese de sustituir el valor en el
parmetro a fullPath contendr la ruta absoluta a el fichero php-cgi.exe.
Ejemplo #8 Configuracin 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 ubicacin 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 entornoPHPRC.
Encomendar a PHP para cargar el archivo de configuracin desde una ubicacin
personalizada, ejecute el comando se muestra a continuacin. 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 ubicacin 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 seccin contiene notas y sugerencias especficas para Apache 1.3.x instaladas
con PHP en sistemas Microsoft Windows. Tambin hayinstrucciones y notas para
Apache 2 en una nueva pgina.
Nota:


Por favor lea primero el manual de instalacin
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.exepara PHP 5), la otra
es utilizar el mdulo DLL de Apache. En ambos casos se necesita
editar httpd.conf para configurar Apache para trabajar con PHP, y despus reiniciar
el servidor.
Vale la pena resaltar, que el mdulo SAPI ha sido desarrollado mas estable bajo
Windows. Se recomienda su uso ms que el binario CGI, ya que es ms
trasparente y seguro.
Aunque pueden haber algunas variaciones en la configuracin de PHP bajo Apache,
estas son sencillas para ser utilizados por el principiante. Por favor consulte la
documentacin de Apache para seguir directivas de configuracin.
Despus de modificar el archivo de configuracin, 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
configuracin de Apache en Windows, todas las barras invertidas tal
como c:\directory\file.ext deberan ser convertidas en barras
comunes: c:/directory/file.ext. Una barra comn al final ser necesaria para
directorios.
Instalacin como mdulo de Apache
Se deben agregar las siguientes lneas a su archivo de configuracin
Apache httpd.conf
Ejemplo #1 PHP como mdulo 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 seccin LoadModule
# No olvidar copiar este ficrero desde el directorio sapi!
LoadModule php4_module "C:/php/php4apache.dll"

# Adicionar al final de la seccin AddModule
AddModule mod_php4.c
Para PHP 5:
# Adicionar al final de la seccin LoadModule
LoadModule php5_module "C:/php/php5apache.dll"

# Adicionar al final de la seccin AddModule
AddModule mod_php5.c
Para ambos :
# Adicionar esta lnea 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
Instalacin como un binario CGI
Si se ha descomprimido el paquete PHP C:\php\ como se describe en la
seccin Manual de instalacin paso a paso, es necesario insertar estas lneas a su
archivo de configuracin 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 lnea en la lista anterior se puede encontrar en las
versiones actuales de httpd.conf, pero se comenta. Recordar tambin 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 seccin Seguridad con CGI para aprender como defenderse de estos
ataques.
Si desea presentar archivos de cdigo fuente PHP sintaxis highlighted, no existe la
opcin ms conveniente con la versin de PHP como mdulo. Si ha elegido
configurar Apache para usar PHP como un binario CGI, tendr que usar la
funcin highlight_file(). Para ello se necesita crear un script PHP y agregarle el
cdigo <?php highlight_file('some_php_script.php'); ?>.
Apache 2.x en Microsoft Windows
Esta seccin contiene notas y sugerencias especficas de Apache 2.x instaladas con
PHP en sistemas Microsoft Windows. Tambin hay instrucciones y notas para
usuarios de Apache 1.3.x en una nueva pgina..
Nota:
Por favor lea primero el manual de instalacin
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 dephp5apache2.dll y slo est
disponible para PHP 5.2.0 y posteriores. Ver tambin http://snaps.php.net/
Se le recomienda consultar la Documentacin de Apache Para obtener un
conocimiento bsico 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 diseado 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 situacin.
Descargue la versin ms reciente de Apache 2.x y un accesorio de la versin
de PHP. Siga los pasos del Manual de Instalacin y regrese a continuar con la
integracin 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
configuracin de Apache en Windows, todas las barras invertidas tal
como c:\directory\file.ext deberan ser convertidas en barras
comunes: c:/directory/file.ext. Una barra comn al final ser necesaria para
directorios.
Instalacin como un controlador de Apache
Es necesario insertar las siguientes lneas en Apache httpd.conf archivo de
configuracin para cargar el mdulo 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
seaphp5apache2.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
seala en la presente directiva.
La configuracin anterior permite habilitar PHP como controlador de cualquier
fichero que tiene una extensin .php, aunque existen otras extensiones de fichero.
Por ejemplo, un fichero llamadoexample.php.txt ser ejecutado por el controlador


de PHP. Para garantizar que slo los ficheros queterminen en .php son
ejecutados, se utiliza la siguiente configuracin en su lugar:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Ejecutar PHP como CGI
Se debe consultar la Documentacin de Apache CGI para una comprensin ms
completa de ejecutar CGI en Apache
Para ejecutar PHP como CGI, tendrs que colocar los ficheros php-cgi en un
directorio designado como directorio CGI usando la directiva ScriptAlias.
A continuacin, se nesesita insertar una #! lnea en los ficheros PHP, apuntando a
la ubicacin 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 seccin 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 estn disponibles para la descargar en ese sitio. Instalar el mdulo 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 extensin .php ahora sern ejecutados por PHP FastCGI


Servidores Sun, iPlanet y Netscape en Microsoft Windows
Esta seccin contiene anotaciones y consejos especficos 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 mdulo NSAPI para generar
listados de directorios y pginas de error personalizadas. Tambin hay funciones
adicionales para la compatibilidad con Apache. Para tener soporte con los
servidores web actuales consulte las anotaciones sobre subpeticiones.
Instalacin CGI en servidores Sun, iPlanet y Netscape
Para instalar PHP como un manejador CGI, haga lo siguiente:
Copie php4ts.dll al raz del sistema (directorio en el que instal Windows)
Realice la asociacin de ficheros en la lnea de comandos. Introduzca las
siguientes lneas:
assoc .php=PHPScript
ftype PHPScript=c:\php\php.exe %1 %*
En Netscape Enterprise Administration Server cree un directorio shellcgi
temporal y brrelo despus (este paso aadir 5 lneas 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).
Realcelo para cada instancia de servidor web en que desee ejecutar PHP
Se pueden encontrar ms detalles sobre cmo configurar PHP como ejecutable CGI
en http://benoit.noss.free.fr/php/install-php.html
Configuracin de NSAPI en servidores Sun, iPlanet y Netscape
Para instalar PHP con NSAPI, haga lo siguiente:
Copie php4ts.dll al raz de su sistema (directorio en que instal Windows)
Haga la asociacin de ficheros en la lnea de comandos. Introduzca las
siguientes lneas:
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 lneas 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 parmetro php_ini es opcional, pero usndolo se puede
reubicar el fichero php.ini al directorio de configuracin del servidor web.
Configure el objeto por omisin en obj.conf (para clases de servidores
virtuales [Sun Web Server 6.0+] en su fichero vserver.obj.conf): En la
seccin <Object name="default">, aada esta lnea tras los 'ObjectType'
y antes de las lneas 'AddLog':
Service fn="php4_execute" type="magnus-internal/x-httpd-php"
[inikey=value inikey=value ...]
(PHP >= 4.3.3) Se pueden aadir parmetros adicionales del tipo php.ini-
values, por ejemplo, se puede especificar
eldocroot="/path/to/docroot" especfico 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
dezlib.output_compression="On"
Esto slo 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 administracin del servidor
para asignarle el estilo x-httpd-php. Todos los ficheros que contenga se
ejecutarn con PHP. Es til para ocultar el uso de PHP, renombrando los
ficheros a .html.
Reinicie el servidor web y aplique los cambios
Realcelo para cada instancia del servidor web en que desee ejecutar PHP
Nota:
Puede consultar ms detalles sobre cmo configurar PHP como filtro NSAPI
aqu: http://benoit.noss.free.fr/php/install-php4.html
Nota:
El tamao de pila de PHP depende de la configuracin del servidor web. Si la
ejecucin de scripts extensos de PHP se detiene, se recomienda que lo propague
con Admin Server (en la seccin "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 slo contiene un entorno de ejecucin. 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). Slo
se obtendr el entorno del servidor web en ejecucin sin ninguna variable CGI
vlida.
Nota:
Pero por qu hay variables CGI (invlidas) en el entorno?
Respuesta: Se debe a que se inici el proceso del servidor web desde el servidor
de administracin que lanza el script de inicio del servidor web como un script CGI
(un script CGI dentro del servidor de administracin!). sta es la razn 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 arrnquelo 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., debera
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 pginas de error y listados de directorios
personalizados (PHP >= 4.3.3)
Se puede utilizar PHP para generar pginas de error para "404 Not Found" o
similar. Debe aadirse la siguiente lnea al objeto en obj.conf para cada pgina 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 cdigo de error HTTP. Debe eliminarse todas las
directivas Error que puedan colisionar con las nuevas. Si se desea crear una
pgina genrica para todos los errores, debe omitirse el parmetro code. El script
podr consultar el cdigo 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 lnea 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 pgina de error como de listado de directorios, la URI original y la
traducida estn disponibles en las
variables$_SERVER['PATH_INFO'] y $_SERVER['PATH_TRANSLATED'].
Anotaciones sobre nsapi_virtual() y subpeticioness (PHP >= 4.3.3)
El mdulo NSAPI ahora soporta la funcin nsapi_virtual() (alias: virtual()) para
hacer subpeticiones al sevidor web e insertar el resultado en la pgina web. El
problema es que esta funcin utiliza algunas funcionalidades no documentadas de
la biblioteca NSAPI.
En Unix esto no es un problema, porque el mdulo automticamente 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 deteccin
automtica del fichero ns-httpdXX.dll ms reciente. Se ha probado hasta en
servidores versin 6.1. Si se utiliza una versin ms reciente del servidor Sun, la
deteccin falla y nsapi_virtual() se deshabilita.
Si este fuera el caso, debe probarse lo siguiente: Aada el siguiente parmetro
a php4_init en magnus.conf/obj.conf:
Init fn=php4_init ... server_lib="ns-httpdXX.dll"
donde XX es el nmero de versin correcto de la DLL. Para conocerlo, busca en el
raz del servidor el nombre correcto de la DLL. La DLL de mayor tamao es la
adecuada.
Puede comprobar el estado usando la funcin phpinfo().
Nota:
Pero tenga en cuenta: El soporte para nsapi_virtual() es EXPERIMENTAL.
Sambar Server en Microsoft Windows
Esta seccin contiene notas y consejos especficos a el Servidor Sambar para
Windows.
Nota:
Debe leer primero los pasos del manual de instalacin.
Esta lista describe cmo configurar el mdulo ISAPI para trabajar con el servidor
Sambar en Windows.


Busque el archivo llamado mappings.ini (en el directorio de configuracin)
en el directorio de instalacin de Sambar.
Abra mappings.ini y adicione la siguiente lnea 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 lnea 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 tendrn acceso a recursos remotos. La
cuenta puede ser modificada mediante el uso de la opcin de servicios de Windows
en el Panel de control de las herramientas de administracin.
Xitami en Microsoft Windows
Esta seccin contiene notas y sugerencias especficas para Xitami en Windows.
Nota:
Debe leer primero los pasos del Manual de instalacin.
Esta lista describe cmo 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 ms 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 seccin Seguridad con CGI para aprender como defenderse de estos
ataques.


Asegrese de que el servidor web est funcionando, y apunte el navegador
a la consola de administracin xitamis (por lo
generalhttp://127.0.0.1/admin), Y haga clic en Configuracin.
Navegue a los filtros, y ponga la extensin 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.
Instalacin de extensiones en Windows
Despus 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. Tambin puede
cargar un mdulo dinmicamente en el script con dll().
Los DLL para las extensiones PHP tienen el prefijo php_.
Algunas extensiones son construidas dentro de la versin de Windows de PHP.
Esto significa que los ficheros DLL adicionales, y la extensindirectiva, 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 (actualizacin de PHP
4.3.11): BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC,
Overload, PCRE, Session, Tokenizer, WDDX, XML y Zlib
En PHP 5 (actualizacin de PHP 5.0.4), existen los siguientes cambios. Contruidos
en: DOM, LibXML, Iconv, SimpleXML, SPL y SQLite. Y a continuacin se enumeran
los no construidos en: MySQL y Overload.
La ubicacin predeterminada de las bsquedas PHP para las extensiones
es C:\php4\extensions en PHP 4 y C:\php5 en PHP 5. Para cambiar estos
parmetros reflejando la configuracin de PHP, edite el fichero php.ini:
Tendr que cambiar los parmetros de la extension_dir para apuntar al
directorio donde est la extensin, o donde tenga localizado el
ficherophp_*.dll. Por ejemplo:
extension_dir = C:\php\extensions
Habilite la extensin(s) en php.ini que desea utilizar descomentando las
siguientes lneas extension=php_*.dll en php.ini. Esto se hace mediante
el borrado de la cabecera, desde la extensin que desea cargar.
Ejemplo #1 Habilitar la extensin Bzip2 para PHP-Windows


// cambiar la siguiente lnea 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 distribucin, 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 distribucin. Si va a instalar PHP 4, copie el
paquete DLL de la carpeta C:\php\dlls a la carpeta principalC:\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 distribucin de PHP. Consulta
cada pgina de documentacin de las extensiones para ms detalles.
Adems, lea el manual seccin titulada Instalacin de extensiones
PECL para ms detalles sobre PECL. Un gran nmero de extensiones de PHP
se encuentran en PECL, y estas extensiones requieren una
descarga independiente .
Nota: Si est ejecutando un servidor de la versin de PHP como mdulo 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
Extensin Descripcin Notas
php_bz2.dll
Funciones de
compresin bzip2
Nada
php_calendar.dll
Funciones de
conversin Calenda
rio
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
Requiere: libeay32.dll, ssleay32.dll(inclui


Extensiones de PHP
Extensin Descripcin Notas
URLCURL do)
php_dba.dll
DBA: Funciones de
Capa de
abstraccin de la
Base de datos
(dbm-style)
Nada
php_dbase.dll Funciones dBase Nada
php_dbx.dll Funciones dbx
php_domxml.dll
Funciones de
domxml para PHP
4
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 despus
de php_mbstring.dll enphp.ini.
php_fbsql.dll
Funciones FrontBas
e
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 slo lectura
php_ftp.dll Funciones FTP Incorporado desde PHP 4.0.3
php_gd.dll
Funciones de Eliminada en PHP 4.3.2. Tambin tenga


Extensiones de PHP
Extensin Descripcin Notas
libreria de
imagen GD
en cuenta que las funciones de color
verdadero no estn 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.dl
l
Funciones HyperW
ave
Nada
php_iconv.dll
Conversin 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 InterBas
e
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


Extensiones de PHP
Extensin Descripcin Notas
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 Mimetyp
e
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 OpenSS
L
Requiere: libeay32.dll (incluido)


Extensiones de PHP
Extensin Descripcin Notas
php_overload.dll
Funciones de
sobrecarga de
objetos de PHP 4
Incluido desde PHP 4.3.0, eliminado a
partir de PHP 5.0.0
php_pdf.dll Funciones PDF Nada
php_pgsql.dll
Funciones PostgreS
QL
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 Tokenize
r
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


Extensiones de PHP
Extensin Descripcin Notas
requieresablot.dll, expat.dll, iconv.dll (incl
uido).
php_yaz.dll Funciones YAZ Requiere: yaz.dll (incluido)
php_zip.dll
Ficheros
Zip incluido
Acceso de slo lectura
php_zlib.dll
Funciones de
compresin ZLib
Construido a partir de PHP 4.3.0
Linea de Comandos PHP en Microsoft Windows
Esta seccin contiene notas y sugerencias especficas para conseguir ejecutar PHP
en la lnea de comandos para Windows.
Nota:
Usted debe leer primero el manual de instalacin
Cmo ejecutar PHP desde la lnea de comandos sin hacer ningn 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 deberan haber tomado, pero se repiten aqu para ser
capaz de proporcionar una completa secuencia paso a paso.
Nota:
PATH y PATHEXT son variables de sistema preexistentes importantes en
Windows, por lo que se ha de asegurarse de no sobrescribir dichas
variables, solamente agregarle algo.
Aada la ubicacin del ejecutable de PHP (php.exe, php-win.exe o php-
cli.exe dependiendo de su versin de PHP y las preferencias de
presentacin) a la variable de entorno PATH. Lea ms acerca de cmo
aadir el directorio de PHP PATH en la entrada correspondiente de
preguntas frecuentes.


Aada la extensin .PHP de la variable de entorno PATHEXT. Esto se puede
hacer al mismo tiempo, con la modificacin de la variable de entorno PATH.
Siga los mismos pasos como se describe en las Preguntas frecuentes pero
habra que modificar la variable de entornoPATHEXTen lugar de la variable
de entornoPATH.
Nota:
La posicin 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 extensin .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 extensin .PHP y todos los
parmetros, ser enviada a el script para el procesamiento.
En el ejemplo a continuacin 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 pequeo problema si tiene intencin de utilizar esta tcnica y usar scripts
PHP como filtro de lnea de comandos, como el ejemplo a continuacin:
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
Informacin adicional sobre este tema se pueden encontrar en el artculo de
Microsoft: 321788
Manejador de Procesos FastCGI (FPM)
Tabla de contenidos
Instalacin
Configuracin
FPM (FastCGI Process Manager) es una implementacin alternativa al PHP FastCGI
con algunas caractersticas adicionales (la mayora) tiles para sitios web con
mucho trfico.
Estas caractersticas incluyen:
Manejo avanzado para detener/arrancar procesos de forma grcil;
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 destruccin accidental del cach opcode;
Soporte acelerado de subidas;
"slowlog" - scripts de registro de procesos (no slo sus nombres, sin sus
backtraces tambin, usando ptrace y similares para leer procesos
execute_data remotos) que son inusualmente lentos;


fastcgi_finish_request() - Funcin especial para detener y descargar todos
los datos mientras continua haciendo algn proceso ms largo (conversin
de vdeos, procesamiento de estadsticas, etc.);
Creacin dinmico/esttico de hilos;
Informacin bsica del status SAPI (similar al mod_status de Apache);
Basado en archivos de configuracin php.ini
Instalacin
Compilando el cdigo fuente
Para habilitar FPM en la compilacin de PHP, debe aadirse --enable-fpm a la
lnea de configuracin-
Hay otras opciones de configuracin especficas de FPM (todas ellas optativas):
--with-fpm-user - usuario de FPM (por omisin - nobody).
--with-fpm-group - grupo de FPM (por omisin - nobody).
Configuracin
FPM usa la sintaxis de php.ini para su archivo de configuracin - 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 nmero de procesos termina con SIGSEGV o SIGBUS dentro del
intervalo de tiempo establecido por emergency_restart_intervalentonces
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
Lmite de tiempo que un hilo de proceso espera por una seal maestra.
Unidades disponibles: s(egundos), m(inutos), h(oras), o d(as) Unidad por
defecto: segundos. Valor por defecto: 0.
daemonize boolean
Enva a FPM al background. Establezca a 'no' para mantener FPM en
foreground para depuracin. Valor por defecto: yes.
Lista de directivas de grupo
Con FPM usted puede correr varios grupos de procesos con diferentes ajustes.
Estos son los parmetros que pueden ser ajustados por grupo.
listen string
La direccin sobre la cual desea aceptar peticiones FastCGI. Las sintaxis
vlidas 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 direccin debe ser
separada por coma. Si este valor es dejado en blanco, las conexiones sern
aceptas desde cualquier direccin 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 segn 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 opcin 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 cmo el manejador de procesos controlar el nmero de hilos de
procesos. Valores posibles: static, ondemand, dynamic. Esta opcin es
obligatoria.
static - el nmero 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 nmero de hilos de proceso ser basado dinmicamente
basado en las siguientes
directivas: pm.max_children,pm.start_servers, pm.min_spare_server
s, pm.max_spare_servers.
pm.max_children int
El nmero de hilos de procesos a ser creados cuando pm es puesto
a static y el mximo nmero de hilos de proceso a ser creados
cuandopm es puesto a dynamic. Esta opcin es obligatoria.
Esta opcin establece el lmite sobre el nmero de peticiones simultaneas
que sern 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 int
Nmero 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 nmero mnimo deseado de procesos libres en el servidor. Usado slo
cuando pm es puesto a dynamic. Tambin obligatorio en este caso.
pm.max_spare_servers int
El nmero mximo deseado de procesos libres en el servidor. usado slo
cuando pm es puesto a dynamic. Tambin obligatorio en este caso.
pm.max_requests int
El nmero de pedidos que cada hilo de proceso debe ejecutar antes de
reaparecer. Esto puede ser til para evitar las fugas de memoria en libreras
de terceros. para el procesamiento de solicitudes sin lmites especifique '0'.
Equivale a PHP_FCGI_MAX_REQUESTS. Valor por defecto: 0.
pm.status_path string
La direccin URI para ver la pgina de status FPM. Si este valor no es
establecido, ninguna direccin URI ser reconocida como una pgina de
status. Valor por defecto: none.
ping.path string
La direccin URI del ping para llamar a la pgina de monitor del FPM. Si
este valor no es establecido, ninguna direccin URI ser reconocida como
pgina del ping. Esto debera 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
cdigo de respuesta 200. Valor por defecto: pong.
request_terminate_timeout mixed
El tiempo de espera para servir una simple peticin luego que el proceso
worker sea eliminado. Esta opcin debe ser usada cuando la opcin
'max_execution_time' no detenga la ejecuciun del script por cualquier


razn. 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 peticin despus 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 tamao mximo 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 sern 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 sern sobre-escritos a sus
valores previos. Por favor note que
definiendo disable_functions odisable_classes no sobre-escribir los valores de
definiciones anteriores php.ini, pero aadirn nuevos en cambio.
Ajustes definidos con php_admin_value and php_admin_flag cannot be
anulados con ini_set().
Como 5.3.3, establecer los ajustes PHP es tambin posible como servidor web.
Ejemplo #2 Establecer ajustes PHP en nginx.conf
set $php_value "pcre.backtrack_limit=424242";
set $php_value "$php_value \n pcre.recursion_limit=99999";
fastcgi_param PHP_VALUE $php_value;

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/htdocs";
Precaucin
Dado a que estos valores se pasan a php-fpm como cabeceras fastcgi, php-fpm no
debe estar vinculado a una direccin accesible para todo el mundo. De lo contrario,
cualquiera podra alterar las opciones de configuracin de PHP. Ver
tambinlisten.allowed_clients.
Introduccin a las Instalaciones en PECL
PECL es un respositorio de extensiones de PHP disponible mediante el sistema de
paquetes PEAR. Esta seccin del manual tiene por objetivo ilustrar cmo obtener
e instalar extensiones PECL.
Estas instrucciones asumen que la ruta al fuente de su distribucin de PHP
es /your/phpsrcdir/, y que extname es el nombre de la extensin PECL. Ajuste


a sus valores. Estas instrucciones, adems, asumen conocimientos del comando
pear. La informacin del manual de PEAR para el comando pear tambin es
aplicable al comando pecl.
Para poder usarse, una extensin compartida se debe construir, instalar, y cargar.
Los mtodos descritos abajo le proporcionan varias instrucciones para construir e
instalar extensiones, pero no se cargarn automticamente. stas se pueden
cargar aadiendo una directiva extension. al ficherophp.ini, o bien mediante el uso
de la funcin dl().
Al construir un mdulo 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
de Git Annimo.
Descarga de extensiones PECL
Existen varias opciones para descargar extensiones PECL, a saber:
El comando pecl install extname descarga el cdigo de la extensin
automticamente, de modo que en este caso no se hace necesario realizar
una descarga por separado.
http://pecl.php.net/ La pgina web de PECL contiene informacin sobre
las diferentes extensiones que ofrece el Equipo de Desarrollo de PHP. La
informacin disponible aqu incluye: ChangeLog, notas de la versin,
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. Tambin se
podrn especificar versiones concretas.
SVN La mayor parte de las extensiones PECL tambin estn 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 captulo titulado construccin de la fuente en
Windows.
Instalacin una extensin de PHP en Windows
Dispone de dos formas para cargar extensiones PHP en Windows: o bien
compilndolas en PHP, o bien cargando su DLL. El mtodo recomendado y ms
sencillo es cargar una extensin pre-compilada.


Para cargar una extensin, debe estar disponible como fichero ".dll" en su sistema.
Todas las extensiones son compiladas por el Grupo PHP automtica y
peridicamente (revise la siguiente seccin para realizar descargas).
Para compilar una extensin en PHP, por favor, acceda a la documentacin
de construccin de la fuente.
Para compilar una extensin independiente (o lo que es lo mismo, un fichero DLL),
por favor, revise la documentacin de construccin de la fuente. Si el fichero DLL
no est disponible ni en su distribucin de PHP ni en PECL, deber compilarla antes
de poder comenzar a usarla.
Dnde encontrar una extensin?
Las extensiones de PHP generalmente se llaman "php_*.dll" (donde el asterisco
representa el nombre de la extensin) y se localizan bajo la carpeta "PHP\ext"
("PHP\extensions" en PHP 4).
PHP se distribuye con las extensiones ms tiles para la mayora de
desarrolladores. Se les llama extensiones del "ncleo".
En cualquier caso, si necesita una funcionalidad que no proporciona ninguna de las
extensiones del ncleo, 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 extensin 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 colaboracin, (ojal) agradecimientos, informes de errores,
e incluso parches/correcciones. Antes de enviar su extensin para ser alojada en
PECL, por favor, lea http://pecl.php.net/package-new.php.
Qu extensin descargar?
A menudo, encontrar varias versiones de cada DLL:
Nmeros de versin diferentes (al menos los dos primeros nmeros deben
coincidir)
Diferentes ajustes de seguridad en hilos
Diferentes arquitecturas de procesadores (x86, x64, ...)
Diferentes ajustes de depuracin
etc.
Debe tener en cuenta que los ajustes de su extensin deben coincidir con la
configuracin 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 lnea de comandos:
drive:\\path\to\php\executable\php.exe -i
Cargando una extensin
La forma ms comn de cargar una extensin PHP consiste en incluirla en el
fichero de configuracin php.ini. Por favor, tenga en cuenta que ya hay muchas
extensiones presentes en el fichero php.ini y que slo 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 dnde 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 extensin, guarde el fichero php.ini, reinicie el servidor web y
vuelva a comprobar phpinfo(). La nueva extensin debe ahora tener su propia
seccin.
Resolviendo problemas
Si la extensin no aparece en phpinfo(), compruebe los registro de errores para
conocer qu provoca el problema.
Si est utilizando PHP desde la lnea de comandos (CLI), podr leer directamente
en pantalla el error en la carga de la extensin.
Si est usando PHP en un servidor web, la localizacin y formato de los registros
vera en funcin de su software. Por favor, lea la documentacin de su servidor
web para localizar los registros, dado que esto no lo gestiona el propio ejecutable
de PHP.
Los problemas ms comunes son la ubicacin del fichero DLL, el valor de
" extension_dir" en php.ini, y desajustes de configuracin en tiempo de
compilacin.
Si el problema reside en desajustes de configuracin en tiempo de compilacin,
seguramente se deba a que no se ha descargado el fichero DLL correcto. Pruebe a


descargar de nuevo la extensin con los ajustes correctos. De
nuevo, phpinfo() puede resultar de gran ayuda.
Compilando extensiones PECL compartidas con el comando
pecl
PECL facilita la creacin de extensiones PHP compartidas. Usando el comando
pecl, haga lo siguiente:

$ pecl install extname
Esto descargar el cdigo fuente de extname, lo compilar, e
instalar extname.so en su extension_dir. Ahora se puede
cargar extname.somediante php.ini
Por omisin, 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 tambin instalar una versin en concreto usando esta
variante:

$ pecl install extname-0.1
Nota:
Tras activar la extensin 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 extensin 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 extensin de este tipo, puede
llevar a cabo esta tarea manualmente utilizando las herramientas de construccin
de bajo nivel.
El comando phpize se utiliza para preparar el entorno de compilacin de la
extensin de PHP. En el siguiente ejemplo, el fuente de una extensin se ubica en
un directorio llamado extname:


$ cd extname
$ phpize
$ ./configure
$ make
# make install
En caso de que la instalacin sea correcta, se crear extname.so y se salvar en
el directorio de extensiones de PHP. Quiz necesite ajustar el fichero php.ini y
aadir una lnea extension=extname.so antes de poder usar la extensin.
Si el sistema no contiene el comando phpize, y se estn utilizando paquetes pre-
compilados (como RPM), asegrese de instalar tambin la versin 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 informacin de uso adicional.
php-config
php-config es una utilidad de consola que permite obtener informacin sobre la
configuracin de la instalacin de PHP.
A la hora de compilar extensiones, si se tuvieran varias versiones de PHP
instaladas, se podr especificar sobre cul se va a construir usando el
modificador --with-php-config durante la configuracin, 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 lnea de comandos
Opcin Descripcin
--prefix Prefijo del directorio donde PHP est instalado, p.ej. /usr/local


Opciones de lnea de comandos
Opcin Descripcin
--includes Lista de opciones -I con todos los ficheros includos
--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 omisin las extensiones
--include-dir
Prefijo de directorio donde se buscan por omisin los ficheros de
cabeceras
--php-binary Ruta completa al binario de php CLI o CGI
--php-sapis Muestra todos los mdulos SAPI disponibles
--configure-
options
Opciones de configuracin para recrear la configuracin de la
instalacin actual de PHP
--version Versin de PHP
--vernum Versin de PHP en forma de entero
Compilando extensiones PECL estticamente en PHP
Quiz necesite construir una extensin PECL estticamente en su binario de PHP.
Para hacer esto, necesitar ubicar el fuente de la extensin bajo el directorio php-
src/ext/ e indicarle al sistema de construccin de PHP que regenere su script de
configuracin.
$ 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 configuracin, 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 ms recientes de autoconf, pero no estn
oficialmente soportadas).
Dependiendo de la extensin, utilizar --enable-extname o --with-extname.
Las extensiones que no requieren de bibliotecas externas generalmente utilizan --
enable. Para asegurarse, ejecute el siguiente comando despus de buildconf:

$ ./configure --help | grep extname
El fichero de configuracin
El fichero de configuracin (php.ini) es ledo al arrancar PHP. En las versiones en
que PHP funciona como mdulo de servidor, esto sucede nicamente cuando se
inicia el servidor. En las versiones CGI y CLI, esto ocurre en cada ejecucin.
El fichero php.ini se busca en las siguientes ubicaciones (en orden):
La ubicacin especfica de mdulo SAPI (directiva PHPIniDir en Apache 2,
opcin de lnea de comandos -c en CGI y CLI, parmetro php_inien NSAPI,
variable de entorno PHP_INI_PATH en THTTPD)
La variable de entorno PHPRC. Antes de PHP 5.2.0, esta ubicacin se
comprobaba despus de la clave de registro mencionada ms abajo.
A partir de PHP 5.2.0, se puede establecer la ubicacin 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_L
OCAL_MACHINE\SOFTWARE\PHP\x.y] y[HKEY_LOCAL_MACHINE\S
OFTWARE\PHP\x], donde 'x', 'y' y 'z' significan la versin mayor, menor,
y de edicin de PHP. Si existiera un valor para IniFilePath en cualquiera de
estas claves, la primera en ser encontrada se utilizara como ubicacin del
fichero php.ini (solo en Windows).


[HKEY_LOCAL_MACHINE\SOFTWARE\PHP], valor de IniFilePath (solo
en Windows).
El directorio actual de trabajo (excepto CLI)
El directorio del servidor web (para mdulos SAPI), o el directorio de PHP
(excepto en Windows)
El directorio de Windows (C:\windows o C:\winnt) (para Windows), o la
opcin en tiempo de compilacin --with-config-file-path.
Si existiera el fichero php-SAPI.ini (donde SAPI es la SAPI en uso, por
ejemplo, php-cli.ini o php-apache.ini), se usara 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 raz al arrancar, haciendo que PHP
intente leer php.ini desde el sistema de ficheros raz si existiera.
Nota:
Las variables de entorno se pueden usar en el fichero php.ini
Las directivas de php.ini manejadas por extensiones estn documentadas en la
propia pgina de cada extensin. Hay una lista de directivas del ncleo disponible
en el apndice. Es posible que no todas las directivas de PHP estn documentadas
en el manual: para consultar una lista completa de las directivas disponibles en su
versin de PHP, por favor, lea los comentarios del fichero php.ini. Adicionalmente,
puede encontrar til el ltimophp.ini desde Git.
Ejemplo #1 Ejemplo de php.ini
; todo texto en una lnea tras un punto y coma sin comillas (;) ser ignorado
[php] ; los marcadores de seccin (textos entre corchetes) tambin se ignoran
; Los valores de tipo boolean puede establecerse a:
; true, on, yes
; o false, off, no, none
register_globals = off
track_errors = yes

; se pueden encerrar los strings entre comillas dobles
include_path = ".:/usr/local/lib/php"

; las barras invertidas 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 se incluye soporte para ficheros de configuracin INI a nivel
de directorios. Estos ficheros solo los procesa la SAPI CGI/FastCGI. Esta
funcionalidad deja obsoleta la extensin PECL htscanner. Si est usando Apache,
use los ficheros .htaccess para lograr el mismo efecto.
Adems del fichero php.ini principal, PHP explora cada directorio en busca de
ficheros INI, empezando por el directorio del fichero PHP solicitado, y continuando
hasta el directorio raz de documentos (tal y como est establecido
en $_SERVER['DOCUMENT_ROOT']). En el caso de que el fichero PHP se encuentre
fuera del directorio raz de documentos, slo se explorar su directorio.
En los ficheros INI estilo .user.ini slo se reconocern 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 establece el nombre del fichero que PHP buscar en cada
directorio; si se establece un string vaco, PHP no realizar ninguna bsqueda. El
nombre por omisin es .user.ini.
user_ini.cache_ttl controla con qu frecuencia se releen los ficheros INI de
usuario. El valor por omisin es 300 segundos (5 minutos).
Dnde se puede realizar un ajuste de configuracin
Estos modos determinan cundo y dnde se debe o no asignar una directiva de
PHP, y cada directiva del manual hace referencia a uno de estos modos. Por
ejemplo, algunos ajustes pueden establecerse en scripts de PHP usando ini_set(),
mientras que otros requieren hacerlo en php.ini o enhttpd.conf.
Por ejemplo, el ajuste output_buffering es PHP_INI_PERDIR por tanto no puede
establecerse usando ini_set(). Sin embargo, la
directivadisplay_errors es PHP_INI_ALL por tanto se puede establecer en
cualquier lugar, incluso con ini_set().
Definicin de los modos PHP_INI_*
Modo Significado
PHP_INI_USER
La entrada se puede establecer en scripts de usuario (como
con ini_set()) o en el registro de Windows. Desde PHP 5.3, la
entrada puede ser establecida en .user.ini


Definicin de los modos PHP_INI_*
Modo Significado
PHP_INI_PERDIR
La entrada se puede establecer
en php.ini, .htaccess, httpd.conf o .user.ini (desde PHP 5.3)
PHP_INI_SYSTEM La entrada se puede establecer en php.ini o en httpd.conf
PHP_INI_ALL La entrada se puede establecer en cualquier lugar
Cmo cambiar los ajustes de configuracin
Ejecutar PHP como un mdulo de Apache
Cuando se usa PHP como un mdulo de Apache, se pueden cambiar los ajustes de
configuracin usando directivas en los ficheros de configuracin de Apache
(p.ej. httpd.conf) y en los ficheros .htaccess. Se necesitarn los privilegios
"AllowOverride Options" o "AllowOverride All" para poder hacerlo.
Existen varias directivas de Apache que permiten cambiar la configuracin de PHP
desde los propios ficheros de configuracin de Apache. Para un listado las
directivas que son PHP_INI_ALL, PHP_INI_PERDIR, o PHP_INI_SYSTEM, consulte el
apndice de la Lista de directivas de php.ini.
php_value nombre valor
Establece el valor de la directiva especificada. Slo puede usarse con las
directivas de tipo PHP_INI_ALL y PHP_INI_PERDIR. Para borrar un valor
previamente establecido, use none como valor.
Nota: No use php_value para establecer valores boolean. Debe usarse en su
lugar php_flag (ver ms abajo).
php_flag nombre on|off
Usado para establecer una directiva de configuracin de tipo boolean. Slo
puede usarse con las directivas de tipo PHP_INI_ALL yPHP_INI_PERDIR.
php_admin_value nombre valor
Establece el valor de la directiva especificada. Esto no se puede usar en
ficheros .htaccess. Ninguna directiva establecida conphp_admin_value podr


ser sobrescrita por .htaccess o por ini_set(). Para borrar un valor
establecido previamente use none como valor.
php_admin_flag nombre on|off
Usado para establecer una directiva de configuracin de tipo boolean.
Esto no se puede usar en ficheros .htaccess. Ninguna directiva establecida
con php_admin_flag podr ser sobrescrita por .htaccess o por ini_set().
Ejemplo #1 Ejemplo de configuracin 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>
Precaucin
Las constantes de PHP no existen fuera de PHP. Por ejemplo,
en httpd.conf no se pueden usar constantes de PHP tales
como E_ALL oE_NOTICE para establecer la
directiva error_reporting puesto que no tendrn ningn
significado y se evaluarn como 0. Use en su lugar la mscara
de bits asociada. Estas constantes s pueden ser usadas
en php.ini
Cambiar la configuracin de PHP a travs del registro
de Windows
Cuando se ejecuta PHP en Windows, se pueden modificar los
valores de configuracin a nivel de directorio usando el registro
de Windows. Los valores de configuracin se almacenan en la
clave de registro HKLM\SOFTWARE\PHP\Per Directory
Values, en las subclaves correspondientes a los nombres de
ruta. Por ejemplo, los valores de configuracin para el
directorio c:\inetpub\wwwroot se almacenaran en la
claveHKLM\SOFTWARE\PHP\Per Directory
Values\c\inetpub\wwwroot. Los ajustes para el directorio
estaran activos para cualquier script dentro de este directorio o
en cualquiera de sus subdirectorios. Los valores bajo esta clave
deben tener el nombre de la directiva de configuracin de PHP y
el valor como string. Las constantes de PHP usadas como valor
no sern procesadas. En cualquier caso, nicamente los valores
de configuracin modificables de PHP_INI_USER podrn
establecerse con este mtodo, mientras que los valores
de PHP_INI_PERDIR no.


Otras interfaces a PHP
Independientemente de cmo ejecute PHP, se pueden cambiar
determinados valores de los scripts en tiempo de ejecucin
mediante ini_set(). Consulte la documentacin de la
pgina ini_set() para ms informacin.
Si est interesado en una lista completa de los ajustes de
configuracin en su sistema con sus valores actuales, puede
ejecutar la funcin phpinfo(), y consultar la pgina mostrada.
Puede tambin acceder a los valores de directivas de
configuracin concretas usando ini_get() o get_cfg_var().
Etiquetas de PHP
Cuando PHP interpreta un fichero, busca las etiquetas de apertura y cierre, que
son <?php y ?>, y que indican a PHP dnde empezar y finalizar la interpretacin
del cdigo. Este mecanismo permite a PHP ser incrustado en todo tipo de
documentos, ya que todo lo que est fuera de las etiquetas de PHP ser ignorado
por el intrprete.
PHP tambin permite las etiquetas abreviadas <? y ?> (las cuales estn
desaconsejadas debido a que slo estn disponibles si se habilitan con la
directiva short_open_tag del fichero de configuracin php.ini, o si PHP se configur
con la opcin --enable-short-tags .
Si un fichero contiene cdigo PHP puro, es preferible omitir la etiqueta de cierre de
PHP al final del fichero. Esto impide que se aadan espacios en blanco o nuevas
lneas despus de la etiqueta de cierre de PHP, los cuales pueden causar efectos
no deseados debido a que PHP iniciar la salida del buffer cuando no haba
intencin por parte del programador de enviar ninguna salida en ese punto del
script.
<?php
echo "Hola mundo";

// ... ms cdigo

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
intrprete de PHP, el cual permite que los ficheros de PHP tengan contenido mixto.
Esto permite que PHP sea embebido en documentos HTML para, por ejemplo, crear
plantillas.


<p>Esto va a ser ignorado por PHP y mostrado por el navegador.</p>
<?php echo 'Mientras que esto va a ser interpretado.'; ?>
<p>Esto tambin 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
excepcin de un una nueva lna inmediatamente despus - vase separacin 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 intrprete
determinar el resultado de la condicin antes de tomar una decisin de qu es lo
que tiene que saltar. Vea el siguiente ejemplo.
Usar estructuras con condiciones
Ejemplo #1 Salida avanzada usando condiciones
<?php if ($expresin == true): ?>
Esto se mostrar si la expresin es verdadera.
<?php else: ?>
En caso contrario se mostrar esto.
<?php endif; ?>
En este ejemplo, PHP saltar los bloques donde la condicin no se cumpla, incluso
si estn fuera de las etiquetas de apertura/cierre de PHP, PHP los saltar segn la
condicin, ya que el intrprete saltar por encima de los bloques contenidos dentro
de una condicin que no se cumpla.
Para imprimir bloques de texto grandes, es ms eficiente abandonar el modo
intrprete de PHP que enviar todo el texto a travs de echo o print.
Existen cuatro tipos de pares de etiquetas de apertura y de cierre que se pueden
usar en PHP. Dos de estas, <?php ?> y <script language="php"> </script>,
siempre estn disponibles. Las otras dos son las etiquetas abreviadas y las
etiquetas estilo ASP, que se pueden activar o desactivar desde el fichero de
configuracin php.ini Aunque algunas personas encuentran las etiquetas
abreviadas y las etiquetas estilo ASP ms convenientes, son menos portables y
generalmente no se recomiendan.
Nota:
Observe tambin que si se est incrustando PHP dentro de XML o XHTML
necesitar usar las etiquetas <?php ?> para seguir los estndares.
Ejemplo #2 Etiquetas de apertura y de cierre 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 ms simple, una instrucin de procesado SGML'; ?>
<?= expresin ?> Esto es una forma abreviada de "<? echo expresin ?>"

4. <% echo 'Quiz use de forma opcional etiquetas de estilo ASP'; %>
<%= $variable; # Esto es una forma abreviada de "<% echo . . ." %>
Las etiquetas vistas en los ejemplos uno y dos estn siempre disponibles; el
ejemplo uno es el ms comn y recomendado de los dos.
Las etiquetas abreviadas (ejemplo tres) estn solo disponibles cuando se activan
mediante la directiva short_open_tag del fichero de configuracinphp.ini o si PHP
se configur con la opcin --enable-short-tags .
Las etiquetas de estilo ASP (ejemplo cuatro) estn solo disponibles cuando se
activan mediante la directiva asp_tags del fichero de configuracinphp.ini.
Nota:
Se debe evitar el uso de etiquetas abreviadas cuando se desarrollen aplicaciones o
bibliotecas que estn pensadas para su redistribucin o despliegue en servidores
PHP que no estn bajo su control, porque puede que las etiquetas abreviadas no
estn soportadas en un servidor determinado. Por portabilidad y cdigo
redistribuible, asegrese de no usar etiquetas abreviadas.
Nota:
En PHP 5.2 y anteriores, el intrprete no permite que un fichero contenga
nicamente la etiqueta de apertura <?php. A partir de PHP 5.3 s se permite
siempre que existan uno o ms caracteres espacio en blanco despus de la
etiqueta de apertura.
Nota:
Desde PHP 5.4, la etiqueta abreviada de echo <?= siempre es reconocida y vlida,
sin tener en cuenta la configuracin de short_open_tag.
Separacin de instrucciones
Como en C o en Perl, PHP requiere que las instrucciones terminen en punto y coma
al final de cada sentencia. La etiqueta de cierre de un bloque de cdigo de PHP
automticamente implica un punto y coma; no es necesario usar un punto y coma
para cerrar la ltima lnea de un bloque de PHP. La etiqueta de cierre del bloque
incluir la nueva lnea final inmediata si est presente.


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

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

<?php echo 'Hemos omitido la ltima etiqueta de cierre';
Nota:
La etiqueta de cierre de un bloque de PHP es opcional al final de un fichero, y en
algunos casos es til omitirla cuando se usa include o require, para que no se
produzcan espacios en blanco al final de los ficheros, y as se podrn aadir an
cabeceras para la respuesta posterior. Tambin es prctico si se utiliza la salida del
buffer y no se desean espacios en blanco no deseados al final de las partes
generadas por ficheros includos.
Comentarios
PHP soporta comentarios 'C', 'C++' y etilo consola Unix (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-lnea
y otra lna de comentarios */
echo 'Esto es otra pruba';
echo 'Una prueba final'; # Esto es un comentario estilo consola de una sola
lnea
?>
Los comentarios del estilo "una sola lnea" solo comentan hasta el final de la lnea
o del bloque actual de cdigo de PHP, lo primero que suceda. Esto implica que el
cdigo HTML despus de // ... ?> o # ... ?> SER impreso: ?> sale del modo PHP
y vuelve al modo HTML, por lo que // o # no pueden influir en eso. Si la directiva
de configuracin asp_tags est activada, acta igual que // %> y # %>. Sin
embargo, la etiqueta </script>no sale del modo PHP en un comentario de una
sola lnea.
<h1>Esto es un <?php # echo 'simple';?> ejemplo</h1>
<p>El encabezado anterior dir 'Esto es un ejemplo'.</p>
Los comentarios al estilo 'C' finalizan con el primer */ que se encuentre.
Asegrese de no anidar comentarios al estilo 'C'. Es muy fcil cometer este error
cuando se intenta comentar un bloque grande de cdigo.
<?php
/*


echo 'Esto es una prueba'; /* Este comentario causar un problema*/
*/
?>
Introduccin
PHP soporta ocho tipos primitivos.
Cuatro tipos escalares:
boolean
integer
float (nmero de punto flotante, tambin conocido como double)
string
Dos tipos compuestos:
array
object
Y finalmente dos tipos especiales:
resource
NULL
Este manual introduce tambin algunos pseudo-tipos por razones de legibilidad:
mixed
number
callback
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 slo
por razones histricas.
El tipo de una variable usualmente no es declarado por el programador; en
cambio, es decidido en tiempo de ejecucin por PHP dependiendo del contexto en
el que es usado la variable.
Nota: Para comprobar el tipo y el valor de una expresin, utilice la
funcin var_dump().
Para obtener una representacin legible para humanos del tipo para propsitos de
depuracin, use la funcin 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 conversin de una variable a cierto tipo, puede moldear la variable o
usar la funcin 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 ms
informacin, vea la seccin sobre Manipulacin de Tipos. Las tablas de
comparacin de tipos pueden resultar tiles tambin, ya que muestran ejemplos
de varias comparaciones relacionadas con tipos.
Booleanos
Este es el tipo ms 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 maysculas y minsculas.
<?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 versin 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";
}
?>
Conversin a booleano
Para convertir explcitamente un valor a boolean, use el
moldeamiento (bool) o (boolean). Sin embargo, en la mayora de casos no es
necesario usar el moldeamiento, ya que un valor ser convertido automticamente
si un operador, funcin o estructura de control requiere un argumento tipoboolean.
Vea tambin Manipulacin 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 vaco, y el string "0"
un array con cero elementos
un object con cero variables miembro (slo en PHP 4)
el tipo especial NULL (incluyendo variables no definidas)
objetos SimpleXML creados desde etiquetas vacas
Cualquier otro valor es considerado TRUE (incluyendo cualquier resource).
Advertencia
-1 es considerado TRUE, como cualquier otro nmero 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 nmero del conjunto = {..., -2, -1, 0, 1, 2, ...}.
Consulte tambien:
Entero de longitud arbitraria / GMP
Nmeros de punto flotante
BCMath matemticas de precisin arbitraria
Sintaxis
Los integer pueden ser especificados mediante notacin decimal (base 10),
hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente
precedidos por un signo (- o +).
Los literales integer binarios estn disponibles desde PHP 5.4.0.
Para usar la notacin octal, se antepone al nmero un 0 (cero). Para usar la
notacin hexadecimal, se antepone al nmero un 0x. Para usar la notacin binaria,
se antepone al nmero un 0b.
Ejemplo #1 Enteros literales
<?php
$a = 1234; // nmero decimal
$a = -123; // un nmero negativo
$a = 0123; // nmero octal (equivalente a 83 decimal)
$a = 0x1A; // nmero 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 tamao de un integer depende de la plataforma, aunque un valor mximo de
aproximadamente dos mil millones es el valor usual (para 32 bits con signo). Las
plataformas de 64-bits normalmente tienen un valor mximo de aproximadamente
9E18. PHP no admite integers sin signo. El tamao de un integer puede ser
determinado mediante la constante PHP_INT_SIZE y el valor mximo 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 dgito incorrecto (por ejemplo 8 o 9), el resto del
nmero se ignora.
Ejemplo #2 Octal raros
<?php
var_dump(01090); // 010 octal = 8 decimal
?>
Desbordamiento de enteros
Si PHP encuentra un nmero fuera de los lmites de un integer, se interpretar
como un float en su lugar. Tambien, una operacin cuyo resultado es un nmero
fuera de los lmites 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 divisin 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
funcin 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)
?>
Conversin a enteros
Para convertir explicitamente un valor a integer, se puede emplear
tanto (int) como (integer). Sin embargo, la mayora de las veces la conversin
no es necesaria, ya que un valor es convertido de forma automtica cuando un
operador, funcin o estructura de control necesite un argumento del tipo integer.
Un valor tambien puede ser convertido a integer mediante la funcin intval().
Consulte tambin la manipulacin de tipos.
Desde booleanos
FALSE produce 0 (cero), y TRUE produce 1 (uno).
Desde nmeros de punto flotante
Cuando se convierte de un float a un integer, el nmero ser redondeado hacia
cero.
Si el float esta por debajo de los lmites de un integer (normalmente +/- 2.15e+9
= 2^31 en plataformas de 32 bits y +/- 9.22e+18 = 2^63en plataformas de 64
bits), el resultado es indefinido, debido a que float no tiene la precisin suficiente
para ofrecer el resultado como un integerexacto. No se mostrar ninguna
advertencia, ni siquiera un aviso cuando esto ocurre!


Advertencia
Nunca se debe convertir una fraccin 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 precisin de float
Desde cadenas
Consulte Conversin de cadenas a nmeros
Desde otros tipos
Precaucin
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.
Nmeros de punto flotante
Los nmeros de punto flotante (tambin conocidos como "flotantes", "dobles" o
"nmeros 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 tamao de un flotante depende de la plataforma, aunque un valor comn
consiste en un mximo de ~1.8e308 con una precisin de aproximadamente 14
dgitos decimales (lo que es un valor de 64 bits en formato IEEE).
Advertencia


Precisin del punto flotante
Los nmeros de punto flotante tienen una precisin limitada. Aunque depende del
sistema, PHP tpicamente utiliza el formato de doble precisin IEEE 754, el cual
dar un error relativo mximo por aproximacin del orden de 1.11e-16. Las
operaciones aritmticas elementales no podrn dar grandes errores y por
supuesto, los errores por propagacin deben ser considerados cuando varias
operaciones son compuestas.
Adicionalmente, los numeros racionales que son representables exactamente como
nmeros de punto flotante en base 10, como 0.1 o 0.7, no tienen una
representacin exacta como nmeros de punto flotante en base 2, el cual es usado
internamente, sin importar el tamao de la mantisa. Por lo tanto, no se puede
convertir en sus contrapartes binarias internas sin una pequea prdida de
precisin. 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 representacin interna ser algo as
como7.9999999999999991118....
As que nunca se confa en resultados de nmeros flotantes hasta el ltimo dgito y
no se comparan nmeros de punto flotante directamente para igualdad. Si es
necesaria una mejor precisin, estn disponibles las funciones matemticas de
precisin arbitraria y las funciones gmp.
Para una explicacin "simple", vase la gua de punto flotante que tambin se
titula "Por qu no suman mis nmeros?"
Conversin a flotante
Para ms informacin sobre las conversiones de string a float, vea Conversin de
cadenas a nmeros. Para valores de otros tipos, la conversin es la misma que si
el valor hubiese sido convertido a integer y luego a float. Vea Conversin a
entero para ms informacin. 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 problemtico, 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 lmite
superior en el error relativo debido al redondeo. Este valor se conoce como el
epsilon de la mquina o unidad de redondeo y es la menor diferencia aceptable en
los clculos.
$a y $b son iguales a 5 dgitos de precisin.


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

if(abs($a-$b) < $epsilon) {
echo "true";
}
?>
NaN
Algunas operaciones numricas pueden resultar en un valor representado por la
constante NAN. Este resultado representa un valor no definido o no representable
mediante clculos de coma flotante. Cualquier comparacin, ya sea poco rgida o
estricta, de esta valor con cualquier otro valor, incluido l mismo tenfr un
resultado de FALSE.
Ya que NAN representa cualquier nmero de diferentes valores, NAN no debera
compararse con otros valores, incluido l mismo; en su lugar debera comprobarse
usando la funcin 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 tamao.
Sintaxis
Un string literal puede ser especificado de cuatro formas diferentes:
comillas simples
comillas dobles
sintaxis heredoc
sintaxis nowdoc (desde PHP 5.3.0)
Comillas simples
La manera ms 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 sern tratadas como una barra invertida literal:
esto significa que otras secuencias de escape que se puedan utilizar, tales


como \r or \n, sern 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 expandirn cuando estn
incluidas dentro de un string con comillas simples.
<?php
echo 'Esto es una cadena sencilla';

echo 'Tambien puede incluir nuevas lneas 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 lnea
echo 'Esto no se expandir: \n una nueva lnea';

// Resultado: Las variables $tampoco se $expandiran
echo 'Las variables $tampoco se $expandiran';
?>
Comillas dobles
Si un string est encerrado entre comillas dobles ("), PHP interpretar ms
sentencias de escape como caracteres especiales:
Caracteres escapados
Sentencia Significado
\n avance de lnea (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)


Caracteres escapados
Sentencia Significado
\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 pgina (FF o 0x0C (12) en ASCII) (desde PHP 5.2.5)
\\ barra invertida
\$ signo del dlar
\" comillas dobles
\[0-7]{1,3}
la secuencia de caracteres que coincida con la expresin regular es un caracter
en notacin octal
\x[0-9A-Fa-
f]{1,2}
la secuencia de caracteres que coincida con la expresin regular es un caracter
en notacin hexadecimal
Al igual que en la delimitacin 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 caracterstica ms importante de entrecomillar un string mediante comillas
dobles es el hecho que los nombres de las variables son expandidas.
Consulte string parsing para ms detalles.
Heredoc
Una tercera forma de delimitar un string es mediante la sintaxis heredoc: <<<.
Despus de este operador, se deber ofrecer un identificador y despus una nueva
lnea. A continuacin va el propio string, y para cerrar la notacin se pone el
mismo identificador.
El identificador de cierre debe empezar en la primera columna de la nueva lnea.
Asimismo, el identificador debe seguir las mismas reglas de nomenclatura de las
etiquetas en PHP: debe contener solo caracteres alfanumricos y guiones bajos, y
debe empezar con un caracter alfabtico o un guin bajo.


Advertencia
Es muy importante sealar que la lnea con el identificador de cierre no debe
contener ningn caracter, exceptoposiblemente un punto y coma (;). Esto
significa en particular que el identificador no debe usar sangra, y que no deben
existir ningn espacio ni tabulacin antes o despus del punto y coma. Es muy
importante darse cuenta que el primer caracter antes del identificador de cierre
debe ser un salto de lnea definida por el sistema operativo local. En los sistemas
UNIX sera \n, al igual que en Mac OS X. El delimitador de cierre (posiblemente
seguido de un punto y coma) tambin debe ser seguido de un salto de lnea.
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 ningn identificador de cierre antes del final del fichero, se producir
un error de anlisis en la ltima lnea.
Tampoco se puede emplear Heredocs para inicializar las propiedades de una clase.
Desde PHP 5.3, esta limitacin solo concierne a los heredocs que contengan
variables.
Ejemplo #1 Ejemplo no vlido
<?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 lneas
empleando la sintaxis heredoc.
EOD;

/* Un ejemplo ms 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' mayscula: \x41
EOT;
?>
El resultado del ejemplo sera:
Mi nombre es "MiNombre". Estoy escribiendo un poco de Foo.
Ahora, estoy escribiendo un poco de Bar2.
Esto debe mostrar una 'A' mayscula: A
Tambien se puede emplear la sintaxis Heredoc para pasar datos como argumento
de una funcin:
Ejemplo #3 Ejemplo de Heredoc como argumento
<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
Desde PHP 5.3.0 es posible inicializar variables estticas y propiedades/constantes
de clase mediante la sintaxis Heredoc:
Ejemplo #4 Usando Heredoc para inicializar valores estticos
<?php
// Variables estticas
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 anloga a la heredoc,
pero no se realiza ningn anlisis dentro de nowdoc. Esta construccin es ideal
para embeber cdigo PHP o grandes fragmentos de texto sin necesidad de
escaparlo. Comparte algunas caractersticas comunes con la construccin
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 tambin 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 lneas
empleando la sintaxis nowdoc.
EOD;



/* Un ejemplo ms 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' mayscula: \x41
EOT;
?>
El resultado del ejemplo sera:
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' mayscula: \x41
Nota:
A diferencia de heredoc, nowdoc puede ser usado en cuaquier contexto de datos
estticos. Un ejemplo tpico es la inicializacin de propiedades o constantes en una
clase:
Ejemplo #7 Ejemplo de datos estticos
<?php
class foo {
public $bar = <<<'EOT'
bar
EOT;
}
?>
Nota:
El soporte de Nowdoc se aadi en PHP 5.3.0.


Anlisis 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
ms 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 mnimo
esfuerzo.
La sintaxis compleja puede ser reconocida por las llaves que encierran la
expresin.
Sintaxis simple
Si se encuentra un signo de dlar ($), el analizador vidamente coger el mayor
nmero de smbolos para formar un nombre de variable vlido. Encerrar el nombre
de la variable entre llaves permite especificar explcitamente el final del nombre.
<?php
$jugo = "manzana";

echo "El tom algo de jugo de $jugo.".PHP_EOL;
// Invlido. "s" es un caracter vlido para un nombre de variable, pero la varia
ble es $jugo.
echo "El tom algo de jugo hecho de $jugos.";
?>
El resultado del ejemplo sera:
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" => "prpura");

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 sera:
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 prpura.
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 ms 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
representacin de string puede ser incluido a travs de esta sintaxis. Simplemente
se escribe la expresin 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 ms
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 centmetros de lado.";

// Funciona, claves entre comillas slo funcionan utilizando la sintaxis de llav
es
echo "Esto funciona: {$arr['key']}";

// Funciona
echo "Funciona: {$arr[4][3]}";

// No funciona por la misma razn que $foo[bar] es incorrecto fuera de una caden
a.
// En otras palabras, funcionara pero solo porque PHP primero busca por una con
stante
// llamada foo; un error del nivel E_NOTICE (constante no definida) puede ser la
nzado.
echo "No funciona: {$arr[foo][3]}";

// Funciona. Cuando se usan arrays multidimensionales, siempre emplee llaves enc
errando
// 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 \$objec
t->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()}";
?>
Tambin 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 sera:
Soy bar.
Soy bar.
Nota:
Funciones, llamadas a mtodos, variables estticas 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 mtodos, constantes o variables estticas 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 posicin de caracter deseado (en base a la posicin 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 ms de un caracter.
Nota: Los String tambin pueden accederse utilizando llaves, como en $str{42},
para el mismo propsito.
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 vaca. Slo se emplea el primer carcter de
un string asignado. La asignacin de un string vaco asigna un byte NULL.
Advertencia
Internamente, las cadenas de PHP son arrays de bytes. Por tanto, acceder o
modificar una cadena utilizando los corchetes de array no es seguro con caracteres
multi-byte, y slo debe hacerse con cadenas en codificaciones de un solo bit como
ISO-8859-1.
Ejemplo #9 Algunos ejemplos de cadenas
<?php
// Obtencin del primer caracter de una cadena
$str = 'Esto es un test.';
$first = $str[0];

// Obtencin del tercer caracter de una cadena
$third = $str[2];

// Obtencin del ltimo caracter de una cadena
$str = 'Esto sigue siendo un test.';
$last = $str[strlen($str)-1];

// Modificacin del ltimo caracter de una cadena
$str = 'Mira el mar';
$str[strlen($str)-1] = 'e';

?>
A partir de PHP 5.4 los ndices de cadenas tienen que ser enteros o enteros en
forma de cadena, si no se lanzar una advertencia. Anteriormente un ndice
como "foo" era convertido de manera silenciosa a 0.
Ejemplo #10 Diferencias entre PHP 5.3 y PHP 5.4
<?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)
Nota:
El acceso a variables de otros tipos (sin incluir arrays u objetos implementando las
interfaces apropiadas) utilizando [] o {} silenciosamente retorna NULL.
Nota:
PHP 5.5 aadi soporte para acceder a caracteres dentro de cadenas literales
utilizando [] o {}.


Funciones y operadores tiles
Los string pueden ser concatenados empleando el operador '.' (punto). Fjese que
el operador '+' (suma) no servir para concatenar. Consulteoperadores de
string para ms informacin.
Hay una serie de funciones tiles para la manipulacin de string.
Consulte la seccin 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 bsqueda y sustitucin.
Tambien existen funciones para cadenas URL, y funciones para
encriptar/desencriptar cadenas (mcrypt y mhash).
Finalmente, tambien existen las funciones para el tipo caracter.
Conversin a cadena
Un valor puede convertirse a una string mediante el forzado (string) o la
funcin strval(). La conversin automtica a string tiene lugar en el contexto de
una expresiin 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 Manipulacin de tipos pueden ayudarle a enterderlo con
ms claridad. Consulte tambien la funcinsettype().
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 vaca). Esto permite la
conversin en ambos sentidos entre los valores de los tipos boolean y string.
Un integer o float es convertido en un string representando textualmente el
nmero (incluyendo la parte exponencial para los floats. Los nmeros de punto
flotante pueden ser convertidos mediante la notacin exponencial (4.1E+6).
Nota:
El caracter para el punto decimal se define en el script de configuracin regional
(categora LC_NUMERIC). Consulte la funcin 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 unarray. Para
ver un elemento individualmente, utilice una construccin 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 depuracin, mire los parrafos
siguientes. Para obtener el nombre de la clase del objeto emple la
funcin get_class(). A partir de PHP 5 se puede emplear el mtodo__toString.


Los resources siempre se convierten en strings mediante la estructura "Resource
id #1", donde 1 es el nmero nico asignado al resource por PHP en tiempo de
ejecucin. No debe confiar en esta estructura, ya que est sujeto a cambios. Para
obtener el tipo del resource emplee la funcinget_resource_type().
NULL siempre es convertido a una cadena vaca.
Como se ha indicado anteriormente, la conversin directa de
un array, object o resource a un string no proporciona informacin til acerca del
valor, ms all de su tipo. Consulte las funciones print_r() y var_dump() para
obtener maneras ms efectivas de inspeccionar el contenido de estos tipos.
La mayora de los valores de PHP pueden ser convertidos a strings para su
almacenamiento permanente. Este mtodo se denomina serializacin, y es
realizado mediante la funcin serialize(). Si la mquina PHP est contruida con
soporte de WDDX, los valores de PHP tambien pueden ser serializacos como texto
XML correctamente formateado.
Conversin de cadenas a nmeros
Cuando una string es evaluada en un contexto numrico, el valor resultante y el
tipo se determina como se explica a continuacin.
Si el string no contiene ninguno de los caracteres '.', 'e', o 'E' y el valor numrico
est entre los lmites del tipo entero (como se define enPHP_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 nmero
vlido, ste ser el valor usado. De otra forma, el valor ser 0 (cero). Se considera
nmero vlido a un signo opcional, seguido de uno o ms dgitos (opcionalmente
puede contener un punto decimal), seguido de un exponente opcional. El
exponente es una 'e' o 'E' seguida de uno o ms dgitos.
<?php
$foo = 1 + "10.5"; // $foo es float (11.5)
$foo = 1 + "-1.3e3"; // $foo es float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo es integer (1)
$foo = 1 + "bob3"; // $foo es integer (1)
$foo = 1 + "10 Small Pigs"; // $foo es integer (11)
$foo = 4 + "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 ms informacin sobre esta conversin, consulte la pgina del manual UNIX
correspondiente a strtod(3).
Para probar cualquiera de los ejemplos en esta seccin, copie y pegue los ejemplos
e incluya la siguiente lnea para ver que est ocurriendo:


<?php
echo "\$foo==$foo; tipo es " . gettype ($foo) . "<br />\n";
?>
No espere obtener el cdigo de un caracter convirtiendolo a un entero, como
ocurre en C. Emplee las funciones ord() y chr() para convertir entre cdigo 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 informacin sobre cmo traducir
esos bytes, relegando esa tarea al programador. No existe ninguna limitacin
sobre el valor que puede contener un string; en concreto, est permitido colocar
un bytes con valor 0 (bytes NUL) en cualquier posicin del string (existen
algunas funciones, marcadas en este manual como que no utilizan "modo binario
seguro", podran 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 ledo a partir de un socket de red devolvern
strings.
Dado que PHP no obliga a utilizar ninguna condificacin en particular, uno podra
preguntarse cmo 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 representacin
posible? La resuesta es que un string se codifica en cualesquiera forma en que
estuviera el fichero de cdigo. Por tanto, si un fichero de cdigo 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 cdigo
podra estar escrito en cualquier codificacin (declarada explcitamente o bien
detectada) para despus convertirse a una determinada codificacin interna, que
ser entonces la codificacin usada para los textos literales. Tenga presente que
existen algunas limitaciones sobre la codificacin del cdigo fuente (o en la
codificacin internal, si Zend Multibyte estuviera habilitado) esto suele significar
que se debe usar uan codificacin 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, podra generar problemas.
Por supuesto, para poder ser til, las funciones que operen con texto podrn partir
de unos supuestos sobre cmo 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 codificacin
simple de bytes, por lo que no necesitan interpretar estos bytes como
caracteres especficos. 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 codificacin del string, si bien es posible
que tengan una codificacin predeterminada. Este es el caso
dehtmlentities() y la mayora de funciones de la extensin 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
slo se pueden usar con codificaciones de un byte, siempre y cuando la
codificacin coincida con la de la local. Por ejemplostrtoupper("") podra
devolver "" si las locales estn 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 podra, o no, devolverse
corrupto, en funcin de las locales en uso.
Por ltimo, podrn tambien asumir que se utiliza una codificacin en
particular, usualmente UTF-8. Este es el caso de la mayora de las funciones
de la extensin intl y de la extensin PCRE (en este ltimo caso, slo
cuando se utiliza el modificador u). Debido a su propsito especial, la
funcin utf8_decode() asume una codificacin UTF-8, mientras que la
funcin utf8_encode() asume una codificacin 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
slo el principio. No importa qu funciones incorpore el lenguaje; es primordial
conocer la especificacin Unicode. Por ejemplo, un programa que asuma que slo
hay maysculas y minsculas estar haciendo una suposicin 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 implementacin de un mapa), diccionario, coleccin, pila, cola, y
posiblemente ms. Ya que los valores de un array pueden ser otros arrays, rboles
y tambin son posibles arrays multidimensionales.
Una explicacin sobre tales estructuras de datos est fuera del alcance de este
manual, pero encontrar al menos un ejemplo de cada uno de ellos. Para ms
informacin, consulte la extensa literatura que existe sobre este amplio tema.
Sintaxis
Especificacin con array()
Un array puede ser creado usando el constructor del lenguaje array(). ste toma
un cierto nmero de parejas clave => valor como argumentos.


array(
clave => valor,
clave2 => valor2,
clave3 => valor3,
...
)
La coma despus del elemento del array es opcional y se puede omitir. Esto
normalmente se hace para arrays de una sola lnea, esto es, es
preferible array(1, 2) que array(1, 2, ). Por otra parte, para arrays multilnea, la
coma final se usa comnnmente, ya que permite la adicin sencilla de nuevos
elementos al final.
A partir de PHP 5.4 tambin 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.
Adems, los siguientes moldeados de tipo en la clave producir:
Strings que contienen integers vlidos sern 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 nmero integer decimal
vlido.
Floats tambin sern 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, tambin, p.e.j. la clave true en realidad
ser almacenada como 1 y la clave false como 0.
Null ser moldeado a un string vaco, 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.


Si varios elementos en la declaracin del array usan la misma clave, slo la ltima
ser usada y los dems son sobrescritos.
Ejemplo #2 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 sera:
array(1) {
[1]=>
string(1) "d"
}
Como todas las claves en el ejemplo anterior se convierten en 1, los valores sern
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 #3 Claves mixtas integer y string
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
El resultado del ejemplo sera:
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 ms grande utilizada anteriormente.
Ejemplo #4 Arrays indexados sin clave
<?php
$array = array("foo", "bar", "hallo", "world");
var_dump($array);
?>
El resultado del ejemplo sera:
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hallo"
[3]=>
string(5) "world"
}
Es posible especificar la clave slo para algunos de los elementos y dejar por fuera
a los dems:
Ejemplo #5 Claves no en todos los elementos
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
El resultado del ejemplo sera:
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 #6 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 sera:
string(3) "bar"
int(24)
string(3) "foo"
Nota:
Tanto los corchetes como las llaves pueden ser utilizadas de forma indiferente para
acceder a elementos de un array (por ejemplo: $array[42] and $array{42} harn
lo mismo en el ejemplo anterior).
A partir de PHP 5.4 es posible hacer referencia al array del resultado de una
llamada a una funcin o mtodo directamente. Antes slo era posible utilizando
una variable temporal.
Desde PHP 5.5 es posible hacer referencia directa un elemento de un array literal.
Ejemplo #7 Hacer referencia al resultado array de funciones
<?php
function getArray() {
return array(1, 2, 3);
}

// 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.
Creacin/modificacin con sintaxis de corchete
Un array existente puede ser modificado al definir valores explcitamente en ste.
Esto se realiza mediante la asignacin de valores al array, especificando la clave
en corchetes. La clave tambin se puede omitir, resultando en un par de corchetes
vacos ([]).
$arr[clave] = valor;
$arr[] = valor;
// clave puede ser un integer o string
// valor puede ser cualquier valor de cualquier tipo
Si $arr an no existe, se crear, as que esto es tambin una forma alternativa de
crear un array. Sin embargo, esta prctica es desaconsejada ya que si $arr ya
contiene algn valor (p.ej. un string de una variable de peticin), entonces este
valor estar en su lugar y [] puede significar realmente el operador de acceso a
cadenas. Siempre es mejor inicializar variables mediante una asignacin 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
funcin unset() en ste.
<?php
$arr = array(5 => 1, 12 => 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
mximo de los ndices integer existentes, y la nueva clave ser ese valor mximo
ms 1 (aunque al menos 0). Si todava no existen ndices integer, la clave
ser 0 (cero).
Tenga en cuenta que la clave integer mxima utilizada para ste no es necesario
que actualmente exista en el array. sta slo debe haber existido en
el array en algn momento desde la ltima vez que el array fu re-indexado. El
siguiente ejemplo ilustra este comportamiento:
<?php
// Crear un array simple.
$array = array(1, 2, 3, 4, 5);
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 sera:
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 nmero de funciones tiles para trabajar con arrays. Vase la
seccin funciones de array.
Nota:
La funcin 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 funcin array_values().
<?php
$a = array(1 => 'uno', 2 => 'dos', 3 => '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 especficamente para arrays. sta provee
una manera fcil 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 comn encontrar este tipo de sintaxis en scripts viejos:
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
Esto est mal, pero funciona. La razn es que este cdigo tiene una constante
indefinida (bar) en lugar de un string ('bar' - observe las comillas). Puede que en
el futuro PHP defina constantes que, desafortunadamente para tales tipo de
cdigo, tengan el mismo nombre. Funciona porque PHP automticamente convierte
un string puro (un string sin comillas que no corresponde con ningn smbolo
conocido) en un string que contiene elstring puro. Por ejemplo, si no se ha definido
una constante llamada bar, entonces PHP reemplazar su valor por
el string 'bar' y usar ste ltimo.
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(1, 2);
$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 sera:
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
Ms 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 tambin 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 con
stantes 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 excepcin, 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 intrprete como:


// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Esto por supuesto se aplica tambin al uso de superglobales en cadenas
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";

// La concatenacin es otra opcin
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 sern inmediatamente
visibles. Por omisin, error_reporting se encuentra configurado para no mostrarlos.
Tal y como se indica en la seccin de sintaxis, lo que existe entre los corchetes
cuadrados ('[' y ']') debe ser una expresin. Esto quiere decir que cdigo como el
siguiente funciona:
<?php
echo $arr[somefunc($bar)];
?>
Este es un ejemplo del uso de un valor devuelto por una funcin como ndice del
array. PHP tambin 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 tambin un identificador vlido, 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 algn momento en el futuro, puede que el equipo de PHP quiera usar otra
constante o palabra clave, o una constante proveniente de otro cdigo 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 vlido no
rodear los ndices de array con comillas, as que "$foo[bar]"es vlido. Consulte
los ejemplos anteriores para ms detalles sobre el porqu, as como la seccin
sobre procesamiento de variables en cadenas.
Conversin 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 A {
private $A; // Este campo se convertir en '\0A\0A'
}

class B extends A {
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 vaco.
Comparacin
Es posible comparar arrays con la funcin array_diff() y mediante operadores de
arrays.
Ejemplos
El tipo array en PHP es bastante verstil. 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';

// Despus de que se ejecute el cdigo, $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 #8 Uso de array()
<?php
// Array como mapa de propiedades
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);

// Keys estrictamente numricas
$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 mximo era 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // el valor 10 ser reemplazado por 12
);

// array vaco
$empty = array();
?>
Ejemplo #9 Coleccin
<?php
$colors = array('rojo', 'azul', 'verde', 'amarillo');

foreach ($colors as $color) {
echo "Le gusta el $color?\n";
}

?>
El resultado del ejemplo sera:
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,
pasndolos por referencia. Las versiones anteriores necesitan una solucin
alternativa:
Ejemplo #10 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 sera:
Array
(
[0] => ROJO
[1] => AZUL
[2] => VERDE
[3] => AMARILLO
)
Este ejemplo crea un array con base uno.
Ejemplo #11 ndice con base 1
<?php
$firstquarter = array(1 => 'Enero', 'Febrero', 'Marzo');
print_r($firstquarter);
?>
El resultado del ejemplo sera:
Array
(
[1] => 'Enero'
[2] => 'Febrero'
[3] => 'Marzo'
)
Ejemplo #12 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 seccin sobre funciones de arrays para ms informacin. La
funcin count() puede ser usada para contar el nmero de elementos en un array.
Ejemplo #13 Ordenado de un array
<?php
sort($files);
print_r($files);
?>
Dado que el valor de un array puede ser cualquier cosa, tambin puede ser
otro array. De esta forma es posible crear arrays recursivas y multi-dimensionales.


Ejemplo #14 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",
5 => "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 asignacin de arrays siempre involucra la copia de valores. Use el operador de
referencia para copiar un array por referencia.
<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 ha cambiado,
// $arr1 sigue siendo array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4; // ahora $arr1 y $arr3 son iguales
?>
Objetos
Inicializacin de Objetos
Para crear un nuevo object, utilice la declaracin new para instanciar una clase:


<?php
class foo
{
function do_foo()
{
echo "Doing foo.";
}
}

$bar = new foo;
$bar->do_foo();
?>
Para una descripcin completa, vea el captulo Clases y Objetos.
Conversin 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 vaca.
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 apndice para un listado de todas estas funciones y los
tipos resource correspondientes.
Vea tambin la funcin get_resource_type().
Conversin a recurso
Dado que las variables resource contienen gestores especiales a archivos abiertos,
conexiones con bases de datos, reas de pintura de imgenes y cosas por el estilo,
la conversin a tipo resource carece de sentido.
Liberacin 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 automticamente, y es


liberado por el recolector de basura. Por esta razn, rara vez se necesita liberar la
memoria manualmente.
Nota: Los enlaces persistentes con bases de datos son una excepcin a esta regla.
Ellos no son destruidos por el recolector de basura. Vea tambin la seccin
sobre conexiones persistentes para ms informacin.
NULO
El valor especial NULL representa una variable sin valor. NULL es el nico valor
posible del tipo null.
Una variable es considerada null si:
se le ha asignado la constante NULL.
no se le ha asignado un valor todava.
se ha destruido con unset().
Sintaxis
No hay ms que un valor de tipo null, y es la constante NULL insensible a
maysculas/minsculas.
<?php
$var = NULL;
?>
Vase tambin las funciones is_null() y unset().
La conversin a NULL
Convertir una variable a null usando (unset) $var no eliminar la variable ni
destruir su valor. Slo retornar un valor NULL.
Llamadas de retorno
Las llamadas de retorno se pueden indicar con el tipo callable a partir de PHP 5.4.
Esta documentacin utiliz la informacin del tipo callback con el mismo propsito.
Algunas funciones como call_user_func() o usort() aceptan como parmetro
funciones de llamada de retorno definidas por el usuario. Las funciones de
llamadas de retorno no slo pueden ser funciones simples, sino tambin mtodos
de un object, incluyendo mtodos de clase estticos.


Pasar una funcin de llamada de retorno
Una funcin de PHP se pasa por su nombre como un string. Se puede utilizar
cualquier funcin nativa o definida por el usuario, exceptuando contrucciones del
lenguaje, tales
como: array(), echo, empty(), eval(), exit(), isset(), list(), print o unset().
Un mtodo de un object instanciado se pasa como un array que contiene
un object en el ndice 0 y el nombre del mtodo en el ndice 1.
Los mtodos de clase estticos tambin se pueden pasar sin instanciar
un object de dicha clase, pasando el nombre de la clase en lugar de unobject en el
ndice 0. A partir de PHP 5.2.3, tambin es posible
pasar 'NombreDeClase::nombreDeMetodo'.
Adems de las funciones definidas por el usuario normales, tambin se puede
utilizar la funcin create_function() para crear funciones de llamadas de retorno
annimas. A partir de PHP 5.3.0 tambin es posible pasar una clausura a un
parmetro de una llamada de retorno.
Ejemplo #1 Ejemplos de funciones de llamadas de retorno
<?php

// Un ejemplo de funcin de llamada de retorno
function mi_funcin_de_llamada_de_retorno() {
echo 'hola mundo!';
}

// Un ejemplo de mtodo de llamada de retorno
class MiClase {
static function miMtodoDeLlamadaDeRetorno() {
echo 'Hola Mundo!';
}
}

// Tipo 1: Llamada de retorno simple
call_user_func('mi_funcin_de_llamada_de_retorno');

// Tipo 2: Llamada a un mtodo de clase esttico
call_user_func(array('MiClase', 'miMtodoDeLlamadaDeRetorno'));

// Tipo 3: Llamada al mtodo de un objeto
$obj = new MiClase();
call_user_func(array($obj, 'miMtodoDeLlamadaDeRetorno'));

// Tipo 4: Llamada a un mtodo de clase esttico (A partir de PHP 5.2.3)
call_user_func('MiClase::miMtodoDeLlamadaDeRetorno');



// Tipo 5: Llamada a un mtodo de clase esttico relativo (A partir de PHP 5.3.0
)
class A {
public static function quin() {
echo "A\n";
}
}

class B extends A {
public static function quin() {
echo "B\n";
}
}

call_user_func(array('B', 'parent::quin')); // A
?>
Ejemplo #2 Ejemplo de llamada de retorno utilizando una clausura
<?php
// Nuestra clausura
$doble = function($a) {
return $a * 2;
};

// Este es nuestro rango de nmeros
$nmeros = range(1, 5);

// Usar la clausura como llamada de retorno para
// doblar el valor de cada elemento de nuestro
// rango
$nmeros_nuevos = array_map($doble, $nmeros);

print implode(' ', $nmeros_nuevos);
?>
El resultado del ejemplo sera:
2 4 6 8 10
Nota: En PHP 4 era necesario usar una referencia para crear una llamada de
retorno que apuntara al object real, y no a una copia del mismo. Para ms
detalles, vase la Explicacin de las referencias.
Nota:
Las funciones de retorno de llamada que se registran con funciones
como call_user_func() y call_user_func_array() no se llamarn si se produce una
excepcin en la funcin de retorno previa.


Pseudo tipos y variables usadas en esta documentacin
mixed
mixed indica que un parmetro puede aceptar mltiples tipos (pero no
necesariamente todos).
gettype(), por ejemplo, puede aceptar todos los tipos PHP, mientras
que str_replace() slo acepta strings y arrays.
number
number indica que un parmetro puede ser tanto un integer como un float.
Llamada de retorno
Los pseudo-tipos callback fueron usados en est documentacin 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 parmetros significa que la funcin no acepta ningn
parmetro.
...
$... en el prototipo de funciones significa and so on. Este nombre de variable se
usa cuando una funcin puede tomar un nmero infinito de argumentos.
Manipulacin de tipos
PHP no requiere (ni soporta) la definicin explicita de tipos en la declaracin 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 conversin de tipos automtica 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 entoncesinteger. Tenga en cuenta
que esto no implica que se cambien los tipos de los propios operandos; el nico
cambio es en como se evalan los operandos y en el tipo de expresin 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 = 5 + "10 Cerditos pequeitos"; // $foo es integer (15)
$foo = 5 + "10 Cerdos pequeos"; // $foo es integer (15)
?>
Si considera confusos los ltimos dos ejemplos anteriores, consulte Conversin de
cadenas a nmeros.
Para forzar a que una variable sea evaluada como un determinado tipo, consulte la
seccin Forzado de tipos. Para cambiar el tipo de variable, consulte la
funcin settype().
Para probar cualquiera de los ejemplos de esta seccin, utilice la
funcin var_dump().
Nota:
El comportamiento de la conversin automtica 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 dearrays,
los siguientes ejemplos son vlidos 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 seccin Acceso a cadenas mediante caracteres para ms informacin.
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 parntesis 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 estn 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 aadidos en PHP 5.2.1
Fjese que se permiten las tabulaciones y espacios dentro de los parntesis, 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 ms informacin, consulte estas secciones:
Conversin a booleano
Conversin a entero
Conversin a nmero de punto flotante
Conversin a cadena


Conversin a array
Conversin a objecto
Conversin a recurso
Conversin a NULL
Tablas de comparacin de tipos
Variables
Conceptos bsicos
En PHP las variables se representan con un signo de dlar seguido por el nombre
de la variable. El nombre de la variable es sensible a minsculas y maysculas.
Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un
nombre de variable vlido tiene que empezar con una letra o un carcter de
subrayado (underscore), seguido de cualquier nmero de letras, nmeros y
caracteres de subrayado. Como expresin regular se podra expresar como: '[a-
zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Nota: Para los propsitos 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.
Sugerencia
Vea tambin Guia de Entorno de Usuario para Nombres.
Para ms informacin 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'; // invlido; comienza con un nmero
$_4site = 'aun no'; // vlido; comienza con un carcter de subrayado
$tyte = 'mansikka'; // vlido; '' es ASCII (Extendido) 228
?>
De forma predeterminada, las variables siempre se asignan por valor. Esto
significa que cuando se asigna una expresin a una variable, el valor completo de
la expresin original se copia en la variable de destino. Esto quiere decir que, por
ejemplo, despus de asignar el valor de una variable a otra, los cambios que se
efecten a una de esas variables no afectar a la otra. Para ms informacin sobre
este tipo de asignacin, veaExpresiones.


PHP tambin 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 cdigo produce la salida 'Mi nombre es Bob'
dos veces:
<?php
$foo = 'Bob'; // Asigna el valor 'Bob' a $foo
$bar = &$foo; // Referenciar $foo va $bar.
$bar = "Mi nombre es $bar"; // Modifica $bar...
echo $bar;
echo $foo; // $foo tambin se modifica.
?>
Algo importante a tener en cuenta es que slo las variables con nombre pueden
ser asignadas por referencia.
<?php
$foo = 25;
$bar = &$foo; // Esta es una asignacin vlida.
$bar = &(24 * 7); // Invlida; referencia una expresin sin nombre.

function test()
{
return 25;
}

$bar = &test(); // Invlido.
?>
No es necesario inicializar variables en PHP, sin embargo, es una muy buena
prctica. 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 vaca y las matrices se convierten en un
array vaco.
Ejemplo #1 Valores predeterminados en variables sin inicializar
<?php
// Una variable no definida Y no referenciada (sin contexto de uso); imprime NUL
L
var_dump($variable_indefinida);

// Uso booleano; imprime 'false' (Vea operadores ternarios para ms informacin


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 problemtico
al incluir un archivo en otro que use el mismo nombre de variable. Tambin es un
importante riesgo de seguridad cuando la opcin register_globals se encuentra
habilitada. Un error de nivel E_NOTICE es emitido cuendo se trabaja con variables
sin inicializar, con la excepcin del caso en el que se anexan elementos a un array
no inicializado. La construccin 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 versin y
configuracin de dicho servidor, y otros factores. Algunas de estas variables no
estarn disponibles cuando se ejecute PHP desde la lnea de comandos. Para
obtener una lista de estas variables, por favor vea la seccin 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 ms informacin sobre este cambio, puede consultar el apartado de
configuracin sobre register_globals, el captulo 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 automticamente globales. Por
esta razn, son conocidas a menudo como "superglobales". Las superglobales se
mencionan ms abajo; sin embargo para una lista de sus contenidos y ms
informacin sobre variables predefinidas en PHP, por favor consulte la
seccin Variables predefinidas reservadas. Asimismo, podr notar cmo las
antiguas variables predefinidas ($HTTP_*_VARS) todava existen. A partir de PHP
5.0.0, los arrays de variables predefinidas de tipo long de PHP 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 mtodos de clase.
Nota:
An cuando las superglobales y HTTP_*_VARS pueden existir al mismo tiempo;
estas variables no son idnticas, as que modificar una no cambia la otra.
Si ciertas variables no son definidas en variables_order, las matrices PHP
predefinidas asociadas a estas, estarn vacas.
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 slo tienen un mbito simple. Este mbito
simple tambin abarca los ficheros includos 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 funcin. Cualquier variable usada dentro de una funcin est, por
omisin, limitada al mbito local de la funcin. 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 versin local
de la variable $a, a la que no se ha asignado ningn valor en su mbito. Puede
que usted note que hay una pequea diferencia con el lenguaje C, en el que las
variables globales estn disponibles automticamente dentro de la funcin a
menos que sean expresamente sobreescritas por una definicin 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 funcin si van a ser utilizadas dentro de dicha funcin.
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
funcin, todas las referencias a tales variables se referirn a la versin global. No
hay lmite al nmero de variables globales que se pueden manipular dentro de una
funcin.
Un segundo mtodo 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 mayora 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 estn disponibles en cualquier mbito y no
// requieren 'global'. Las superglobales estn 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 funcin no es un error. Esta puede ser
utilizada an si el fichero est incluido desde el interior de una funcin.
Uso de variables static
Otra caracterstica importante del mbito de las variables es la variable esttica.
Una variable esttica existe slo en el mbito local de la funcin, pero no pierde su
valor cuando la ejecucin del programa abandona este mbito. Consideremos el
siguiente ejemplo:
Ejemplo #4 Ejemplo que demuestra la necesidad de variables estticas
<?php
function test()
{
$a = 0;
echo $a;
$a++;
}
?>
Esta funcin 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 funcin finaliza, la variable $a desaparece. Para
hacer una funcin til para contar, que no pierda la pista del valor actual del
conteo, la variable $a debe declararse como esttica:
Ejemplo #5 Ejemplo del uso de variables estticas
<?php
function test()
{
static $a = 0;
echo $a;
$a++;
}
?>
Ahora, $a se inicializa nicamente en la primera llamada a la funcin, y cada vez
que la funcin test() es llamada, imprimir el valor de $a y lo incrementa.
Las variables estticas tambin proporcionan una forma de manejar funciones
recursivas. Una funcin recursiva es la que se llama a s misma. Se debe tener
cuidado al escribir una funcin recursiva, ya que puede ocurrir que se llame a s
misma indefinidamente. Hay que asegurarse de implementar una forma adecuada
de terminar la recursin. La siguiente funcin cuenta recursivamente hasta 10,
usando la variable esttica $countpara saber cundo parar:
Ejemplo #6 Variables estticas con funciones recursivas


<?php
function test()
{
static $count = 0;

$count++;
echo $count;
if ($count < 10) {
test();
}
$count--;
}
?>
Nota:
Las variables estticas 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 anlisis sintctico.
Ejemplo #7 Declaracin de variables estticas
<?php
function foo(){
static $int = 0; // correcto
static $int = 1+2; // incorrecto (ya que es una expresin)
static $int = sqrt(121); // incorrecto (es una expresin tambin)

$int++;
echo $int;
}
?>
Nota:
Las declaraciones estticas son resueltas en tiempo de compilacin.
Nota:
Utilizar una clave global fuera de una funcin no es un error. Esta pueda ser
utilizada an si el fichero est incluido en el interior de una funcin.
Referencias con variables global y static
El motor Zend 1, utilizado por PHP 4, implementa los
modificadores static y global para variables en trminos de referencias. Por
ejemplo, una variable global verdadera importada dentro del mbito de una
funcin 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 sera:

NULL
object(stdClass)(0) {
}
Un comportamiento similar se aplica a static. Las referencias no son almacenadas
estticamente.
<?php
function &obtener_instancia_ref() {
static $obj;

echo 'Objeto esttico: ';
var_dump($obj);
if (!isset($obj)) {
// Asignar una referencia a la variable esttica
$obj = &new stdclass;
}
$obj->property++;
return $obj;
}

function &obtener_instancia_no_ref() {
static $obj;

echo 'Objeto esttico: ';


var_dump($obj);
if (!isset($obj)) {
// Asignar el objeto a la variable esttica
$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 sera:

Objeto esttico: NULL
Objeto esttico: NULL

Objeto esttico: NULL
Objeto esttico: object(stdClass)(1) {
["property"]=>
int(1)
}
Este ejemplo demuestra que al asignar una referencia a una variable esttica, 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 dinmicamente. 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 dlar. Es decir:


<?php
$$a = 'mundo';
?>
En este momento se han definido y almacenado dos variables en el rbol de
smbolos de PHP: $a, que contiene "hola", y $hola, que contiene "mundo". Es ms,
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
ambigedad. Si se escribe $$a[1] el intrprete necesita saber si nos referimos a
utilizar $a[1] como una variable, o si se pretenda utilizar $$a como variable y el
ndice [1] como ndice de dicha variable. La sintaxis para resolver esta ambigedad
es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.
Tambin 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 segn donde se
hizo la llamada. Por ejemplo, en esta expresin $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 tambin es cierto si $bar es un acceso a un array.
Tambin se pueden usar llaves para delimitar de forma clara el nombre de la
propiedad. Son muy tila al acceder a valores dentro una propiedad que contiene
un array, cuando el nombre de la propiedad est compuesto de mltiples partes, o
cuando el nombre de la propiedad contiene caracteres que de otro modo no son
vlidos (p.ej. desde json_decode() o SimpleXML).
Ejemplo #1 Ejemplo de propiedad variable
<?php
class foo {
var $bar = 'Soy bar.';
var $arr = array('Soy A.', 'Soy B.', 'Soy C.');
var $r = 'Soy r.';
}

$foo = new foo();
$bar = 'bar';


$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->$baz[1] . "\n";

$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";

$arr = 'arr';
echo $foo->$arr[1] . "\n";
echo $foo->{$arr}[1] . "\n";

?>
El resultado del ejemplo sera:

Soy bar.
Soy bar.
Soy bar.
Soy r.
Soy B.
Advertencia
Por favor tenga en cuenta que las variables variables no pueden usarse con
las Matrices superglobales de PHP al interior de funciones o mtodos de clase. La
variable $this es tambin una variable especial que no puede ser referenciada
dinmicamente.
Variables Desde Fuentes Externas
Formularios HTML (GET y POST)
Cuando se enva un formulario a un script PHP, las variables de dicho formulario
pasan a estar automticamente 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 configuracin 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 mtodo no es recomendable.

echo $username;
?>
Usar un formulario GET es similar excepto en el uso de variables predefinidas, que
en este caso sern del tipo GET. GET tambin se usa conQUERY_STRING (la
informacin despues del smbolo '?' en una URL). Por
ejemplo http://www.example.com/test.php?id=3 contiene datos GET que
son accesibles con $_GET['id']. Vea
tambin $_REQUEST e import_request_variables().
Nota:
Las matrices superglobales, como $_POST y $_GET, estn 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 omisin
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 configuracin magic_quotes_gpc afecta a valores Get, Post y
Cookie. Si est activada (on), el valor (It's "PHP!") ser convertido
automticamente a (It\'s \"PHP!\"). Se consider que esto era necesario para el
escape de caracteres para su insercin en base de datos hace una dcada, pero
actualmente es una caracterstica obsoleta que debe ser desactivada. Ver
tambin addslashes(), stripslashes() ymagic_quotes_sybase.


PHP tambin entiende arrays en el contexto de variables de formularios (vea la faq
relacionada). Se puede, por ejemplo, agrupar juntas variables relacionadas o usar
esta caracterstica para obtener valores de una entrada "select" mltiple. Por
ejemplo, vamos a mandar un formulario a s mismo y a presentar los datos cuando
se reciban:
Ejemplo #3 Variables de formulario ms complejas
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
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 Schwabenbru</option>
</select><br />
<input type="submit" value="enviarme!" />
</form>
Nombres de variables tipo IMAGE SUBMIT
Cuando se enva un formulario, es posible usar una imagen en vez del botn
estndar "submit":
<input type="image" src="image.gif" name="sub" />
Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la
acompaa 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 ms
experimentados puede notar que los nombres de variable enviados por el
navegador contienen un guin en vez de un subrayado (guin bajo), pero PHP
convierte el guin en subrayado automticamente.
Cookies HTTP
PHP soporta cookies de HTTP de forma transparente tal y como estn 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 funcin setcookie(). Las cookies son parte de la cabecera HTTP,
as que se debe llamar a la funcin SetCookie antes de que se enve cualquier
salida al navegador. Es la misma restriccin que para la funcin header(). Los


datos de una cookie estn disponibles en el array con datos de cookies apropiada,
tal como $_COOKIE,$HTTP_COOKIE_VARS y tambin en $_REQUEST. Vea la
funcin setcookie() para ms detalles y ejemplos.
Si se quieren asignar mltiples 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 mltiples, considere el uso
de la funcin serialize() o explode() primero en el valor.
Ntese 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 aplicacin de carrito de compras se podra querer mantener un contador
e ir pasndolo. Es decir:
Ejemplo #4 Un ejemplo de setcookie()
<?php
if (isset($_COOKIE['conteo'])) {
$conteo = $_COOKIE['conteo'] + 1;
} else {
$conteo = 1;
}
setcookie('conteo', $conteo, time()+3600);
setcookie("Carrito[$conteo]", $item, time()+3600);
?>
Puntos en los nombres de variables de entrada
Tpicamente, 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 carcter vlido en el
nombre de una variable PHP. Para conocer la razn, considere el siguiente
ejemplo:
<?php
$varname.ext; /* nombre de variable invlido */
?>
Lo que el intrprete v es el nombre de una variable $varname, seguido por el
operador de concatenacin, 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 pretenda que fuese ste el resultado.


Por esta razn, es importante hacer notar que PHP reemplazar automticamente
cualquier punto en los nombres de variables de entrada por guiones bajos
(subrayados).
Determinacin de los tipos de variables
Dado que PHP determina los tipos de las variables y los convierte (generalmente)
segn 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
tambin el captulo sobre Tipos.
Constantes
Tabla de contenidos
Sintaxis
Constantes predefinidas
Una constante es un identificador (nombre) para expresar un valor simple. Como
el nombre sugiere, este valor no puede variar durante la ejecuccin del script. (A
excepcin de las constantes predefinidas, que en realidad no son constantes). Una
constante es sensible a maysculas por defecto. Por convencin, los identificadores
de contantes siempre suelen declararse en maysculas.
El nombre de una constante sigue las mismas reglas que cualquier otra etiqueta de
PHP. Un nombre de constante vlido empieza por una letra o subguin, seguido
por cualquier nmero o letras, nmeros o subguiones. Usando una expresin
regular, se representara de la siguiente manera:[a-zA-Z_\x7f-\xff][a-zA-Z0-
9_\x7f-\xff]*
Sugerencia
Vea tambin Guia de Entorno de Usuario para Nombres.
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 vlido, pero debera ser evitado:
// Ya que quiz algn da PHP crea una constante mgica


// con el mismo nombre y en ese caso provocara un error en tu script
define("__FOO__", "something");

?>
Nota: Para nuestros propsitos, entenderemos como letra los carcteres 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 ms
informacin en el acceso, lea el manual en la seccin acceso a variables.
Sintaxis
Se puede definir una constante usando la funcin define() o tambin declarndola
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 ningn momento.
Solo se puede definir como constantes valores escalares
(boolean, integer, float y string). Se puede definir resource en constantes, pero
debera 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 $.
Tambin se puede usar la funcin constant() para leer el valor de una constante si
se desea obtener el valor de una constante de forma dinmica.
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 $TRUEson diferentes.
Si se usa una constante que todava no est definida, PHP asume que se est
refiriendo al nombre de la constante en si, igual que si fuera unastring (CONSTANT
vs "CONSTANT"). Cuando esto suceda, se mostrar un error de nivel E_NOTICE.
Ver tambin la seccin 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 funcin defined().
Estas son las diferencias entre constantes y variables:
Las constantes no llevan el signo dlar ($), como prefijo.
Las constantes solo pueden ser definidas usando la funcin define(), y no
por simple asignacin.
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 deberan 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
aplicacin porque se definen en tiempo de ejecucin. Esto significa que no pueden
declararse dentro de funciones, loops o declaraciones if.
Constantes predefinidas
PHP ofrece un largo nmero de constantes predefinidas a cualquier script en
ejecuccin. Muchas de estas constantes, sin embargo, son creadas por diferentes
extensiones, y slo estarn presentes si dichas extensiones estn disponibles, bien
por carga dinmica 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 lnea que se use en el script. Estas
constantes especiales son sensibles a maysculas y son las siguientes:
Varias constantes PHP "mgicas"
Nombre Descripcin
__LINE__ Lnea 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 contena la ruta relativa segn las
circunstancias.


Varias constantes PHP "mgicas"
Nombre Descripcin
__DIR__
Directorio del fichero. Si se utiliza dentro de un include, devolver
el directorio del fichero includo. Esta constante es igual
quedirname(__FILE__). El nombre del directorio no lleva la barra
inicial a no ser que est en el directorio root. (Fue aadida en PHP
5.3.0)
__FUNCTION__
Nombre de la funcin. (Aadida en PHP 4.3.0) Desde PHP 5 esta
constante devuelve el nombre de la funcin donde fue declarada
(sensible a maysculas). En PHP 4 su valor siempre es en
minsculas.
__CLASS__
Nombre de la clase. (Aadida en PHP 4.3.0) Desde PHP 5 esta
constante devuelve el nombre de la clase donde fue declarada
(sensible a maysculas). En PHP 4 su valor siempre es en
minsculas. 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__ tambin funciona con traits. Cuando es usado en un
mtodo trait, __CLASS__ es el nombre de la clase del trait que est
siendo utilizado.
__TRAIT__
El nombre de el trait. (Aadido en PHP 5.4.0) A partir de PHP 5.4
esta constante devuelve el trait que fu declarado (sensible a
maysculas y minsculas). El nombre de el trait incluye el
namespace si alguno fu declarado en (p.e.j. Foo\Bar).
__METHOD__
Nombre del mtodo de la clase. (Aadida en PHP 5.0.0.) Nombre
del mtodo devuelto donde fue declarada. (sensible a maysculas).
__NAMESPACE__
Nombre del espacio de nombres actual (sensible a maysculas).
Esta constante se define en tiempo de compilacin (Aadida en PHP
5.3.0) El nombre del namespace actual (sensible a maysculas).
Vase tambin get_class(), get_object_vars(), file_exists() y function_exists().
Expresiones


La expresiones son las piedras de construccin ms importantes de PHP. En PHP
casi todo lo que se escribe es una expresin. La manera ms simple y acertada de
definir lo que es una expresin es "cualquier cosa que tiene un valor".
Las formas ms bsicas 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 expresin con el valor de 5 (en este caso, '5' es una
constante entera).
Despus de esta asignacin, se espera que el valor de $a sea 5 tambin, 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 tambin una expresin con el valor 5.
Si todo funciona bien, esto es exactamente lo que suceder.
Un ejemplo de expresiones algo ms complejo son las funciones. Por ejemplo,
considere la siguiente funcin:
<?php
function foo ()
{
return 5;
}
?>
Asumiendo que est familiarizado con el concepto de funcin (si no lo est, chele
una ojeada al captulo 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 quefoo() devuelve 5, el
valor de la expresin 'foo()' es 5. Normalmente las funciones no slo devuelven
un valor esttico, 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 ms pequeas, a diferencia de las matrices, por ejemplo).
PHP tambin 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 ms 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 expresin. Considere el ejemplo que ya hemos tratado, '$a = 5'. Es
fcil 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 tambin. Aunque la verdad es que
existe aqu un valor adicional involucrado, que es el valor de la asignacin misma.
La asignacin evala al valor asignado, en este caso 5. En la prctica, esto
significa que '$a = 5', sin importar lo que haga, es una expresin 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, tambin se puede escribir
'$b= $a = 5'.
Otro buen ejemplo de orientacin a expresiones es el pre- y post-incremento y
decremento. Los usuarios de PHP y de otros muchos lenguajes pueden estar
familiarizados con la notacin 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 idntico. La diferencia est
con el valor de la expresin de incremento. Pre-incremento, que se escribre
'++$variable', evala 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++' evala el valor original de $variable, antes de que sea
incrementado (PHP incrementa la variable despus de leer su valor, de ah el
nombre de 'post-incremento').
Un tipo de expresiones muy comunes son las expresiones de comparacin. Estas
expresiones evalan 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 tambin 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 combinacin de
expresiones operador-asignacin. Ya sabe que si quiere incrementar$a en 1, puede
simplemente escribir '$a++' o '++$a'. Pero si lo que quiere es aadirle ms de
uno, por ejemplo 3, podra escribir '$a++' varias veces, pero esto, obviamente, no
es una manera muy eficiente o cmoda. Una prctica mucho ms comn es
escribir '$a = $a + 3'. '$a + 3' evala al valor de $a ms 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 ms abreviada, lo que con el
tiempo se podra convertir en una forma ms clara y rpida de entenderlo. Aadir
3 al valor actual de $a puede ser escrito '$a += 3'. Esto significa exactamente
"toma el valor de $a, adele 3 y asgnalo de nuevo a $a". Adems de ser ms
corto y claro, tambin resulta en una ejecucin ms rpida. El valor de '$a += 3',
al igual que el valor de una asignacin normal, es el valor asignado. Observe que
NO es 3, sino el valor combinado de $a ms 3 (ste es el valor que es asignado
a $a). Se puede usar cualquier operador compuesto de dos partes en este modo
de operador-asignacin, por ejemplo '$a -= 5' (restar 5 del valor de $a), '$b *= 7'
(multiplicar el valor de $b por 7), etc.
Existe una expresin ms 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 subexpresin es TRUE (no es cero), se evala la segunda
subexpresin, y se ser el resultado de la expresin condicional. Si no, se evala
la tercera subexpresin, y se ser el valor.
El siguiente ejemplo debera 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 despus
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 asignacin (24) es
asignado despus a $h, y $h finaliza tambin con el
valor 24. */
?>
Algunas expresiones pueden considerarse como sentencias. En este caso, una
sentencia tiene la forma 'expr ;', es decir, una expresin seguida de un punto y
coma. En '$b = $a = 5;', '$a = 5' es una expresin vlida, pero no es una
sentencia en s. Sin embargo, '$b = $a = 5;' es una sentencia vlida.
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 especfico de la expresin, sino slo si el valor significa TRUE o FALSE.
Las constantes TRUE y FALSE (insensible a maysculas-minsculas) son los dos
valores booleanos posibles. Cuando es necesario, una expresin es convertida
automticamente al tipo boolean. Vase la seccin sobre conversin de tipos para
ms detalles.
PHP proporciona una implementacin completa y potente de expresiones, y
documentarla por completo va ms all del mbito de este manual. Los ejemplos
de arriba deberan darle una buena idea de lo que son las expresiones y cmo
construir expresiones tiles. Durante el resto de este manual se escribir expr para
indicar cualquier expresin de PHP vlida.



Operadores
Un operador es algo que toma uno ms valores (o expresiones, en jerga de
programacin) y produce otro valor (de modo que la construccin en si misma se
convierte en una expresin).
Los operadores se pueden agrupar de acuerdo con el nmero de valores que
toman. Los operadores unarios toman slo un valor, por ejemplo ! (eloperador
lgico de negacin) o ++ (el operador de incremento). Los operadores binarios
toman dos valores, como los familiares operadores aritmticos + (suma) y -
(resta), y la mayora de los operadores de PHP entran en esta categora.
Finalmente, hay slo un operador ternario, ? :, el cual toma tres valores;
usualmente a este se le refiere simplemente como "el operador ternario" (aunque
podra tal vez llamarse ms correctamente como el operador condicional).
Una lista completa de operadores de PHP sigue en la seccin Precedencia de
Operadores. La seccin tambin explica la precedencia y asociatividad de los
operadores, las cuales gobiernan exactamente cmo 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 expresin 1 + 5 * 3 , la respuesta es 16 y
no 18 porque el operador de multiplicacin ("*") tiene una precedencia mayor que
el operador de adicin ("+"). Los parntesis pueden ser usados para forzar la
precedencia, si es necesario. Por ejemplo: (1 + 5) * 3 se evala como 18.
Cuando los operaadores tienen igual precedencia su asociatividad decide cmo se
agrupan. Por ejemplo "-" tiene asociatividad a izquierda, as 1 - 2 - 3 se agrupa
como (1 - 2) - 3 y se evala a -4. "=", por otra parte, tiene asociatividad a
derecha, as $a = $b = $c se agrupa como $a = ($b = $c).
Los operadores de igual predecencia que no son asociativos no pueden usarse
unos junto a otros, por ejemplo, 1 < 2 > 1 es ilegal en PHP. La expresin 1 <= 1
== 1, por otro lado, es legal, ya que el operador == tiene menos precedencia que
el operador <=.
El uso de parntesis, incluso cuando no es estrictamente necesario, a menudo
puede aumentar la legibilidad del cdigo haciendo grupos explcitamente en lugar
de confiar en la predencia y asociatividad implcitas del operador.
La siguiente tabla enumera los operadores en orden de precendencia, con los de
ms alta precedencia al inicio. Los operadores en la misma lnea tienen igual
precedencia, en cuyo caso la asociatividad decide el agrupamiento.
Precedencia de operadores


Asociatividad Operadores Informacin adicional
no asociativo clone new clone and new
izquierda [ array()
derecha
++ -- ~ (int) (float) (string)
(array) (object) (bool) @
tipos e incremento/decremento
no asociativo instanceof tipos
derecha ! lgico
izquierda * / % aritmtica
izquierda + - . aritmtica y string
izquierda << >> bit a bit
no asociativo < <= > >= comparacin
no asociativo == != === !== <> comparacin
izquierda & bit a bit y referencias
izquierda ^ bit a bit
izquierda | bit a bit
izquierda && lgico
izquierda || lgico
izquierda ? : ternario
derecha
= += -= *= /= .= %= &= |=
^= <<= >>= =>
asignacin


Precedencia de operadores
Asociatividad Operadores Informacin adicional
izquierda and lgico
izquierda xor lgico
izquierda or lgico
izquierda , muchos usos
Ejemplo #1 Asociatividad
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
// la asociatividad del operador ternario difiere de C/C++
$a = true ? 0 : true ? 1 : 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
?>
La precedencia y asociatividad de los operadores solamente determinan cmo se
agrupan las expresiones, no especifican un orden de evaluacin. PHP no especifica
(en general) el orden en que se evala una expresin y se debera evitar el cdigo
que se asume un orden especfico de evaluacin, ya que puede cambiar entre
versiones de PHP sin previo aviso.
Ejemplo #2 Orden de evaluacin no definido
<?php
$a = 1;
echo $a + $a++; // podra mostrar 2 o 3

$i = 1;
$array[$i] = $i++; // podra establecer el ndice a 1 o 2
?>
Nota:


Aunque = tiene una precedencia menor que la mayora de los dems operadores,
PHP aun permitir expresiones similares a lo siguiente: if (!$a = foo()), en cuyo
caso el valor devuelto de foo() es puesto en $a.
Operadores aritmticos
Recuerda la aritmtica bsica de la escuela? Estos funcionan igual que aquellos.
Operadores aritmticos
Ejemplo Nombre Resultado
-$a Negacin Opuesto de $a.
$a + $b Adicin Suma de $a y $b.
$a - $b Sustraccin Diferencia de $a y $b.
$a * $b Multiplicacin Producto de $a y $b.
$a / $b Divisin Cociente de $a y $b.
$a % $b Mdulo Resto de $a dividido por $b.
El operador de divisin ("/") devuelve un valor flotante a menos que los dos
operandos sean integers (o strings que se conviertan a integers) y los nmeros
sean divisibles, en cuyo caso ser devuelto un valor integer.
Los operandos del mdulo se convierten en integers (por extraccin de la parte
decimal) antes del procesamiento.
El resultado del operador mdulo % tiene el mismo signo que el dividendo es
decir, el resultado de $a % $b tendr el mismo signo que $a. Por ejemplo:
<?php

echo (5 % 3)."\n"; // muestra 2
echo (5 % -3)."\n"; // muestra 2
echo (-5 % 3)."\n"; // muestra -2
echo (-5 % -3)."\n"; // muestra -2

?>


Operadores de asignacin
El operador bsico de asignacin es "=". Se podra 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 expresin de la derecha (es decir, "se define
como").
El valor de una expresin de asignacin 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 asignacin.
Adems del operador bsico de asignacin, existen "operadores combinados" para
todos los de aritmtica binaria, unin de arrays y operadores de strings que
permiten usar un valor en una expresin y entonces establecer su valor como el
resultado de esa expresin. 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!";

?>
Observe que la asignacin copia la variable original en la nueva (asignacin por
valor), por lo que los cambios en una no afectarn a la otra. Esto tambin puede
tener relevancia si se necesita copiar algo como un gran array dentro de un bucle
estrecho.
Una excepcin al comportamiento usual de la asignacin por valor en PHP ocurre
con objects los cuales son asignados por referencia en PHP 5. Los objetos pueden
ser explcitamente copiados por medio de la palabra clave clone.
Asignacin por referencia
La asignacin por referencia tambin est soportada, utilizando la sintaxis "$var =
&$othervar;". Asignacin por referencia significa que ambas variables terminan
apuntando a los mismos datos y nada es copiado en ninguna parte.


Ejemplo #1 Asignacin 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 tambin, dado que $b es una referencia para $a, la cu
al ha
// sido cambiada
?>
Desde PHP 5, el operador new retorna una referencia automticamente, as que
asignar el resultado de new por referencia, resulta en un mensajeE_DEPRECATED en
PHP 5.3 y posteriores y un mensaje E_STRICT en versiones anteriores.
Por ejemplo, ste cdigo resultar en una advertencia:
<?php
class C {}

/* La siguiente lnea genera el siguiente mensaje de error:
* Deprecated: Assigning the return value of new by reference is deprecated in..
.
*/
$o = &new C;
?>
Ms informacin sobre referencias y sus usos potenciales se puede encontrar en la
seccin del manual Referencias Explicadas
Operadores bit a bit
Los operadores bit a bit permiten la evaluacin y la manipulacin de bits
especficos dentro de un integer.
Operadores bit a bit
Ejemplo Nombre Resultado
$a & $b And (y)
Los bits que estn activos en


Operadores bit a bit
Ejemplo Nombre Resultado
ambos $a y $b son activados.
$a | $b Or (o inclusivo)
Los bits que estn activos ya sea en $a o
en $b son activados.
$a ^ $b Xor (o exclusivo)
Los bits que estn activos en $a o en $b,
pero no en ambos, son activados.
~ $a Not (no)
Los bits que estn activos en $a son
desactivados, y viceversa.
$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 aritmtico. 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 parntesis para garantizar la precedencia deseada. Por ejemplo, $a & $b
== true evala la equivalencia y luego el bit a bit, mientras que ($a & $b) ==
true evala el bit a bit y luego la equivalencia.
Sea consciente de las conversiones de tipos de datos. Si tanto los parmetros de la
izquierda como los de la derecha son cadenas, el operador bit a bit operar en los
valores ASCII de los caracteres.
La configuracin error_reporting del PHP ini utiliza valores de bit a
bit,
lo que ofrece una demostracin del mundo real de desactivar
bits. Para mostrar todos los errores, a excepcin 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 estn activados en slo el primer valor o
en el otro:
E_ALL ^ E_NOTICE

error_reporting tambin se puede utilizar para demostrar la activacin
de bits.
La forma para mostrar slo 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 seccin superior,
* es slo el formateado para hacer la salida ms 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 estn los ejemplos.
*/

$values = array(0, 1, 2, 4, 8);
$test = 1 + 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 sera:
--------- --------- -- ---------
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 2 ^ "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 estn 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 iz
quierdo');

$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
ms 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 izquierd
o');

$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
ms 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, incluye
ndo 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 sera:

--- 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 ms 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 ms 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 sera:

--- 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 ms 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 ms 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 ms de 32 bits en sistemas de 32 bits. No desplazar a la
izquierda en caso de que resulte en un nmero ms largo de 32 bits. Usar


funciones de la extensin gmp para manipulacin bit a bit sobre nmeros ms all
de PHP_INT_MAX.
Ver
tambin pack(), unpack(), gmp_and(), gmp_or(), gmp_xor(), gmp_testbit(), gmp
_clrbit()
Operadores de comparacin
Los operadores de comparacin, como su nombre lo indica, permiten comparar dos
valores. Puede tambin estar interesado en ver las tablas de comparacin de tipos,
ya que muestran ejemplos de las varias comparaciones relacionadas con tipos.
Operadores de comparacin
Ejemplo Nombre Resultado
$a == $b Igual
TRUE si $a es igual a $b despus de la manipulacin
de tipos.
$a ===
$b
Idntico TRUE si $a es igual a $b, y son del mismo tipo.
$a != $b Diferente
TRUE si $a no es igual a $b despus de la
manipulacin de tipos.
$a <> $b Diferente
TRUE si $a no es igual a $b despus de la
manipulacin de tipos.
$a !== $b No idntico
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
TRUE si $a es mayor o igual que $b.


Operadores de comparacin
Ejemplo Nombre Resultado
que
Si se compara un nmero con un string o la comparacin implica strings
numricos, entonces cada string es convertido en un nmero y la comparacin
realizada numricamente. Estas reglas tambin se aplican a la sentencia switch. La
conversin de tipo no tiene lugar cuando la comparacin es === o !== ya que
esto involucra comparar el tipo as como el valor.
<?php
var_dump(0 == "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 comparacin se realiza de acuerdo a la siguiente tabla (en
orden).
La comparacin con varios tipos
Tipo de operando 1 Tipo de operando 2 Resultado
null o string string
Convierte NULL en "",
comparacin numrica o
lxica
bool o null cualquiera
Convierte
en bool, FALSE < TRUE


La comparacin con varios tipos
Tipo de operando 1 Tipo de operando 2 Resultado
object object
Las clases internas pueden
definir su propia comparacin,
diferentes clases son
incomparables, la misma clase
- comparan propiedades en la
misma forma que los arrays
(PHP 4), PHP 5 tiene su
propia explicacin
string,resource onumber string,resource onumber
Traducir las cadenas y
recursos a nmeros,
matemtica 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)
object cualquiera object es siempre mayor
array cualquiera array es siempre mayor
Ejemplo #1 Transcripcin de la comparacin estndar de arrays
<?php
// Arrays son comparados de esta forma con los operadores de comparacin estnda
r
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 tambin strcasecmp(), strcmp(), operadores de array, y la seccin del manual
sobre tipos.
Advertencia
Comparacin de nmeros de punto flotante
Debido a la forma en que son representados internamente los floats, no se deben
probar por igualdad dos floats.
Ver la documentacin de float para ms informacin.
Operador ternario
Otro operador condicional es el operador "?:" (o ternario).
Ejemplo #2 Asignacin de un valor predeterminado
<?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// Lo anterior es idntico a esta sentencia if/else
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}

?>
La expresin (expr1) ? (expr2) : (expr3) evala a expr2 si expr1 se evala
como TRUE y a expr3 si expr1 se evala como FALSE.
A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario.
La expresin expr1 ?: expr3 retorna expr1 si expr1 se evala
como TRUE y expr3 si es de otra manera.


Nota: Por favor note que el operador ternario es una sentencia, y que no evala 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 funcin 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 ms 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 evalan de izquierda a derech
a

// la siguiente es una versin ms obvia del mismo cdigo anterior
echo ((true ? 'true' : false) ? 't' : 'f');

// aqu, se puede ver que la primera expresin es evaluada como 'true', que
// a su vez se evala como (bool)true, retornando as la rama verdadera de la
// segunda expresin ternaria.
?>
Operadores de control de errores
PHP soporta un operador de control de errores: el signo de arroba (@). Cuando se
antepone a una expresin en PHP, cualquier mensaje de error que pueden ser
generado por esa expresin ser ignorado.
Si se ha establecido una funcin controladora de errores personalizada
con set_error_handler() entonces todava 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 expresin 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 expresin, no solo con funciones:
$value = @$cache[$key];
// no producir una anotacin si el ndice $key no existe.

?>
Nota: El operador @ trabaja slo 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 funcin o
clase, ni a estructuras condicionales como if y foreach, y as sucesivamente.
Ver tambin error_reporting() y la seccin 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 crticos que terminarn la ejecucin
del script. Entre otras cosas, esto quiere decir que si se usa "@" para eliminar los
errores de una cierta funcin y sta no se encuentra disponible o ha sido escrita de
forma incorrecta, el script se detendr en ese punto sin indicacin de por qu.
Operadores de ejecucin
PHP soporta un operador de ejecucin: 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 idntico 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 tambin la seccin del manual sobre funciones de ejecucin de
programas, popen() proc_open() y Usando PHP desde la lnea de comandos.
Operadores de incremento/decremento
PHP soporta operadores estilo C de pre- y post-incremento y decremento.
Nota: Los operadores de incremento/decremento solamente afectan a nmeros y
strings. Los arrays, objects y resources no se ven afectados. 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 convencin de Perl cuando trabaja con operaciones aritmticas 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).
Ntese que las variables de caracteres pueden ser incrementadas pero no
decrementadas y aun as slo caracteres y dgitos de ASCII puro (a-z, A-Z y 0-9)
estn soportados. Incrementar o decrementar otras variables de caracteres no
tiene efecto, el string original no se modifica.
Ejemplo #1 Operaciones aritmticas sobre variables de caracteres
<?php
echo '== Letras ==' . PHP_EOL;
$s = 'W';
for ($n=0; $n<6; $n++) {
echo ++$s . PHP_EOL;
}
// Los caracteres de dgitos tienen un comportamiento diferente
echo '== Dgitos ==' . PHP_EOL;
$d = 'A8';
for ($n=0; $n<6; $n++) {
echo ++$d . PHP_EOL;
}
$d = 'A08';
for ($n=0; $n<6; $n++) {
echo ++$d . PHP_EOL;
}
?>
El resultado del ejemplo sera:
== Letras ==
X
Y
Z
AA
AB
AC
== Dgitos ==
A9
B0
B1
B2
B3
B4
A09
A10
A11
A12
A13


A14
Incrementar o decrementar booleanos no tiene efecto.
Operadores lgicos
Operadores lgicos
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 razn 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 lgicos ilustrados
<?php

// --------------------
// foo() nunca ser llamado ya que los operadores estn 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 expresin (false || true) es asignado a $e
// Acta como: ($e = (false || true))
$e = false || true;



// La constante false es asignada a $f y entonces true es ignorado
// Acta como: (($f = false) or true)
$f = false or true;

var_dump($e, $f);

// --------------------
// "&&" tiene una precedencia mayor que "and"

// El resultado de la expresin (true && false) es asignado a $g
// Acta como: ($g = (true && false))
$g = true && false;

// La constante true es asignada a $h y entonces false es ignorado
// Acta como: (($h = true) and false)
$h = true and false;

var_dump($g, $h);
?>
El resultado del ejemplo sera 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
concatenacin ('.'), el cual retorna el resultado de concatenar sus argumentos
derecho e izquierdo. El segundo es el operador de asignacin sobre concatenacin
('.='), el cual aade el argumento del lado derecho al argumento en el lado
izquierdo. Por favor consulte Operadores de asignacin para ms informacin.
<?php
$a = "Hello ";
$b = $a . "World!"; // ahora $b contiene "Hello World!"

$a = "Hello ";
$a .= "World!"; // ahora $a contiene "Hello World!"
?>
Ver tambin las secciones del manual sobre el tipo string y las funciones de
strings.
Operadores para arrays
Operadores para arrays


Ejemplo Nombre Resultado
$a + $b Unin Unin 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 idntica a $b.
El operador + devuelve el array del lado derecho aadido al array del lado
izquierdo; para las claves que existan en ambos arrays, sern utilizados los
elementos del array de la izquierda y sern 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; // Unin de $a y $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Unin 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 comparacin si stos tienen la
misma clave y valor.
Ejemplo #1 Comparando arrays
<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>
Ver tambin 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 sera:
bool(true)
bool(false)


instanceof tambin 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 sera:
bool(true)
bool(true)
Para comprobar si un objeto no es una instancia de una clase, se puede usar
el operador lgico 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 sera:
bool(true)
Finalmente, instanceof tambin se puede utilizar para determinar si una variable
es un objeto instanciado de una clase que implementa unainterface:
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 sera:
bool(true)
bool(true)
Aunque instanceof se utiliza generalmente con un nombre de clase literal,
tambin 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 sera:
bool(true)
bool(true)
bool(false)
instanceof no lanza ningn error si la variable que est siendo comprobada no es
un objeto, simplemente devuelve FALSE. Las constantes, sin embargo, no est
permitidas.
Ejemplo #6 Usar instanceof para comprobar otras variables


<?php
$a = 1;
$b = NULL;
$c = imagecreate(5, 5);
var_dump($a instanceof stdClass); // $a es un entero
var_dump($b instanceof stdClass); // $b es NULL
var_dump($c instanceof stdClass); // $c es un recurso
var_dump(FALSE instanceof stdClass);
?>
El resultado del ejemplo sera:
bool(false)
bool(false)
bool(false)
PHP Fatal error: instanceof expects an object instance, constant given
Hay algunas trampas a tener en cuenta. Antes de versin de PHP
5.1.0, instanceof llamara a __autoload() si el nombre de clase no exista.
Adems, si la clase no estaba cargada, un error fatal ocurrira. Esto se puede
solucionar mediante una referencia de clase dinmica o una variable string que
contenga el nombre de la clase:
Ejemplo #7 Evitando bsquedas 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 sera:
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 tambin get_class() y is_a().
Estructuras de Control
Introduccin
Todo script PHP est construido en base a una serie de sentencias. Una sentencia
puede ser una asignacin, una llamada de funcin, un ciclo, una sentencia
condicional o incluso una sentencia que no hace nada (una sentencia vaca). Las
sentencias generalmente finalizan con un punto y coma. Adicionalmente, las
sentencias pueden agruparse en un conjunto de sentencias, encapsulndolas entre


corchetes. Un grupo de sentencias es una sentencia por s misma tambin. Los
diferentes tipos de sentencias son descritos en este captulo
if
(PHP 4, PHP 5)
El constructor if es una de las caractersticas ms importantes de muchos
lenguajes, incluido PHP. Permite la ejecucin condicional de fragmentos de cdigo.
PHP dispone de una estructura if que es similar a la de C:
if (expr)
sentencia
Como se describe en la seccin sobre expresiones , la expresin es evaluada a su
valor booleano. Si la expresin se evala como TRUE, PHP ejecutar la sentencia y
si se evala como FALSE la ignorar. Ms informacin sobre qu valores evalan
como FALSE se puede encontrar en la seccin 'Convirtiendo a booleano'.
El siguiente ejemplo mostrara 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 ms de una sentencia para ser ejecutada
condicionalmente. Por supuesto, no hay necesidad de envolver cada sentencia con
una clusula if. En cambio, se pueden agrupar varias sentencias en un grupo de
sentencias. Por ejemplo, este cdigo mostrara a es mayor que b si $a es mayor
que $b y entonces asignara 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 ejecucin condicional de diferentes partes
del programa.
else
(PHP 4, PHP 5)


Con frecuencia se desea ejecutar una sentencia si una determinada condicin se
cumple y una sentencia diferente si la condicin no se cumple. Esto es para lo que
sirve else. El else extiende una sentencia if para ejecutar una sentencia en caso
que la expresin en la sentencia if se evale comoFALSE. Por ejemplo, el siguiente
cdigo 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 slo es ejecutada si la expresin if es evaluada como FALSE y si
hay algunas expresiones elseif - slo se ejecuta si tambin todas son evaluadas
como FALSE (ver elseif).
elseif/else if
(PHP 4, PHP 5)
elseif, como su nombre lo sugiere, es una combinacin de if y else. Del mismo
modo que else, extiende una sentencia if para ejecutar una sentencia diferente en
caso que la expresin if original se evale como FALSE. Sin embargo, a diferencia
de else, esa expresin alternativa slo se ejecutar si la expresin condicional
del elseif se evala como TRUE. Por ejemplo, el siguiente cdigo 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
expresin elseif (si hay alguna) que se evale como TRUE sera ejecutada. En PHP
tambin se puede escribir 'else if' (en dos palabras) y el comportamiento sera
idntico al de 'elseif' (en una sola palabra). El significado sintctico es ligeramente
diferente (si se est familiarizado con C, este es el mismo comportamiento) pero la
conclusin es que ambos resultaran tener exactamente el mismo comportamiento.


La sentencia elseif es ejecutada solamente si la expresin if precedente y
cualquiera de las expresiones elseif precedentes son evaluadas comoFALSE, y la
expresin elseif actual se evala como TRUE.
Nota: Tenga en cuenta que elseif y else if sern considerados exactamente
iguales slamente 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

/* Mtodo incorrecto: */
if($a > $b):
echo $a." es mayor que ".$b;
else if($a == $b): // No compilar
echo "La lnea anterior provoca un error del interprete.";
endif;


/* Mtodo correcto: */
if($a > $b):
echo $a." es mayor que ".$b;
elseif($a == $b): // Tenga en cuenta la combinacin 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 bsica 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 mostrara
solamente si $a es igual a 5.


La sintaxis alternativa tambin 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.
Vase tambin while, for e if para ms ejemplos.
while
(PHP 4, PHP 5)
Los bucles while son el tipo ms sencillo de bucle en PHP. Se comportan igual que
su contrapartida en C. La forma bsica de una sentencia whilees:
while (expr)
sentencia
El significado de una sentencia while es simple. Le dice a PHP que ejecute las
sentencias anidadas, tanto como la expresin while se evale comoTRUE. El valor
de la expresin es verificado cada vez al inicio del bucle, por lo que incluso si este
valor cambia durante la ejecucin de las sentencias anidadas, la ejecucin no se
detendr hasta el final de la iteracin (cada vez que PHP ejecuta las sentencias
contenidas en el bucle es una iteracin). A veces, si la expresin while se evala
como FALSE desde el principio, las sentencias anidadas no se ejecutarn 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 idnticos y ambos presentan los nmeros del 1 al 10:
<?php
/* ejemplo 1 */

$i = 1;
while ($i <= 10) {
echo $i++; /* el valor presentado sera
$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
expresin verdadera es verificada al final de cada iteracin en lugar que al
principio. La diferencia principal con los bucles while es que est garantizado que
corra la primera iteracin de un bucle do-while (la expresin verdadera slo es
verificada al final de la iteracin), mientras que no necesariamente va a correr con
un bucle while regular (la expresin verdadera es verificada al principio de cada
iteracin, si se evala como FALSE justo desde el comienzo, la ejecucin del bucle
terminara inmediatamente).
Hay una sola sintaxis para bucles do-while:
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
El bucle de arriba se ejecutara exactamente una sola vez, ya que despus de la
primera iteracin, cuando la expresin verdadera es verificada, se evala
como FALSE ($i no es mayor que 0) y termina la ejecucin del bucle.


Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del
bucle do-while, para permitir parar la ejecucin en medio de los bloques de
cdigo, mediante el encapsulado con do-while (0), y utilizando la
sentencia break. El siguiente fragmento de cdigo 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 'caracterstica'. 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 ms complejos en PHP. Se comportan como sus homlogos
en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3)
sentencia
La primera expresin (expr1) es evaluada (ejecutada) una vez incondicionalmente
al comienzo del bucle.
En el comienzo de cada iteracin, se evala expr2. Si se evala como TRUE, el
bucle contina y se ejecutan la/sy sentencia/s anidada/s. Si se evala como FALSE,
finaliza la ejecucin del bucle.
Al final de cada iteracin, se evala (ejecuta) expr3.
Cada una de las expresiones puede estar vaca o contener mltiples expresiones
separadas por comas. En expr2, todas las expresiones separadas por una coma
son evaluadas, pero el resultado se toma de la ltima parte. Que expr2 est vaca


significa que el bucle debera ser corrido indefinidamente (PHP implcitamente lo
considera como TRUE, como en C). Esto puede no ser tan intil como se pudiera
pensar, ya que muchas veces se debe terminar el bucle usando una sentencia
condicional break en lugar de utilizar la expresin verdadera del for.
Considere los siguientes ejemplos. Todos ellos muestran los nmeros 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 quizs el cuarto), pero se
puede observar que la posibilidad de usar expresiones vacas en los
bucles for resulta til en muchas ocasiones.
PHP tambin admite la sintaxis alternativa de los dos puntos para bucles for.
for (expr1; expr2; expr3):
sentencia


...
endfor;
Es una cosa comn a muchos usuarios iterar por medio de arrays como en el
siguiente ejemplo.
<?php
/*
* Este es un array con algunos datos que se quieren modificar
* cuando se recorra el bucle for.
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
El cdigo anterior puede ser lento, debido a que el tamao del array se capta en
cada iteracin. Dado que el tamao nunca cambia, el bucle ser fcilmente
optimizado mediante el uso de una variable intermedia para almacenar el tamao
en lugar de llamar repetidamente a count():
<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);

for($i = 0, $size = count($people); $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
foreach
(PHP 4, PHP 5)
El constructor foreach proporciona un modo sencillo de iterar sobre
arrays. foreach funciona slo 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 (expresin_array as $valor)


sentencias
foreach (expresin_array as $clave => $valor)
sentencias
La primera forma recorre el array dado por expresin_array. En cada iteracin,
el valor del elemento actual se asigna a $valor y el puntero interno del array
avanza una posicin (as en la prxima iteracin se estar observando el siguiente
elemento).
La segunda forma adems asigna la clave del elemento actual a la
variable $clave en cada iteracin.
Tambin es posible personalizar la iteracin de objetos.
Nota:
Cuando foreach inicia su ejecucin, el puntero interno del array se pone
automticamente en el primer elemento del array. Esto significa que no es
necesario llamar la funcin 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 porreferencia.
<?php
$array = array(1, 2, 3, 4);
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 slo es posible si el array iterado puede ser referenciado (es
decir, si es una variable). El siguiente cdigo no funcionar:
<?php
foreach (array(1, 2, 3, 4) as &$valor) {
$valor = $valor * 2;
}
?>
Advertencia
La referencia del $valor y el ltimo elemento del array permanecen an despus
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
idnticas:
<?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 tambin son funcionalmente idnticas:
<?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 ms para demostrar su uso:
<?php
/* Ejemplo 1 de foreach: slo el valor */

$a = array(1, 2, 3, 17);

foreach ($a as $v) {
echo "Valor actual de \$a: $v.\n";
}

/* Ejemplo 2 de foreach: valor (con su notacin de acceso manual impreso con fin
es ilustrativos) */

$a = array(1, 2, 3, 17);



$i = 0; /* slo 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 dinmicos */

foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>
Utilizando arrays anidados con list()
(PHP 5 >= 5.5.0)
PHP 5.5 aade la posibilidad de recorrer un array de arrays y utilizar el array
interior en las variables del bucle proporcionando list() como el valor.


Por ejemplo:
<?php
$array = [
[1, 2],
[3, 4],
];

foreach ($array as list($a, $b)) {
// $a contiene el primer elemento del array interior,
// y $b contiene el segundo elemento.
echo "A: $a; B: $b\n";
}
?>
El resultado del ejemplo sera:
A: 1; B: 2
A: 3; B: 4
Puedes proporcionar menos elementos a list() de los que hay en el array interior,
en cuyo caso los elementos sobrantes del array sern descartados:
<?php
$array = [
[1, 2],
[3, 4],
];

foreach ($array as list($a)) {
// Observa que no hay $b en este caso.
echo "$a\n";
}
?>
El resultado del ejemplo sera:
1
3
Se generar un notice si no hay suficientes elementos en el array para completar
el list():
<?php
$array = [
[1, 2],
[3, 4],


];

foreach ($array as list($a, $b, $c)) {
echo "A: $a; B: $b; C: $c\n";
}
?>
El resultado del ejemplo sera:

Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C:

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C:
break
(PHP 4, PHP 5)
break termina la ejecucin de la estructura actual for, foreach, while, do-
while o switch.
break acepta un argumento numrico 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 tambin 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; /* Slo 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
Versin Descripcin
5.4.0
break 0; ya no es vlido. En versiones anteriores se interpretaba igual
que break 1;.
5.4.0
Removida la posibilidad de pasar variables (por ejemplo, $num = 2;
break $num;) como argumento numrico.
continue
(PHP 4, PHP 5)
continue se utiliza dentro de las estructuras iterativas para saltar el resto de la
iteracin actual del bucle y continuar la ejecucin en la evaluacin de la condicin,
y luego comenzar la siguiente iteracin.
Nota: Tenga en cuenta que en PHP la sentencia switch se considera una
estructura iterativa para los propsitos de continue.
continue acepta un argumento numrico opcional, que indica a cuntos niveles de
bucles encerrados se ha de saltar al final. El valor por omisin es1, por lo que salta
al final del bucle actual.
<?php
while (list($clave, $valor) = each($arr)) {
if (!($clave % 2)) { // saltar los miembros impares
continue;
}
hacer_algo($valor);
}

$i = 0;
while ($i++ < 5) {
echo "Exterior<br />\n";
while (1) {
echo "Medio<br />\n";
while (1) {


echo "Interior<br />\n";
continue 3;
}
echo "Esto nunca se imprimir.<br />\n";
}
echo "Ni esto tampoco.<br />\n";
}
?>
Omitir el punto y coma despus del continue puede llevar a confusin. 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 esperara que el resultado fuera:
0
1
3
4
pero la salida de este script ser:
2
debido a que continue print "$i\n"; se evala completo como una sola
expresin, y as print se llama solamente cuando $i == 2 es verdadero. (El valor
de retorno de print es pasado a continue como el argumento numrico.)
Registro de cambios para continue
Versin Descripcin
5.4.0
continue 0; ya no es vlido. En versiones anteriores era interpretado de
la misma manera que continue 1;.
5.4.0
Se elimin la posibilidad de pasar variables (por ejemplo, $num = 2;


Registro de cambios para continue
Versin Descripcin
continue $num;) como el argumento numrico.
switch
(PHP 4, PHP 5)
La sentencia switch es similar a una serie de sentencias IF en la misma expresin.
En muchas ocasiones, es posible que se quiera comparar la misma variable (o
expresin) con muchos valores diferentes, y ejecutar una parte de cdigo distinta
dependiendo de a que valor es igual. Para esto es exactamente la
expresin switch.
Nota: Cabe sealar que a diferencia de algunos otros lenguajes, la
sentencia continue se aplica a switch y acta de manera similar a break. Si se
tiene un switch dentro de un bucle y se desea continuar a la siguiente iteracin 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 cmo la sentencia switch es ejecutada con el fin de evitar
errores. La sentencia switch ejecuta lnea por lnea (en realidad, sentencia por
sentencia). Al principio, ningn cdigo es ejecutado. Slo 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 contina 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 ejecutara todas las sentencias echo! Si $i es igual a 1,
PHP ejecutara las ltimas dos sentencias echo. Se obtendra el comportamiento
esperado (se mostrara 'i es igual a 2') slo 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 propsito bajo determinadas circunstancias).
En una sentencia switch, la condicin es evaluada slo una vez y el resultado es
comparado con cada una de las sentencias case. En una sentenciaelseif, la


condicin es evaluada otra vez. Si la condicin es ms complicada que una simple
comparacin y/o est en un bucle estrecho, un switchpuede ser ms rpido.
La lista de sentencias para un caso tambin puede estar vaca, 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 expresin case puede ser cualquier expresin que se evala como un tipo
simple, es decir, entero o nmeros 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 ms informacin, 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 despus de un caso
como:
<?php
switch($beer)
{
case 'tuborg';
case 'carlsberg';
case 'heineken';
echo 'Buena eleccin';
break;
default;
echo 'Por favor haga una nueva seleccin...';
break;
}
?>
declare
(PHP 4, PHP 5)
El constructor declare es usado para fijar directivas de ejecucin para un bloque
de cdigo. La sintaxis de declare es similar a la sintaxis de otros constructores de
control de flujo:
declare (directive)
statement
La seccin directive permite que el comportamiento de declare sea configurado.
Actualmente, slo dos directivas estn reconocidas: ticks (Ver abajo para ms
informacin sobre la directiva ticks) y encoding (Ver abajo para ms informacin
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 ejecucin puede depender de la directiva
fijada en el bloque directive.
El constructor declare tambin se puede utilizar en el alcance global, afectando a
todo el cdigo que le sigue (sin embargo, si el archivo con eldeclare 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 intrprete dentro del bloque declare. El valor para Nse especifica
usando ticks=N dentro del bloque de declare de la seccin directive.
No todas las sentencias son tickable. Por lo general, expresiones de condicin 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 ms detalles. Tener en
cuenta que ms de un evento puede ocurrir por cada tick.
Ejemplo #1 Ejemplo de uso del tick
<?php

declare(ticks=1);

// Una funcin 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();

?>
Vase tambin register_tick_function() y unregister_tick_function().
Encoding
Una codificacin 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');
// cdigo aqu
?>
Precaucin
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 anlisis 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 tambin zend.script_encoding.
return
(PHP 4, PHP 5)
Si se llama desde una funcin, la sentencia return inmediatamente termina la
ejecucin de la funcin actual, y devuelve su argumento como el valor de la
llamada a la funcin. return tambin pondr fin a la ejecucin de una
sentencia eval() o a un archivo de script.
Si se llama desde el mbito global, entonces la ejecucin del script actual se
termina. Si el archivo script actual fue incluido o requerido con include orequire,
entonces el control es pasado de regreso al archivo que hizo el llamado. Adems,
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 ejecucin del
script. Si el archivo script actual fue nombrado por las opciones de
configuracin auto_prepend_file oauto_append_file en php.ini, entonces se
termina la ejecucin de ese archivo script.
Para ms informacin, ver Retornando valores.
Nota: Cabe sealar que dado que return es un constructor del lenguaje y no una
funcin, los parntesis que rodean su argumentos no son necesarios. Es comn no
utilizarlos, y en realidad se debera hacer as a fin de que PHP tenga menos trabajo
que hacer en este caso.
Nota: Si no se suministra un parmetro, entonces el parntesis debe omitirse
y NULL ser retornado. Llamadas a return con parntesis pero sin argumentos
resultarn en un error del intrprete.
Nota: Nunca se deben usar parntesis al rededor de la variable de retorno
cuando se retorna por referencia, ya que esto no funcionar. Slo 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 expresin ($a) (el cual es, por supuesto, el valor de $a).
require
(PHP 4, PHP 5)


require es idntico 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 slo emitir una advertencia (E_WARNING) lo cual permite continuar el
script.
Vase la documentacin de include para ms informacin.
include
(PHP 4, PHP 5)
La sentencia include incluye y evala el archivo especificado.
La siguiente documentacin tambin 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
elinclude_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 unerror 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 ms informacin sobre como PHP maneja la inclusin de archivos y la ruta de
accesos para incluir, ver la documentacin de include_path.
Cuando se incluye un archivo, el cdigo que contiene hereda el mbito de las
variables de la lnea en la cual ocurre la inclusin. Cualquier variable disponible en
esa lnea 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 bsico 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 inclusin ocurre al interior de una funcin dentro del archivo que hace el
llamado, entonces todo el cdigo contenido en el archivo llamado se comportar
como si hubiera sido definida dentro de esa funcin. Por lo tanto, seguir el mbito
de las variables de esa funcin. Una excepcin a esta regla son las constantes
mgicas las cuales son evaluadas por el intrprete antes que ocurra la inclusin.
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 intrprete abandona el modo PHP e ingresa al
modo HTML al comienzo del archivo objetivo y se reanuda de nuevo al final. Por
esta razn, cualquier cdigo al interior del archivo objetivo que deba ser ejecutado
como cdigo PHP, tendr que ser encerrado dentro de etiquetas vlidas de
comienzo y terminacin de PHP.
Si las "envolturas URL include" estn activadas en PHP, se puede especificar el
archivo a ser incluido usando una URL (va 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
cdigo PHP, las variables se pueden pasar al archivo incluido usando una string de


peticin 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 funcin, 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 arch
ivos
* .php y no archivos .txt. Adems, aqu 'Funciona' quiere decir que las variable
s
* $foo y $bar estn 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
extensin del archivo y del hecho de si el servidor remoto corre PHP o no) pero
aun as tiene que producir un script PHP vlido, 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 funcin para usar. De lo
contrario, debe tenerse especial cuidado para asegurar que el script remoto
produce un cdigo vlido y deseado.


Ver tambin Archivos remotos, fopen() y file() para informacin relacionada.
Manejando retornos: include devuelve FALSE en caso de falla y eleva una
advertencia. Inclusiones exitosas, a menos que sea reemplazado por el archivo
incluido, devolver 1. 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. Adems, es posible retornar valores desde los archivos
incluidos. Se puede tomar el valor de la llamada "include" de la misma forma como
se hara con una funcin normal. Esto no es, sin embargo, posible si se incluyen
archivos remotos, a menos que la salida del archivo remoto tenga unas etiquetas
vlidas de inicio y terminacin de PHP (igual que con cualquier archivo local). Se
pueden declarar las variables necesarias dentro de esas etiquetas y sern
introducidas en cualquiera sea el punto del archivo en el cual fue incluido.
Debido a que include es un constructor especial del lenguaje, los parntesis 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. Ntese 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 despus. 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
despus 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 automtica dentro de scripts, vase tambin
las opciones de configuracin auto_prepend_file andauto_append_file en php.ini.


Nota: Puesto que esto es una construccin del lenguaje y no una funcin, no
puede ser llamada usando funciones variables.
Ver
tambin require, require_once, include_once, get_included_files(), readfile(), virtu
al() y include_path.
require_once
(PHP 4, PHP 5)
La sentencia require_once es idntica 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 documentacin de include_once para informacin 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 evala el fichero especificado durante la
ejecucin del script. Es un comportamiento similar al de la sentenciainclude,
siendo la nica diferencia que si el cdigo del fichero ya ha sido incluido, no se
volver a incluir. Como su nombre lo indica, ser incluido slo una vez.
include_once puede ser usado en casos donde el mismo fichero podra ser
incluido y evaluado ms de una vez durante una ejecucin particular de un script,
as que en este caso, puede ayudar a evitar problemas como la redefinicin de
funciones, reasignacin de valores de variables, etc.
Ver la documentacin de include para informacin sobre como trabaja esta
funcin.
Nota:
Con PHP 4, la funcionalidad _once difiere entre sistemas operativos insensibles a
maysculas y minsculas (como Windows) as que por ejemplo:
Ejemplo #1 include_once con un SO insensible a maysculas y
minsculas en PHP 4
<?php
include_once "a.php"; // esto incluir a.php
include_once "A.php"; // esto incluir a.php otra vez! (slo 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.phpsea identificado igual
que C:\Program Files\a.php y el fichero sea incluido slo una vez.
goto
(PHP 5 >= 5.3.0)
El operador goto puede ser usado para saltar a otra seccin en el programa. El
punto de destino es especificado mediante una etiqueta seguida de dos puntos y la
instruccin 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 funcin o mtodo, 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 comn 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 sera:
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 sera:
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 sera:
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 lnea 2)
Nota:
El operador goto est disponible a partir de PHP 5.3.

Imagen cortesa de xkcd
Funciones definidas por el usuario
Una funcin puede ser definida usando una sintaxis como la siguiente:
Ejemplo #1 Pseudo cdigo para demostrar el uso de funciones
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Funcin de ejemplo.\n";
return $valordevuelto;
}
?>
Cualquier cdigo PHP vlido puede aparecer dentro de una funcin, incluso otras
funciones y definiciones de clases.
Los nombres de las funciones siguen las mismas reglas que otras etiquetas de
PHP. Un nombre de funcin vlido comienza con una letra o guin bajo, seguido de


cualquier nmero de letras, nmeros, o guiones bajos. Como expresin regular se
expresara as: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
Sugerencia
Vea tambin Guia de Entorno de Usuario para Nombres.
Las funciones no necesitan ser definidas antes de que se
referencien, excepto cuando una funcin est condicionalmente definida como se
muestra en los dos ejemplos de abajo.
Cuando una funcin 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 an,
pero podemos llamar a bar() */

bar();

if ($haceralgo) {
function foo()
{
echo "No existo hasta que la ejecucin del programa llegue hasta m.\n";
}
}

/* Ahora podemos llamar de forma segura a foo()
ya que $haceralgo se evalu como verdadero */

if ($haceralgo) foo();

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 an 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 funcin 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 maysculas-minsculas, por
lo que es una buena idea llamar a las funciones tal y como aparecen en sus
declaraciones.
El nmero variable de argumentos y los argumentos predeterminados estn
soportados por las funciones. Vea tambin las referencias de funciones
para func_num_args(), func_get_arg(), y func_get_args() para ms informacin.
En PHP es posible llamar a funciones recursivas. Sin embargo, evite las llamadas a
funciones/mtodos recursivos con ms de 100-200 niveles de recursividad ya que
pueden agotar la pila y causar la terminacin del script actual.
Ejemplo #4 Funciones recursivas
<?php
function recursividad($a)
{
if ($a < 20) {
echo "$a\n";
recursividad($a + 1);
}
}
?>


Argumentos de funciones
La informacin 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 tambin estn soportadas, vea tambin las referencias de funciones
para func_num_args(), func_get_arg(), yfunc_get_args() para ms informacin.
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 funcin se cambia, no se cambia fuera de la
funcin). Para permitir a una funcin modificar sus argumentos, stos deben
pasarse por referencia.
Para hacer que un argumento a una funcin sea siempre pasado por referencia
hay que poner delante del nombre del argumento el signo 'ampersand' (&) en la
definicin de la funcin:
Ejemplo #2 Pasar parmetros de una funcin por referencia
<?php
function aadir_algo(&$cadena)
{
$cadena .= 'y algo ms.';
}
$cad = 'Esto es una cadena, ';
aadir_algo($cad);
echo $cad; // imprime 'Esto es una cadena, y algo ms.'
?>
Valores de argumentos predeterminados
Una funcin puede definir valores predeterminados al estilo C++ para argumentos
escalares como sigue:
Ejemplo #3 Uso de parmetros 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 sera:
Hacer una taza de capuchino.
Hacer una taza de .
Hacer una taza de espresso.
PHP tambin 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 expresin constante, no (por ejemplo) una
variable, un miembro de una clase o una llamada a una funcin.
Observe que cuando se usan argumentos predeterminados, cualquiera de ellos
debera estar a la derecha de los argumentos no predeterminados; si no, las cosas
no funcionarn como se esperaba. Considere el siguiente trozo de cdigo:
Ejemplo #5 Uso incorrecto de argumentos predeterminados en una
funcin
<?php
function haceryogur($tipo = "acidfilo", $sabor)
{
return "Hacer un tazn de yogur $tipo de $sabor.\n";
}

echo haceryogur("frambuesa"); // no funcionar como se esperaba
?>
El resultado del ejemplo sera:


Warning: Missing argument 2 in call to haceryogur() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Hacer un tazn de yogur frambuesa de .
Ahora compare el ejemplo de arriba con este:
Ejemplo #6 Uso correcto de argumentos predeterminados en una
funcin
<?php
function haceryogur($sabor, $tipo = "acidfilo")
{
return "Hacer un tazn de yogur $tipo de $sabor.\n";
}

echo haceryogur("frambuesa"); // funciona como se esperaba
?>
El resultado del ejemplo sera:
Hacer un tazn de yogur acidfilo de frambuensa.
Nota: A partir de PHP 5, los argumentos que son pasados por referencia pueden
tener un valor predeterminado.
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 fcil 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 an puede ser
proporcionada explcitamente 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 funcin finalice su
ejecucin inmediatamente y pase el control de nuevo a la lnea desde la que fue
llamada. Vase return para ms informacin.
Nota:
Si se omite return ser devuelto el valor NULL.
Ejemplo #1 Uso de return
<?php
function cuadrado($nm)
{


return $nm * $nm;
}
echo cuadrado(4); // imprime '16'.
?>
Una funcin no puede devolver mltiples valores, pero se pueden obtener
resultados similares devolviendo un array.
Ejemplo #2 Devolver un array para obtener mltiples valores
<?php
function nmeros_pequeos()
{
return array (0, 1, 2);
}
list ($cero, $uno, $dos) = nmeros_pequeos();
?>
Para devolver una referencia desde una funcin use el operador de referencia &,
en la declaracin de la funcin y cuando se asigne el valor devuelto a una variable:
Ejemplo #3 Devolver una referencia desde una funcin
<?php
function &devolver_referencia()
{
return $algunaref;
}

$nuevaref =& devolver_referencia();
?>
Para ms informacin 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 parntesis anexos a l, PHP buscar una funcin 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 funcionarn 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 funcin variable


<?php
function foo() {
echo "En foo()<br />\n";
}

function bar($arg = '')
{
echo "En bar(); el argumento era '$arg'.<br />\n";
}

// Esta es una funcin 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()
?>
Los mtodos de objetos tambin puede ser llamados con la sintaxis de funciones
variables.
Ejemplo #2 Ejemplo de mtodo variable
<?php
class Foo
{
function Variable()
{
$nombre = 'Bar';
$this->$nombre(); // Esto llama al mtodo Bar()
}

function Bar()
{
echo "Esto es Bar";
}
}

$foo = new Foo();
$nombrefunc = "Variable";
$foo->$nombrefunc(); // Esto llama a $foo->Variable()



?>
Cuando se llaman a mtodos estticos, la llamada a la funcin es ms fuerte que
el operador de propiedad static:
Ejemplo #3 Ejemplo de mtodo variable con propiedades estticas
<?php
class Foo
{
static $variable = 'propiedad esttica';
static function Variable()
{
echo 'Mtodo Variable llamado';
}
}

echo Foo::$variable; // Esto imprime 'propiedad esttica'. No necesita una $vari
able en este mbito.
$variable = "Variable";
Foo::$variable(); // Esto llama a $foo-
>Variable() leyendo $variable en este mbito.

?>
Vase tambin is_callable(), call_user_func(), variables
variables y function_exists().
Funciones internas (incluidas)
PHP se estandariza con muchas funciones y construcciones. Tambin existen
funciones que necesitan extensiones especficas de PHP compiladas, si no,
aparecern errores fatales "undefined function" ("funcin no definida"). Por
ejemplo, para usar las funciones de image tales comoimagecreatetruecolor(), PHP
debe ser compilado con soporte para GD. O para usar mysql_connect(), PHP debe
ser compilado con soporte paraMySQL. Hay muchas funciones de ncleo que est
incluidas en cada versin de PHP, tales como las funciones de string y de variable.
Una llamada aphpinfo() o get_loaded_extensions() mostrar las extensiones que
estn cargadas en PHP. Observe tambin que muchas extensiones estn
habilitadas por defecto y que el manual de PHP est dividido por extensiones.
Vase configuracin, instalacin, y captulos individuales de extensiones para ms
informacin sobre cmo configurar PHP.
Interpretar y comprender un prototipo de una funcin est explicado dentro de la
seccin del manual titulada cmo interpretar la definicin de una funcin. Es
importante comprender lo que devuelve una funcin o si una funcin funciona
directamente con un valor pasado. Por ejemplo,str_replace() devolver la cadena
modificada mientras que usort() funciona con la variable actual pasada. Cada


pgina del manual tambin tiene informacin especfica para cada funcin, como
informacin sobre parmetros de funciones, cambios de comportamiento, valores
devueltos en caso de xito o fallo, e informacin de disponibilidad. Conocer estas
importantes diferencias (a menudo imperceptibles) es crucial para escribir cdigo
de PHP correcto.
Nota: Si los parmetros dados a una funcin no son los que se esperaban, como
pasar un array donde se esperaba un string, el valor devuelto de la funcin ser
indefinido. En este caso lo ms probable es que devuelva NULL pero esto es slo
una convencin, y no se puede confiar en ello.
Vase tambin function_exists(), la referencia de
funciones, get_extension_funcs(), y dl().
Funciones annimas
Las funciones annimas, tambin conocidas como clausuras (closures), permiten
la creacin de funciones que no tienen un nombre especificado. Son ms tiles
como valor de los parmetros de llamadas de retorno, pero tienen muchos otros
usos.
Ejemplo #1 Ejemplo de funcin annima
<?php
echo preg_replace_callback('~-([a-z])~', function ($coincidencia) {
return strtoupper($coincidencia[1]);
}, 'hola-mundo');
// imprime holaMundo
?>
Las clausuras tambin se pueden usar como valores de variables; PHP
automticamente convierte tales expresiones en instancias de la clase
internaClosure. Se asume que una clausura a una variable usa la misma sintaxis
que cualquier otra asignacin, incluido el punto y coma final:
Ejemplo #2 Ejemplo de asignacin de variable de una funcin annima
<?php
$saludo = function($nombre)
{
printf("Hola %s\r\n", $nombre);
};

$saludo('Mundo');
$saludo('PHP');
?>
Las clausuras tambin pueden heredar variables del mbito padre. Cualquier
variable de estas debe ser declarada en la cabecera de la funcin. 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
funcin se est ejecutando. El mbito padre de una clausura es la funcin en la
que la clausura fue declarado (no necesariamente la funcin desde la que se
llam). Vea el siguiente ejemplo:
Ejemplo #3 Clausuras y mbito
<?php
// Un carro de compras bsico que contiene una lista de productos aadidos
// y la cantidad de cada producto. Incluye un mtodo que
// calcula el precio total de los artculos del carro usando una
// clausura 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 aadir($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($total, 2);
}
}



$mi_carro = new Carro;

// Aadir algunos artculos al carro
$mi_carro->aadir('mantequilla', 1);
$mi_carro->aadir('leche', 3);
$mi_carro->aadir('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 annimas son implementadas usando la clase Closure.
Historial de cambios
Versin Descripcin
5.4.0 $this puede ser usado en funciones annimas.
5.3.0 Las funciones annimas se encuentran disponibles.
Notas
Nota: Es posible usar func_num_args(), func_get_arg(), y func_get_args() desde
dentro de una clausura.
Clases y Objetos
Introduccin
A partir de PHP 5, el modelo de objetos ha sido reescrito para permitir un mejor
rendimiento y con ms caractersticas. Este fue un cambio importante a partir de
PHP 4. PHP 5 tiene un modelo de objetos completo.
Entre las caractersticas de PHP 5 estn la inclusin de la visibilidad, las
clases abstractas y clases y mtodos finales, mtodos
mgicos adicionales,interfaces, clonacin 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
Sugerencia
Vea tambin Guia de Entorno de Usuario para Nombres.


Lo bsico
class
La definicin bsica 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 mtodos pertenecientes a la clase.
El nombre de clase puede ser cualquier etiqueta vlida que no sea una palabra
reservada de PHP. Un nombre vlido de clase comienza con una letra o un guin
bajo, seguido de la cantidad de letras, nmeros o guiones bajos que sea. Como
una expresin regular, se expresara 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 "mtodos").
Ejemplo #1 Definicin simple de una clase
<?php
class SimpleClass
{
// Declaracin de la propiedad
public $var = 'a default value';

// Declaracin del mtodo
public function displayVar() {
echo $this->var;
}
}
?>
La pseudo-variable $this est disponible cuando un mtodo es invocado dentro del
contexto de un objeto. $this es una referencia del objeto que invoca (usualmente
el objeto al que el mtodo pertenece, pero posiblemente sea otro objeto, si el
mtodo es llamado estticamente 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 lnea arrojar un Warning si E_STRICT est habilit
ada.
A::foo();
}
}

$a = new A();
$a->foo();

// Nota: la siguiente lnea arrojar un Warning si E_STRICT est habilitada.
A::foo();
$b = new B();
$b->bar();

// Nota: la siguiente lnea arrojar un Warning si E_STRICT est habilitada.
B::bar();
?>
El resultado del ejemplo sera:
$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 unconstructor que arroje
una excepcin en caso de error. Las clases deberan ser definidas antes de la
instanciacin (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 Creacin de una instancia
<?php
$instance = new SimpleClass();

// Esto tambin 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 funcin. Una copia de un
objeto ya creado se puede lograr a travs de laclonacin de la misma.
Ejemplo #4 Asignacin 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 sera:
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 sera:
bool(true)
bool(true)
bool(true)
extends
Una clase puede heredar los mtodos y propiedades de otra clase al utilizar la
palabra clave extends en la declaracin de la clase. No es posible extender
mltiples clases; una clase slo puede heredar de una clase base.
Los mtodos y propiedades heredados pueden ser sobrescritos con la redeclaracin
de stos utilizando el mismo nombre que en la clase parent. Sin embargo, si la
clase parent defini un mtodo como final, ste no podr ser sobrescrito. Es
posible acceder a los mtodos sobrescritos o propiedades estticas
referencindolos con parent::.
Cuando se sobrescriben mtodos, la cantidad y disposicin de los parmetros
debera 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 parmetros.
Ejemplo #6 Herencia simple de clases
<?php
class ExtendClass extends SimpleClass
{
// Redefinicin del mtodo parent
function displayVar()
{
echo "Clase extendida\n";
parent::displayVar();
}
}

$extended = new ExtendClass();
$extended->displayVar();
?>


El resultado del ejemplo sera:
Clase extendida
un valor por defecto
::class
Desde PHP 5.5, la palabra clave class tambin se usa para la resolucin de
nombres de clases. Se puede obtener un string con un nombre completamente
cualificado de la clase NombreClase usando NombreClase::class. Esto es
particularmete til con clases con espacios de nombres.
Ejemplo #7 Resolucin de nombres de clases
<?php
namespace NS {
class NombreClase {
}

echo NombreClase::class;
}
?>
El resultado del ejemplo sera:
NS\NombreClase
Propiedades
Las variables pertenecientes a clases se llaman "propiedades". Tambin se les
puede llamar usando otros trminos como "atributos" o "campos", pero para los
propsitos de esta referencia se va a utilizar "propiedades". stas se definen
usando una de las palabras clave public, protected, oprivate, seguido de una
declaracin normal de variable. Esta declaracin puede incluir una inicializacin,
pero esta inicializacin debe ser un valor constante, es decir, debe poder ser
evaluada en tiempo de compilacin y no debe depender de informacin en tiempo
de ejecucin para ser evaluada.
Vase Visibilidad para ms informacin sobre el significado de 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 declaracin de propiedades en lugar de (o
adems de) public, protected, o private. Sin embargo, var ya no es necesaria.
Entre las versiones 5.0 y 5.1.3 de PHP, el uso de var fue considerado obsoleto y
emita una advertencia de nivel E_STRICT, pero a partir de PHP 5.1.3 ya no est
obsoleta y no emitir la advertencia.
Si se declara una propiedad utilizando var en lugar de public, protected,
o private, PHP tratar dicha propiedad como si hubiera sido definida como public.


Dentro de los mtodos de una clase, las propiedades no estticas pueden ser
accedidas utilizando -> (el operador de objeto): $this-
>propiedad(donde propiedad es el nombre de la propiedad). Las propiedades
estticas pueden ser accedidas utilizando ::: self::$propiedad. Vase la palabra
clave 'static' para ms informacin sobre la diferencia entre propiedades estticas
y no estticas.
La pseudo-variable $this est disponible dentro de cualquier mtodo de clase
cuando ste es invocado dentro del contexto de un objeto. $this es una referencia
al objeto que se invoca (usualmente el objeto al que pertenece el mtodo, pero
posiblemente sea otro objeto, si el mtodo es llamado estticamente desde el
contexto de un objeto secundario).
Ejemplo #1 Declaracin de propiedades
<?php
class ClaseSencilla
{
// Declaraciones de propiedades invlidas:
public $var1 = 'hola ' . 'mundo';
public $var2 = <<<EOD
hola mundo
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;

// Declaraciones de propiedades vlidas:
public $var6 = myConstant;
public $var7 = array(true, false);

// Esto se permite slo en PHP 5.3.0 y posteriores.
public $var8 = <<<'EOD'
hola mundo
EOD;
}
?>
Nota:
Existen varias funciones interesantes para manipular clases y objetos. Quiz pueda
ser interesante echar un vistazo a las Funciones de clases/objetos.
A diferencia de heredocs, nowdocs puede ser utilizado en cualquier contexto de
datos estticos, incluyendo la declaracin 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 para nowdoc fue agregado en PHP 5.3.0.
Autocarga de clases
Muchos desarrolladores que escriben aplicaciones orientadas a objetos crean un
fichero fuente PHP para cada definicin 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 necesario. Se puede definir una funcin __autoload() que
es automticamente invocada en caso de que se est intentando utilizar una
clase/interfaz que todava no haya sido definida. Al invocar a esta funcin el motor
de scripting da una ltima oportunidad para cargar la clase antes que PHP falle con
un error.
Sugerencia
spl_autoload_register() proporciona una alternativa ms flexible para la carga
automtica de clases. Por esta razn, el uso de__autoload() no se recomienda y
puede quedar obsoleta o ser eliminada en el futuro.
Nota:
Antes de 5.3.0, las excepciones lanzadas en la funcin __autoload no podan ser
capturadas en el bloque catch y resultaba en un error fatal. Desde 5.3.0+ las
excepciones lanzadas en la funcin __autoload pueden ser capturadas en el
bloque catch, con una consideracin. Si se lanza una excepcin personalizada, la
clase de dicha excepcin debe estar disponible. La funcin __autoload puede
usarse recursivamente para autocargar la clase de la excepcin personalizada.
Nota:
La autocarga no est disponible si se utiliza PHP en el modo interactivo CLI.
Nota:
Si el nombre de la clase se utiliza, por ejemplo, en call_user_func(), puede
contener algunos caracteres peligrosos tales como ../. Se recomienda no utilizar la


entrada del usuario en tales funciones, o al menos verificar dicha entrada
en __autoload().
Ejemplo #1 Ejemplo de autocarga
Este ejemplo intenta cargar las clases MiClase1 y MiClase2 desde los
ficheros MiClase1.php y MiClase2.php respectivamente.
<?php
function __autoload($nombre_clase) {
include $nombre_clase . '.php';
}

$obj = new MiClase1();
$obj2 = new MiClase2();
?>
Ejemplo #2 Otro ejemplo de autocarga
Este ejemplo intenta cargar la interfaz ITest.
<?php

function __autoload($nombre) {
var_dump($nombre);
}

class Foo implements ITest {
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>
Ejemplo #3 Autocarga con manejo de excepciones para 5.3.0+
Este ejemplo lanza una excepcin y demuestra los bloques try/catch.
<?php
function __autoload($nombre) {
echo "Intentando cargar $nombre.\n";
throw new Exception("Imposible cargar $nombre.");
}

try {
$obj = new ClaseNoCargable();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>


El resultado del ejemplo sera:
Intentando cargar ClaseNoCargable.
Imposible cargar ClaseNoCargable.
Ejemplo #4 Autocarga con manejo de excepciones para 5.3.0+ -
Excepcin personalizada ausente
Este ejemplo lanza una excepcin para una excepcin personalizada no cargable.
<?php
function __autoload($nombre) {
echo "Intentando cargar $nombre.\n";
throw new ExcepcinAusente("Imposible cargar $nombre.");
}

try {
$obj = new ClaseNoCargable();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
El resultado del ejemplo sera:
Intentando cargar ClaseNoCargable.
Intentando cargar ExcepcinAusente.

Fatal error: Class 'ExcepcinAusente' not found in testExcepcionAusente.php on
line 4
Ver tambin
unserialize()
unserialize_callback_func
spl_autoload()
spl_autoload_register()
Constructores y destructores
Constructor
void __construct ([ mixed $args [, $... ]] )
PHP 5 permite a los desarrolladores declarar mtodos constructores para las
clases. Aquellas que tengan un mtodo constructor lo invocarn en cada nuevo
objeto creado, lo que lo hace idneo para cualquier inicializacin que el objeto
pueda necesitar antes de ser usado.
Nota: Constructores parent no son llamados implcitamente si la clase child define
un constructor. Para ejecutar un constructor parent, se requiere invocar
a parent::__construct() desde el constructor child. Si el child no define un
constructor, entonces se puede heredar de la clase padre como un mtodo de
clase normal (si no fue declarada como privada).


Ejemplo #1 Utilizacin de nuevos constructores unificados
<?php
class BaseClass {
function __construct() {
print "En el constructor BaseClass\n";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "En el constructor SubClass\n";
}
}

class OtherSubClass extends BaseClass {
// heredando el constructor BaseClass
}

// En el constructor BaseClass
$obj = new BaseClass();

// En el constructor BaseClass
// En el constructor SubClass
$obj = new SubClass();

// In BaseClass constructor
$obj = new OtherSubClass();
?>
Por motivos de compatibilidad, si PHP 5 no puede encontrar una
funcin __construct() para una determinada clase y la clase no hered uno de una
clase padre, buscar el viejo estilo de la funcin constructora, mediante el nombre
de la clase. Efectivamente, esto significa que en el nico caso en el que se tendra
compatibilidad es si la clase tiene un mtodo llamado __construct() que fuese
utilizado para diferentes propsitos.
A diferencia con otros mtodos, PHP no generar un mensaje de error a nivel
de E_STRICT cuando __construct() es sobrescrito con diferentes parmetros que los
mtodos padre __construct() tienen.
A partir de PHP 5.3.3, los mtodos con el mismo nombre que el ltimo elemento
de una clase en un nombre de espacios no sern ms 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 mtodo 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 mtodo destructor ser llamado tan pronto como no
hayan otras referencias a un objeto determinado, o en cualquier otra circunstancia
de finalizacin.
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 sern llamados implcitamente
por el motor. Para ejecutar un destructor padre, se deber llamar explcitamente
a parent::__destruct() en el interior del destructor. Tambin como los
constructores, una clase child puede heredar el destructor de los padres si no
implementa uno propio.
El destructor ser invocado an si la ejecucin del script es detenida usando exit().
Llamar a exit() en un destructor evitar que se ejecuten las rutinas restantes de
finalizacin.
Nota:


Los destructores invocados durante la finalizacin del script tienen los headers
HTTP ya enviados. El directorio de trabajo en la fase de finalizacin del script
puede ser diferente con algunos SAPIs (por ej., Apache).
Nota:
Intentar lanzar una excepcin desde un destructor (invocado en la finalizacin del
script) causa un error fatal.
Visibilidad
La visibilidad de una propiedad o mtodo se puede definir anteponiendo una de las
palabras claves public, protected o private en la declaracin. Miembros de
clases declarados como public pueden ser accedidos de cualquier lado. Miembros
declarados como protected, slo 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, sern definidas como public.
Ejemplo #1 Declaracin de propiedades
<?php
/**
* Definicin 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




/**
* Definicin de MyClass2
*/
class MyClass2 extends MyClass
{
// Se puede redeclarar los mtodos 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 declaracin de una variable de PHP 4 con la palabra
clave var todava es soportado (como un sinnimo de public) por razones de
compatibilidad. En PHP 5 antes de 5.1.3, su uso genera un Warning E_STRICT.
Visibilidad de Mtodos
Los mtodos de clases pueden ser definidos como public, private, o protected.
Aquellos declarados sin ninguna palabra clave de visibilidad explcita sern
definidos como public.
Ejemplo #2 Declaracin de mtodos
<?php
/**
* Definicin de MyClass
*/
class MyClass
{
// Declaracin de un constructor public
public function __construct() { }

// Declaracin de un mtodo public
public function MyPublic() { }

// Declaracin de un mtodo protected


protected function MyProtected() { }

// Declaracin de un mtodo 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


/**
* Definicin 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 tendrn acceso a los miembros private y protected
entre ellos aunque no sean de la misma instancia. Esto es porque los detalles
especficos de implementacin 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 'Mtodo private accedido.';
}

public function baz(Test $other)
{


// Se puede cambiar la propiedad private:
$other->foo = 'hola';
var_dump($other->foo);

// Tambin se puede invocar al mtodo private:
$other->bar();
}
}

$test = new Test('test');

$test->baz(new Test('other'));
?>
El resultado del ejemplo sera:
string(5) "hola"
Mtodo private accedido.
Herencia de Objetos
La herencia es un principio de programacin 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 mtodos
pblicos y protegidos de la clase padre. A menos que una clase sobrescriba esos
mtodos, mantendrn su funcionalidad original.
Esto es til para la definicin y abstraccin de la funcionalidad y permite la
implementacin de funcionalidad adicional en objetos similares sin la necesidad de
reimplementar toda la funcionalidad compartida.
Nota:
A menos que la carga automtica 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 Resolucin de mbito (::)
El Operador de Resolucin de mbito (tambin denominado Paamayim
Nekudotayim) o en trminos simples, el doble dos-puntos, es un token que
permite acceder a elementos estticos, constantes, y sobrescribir propiedades o
mtodos de una clase.
Cuando se hace referencia a estos items desde el exterior de la definicin 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 podra, en un principio, parecer una extraa eleccin para
bautizar a un doble dos-puntos. Sin embargo, mientras se escriba 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 definicin 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 mtodos desde el interior de la definicin de la clase.
Ejemplo #2 :: desde el interior de la definicin de la clase
<?php
class OtherClass extends MyClass
{
public static $my_static = 'variable esttica';

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 definicin parent de un mtodo, PHP no
invocar al mtodo parent. Depende de la clase extendida el hecho de llamar o no
al mtodo parent. Esto tambin se aplica a definiciones de mtodos Constructores
y Destructores, Sobrecarga, y Mgicos.
Ejemplo #3 Invocando a un mtodo parent
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}

class OtherClass extends MyClass
{
// Sobrescritura de definicin parent
public function myFunc()
{
// Pero todava se puede llamar a la funcin parent
parent::myFunc();


echo "OtherClass::myFunc()\n";
}
}

$class = new OtherClass();
$class->myFunc();
?>
Vase tambin algunos ejemplos de trucos de llamadas estticas .
La palabra clave 'static'
Sugerencia
Esta pgina describe el uso de la palabra clave static para definir mtodos y
propiedades estticos. static tambin se puede usar para definir variables
estticas y para enlaces estticos en tiempo de ejecucin. Por favor, consulte estas
pginas para ms informacin sobre estos sifnificados de static.
Declarar propiedades o mtodos de clases como estticos los hacen accesibles sin
la necesidad de instanciar la clase. Una propiedad declarada como static no puede
ser accedida con un objeto de clase instanciado (aunque un mtodo esttico s lo
puede hacer).
Por motivos de compatibilidad con PHP 4, si no se utiliza ninguna declaracin
de visibilidad, se tratar a las propiedades o mtodos como si hubiesen sido
definidos como public.
Debido a que los mtodos estticos se pueden invocar sin tener creada una
instancia del objeto, la pseudo-variable $this no est disponible dentro de los
mtodos declarados como estticos.
Las propiedades estticas no pueden ser accedidas a travs del objeto utilizando el
operador flecha (->).
Invocar mtodos no estticos estticamente genera una advertencia de
nivel E_STRICT.
Como cualquier otra variable esttica de PHP, las propiedades estticas slo
pueden ser inicializadas utilizando un string literal o una constante; las
expresiones no estn permitidas. Por tanto, se puede inicializar una propiedad
esttica con enteros o arrays (por ejemplo), pero no se puede hacer con otra
variable, con el valor de devolucin de una funcin, 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
(p.ej., self,parent y static).
Ejemplo #1 Ejemplo de propiedad esttica


<?php
class Foo
{
public static $mi_static = 'foo';

public function valorStatic() {
return self::$mi_static;
}
}

class Bar extends Foo
{
public function fooStatic() {
return parent::$mi_static;
}
}


print Foo::$mi_static . "\n";

$foo = new Foo();
print $foo->valorStatic() . "\n";
print $foo->mi_static . "\n"; // "Propiedad" mi_static no definida

print $foo::$mi_static . "\n";
$nombreClase = 'Foo';
print $nombreClase::$mi_static . "\n"; // A partir de PHP 5.3.0

print Bar::$mi_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
Ejemplo #2 Ejemplo de mtodo esttico
<?php
class Foo {
public static function unMtodoEsttico() {
// ...
}
}

Foo::unMtodoEsttico();
$nombreClase = 'Foo';
$nombreClase::unMtodoEsttico(); // A partir de PHP 5.3.0
?>


Abstraccin de clases
PHP 5 introduce clases y mtodos abstractos. Las clases definidas como abstract
seguramente no son instanciadas y cualquier clase que contiene almenos un
mtodo abstracto debe ser definida como abstract. Los mtodos definidos como
abstractos simplemente declaran la estructura del mtodo, pero no pueden definir
la implementacin.
Cuando se hereda de una clase abstracta, todos los mtodos definidos como
abstract en la definicin de la clase parent deben ser redefinidos en la clase child;
adicionalmente, estos mtodos deben ser definidos con la misma visibilidad (o con
una menos restrictiva). Por ejemplo, si el mtodo abstracto est definido como
protected, la implementacin de la funcin puede ser redefinida como protected o
public, pero nunca como private. Por otra parte, las estructuras de los mtodos
tienen que coincidir; es decir, la implicacin de tipos y el nmero de argumentos
requeridos deben ser los mismos. Por ejemplo, si la clase derivada define un
parmetro opcional, mientras que el mtodo abstracto no, no habra conflicto con
la estructura del mtodo. Esto tambin aplica a los constructores de PHP 5.4.
Antes de PHP 5.4 las estructuras del constructor podan ser diferentes.
Ejemplo #1 Ejemplo de clase abstracta
<?php
abstract class AbstractClass
{
// Forzando la extensin de clase para definir este mtodo
abstract protected function getValue();
abstract protected function prefixValue($prefix);

// Mtodo comn
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 sera:
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
Ejemplo #2 Ejemplo de clase abstracta
<?php
abstract class AbstractClass
{
// El mtodo abstracto slo necesita definir los parmetros requeridos
abstract protected function prefixName($name);

}

class ConcreteClass extends AbstractClass
{

// La clase derivada puede definir parmetros opcionales que no estn en la
estructura del prototipo
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
$prefix = "Mr";
} elseif ($name == "Pacwoman") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$prefix}{$separator} {$name}";
}
}



$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";
echo $class->prefixName("Pacwoman"), "\n";
?>
El resultado del ejemplo sera:
Mr. Pacman
Mrs. Pacwoman
Cdigos antiguos que no tengan clases o funciones definidas por el usuario
llamadas 'abstract' deberan ejecutarse sin modificaciones.
Interfaces de objetos
Las interfaces de objetos permiten crear cdigo con el cual especificamos qu
mtodos deben ser implementados por una clase, sin tener que definir cmo estos
mtodos son manipulados.
Las interfaces son definidas utilizando la palabra clave interface, de la misma
forma que con clases estndar, pero sin mtodos que tengan su contenido
definido.
Todos los mtodos 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
mtodos 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
ms de una interfaz si se deseara, separndolas cada una por una coma.
Nota:
Antes de PHP 5.3.9, una clase no puede implementar dos interfaces que
especifiquen un mtodo con el mismo nombre, ya que podra causar ambigedad.
Las versiones ms recientes de PHP permiten esto siempre y cuando los mtodos
duplicados tengan la misma firma.
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 mtodos 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 mtodo 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 b extends a
{
public function baz(Baz $baz);
}

// sto s funcionar
class c implements b
{
public function foo()
{
}

public function baz(Baz $baz)
{
}
}

// sto no funcionar y resultar en un error fatal
class d implements b
{
public function foo()
{
}

public function baz(Foo $foo)
{
}
}
?>
Ejemplo #3 Herencia mltiple de interfaces
<?php
interface a
{


public function foo();
}

interface b
{
public function bar();
}

interface c extends a, b
{
public function baz();
}

class d implements c
{
public function foo()
{
}

public function bar()
{
}

public function baz()
{
}
}
?>
Ejemplo #4 Interfaces con constantes
<?php
interface a
{
const b = 'Interface constant';
}

// Imprime: Interface constant
echo a::b;


// Sin embargo sto no funcionar ya que no est permitido
// sobrescribir constantes
class b implements a
{
const b = 'Class constant';
}
?>


Una interfaz, junto con type-hinting, proveen una buena forma de asegurarse que
determinado objeto contiene mtodos particulares. Vea el
operador instanceof y type hinting.
Traits
Desde PHP 5.4.0, PHP implementa una metodologa de reutilizacin de cdigo
llamada Traits.
Los traits (rasgos) son un mecanismo de reutilizacin de cdigo 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 mtodos sobre varias clases independientes y
pertenecientes a clases jerrquicas distintas. La semntica a la hora combinar
Traits y clases se define de tal manera que reduzca su complejidad y se eviten los
problemas tpicos asociados a la herencia mltiple y a los Mixins.
Un Trait es similar a una clase, pero con el nico objetivo de agrupar
funcionalidades muy especficas y de una manera coherente. No se puede
instanciar directamente un Trait. Es por tanto un aadido a la herencia tradicional,
y habilita la composicin 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 homnimo desde un Trait. De acuerdo con el orden de precedencia, los
miembros de la clase actual sobrescriben los mtodos del Trait, que a su vez
sobrescribe los mtodos heredados.


Ejemplo #2 Ejemplo de Orden de Precedencia
Se sobrescribe un miembro de la clase base con el mtodo insertado en
MiHolaMundo a partir del Trait DecirMundo. El comportamiento es el mismo para
los mtodos definidos en la clase MiHolaMundo. Segn el orden de precedencia los
mtodos de la clase actual sobrescriben los mtodos del Trait, a la vez que el Trait
sobrescribe los mtodos 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 sera:
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 sera:
Hola Universo!
Multiples Traits
Se pueden insertar mltiples Traits en una clase, mediante una lista separada por
comas en la sentencia use.
Ejemplo #4 Uso de Mltiples Traits
<?php
trait Hola {
public function decirHola() {
echo 'Hola ';
}
}

trait Mundo {
public function decirMundo() {
echo 'Mundo';
}
}

class MiHolaMundo {
use Hola, Mundo;
public function decirAdmiracin() {
echo '!';
}
}

$o = new MiHolaMundo();
$o->decirHola();
$o->decirMundo();
$o->decirAdmiracin();
?>
El resultado del ejemplo sera:
Hola Mundo!
Resolucin de Conflictos
Si dos Traits insertan un mtodo 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 unvocamente uno de los mtodos
conflictivos.


Como esto slo permite excluir mtodos, se puede usar el operador as para
permitir incluir uno de los mtodos conflictivos bajo otro nombre.
Ejemplo #5 Resolucin de Conflictos
En este ejemplo, Talker utiliza los traits A y B. Como A y B tienen mtodos
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 implementacin 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 {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}

class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
?>
Modificando la Visibilidad de los Mtodos
Al usar el operador as, se puede tambin ajustar la visibilidad del mtodo en la
clase exhibida.


Ejemplo #6 Modificar la Visibilidad de un Mtodo
<?php
trait HolaMundo {
public function decirHola() {
echo 'Hola Mundo!';
}
}

// Cambiamos visibilidad de decirHola
class MiClase1 {
use HolaMundo { decirHola as protected; }
}

// Mtodo alias con visibilidad cambiada
// La visibilidad de decirHola no cambia
class MiClase2 {
use HolaMundo { decirHola as private miPrivadoHola; }
}
?>
Traits Compuestos de Traits
Al igual que las clases, los Traits tambin pueden hacer uso de otros Traits. Al usar
uno o ms traits en la definicin 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 Hola, Mundo;
}

class MiHolaMundo {
use HolaMundo;
}



$o = new MiHolaMundo();
$o->decirHola();
$o->decirMundo();
?>
El resultado del ejemplo sera:
Hola Mundo!
Miembros Abstractos de Traits
Los traits soportan el uso de mtodos abstractos para imponer requisitos a la clase
a la que se exhiban.
Ejemplo #8 Expresar Resquisitos con Mtodos 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 Estticos en Traits
Los mtodos de un trait pueden referenciar a variables estticas, pero no puede
ser definido en el trait. Los traits, sin embargo, pueden definir mtodo estticos a
la clase a la que se exhiben.
Ejemplo #9 Variables estticas
<?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 Mtodos Estticos
<?php
trait EjemploEstatico {
public static function hacerAlgo() {
return 'Hacer algo';
}
}

class Ejemplo {
use EjemploEstatico;
}

Ejemplo::hacerAlgo();
?>
Propiedades
Los traits tambin 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 definicin de la
clase es compatible (misma visibilidad y valor inicial) o de otro modo un error
fatal.
Ejemplo #12 Resolucin de Conflictos
<?php
trait PropiedadesTrait {
public $misma = true;
public $diferente = false;
}

class EjemploPropiedades {
use PropiedadesTrait;
public $misma = true; // Estndares estrictos
public $diferente = true; // Error fatal
}
?>
Sobrecarga
La sobrecarga en PHP ofrece los medios para "crear" dinmicamente propiedades y
mtodos. Estas entidades dinmicas se procesan por los mtodos mgicos que se
pueden establecer en una clase para diversas acciones.
Se invoca a los mtodos de sobrecarga cuando se interacta con propiedades o
mtodos que no se han declarado o que no son visibles en el mbito activo. A lo
largo de esta seccin usaremos los trminos "propiedades inaccesibles" y
"mtodos inaccesibles" para referirnos a esta combinacin de declaracin y
visibilidad.
Todos los mtodos sobrecargados deben definirse como public.
Nota:
No se puede pasar ninguno de los parmetros de estos mtodos mgicos por
referencia.
Nota:
La interpretacin de PHP de "overloading" es distinta de la mayora de los
lenguajes orientados a objetos. La sobrecarga tradicionalmente ofrece la capacidad
de tener mltiples mtodos con el mismo nombre, pero con un tipo o un nmero
distinto de parmetros.


Historial de cambios
Versin Descripcin
5.3.0
Se aade __callStatic. Se aadieron advertencias para hacer cumplir la visibilidad public
e impedir la declaracin static.
5.1.0 Aadidos los mtodos __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 parmetro $name es el nombre de la propiedad con la que se est
interactuando. En el mtodo __set() el parmetro $value especifica el valor que se
debe asignar a la propiedad $name.
La sobrecarga de propiedades slo funciona en contextos de objetos. Estos
mtodos mgicos no se lanzarn en contextos estticos. Por esa razn, no se
deben declarar como estticos. Desde PHP 5.3.0, se emite un aviso si alguno de
los mtodos de sobrecarga es declarado como static.
Nota:
Debido a la forma en que PHP procesa el operador de asignacin, el valor que
devuelve __set() se ignora. Del mismo modo, nunca se llama a__get() al
encadenar asignaciones como sta:
$a = $obj->b = 8;
Ejemplo #1 Sobrecarga de propiedades mediante los
mtodos __get(), __set(), __isset() y __unset()
<?php
class PropertyTest
{


/** Localizacin de los datos sobrecargados. */
private $data = array();

/** La sobrecarga no se usa en propiedades declaradas. */
public $declared = 1;

/** La sobre carga slo 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 lnea ' . $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 mtodo mgico, esta aqu para completar el ejemplo. */
public function getHidden()


{
return $this->hidden;
}
}


echo "<pre>\n";

$obj = new PropertyTest;

$obj->a = 1;
echo $obj->a . "\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 sera:
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 lnea 69
in <file>en la lnea 28
Sobrecarga de mtodos
public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )
__call() es lanzado al invocar un mtodo inaccesible en un contexto de objeto.
__callStatic() es lanzado al invocar un mtodo inaccesible en un contexto esttico.
El parmetro $name corresponde al nombre del mtodo al que se est llamando.
El parmetro $arguments es un array enumerado que contiene los parmetros que
se han pasado al mtodo $name.
Ejemplo #2 Sobrecarga de mtodos mediante los
mtodos __call() and __callStatic()
<?php
class MethodTest
{
public function __call($name, $arguments)
{
// Nota: el valor $name es sensible a maysculas.
echo "Llamando al mtodo de objeto '$name' "
. implode(', ', $arguments). "\n";
}

/** Desde PHP 5.3.0 */
public static function __callStatic($name, $arguments)
{
// Nota: el valor $name es sensible a maysculas.
echo "Llamando al mtodo esttico '$name' "
. implode(', ', $arguments). "\n";
}
}

$obj = new MethodTest;
$obj->runTest('en contexto de objeto');

MethodTest::runTest('en contexto esttico'); // Desde PHP 5.3.0
?>
El resultado del ejemplo sera:
Llamando al mtodo de objeto 'runTest' en contexto de objeto
Llamando al mtodo esttico 'runTest' en contexto esttico


Iteracin de objetos
PHP 5 ofrece una manera para que los objetos sean definidos por lo que es posible
iterar a travs de una lista de elementos, con, por ejemplo, una sentencia foreach.
Por defecto, todas las propiedades visibles sern utilizados para la iteracin.
Ejemplo #1 Iteracin 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 sera:
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 travs de todas las
propiedades visibles que se puedan acceder.
Para dar un paso ms, se puede implementar la interfaz Iterator. Esto permite al
objeto decidir cmo ser iterado y qu valores estarn disponibles en cada
iteracin.
Ejemplo #2 Iteracin 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 sera:
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 mtodos de Iterator. IteratorAggregate solamente requiere la
implementacin de un nico mtodo, IteratorAggregate::getIterator(), el cual
debera devolver una instancia de una clase que implementeIterator.
Ejemplo #3 Iteracin de objeto implementando IteratorAggregate
<?php
class MyCollection implements IteratorAggregate
{
private $items = array();
private $count = 0;

// Se requiere la definicin 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 sera:
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 ms ejemplos de iteradores, vea la extensin SPL.
Nota:


Los usuarios de PHP 5.5 y posteriores pueden investigar los generadores, que
posibilitan una forma alternativa de definir iteradores.
Mtodos mgicos
Los nombres de
mtodo __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __is
set(), __unset(), __sleep(), __wakeup(),__toString(), __invoke(), __set_state() y
__clone() son mgicos en las clases PHP. No se puede tener mtodos con estos
nombres en cualquiera de las clases a menos que desee la funcionalidad mgica
asociada a estos.
Precaucin
PHP se reserva todos los nombres de los mtodos que comienzan con __ como
mgicos. Se recomienda que no utilice los nombres de mtodos con __ en PHP a
menos que desee alguna funcionalidad mgica documentada.
__sleep() y __wakeup()
public array __sleep ( void )
void __wakeup ( void )
serialize() comprueba si la clase tiene un mtodo con el nombre mgico __sleep().
Si es as, el mtodo se ejecuta antes de cualquier serializacin. 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 mtodo 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 resultara 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. Adems, el mtodo es til si tiene objetos
muy grandes que no necesitan guardarse por completo.
Por el contrario, unserialize() comprueba la presencia de un mtodo con el nombre
mgico __wakeup(). Si est presente, este mtodo 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 serializacin y realizar otras
tareas de reinicializacin.
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 mtodo __toString() permite a una clase decidir cmo comportarse cuando se le
trata como un string. Por ejemplo, lo que echo $obj; mostrara. Este mtodo debe
devolver un string, si no se emitir un nivel de error fatal E_RECOVERABLE_ERROR.
Advertencia
No se puede lanzar una excepcin desde dentro un mtodo __toString(). Hacerlo
resultar en un error fatal.
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 sera:
Hola Mundo
Antes de PHP 5.2.0 el mtodo __toString() se llama slo 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 conversin de los objetos
sin el mtodo __toString() a string podra causar E_RECOVERABLE_ERROR.
__invoke()
mixed __invoke ([ $... ] )
El mtodo __invoke() es llamado cuando un script intenta llamar a un objeto como
si fuera una funcin.
Nota:
Esta caracterstica 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 sera:
int(5)
bool(true)
__set_state()
static object __set_state ( array $properties )
Este mtodo static es llamado para las clases exportadas por var_export(), desde
PHP 5.1.0.
El nico parmetro de este mtodo 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($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);

?>


El resultado del ejemplo sera:
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 mtodo, antecediendo su definicin con final. Si la propia clase se
define como final, entonces no se podr heredar de ella.
Ejemplo #1 Ejemplo de mtodos 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 funcin 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 (B
aseClass)
?>
Nota: Las propiedades no pueden declararse como final. Slo pueden las clases y
los mtodos.
Clonacin 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, sera si tuviramos 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 sera 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 rplica del objeto principal,
se espera que se cree una nueva instancia de este otro objeto, de forma que la
rplica tenga su propia copia
Para crear una copia de un objeto se utiliza la palabra clave clone (que invoca, si
fuera posible, al mtodo __clone() del objeto). No se puede llamar al
mtodo __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,
mantendrn las referencias.
void __clone ( void )
Una vez que la clonacin ha finalizado, se llamar al mtodo __clone() del nuevo
objeto (si el mtodo __clone() estuviera definido), para permitirle realizar los
cambios necesarios sobre sus propiedades.
Ejemplo #1 Clonacin 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 sera:
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
)

)
Comparacin de Objetos
En PHP 5, la comparacin de objetos es ms 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 comparacin (==), 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 idnticas s y slo s hacen referencia a la misma instancia de la misma
clase.
Un ejemplo aclarar estas reglas.
Ejemplo #1 Ejemplo de comparacin 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 sera:
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 comparacin de sus
objetos (==).
Implicacin de Tipos
Desde PHP 5 se incorpora la implicacin de tipos. Ahora, las funciones pueden
obligar a sus parmetros a que sean objetos (especificando el nombre de la clase
en el prototipo de la funcin), interfaces, arrays (desde PHP 5.1) o
tipos callable (despe PHP 5.4). Sin embargo, si se usa NULLcomo el valor
predeterminado del parmetro, estar permitido como un argumento para
cualquier llamada posterior.
Si se especifica una clase o una interfaz como tipo implicado, tambin estarn
permitidos todos sus hijos o implementaciones.
La implicacin de tipos no puede usarse con tipos escalares como int o string.
Tampoco estn permitidos los Resources y Traits are not allowed either.
Ejemplo #1 Ejemplos de Implicacin de Tipos
<?php
// Una clase de ejemplo
class MiClase
{
/**
* Una funcin de prueba
*
* El primer parmetro debe ser un objeto del tipo OtraClase
*/
public function prueba(OtraClase $otraclase) {
echo $otraclase->var;
}


/**
* Otra funcin de prueba
*
* El primer parmetro debe ser un array
*/
public function prueba_array(array $array_entrada) {
print_r($array_entrada);
}

/**
* El primer parmetro debe ser un iterador


*/
public function prueba_interface(Traversable $iterador) {
echo get_class($iterador);
}

/**
* El primer parmetro debe ser de tipo callable
*/
public function prueba_callable(callable $llamada_retorno, $datos) {
call_user_func($llamada_retorno, $datos);
}
}

// Otra clase de ejemplo
class OtraClase {
public $var = 'Hola Mundo';
}
?>
Si no se satisface la implicacin de tipos, 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: Muestra en pantalla Hola Mundo
$miclase->prueba($otraclase);

// Error Fatal: El argumento 1 debe ser un array
$miclase->prueba('un string');

// Funciona: Muestra en pantalla el array
$miclase->prueba(array('a', 'b', 'c'));

// Funciona: Muestra en pantalla ArrayObject
$miclase->prueba_interface(new ArrayObject(array()));

// Funciona: Muestra en pantalla int(1)


$miclase->prueba_callable('var_dump', 1);
?>
La implicacin de tipos tamben se pueden usar con funciones:
<?php
// Una clase de ejemplo
class MiClase {
public $var = 'Hola Mundo';
}

/**
* Una funcin de prueba
*
* El primer parmetro debe ser un objeto del tipo MiClase
*/
function miFuncin (MiClase $foo) {
echo $foo->var;
}

// Funciona
$miclase = new MiClase;
miFuncin($miclase);
?>
La implicacin de tipos acepta valores NULL:
<?php

/* Se acepta el valor NULL */
function prueba(stdClass $obj = NULL) {

}

prueba(NULL);
prueba(new stdClass);

?>
Enlace esttico en tiempo de ejecucin
Desde PHP 5.3.0, PHP incorpora una nueva funcionalidad llamada enlace esttico
en tiempo de ejecucin que permite hacer referencias a la clase en uso dentro de
un contexto de herencia esttica.
De forma ms precisa, un enlace esttico en tiempo de ejecucin para funcionar
almacena el nombre de clase de la ltima llamada que no tenga "propagacin". En
el caso de las llamadas a mtodos estticos, se trata de la clase a la que se llam
explcitamente (normalmente, la que precede al operador ::); en los casos de
llamadas a mtodos que no son estticos, se resolvera a la clase del objeto. Una


"llamada con propagacin" es una llamada esttica que est precedida
por self::, parent::, static::, o, si seguimos la jerarqua de
clases, forward_static_call(). La funcinget_called_class() puede utilizarse para
obtener un string con el nombre de la clase que realiza la llamada,
y static:: revela cul es su alcance.
Se le ha llamado "enlace esttico en tiempo de ejecucin" teniendo en cuenta un
punto de vista interno. "Enlace en tiempo de ejecucin" viene del hecho de
que static:: ya resuelve a la clase en la que se defini el mtodo, sino que en su
lugar se resolver utilizando informacin en tiempo de ejecucin debido a que se
puede utilizar (entre otras cosas) para las llamadas de mtodos estticos, se le
llam tambin "enlace esttico".
Limitaciones de self::
Las referencias estticas 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 funcin:
Ejemplo #1 Uso de self::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
self::who();
}
}

class B extends A {
public static function who() {
echo __CLASS__;
}
}

B::test();
?>
El resultado del ejemplo sera:
A
Uso de Enlace Esttico en Tiempo de ejecucin
Los enlaces estticos en tiempo de ejecucin tratan de resolver estas limitaciones
empleando una palabra clave que haga referencia a la clase que realiz la llamada
en tiempo de ejecucin. 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 bsico de static::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // He aqu el enlace esttico en tiempo de ejecucin
}
}

class B extends A {
public static function who() {
echo __CLASS__;
}
}

B::test();
?>
El resultado del ejemplo sera:
B
Nota:
En contextos no estticos, la clase que realiza la llamada ser la clase del objeto
instanciado. Dado que $this-> tratar de invocar mtodos privados en su mismo
mbito, el uso de static:: puede provocar diferents resultados. Otra diferencia es
que static:: slo puede hacer referencia a propiedades estticas.
Ejemplo #3 Uso de static:: en un contexto no esttico
<?php
class A {
private function foo() {
echo "exito!\n";
}
public function test() {
$this->foo();
static::foo();
}
}

class B extends A {
/* foo() se copiar en B, por lo tanto su mbito seguir siendo A
* y la llamada tendr xito */
}

class C extends A {


private function foo() {
/* se reemplaza el mtodo original; el mbito del nuevo es ahora C */
}
}

$b = new B();
$b->test();
$c = new C();
$c->test(); //falla
?>
El resultado del ejemplo sera:
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 esttica, la resolucin de enlaces estticos
en tiempo de ejecucin se dentendr sin propagarse. Por otra parte, las llamadas
estticas que utilicen palabras clave como parent:: o self:: s propagarn la
informacin.
Ejemplo #4 Llamadas que propagan y que no propagan
<?php
class A {
public static function foo() {
static::who();
}

public static function who() {
echo __CLASS__."\n";
}
}

class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}

public static function who() {
echo __CLASS__."\n";
}


}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}

C::test();
?>
El resultado del ejemplo sera:
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 omisin los objetos se pasan por referencia". Esto no es completamente
cierto. Esta seccin 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 parmetro, 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 A {
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 sera:
2
2
2
Serializacin de objetos
serializacin de objetos - objetos en sesiones
La funcin 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 mtodos no se guardarn, slo 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 definicin de la clase A. Esto se puede hacer, por ejemplo, escribiendo
la definicin de la clase A en un fichero, para despus o bien incluirlo, o bien hacer
uso de la funcin spl_autoload_register().
<?php
// classa.inc:

class A {
public $one = 1;

public function show_one() {
echo $this->one;
}
}

// page1.php:

include("classa.inc");



$a = new A;
$s = serialize($a);
// almacenamos $s en algn 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 aplicacin est usando sesiones, y utiliza session_register() para registrar
objetos, estos objetos se serializarn automticamente al final de cada pgina
PHP, y se deserializan tambin automticamente en cada una de las siguientes
peticiones. Esto significa que, una vez que formen parte de la sesin, estos objetos
se podrn utilizar en cualquier pgina de la aplicacin. Sin embargo, la
funcin session_register(): ha sido borrada a partir de PHP 5.4.0
Si una aplicacin serializa objetos para su uso posterior, se recomienda
encarecidamente que se incluya la definicin de la clase en toda la aplicacin. Si
no se hiciera, se deserializara el objeto sin una definicin de clase, lo cual dara
como resultado que PHP definiera al objeto con la
clase__PHP_Incomplete_Class_Name, que no tiene mtodos, haciendo que el
objeto no fuera til.
Por tanto, si en el ejemplo anterior $a se guardara en una sesin
mediante session_register("a"), sera necesario incluir el fichero classa.inc en
todas las pginas, no slo en page1.php y page2.php.
Ms all del consejo de arriba, observe que tambin se puede conectar con
eventos de serializacin y deserializacin sobre un objeto usando los
mtodos __sleep() y __wakeup(). El uso de __sleep() tambin permite serializar
nicamente un subconjunto de propiedades de objetos.
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 estn documentadas dentro
de la documentacin de POO 5.


Versin Descripcin
5.4.0
Cambiado: Si una clase abstracta define una firma para el constructor
ahora se har cumplir.
5.3.3
Cambiado: Los mtodos con el mismo nombre que el ltimo elemento de
un nombre de clase perteneciente a un espacio de nombres ya no sern
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 omisin de los
mtodos de una clase que implemente un interfaz coincidan con los
valores por omisin 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
mtodo mgico se le declara como esttico. Adems, hace necesario que
tengan visibilidad pblica.
5.3.0
Cambiado: Antes de 5.3.0, las excepciones lanzadas en la
funcin __autoload() no podan capturarse en el bloque catch, y
provocaban un error fatal. Ahora, las excepciones lanzadas dentro de la
funcin __autoload pueden capturarse en el bloque catch, con una nica
salvedad. Si se lanza una excepcin definida por el usuario, entonces
esta excepcin debera estar disponible. Se puede utilizar
recursivamente la funcin __autoload para cargar automticamente la
clase de la excepcin definida por el usuario.
5.3.0 Aadido: El mtodo __callStatic.
5.3.0
Aadido: Soporte heredoc y nowdoc para constantes de clase y
definicin 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 Aadido: Enlaces estticos en tiempo de ejecucin.


Versin Descripcin
5.3.0 Aadido: El mtodo __invoke().
5.2.0
Cambiado: Al mtodo __toString() slo 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 mtodo __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 emita 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 mtodo esttico __set_state() en las
clases exportadas por var_export().
5.1.0 Aadido: Los mtodos __isset() y __unset().
Visin general de los espacios de nombres
(PHP 5 >= 5.3.0)
Qu son los espacios de nombres? En su definicin ms 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 actan 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. Adems, para
acceder al archivofoo.txt fuera del directorio /home/greg se debe aadir 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 programacin.
En el mundo de PHP, los espacios de nombres estn diseados para solucionar dos
problemas que los autores de bibliotecas y aplicaciones se encuentran cuando
crean elementos de cdigo reusable tales como clases o funciones:
1. El conflicto de nombres entre el cdigo 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 diseado para
aliviar el problema en primer lugar, mejorando la legibilidad del cdigo
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; // vase la seccin "Definir Espacios de Nombres"

class MiClase {}
function mifuncin() {}
const MICONSTANTE = 1;

$a = new MiClase;
$c = new \mi\nombre\MiClase; // vase la seccin "Espacio Global"

$a = strlen('hola'); // vase la seccin "Usar espacios de nombres: una alternat
iva a
// funciones/constantes globales"

$d = namespace\MICONSTANTE; // vase la seccin "El operador namespace y
// la constante __NAMESPACE__"
$d = __NAMESPACE__ . '\MICONSTANTE';
echo constant($d); // vase la seccin "Espacios de Nombres y caractersticas di
nmicas del lenguaje"
?>
Nota:
Los nombres de espacio de nombres PHP y php, y los nombres compuestos a
partir de estos nombres (como PHP\Classes) estn reservados para el uso del
lenguaje interno y no deben ser utilizados en el cdigo.
Definir espacios de nombres
(PHP 5 >= 5.3.0)
Aunque cualquier cdigo de PHP vlido puede estar contenido dentro de un espacio
de nombres, slo son afectados por los espacios de nombres cuatro tipos de
cdigo: 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 cdigo - con una excepcin: la palabra clave declare.


Ejemplo #1 Declarar un nico espacio de nombres
<?php
namespace MiProyecto;

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }

?>
La nica construccin de cdigo permitida antes de la declaracin de un espacio de
nombres es la sentencia declare, para declarar la codificacin de un archivo
fuente. Adems, algo que no sea cdigo de PHP no puede preceder a la declaracin
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
?>
Adems, a diferencia de otras construcciones de PHP, se puede definir el mismo
espacio de nombres en mltiples archivos, permitiendo la separacin de contenido
de espacios de nombres a travs 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 tambin
tienen la capacidad de especificar una jerarqua 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 jerarqua
<?php
namespace MiProyecto\Sub\Nivel;

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }

?>


El ejemplo de arriba crea la constante MiProyecto\Sub\Nivel\CONECTAR_OK,
la clase MiProyecto\Sub\Nivel\Conexin y la
funcinMiProyecto\Sub\Nivel\conectar.
Definir mltiples espacios de nombres en el mismo archivo
(PHP 5 >= 5.3.0)
Tambin se pueden declarar mltiples espacios de nombres en el mismo archivo.
Hay dos sintaxis permitidas.
Ejemplo #1 Declarar mltiples espacios de nombres, sintaxis de
combinacin simple
<?php
namespace MiProyecto;

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }

namespace OtroProyecto;

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
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 mltiples espacios de nombres, sintaxis de llaves
<?php
namespace MiProyecto {

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }
}

namespace OtroProyecto {

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }
}
?>


Se desaconseja encarecidamente, como prctica de cdigo, el combinar mltiples
espacios de nombres en el mismo archivo. El caso de uso principal es combinar
mltiples scripts de PHP en el mismo archivo.
Combinar cdigo global que no es de espacio de nombres con cdigo que s lo es,
slo est soportado mediante la sintaxis de llaves. El cdigo global debera estar
encerrado en una declaracin de espacio de nombres sin nombre de espacio de
nombres:
Ejemplo #3 Declarar mltiples espacios de nombres y cdigo que no es
de espacio de nombres
<?php
namespace MiProyecto {

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }
}

namespace { // cdigo global
session_start();
$a = MiProyecto\conectar();
echo MiProyecto\Conexin::iniciar();
}
?>
No puuede existir cdigo de PHP fuera de las llaves del espacio de nombres
excepto para una sentencia de apertura declare.
Ejemplo #4 Declarar mltiples espacios de nombres y cdigo que no es
de espacio de nombres
<?php
declare(encoding='UTF-8');
namespace MiProyecto {

const CONECTAR_OK = 1;
class Conexin { /* ... */ }
function conectar() { /* ... */ }
}

namespace { // cdigo global
session_start();
$a = MiProyecto\conectar();
echo MiProyecto\Conexin::iniciar();
}
?>


Usar espacios de nombres: Lo bsico
(PHP 5 >= 5.3.0)
Antes de hablar del uso de los espacios de nombres es importante entender cmo
sabe PHP qu elemento del cdigo del espacio de nombre se requiere. Se puede
hacer una simple analoga 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::mtodoesttico();. Si el espacio de nombres actual
esespaciodenombresactual, esto se resuelve
con espaciodenombresactual\foo. Si el cdigo es global, no es de
espacio de nombres, esto se resuelve con foo. Una advertencia: los
nombres no cualificados para funciones y constantes se resolvern con
funciones y constantes globales si la funcin o la constante del espacio de
nombres no est definida. Vase Usar espacios de nombres: una alternativa
a funciones/constantes globales para ms detalles.
2. Nombre cualificado, o un nombre de clase con prefijo como $a = new
subespaciodenombres\foo(); osubespaciodenombres\foo::mtodoe
sttico();. Si el espacio de nombres actual es espaciodenombresactual,
esto se resuelve
conespaciodenombresactual\subespaciodenombres\foo. Si el cdigo
es global, no es de espacio de nombres, esto se resuelve
consubespaciodenombres\foo.
3. Nombre completamente cualificado, o un nombre con prefijo con el
operador de prefijo global como $a = new
\espaciodenombresactual\foo(); o \espaciodenombresactual\foo::
mtodoesttico();. Esto siempre se resuelve con nombre literal
especificado en el cdigo, espaciodenombresactual\foo.
Aqu hay un ejemplo de los tres tipos de sintaxis en cdigo real:
archivo1.php


<?php
namespace Foo\Bar\subespaciodenombres;

const FOO = 1;
function foo() {}
class foo
{
static function mtodoesttico() {}
}
?>
archivo2.php
<?php
namespace Foo\Bar;
include 'archivo1.php';

const FOO = 2;
function foo() {}
class foo
{
static function mtodoesttico() {}
}

/* Nombre no cualificado */
foo(); // se resuelve con la funcin Foo\Bar\foo
foo::mtodoesttico(); // se resuelve con la clase Foo\Bar\foo, mtodo mtodoest
tico
echo FOO; // se resuelve con la constante Foo\Bar\FOO

/* Nombre cualificado */
subespaciodenombres\foo(); // se resuelve con la funcin Foo\Bar\subespaciodenom
bres\foo
subespaciodenombres\foo::mtodoesttico(); // se resuelve con la clase Foo\Bar\s
ubespaciodenombres\foo,
// mtodo mtodoesttico
echo subespaciodenombres\FOO; // se resuelve con la constante Foo\Bar\subespacio
denombres\FOO

/* Nombre conmpletamente cualificado */
\Foo\Bar\foo(); // se resuelve con la funcin Foo\Bar\foo
\Foo\Bar\foo::mtodoesttico(); // se resuelve con la clase Foo\Bar\foo, mtodo
mtodoesttico
echo \Foo\Bar\FOO; // se resuelve con la constante Foo\Bar\FOO
?>


Observe que para acceder a cualquier clase, funcin 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 funcin 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 caractersticas dinmicas del
lenguaje
(PHP 5 >= 5.3.0)
La implementacin de PHP de los espacios de nombres est influenciada por su
naturaleza dinmica como lenguaje de programacin. As, para convertir cdigo
como el del siguiente ejemplo en cdigo de espacios de nombres:
Ejemplo #1 Acceder dinmicamente 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,
funcin, o constante dinmicas, no es necesario la barra invertida inicial.
Ejemplo #2 Acceder dinmicamente 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 "\\nombreespaciodenombre
s\\nombreclase" */
$a = '\nombreespaciodenombres\nombreclase';
$obj = new $a; // imprime nombreespaciodenombres\nombreclase::__construct
$a = 'nombreespaciodenombres\nombreclase';
$obj = new $a; // tambin imprime nombreespaciodenombres\nombreclase::__construc
t
$b = 'nombreespaciodenombres\nombrefunc';
$b(); // imprime nombreespaciodenombres\nombrefunc
$b = '\nombreespaciodenombres\nombrefunc';
$b(); // tambin imprime nombreespaciodenombres\nombrefunc
echo constant('\nombreespaciodenombres\nombreconst'), "\n"; // imprime de espaci
o de nombres
echo constant('nombreespaciodenombres\nombreconst'), "\n"; // tambin imprime de


espacio de nombres
?>
Asegrese 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 mgica __NAMESPACE__, y la palabra
clave namespace.
El valor de __NAMESPACE__ es una cadena que contiene el nombre del espacio de
nombres actual. En cdigo global, cdigo que no es de espacio de nombres,
contiene una cadena vaca.
Ejemplo #1 Ejemplo de __NAMESPACE__, cdigo de espacio de nombres
<?php
namespace MiProyecto;

echo '"', __NAMESPACE__, '"'; // imprime "MiProyecto"
?>
Ejemplo #2 Ejemplo de __NAMESPACE__, cdigo global
<?php

echo '"', __NAMESPACE__, '"'; // imprime ""
?>
La constante __NAMESPACE__ es til para construir nombres dinmicamente, por
ejemplo:
Ejemplo #3 usar __NAMESPACE__ para la construccin dinmica de
nombres
<?php
namespace MiProyecto;

function obtener($nombreclase)
{
$a = __NAMESPACE__ . '\\' . $nombreclase;
return new $a;
}
?>


La palabra clave namespace se puede usar para solicitar explcitamente 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 mo; // vase "Usar espacios de nombres: Apodar/Importar"

blah\mo(); // llama a la funcin MiProyecto\blah\mo()
namespace\blah\mo(); // llama a la funcin MiProyecto\blah\mo()

namespace\func(); // llama a la funcin MiProyecto\func()
namespace\sub\func(); // llama a la funcin MiProyecto\sub\func()
namespace\nombrec::mtodo(); // llama al mtodo esttico "mtodo" de la clase Mi
Proyecto\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\CONSTANT
E a $b
?>
Ejemplo #5 El operador namespace, en cdigo global
<?php

namespace\func(); // llama a la funcin func()
namespace\sub\func(); // llama a la funcin sub\func()
namespace\nombrec::mtodo(); // llama al mtodo esttico "mtodo" de la clase no
mbrec
$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 caracterstca importante de los espacios de nombres. Esto
es similar a la capacidad de los sistemas de archivos basados en Unix de crear
enlaces simblicos 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 funcin 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 importacin:
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\NombreDeCl
ase
NombreEN\suben\func(); // llama a la funcin Mi\Completo\NombreEN\subes\func
$a = new ArrayObject(array(1)); // instancia un objeto de la clase ArrayObject
// sin el "use ArrayObject" instanciaramos un objeto de la clase foo\ArrayObjec
t
?>
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 oposicin 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 relacin al espacio de nombres actual.
PHP soporta adicionalmente un atajo apropiado para poner mltiples sentencias
use en la misma lnea
Ejemplo #2 Importar/apodar con el operador use, mltiples sentencias
use combinadas
<?php
use Mi\Completo\NombreDeClase as Otra, Mi\Completo\NombreEN;

$obj = new Otra; // instancia un objeto de la clase Mi\Completo\NombreDeClase
NombreEN\suben\func(); // llama a la funcin Mi\Completo\NombreEN\suben\func
?>
La importacin se realiza en tiempo de compilacin, y al hacerlo no afecta a los
nombres de clases, funciones o constantes.
Ejemplo #3 La importacin y los nombres dinmicos


<?php
use Mi\Completo\NombreDeClase as Otra, Mi\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
?>
Adems, la importacin slo afecta a los nombres no cualificados y cualificados.
Los nombres completamente cualificados son absolutos, y no son afectados por la
importacin.
Ejemplo #4 La importacin y los nombres completamente cualificados
<?php
use Mi\Completo\NombreDeClase as Otra, Mi\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\NombreDeCla
se\cosa
$obj = new \Otra\cosa; // instancia un objeto de la clase Otra\cosa
?>
Reglas de mbito para la importacin
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 importacin se realiza en tiempo de compilacin y no en tiempo de ejecucin,
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 importacin ilegal
<?php
namespace Languages;

class Greenlandic
{
use Languages\Danish;

...
}
?>
Nota:
Las reglas de importacin tiene una base por fichero, lo que significa que los
archivos incluidos NO heredarn las reglas de importacin del padre.


Espacio global
(PHP 5 >= 5.3.0)
Sin ninguna definicin 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 especificacin de espacio global
<?php
namespace A\B\C;

/* Esta funcin es A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // llamar a fopen global
return $f;
}
?>
Reglas de resolucin de nombres
(PHP 5 >= 5.3.0)
Aqu hay algunas definiciones importantes para los propsitos de estas reglas de
resolucin:
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 tambin es un nombre completamente
cualificado.
Los nombres se resuelven siguiendo estas reglas de resolucin:


1. Las llamadas a clases, funciones o constantes completamente
cualificadas se resuleven en tiempo de compilacin. 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
compilacin segn las reglas de importacin 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 segn la reglas de importacin
tienen aadido 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 aA\B\C\D\e().
4. Los nombres de clases no cualificados se traducen durante la
compilacin segn las reglas de importacin 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
ejecucin. Aqu se muestra cmo se resuelve una llamada a la
funcin foo():
1. Se busca una funcin desde el espacio de nombres
actual: A\B\foo().
2. Se intenta encontrar y llamar a la funcin 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
ejecucin. Aqu se muestra cmo 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():
3. Se busca una clase aadiendo al inicio el espacio de
nombres actual: A\B\D\E.
4. 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\D, C\E as F;



// llamadas a funciones

foo(); // primero se intenta llamar a "foo" definida en el esp
acio de nombres "A"
// despus se llama a la funcin global "foo"

\foo(); // se llama a la funcin "foo" definidia en el mbito g
lobal

mi\foo(); // se llama a la funcin "foo" definida en el espacio d
e nombres "A\mi"

F(); // primero se intenta llamar a "F" definida en el espac
io de nombres "A"
// despus se llama a la funcin global "F"

// referecias a clases

new B(); // crea un objeto de la clase "B" definida en el espaci
o de nombres "A"
// si no se encuentra, se intenta autocargar la clase "
A\B"

new D(); // usando las reglas de importacin, 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 importacin, 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"

// mtodos estticos/funciones de espacio de nombres desde otro esp
acio de nombres

B\foo(); // se llama a la funcin "foo" desde el espacio de nomb
res "A\B"

B::foo(); // se llama al mtodo "foo" de la clase "B" definidia e
n el espacio de nombres "A"
// si no se encuentra la clase "A\B", se intenta autoca
rgar la clase "A\B"

D::foo(); // usando las reglas de importacin, se llama al mtodo
"foo" de la clase "D"
// definida en el espacio de nombres "B"
// si no se encuentra la clase "B\D", se intenta autoca
rgar la clase "B\D"

\B\foo(); // se llama a la funcin "foo" desde el espacio de nomb
res "B"

\B::foo(); // se llama al mtodo "foo" de la clase "B" desde el m
bito global
// si no es encuentra la clase "B", se intenta autocarg
ar la clase "B"

// mtodos estticos/funciones de espacio de nombres del espacio de
nombres actual

A\B::foo(); // se llama al mtodo "foo" de la clase "B" desde el
espacio de nombres "A\A"
// si no se encuentra la clase "A\A\B", se intenta au
tocargar la clase "A\A\B"

\A\B::foo(); // se llama al mtodo "foo" de la clase "B" desde el
espacio de nombres "A"
// si no se encuentra la clase "A\B", se intenta auto
cargar la clase "A\B"
?>


FAQ: cosas que se necesitan saber sobre los espacios de nombres
Usar espacios de nombres: una alternativa a funciones/constantes
globales


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 implementacin que son tiles para comprenderlos
completamente.
Primero, las preguntas comunes.
1. Si no utilizo espacios de nombres, debera preocuparme por algo de esto?
2. Cmo uso clases internas o globales en un espacio de nombres?
3. Cmo uso clases, funciones o constantes de espacios de nombres en su
propio espacio de nombres?
4. Cmo se resuelve un nombre como \mi\nombre o \nombre?
5. Cmo se resuelve un nombre como mi\nombre?
6. Cmo se resuelve un nombre de clase no cualificado como nombre?
7. Cmo se resuelve un nombre de funcin o de constante no cualifcado
como nombre?
Existen unos pocos detalles de implementacin 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 estn permitidos.
3. Ni las funciones ni las constantes se pueden importar mediante la
sentencia use.
4. Los nombres de espacios de nombres dinmicos (identificadores entre
comillas) deberan 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, debera preocuparme por algo
de esto?
No. Los espacios de nombres no afectan a ningn cdigo existente de ninguna
manera, o a ningn cdigo todava por escribir que no contenga espacios de
nombres. Se puede escribir este cdigo 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;
?>
Cmo 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 $ejemploalusinatipo = null) {}

$a = \DirectoryIterator::CURRENT_AS_FILEINFO;

// extender una clase interna o global
class MiExcepcin extends \Exception {}
?>
Cmo 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 alusin a tipo
function probar(MiClase $ejemploalusinatipo = null) {}
// otra manera de usar una clase desde el espacio de nombres actual una alusin
a tipo
function probar(\foo\MiClase $ejemploalusinatipo = null) {}

// extender una clase desde el espacio de nombres actual
class Extendida extends MiClase {}

// acceder a una funcin global
$a = \funcglobal();

// acceder a una constante global
$b = \INI_ALL;
?>


Cmo 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 esException.
Ejemplo #5 Nombres Completamente Cualificados
<?php
namespace foo;
$a = new \mi\nombre(); // instancia a la clase "mi\nombre"
echo \strlen('hola'); // llama a la funcin "strlen"
$a = \INI_ALL; // $a est establecida al valor de la constante "INI_ALL"
?>
Cmo 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 importacin que apode a otro nombre como mi, el alias de
importacin se aplica a mi en mi\nombre.
De otro modo, al nombre del espacio de nombres actual se le aade 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 mtodo esttico "nombre" de la clase "blah\blah\ba
r"
mi\bar(); // llama a la funcin "foo\mi\bar"
$a = mi\BAR; // establece $a al valor de la constante "foo\mi\BAR"
?>
Cmo 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 importacin que apode a otro nombre como nombre, se
aplica el alias de importacin.
De otro modo, al nombre del espacio de nombres actual se le aade 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 mtodo esttico "nombre" de la clase "blah\blah"
?>
Cmo se resuelve un nombre de funcin 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 aade al inicio nombre.
Finalmente, si el nombre de la constante o de la funcin no existe en el espacio
de nombres actual, se usa un nombre de constante o funcin 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); // invoca a la funcin global "sort"
$a = array_flip($a);
return $a;
}

mi(); // calls "foo\mi"
$a = strlen('hola'); // llama a la funcin global "strlen" ya que "foo\strlen" n
o existe
$matriz = array(1,3,2);
$b = sort($matriz); // llama a la funcin "foo\sort"
$c = foo(); // llama a la funcin "foo\foo" - la importacin no se aplica

$a = FOO; // establece $a al valor de la constante "foo\FOO" -
la importacin 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 otr
o
?>
No existe conflicto entre nombres, aunque la clase MiClase exista dentro del
espacio de nombres mis\cosas, porque la definicin 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
importacin
$a = new MiClase;
?>
Los espacios de nombres anidados no estn permitidos.
PHP no permite los espacios de nombres anidados


<?php
namespace mis\cosas {
namespace anidado {
class foo {}
}
}
?>
Sin embargo, es fcil 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 funcin largas,
importe el espacio de nombres que la contiene
<?php
namespace mo;
use nombre\en\ultra\largo;

$a = largo\CONSTANT;
largo\func();
?>
Los nombres de espacios de nombres dinmicos (identificadores
entre comillas) deberan escaparse con una barra invertida.
Es muy importante darse cuenta de que ya que la barra invertida se usa como
carcter de escape dentro de cadenas, se deberan 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 lnea 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 ms seguro usar la secuencia de
escape de la barra invertida, pero an se recomienda como prctica 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 de
finida
$a = \Bar\FOO; // error fatal, constante Bar\FOO del espacio de nombres no defin
ida
?>
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 = 'estpido'; // tambin error fatal;
// etc.
?>
Excepciones
Tabla de contenidos
Ampliar las Excepciones


PHP 5 tiene un modelo de excepciones similar al de otros lenguajes de
programacin. Una excepcin puede ser lanzada (thrown), y atrapada
("catched") dentro de PHP. El cdigo puede estar dentro de un bloque try, para
facilitar la captura de excepciones potenciales. Cada bloque trydebe tener al
menos un bloque catch correspondiente. Se pueden usar mltiples
bloques catch para atrapar diferentes clases de excepciones. La ejecucin normal
(cuando no es lanzada ninguna excepcin dentro del bloque try, o cuando un
bloque catch que coincide con la clase de la excepcin lanzada no est presente)
continuar despus del ltimo bloque catch definido en la sencuencia. Las
excepciones pueden ser lanzadas(o relanzadas) dentro de un bloque catch.
Cuando una excepcin es lanzada, el cdigo siguiente a la declaracin no ser
ejecutado, y PHP intentar encontrar el primer bloque catchconicidente. Si una
excepcin no es capturada, se emitir un Error Fatal de PHP con un mensaje
"Uncaught Exception ..." ("Excepcin No Capturada"), a menos que se haya
definido un gestor con set_exception_handler().
En PHP 5.5 y posteriores, se puede utilizar un bloque finally despus de los
bloques catch. El cdigo de dentro del bloque finally siempre se ejecutar
despus de los bloques try y catch, independientemente de que se haya lanzado
una excepcin o no, y antes de que el flujo normal de ejecucin contine.
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 Informacin de Errores, slo
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 Estndar) proporciona un buen
nmero de excepciones internas.
Ejemplo #1 Lanzar una Excepcin
<?php
function inverso($x) {
if (!$x) {
throw new Exception('Divisin por cero.');
}
return 1/$x;
}

try {
echo inverso(5) . "\n";
echo inverso(0) . "\n";


} catch (Exception $e) {
echo 'Excepcin capturada: ', $e->getMessage(), "\n";
}

// Continuar la ejecucin
echo 'Hola Mundo\n';
?>
El resultado del ejemplo sera:
0.2
Excepcin capturada: Divisin por cero.
Hola Mundo
Ejemplo #2 Manejo de excepciones con un bloque finally
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Divisin por cero.');
}
return 1/$x;
}

try {
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'Excepcin capturada: ', $e->getMessage(), "\n";
} finally {
echo "Primer finally.\n";
}

try {
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Excepcin capturada: ', $e->getMessage(), "\n";
} finally {
echo "Segundo finally.\n";
}

// Continuar ejecucin
echo 'Hola Mundo\n';
?>
El resultado del ejemplo sera:
0.2
Primer finally.
Excepcin capturada: Divisin por cero.
Segundo finally.
Hola Mundo
Ejemplo #3 Excepciones Anidadas


<?php

class MiExcepcin extends Exception { }

class Prueba {
public function probar() {
try {
try {
throw new MiExcepcin('foo!');
} catch (MiExcepcin $e) {
// relanzarla
throw $e;
}
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
}

$foo = new Prueba;
$foo->probar();

?>
El resultado del ejemplo sera:
string(4) "foo!"
Ampliar las Excepciones
Una clase de Excepcin 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 excepcin
private $string; // cach de __toString
protected $code = 0; // cdigo de excepcin definido
por el usuario
protected $file; // nombre de archivo fuente de l
a excepcin
protected $line; // lnea fuente de la excepcin
private $trace; // determinacin del origen
private $previous; // excepcin previa si la excepc
in est anidada



public function __construct($message = null, $code = 0, Exception $previous
= null);

final private function __clone(); // Inhibe la clonacin de excepc
iones.

final public function getMessage(); // mensaje de excepcin
final public function getCode(); // cdigo de excepcin
final public function getFile(); // nombre de archivo fuente
final public function getLine(); // lnea fuente
final public function getTrace(); // un array de backtrace()
final public function getPrevious(); // excepcin anterior
final public function getTraceAsString(); // string formateado del seguimi
ento del origen

// Sobrescribible
public function __toString(); // string formateado para mostra
r
}
?>
Si una clase extiende la clase Exception interna y redefine el constructor, se
recomienda encarecidamente que tambin llame a parent::__construct()para
asegurarse que toda la informacin disponible haya sido asignada apropiadamente.
El mtodo __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 Excepcin resultar en
un error E_ERROR fatal.
Ejemplo #2 Extender la clase Exception (PHP 5.3.0+)
<?php
/**
* Definir una clase de excepcin personalizada
*/
class MiExcepcin extends Exception
{
// Redefinir la excepcin, por lo que el mensaje no es opcional
public function __construct($message, $code = 0, Exception $previous = null)
{
// algo de cdigo

// asegrese de que todo est asignado apropiadamente
parent::__construct($message, $code, $previous);
}



// representacin de cadena personalizada del objeto
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}

public function funcinPersonalizada() {
echo "Una funcin personalizada para este tipo de excepcin\n";
}
}


/**
* Crear una clase para probar la excepcin
*/
class ProbarExcepcin
{
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 excepcin personalizada
throw new MiExcepcin('1 no es un parmetro vlido', 5);
break;

case self::THROW_DEFAULT:
// lanzar la predeterminada.
throw new Exception('2 no est permitido como parmetro', 6);
break;

default:
// No hay excepcin, el objeto se crear.
$this->var = $avalue;
break;
}
}
}


// Ejemplo 1
try {
$o = new ProbarExcepcin(ProbarExcepcin::THROW_CUSTOM);
} catch (MiExcepcin $e) { // Ser atrapada


echo "Atrapada mi excepcin\n", $e;
$e->funcinPersonalizada();
} catch (Exception $e) { // Skipped
echo "Atrapada la Excepcin Predeterminada\n", $e;
}

// Continuar la ejecucin
var_dump($o); // Null
echo "\n\n";


// Ejemplo 2
try {
$o = new ProbarExcepcin(ProbarExcepcin::THROW_DEFAULT);
} catch (MiExcepcin $e) { // Este tipo no coincide
echo "Atrapada mi excepcin\n", $e;
$e->funcinPersonalizada();
} catch (Exception $e) { // Will be caught
echo "Atrapada la Excepcin Predeterminada\n", $e;
}

// Continuar la ejecucin
var_dump($o); // Null
echo "\n\n";


// Ejemplo 3
try {
$o = new ProbarExcepcin(ProbarExcepcin::THROW_CUSTOM);
} catch (Exception $e) { // Ser atrapada
echo "Atrapada la Excepcin Predeterminada\n", $e;
}

// Continuar la ejecucin
var_dump($o); // Null
echo "\n\n";


// Ejemplo 4
try {
$o = new ProbarExcepcin();
} catch (Exception $e) { // Saltado, sin excepcin
echo "Atrapada la Excepcin Predeterminada\n", $e;
}

// Continuar la ejecucin
var_dump($o); // ProbarExcepcin


echo "\n\n";
?>
Nota:
Las versiones de PHP 5, anteriores a PHP 5.3.0, no soportan excepciones
anidadas. El siguiente fragmento de cdigo se puede usar para reemplazar la clase
MiExcepcin si se desea ejecutar este ejemplo.
<?php
/**
* Definir una clase de excepcin personalizada
*/
class MiExcepcin extends Exception
{
// Redefinir la excepcin, por lo que el mensaje no es opcional
public function __construct($message, $code = 0) {
// algo de cdigo

// asegrese de que todo est asignador apropiadamente
parent::__construct($message, $code);
}

// representacin de cadena personalizada del objeto
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}

public function funcinPersonalizada() {
echo "Una funcin personalizada para este tipo de excepcin\n";
}
}
?>
Generadores
Informacin general
(PHP 5 >= 5.5.0)
Los generadores proporcionan un modo fcil de implementar iteradores simples sin
la sobrecarga o complejidad de implementar una clase que implemente la
interfaz Iterator.
Un generador permite escribir cdigo que utilice foreach para iterar sobre un
conjunto de datos sin que sea necesario cargar el array en memoria, lo que puede
ocasionar que se exceda el lmite de memoria, o requiera una cantidad
considerable de tiempo de procesado para generarse. En su lugar, se puede
escribir una funcin generadora, que es igual que una funcin normal, con la
salvedad de que en vez de hacer un solo return, un generador puede


invocar yield tantas veces como necesite para proporcionar valores por los que
iterar.
Un ejemplo simple de esto es reimplementar la funcin range() como un
generador. La funcin estndar range() tiene que generar un array con cada uno
de los valores y devolverlo, lo que puede resultar en arrays grandes: por ejemplo,
llamar range(0, 1000000) resultar en ms de 100 MB de memoria utilizada.
Como alternativa, se puede implementar un generador xrange(), que slo
necesitar memoria para crear un objeto Iterator y controlar el estado actual del
generador de manera interna, lo que no ocupa ms de 1 kilobyte.
Ejemplo #1 Implementando range() como generador
<?php
function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step tiene que ser +ve');
}

for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('Step tiene que ser -ve');
}

for ($i = $start; $i >= $limit; $i += $step) {
yield $i;
}
}
}

/*
* Obsereve que tanto range() como xrange() producen la misma
* salida a continuacin.
*/

echo 'Nmeros impares de una cifra de range(): ';
foreach (range(1, 9, 2) as $number) {
echo "$number ";
}
echo "\n";

echo 'Nmeros impares de una cifra de xrange(): ';
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";


}
?>
El resultado del ejemplo sera:
Nmeros impares de una cifra de range(): 1 3 5 7 9
Nmeros impares de una cifra de xrange(): 1 3 5 7 9
Generator syntax
Una funcin generadora es igual que una funcin normal, con la diferencia de que
en vez de devolver un valor, un generador invoca yield tantas veces como
necesita.
Cuando se llama a una funcin generadora, devuelve un objeto que puede ser
iterado. Cuando se itera sobre ese objeto (por ejemplo, con un bucleforeach), PHP
llamar a la funcin generadora cada vez que necesite un valor, y guardar el
estado del generador cuando este provea un valor con yield para que ese estado
pueda ser recuperado cuando el prximo valor sea requerido.
Cuando no hay ms valores que se puedan proporcionar, la funcin generadora
puede simplemente terminar, y el cdigo desde el que se la llama continuar como
si un array se hubiera quedado sin valores.
Nota:
Un generador no puede retornar un valor: hacerlo resultara en un error de
compilacin. Un return vaco es vlido en cuanto a sintaxis dentro de un
generador y terminar el generador.
yield keyword
La clave de una funcin generadora es la palabra reservada yield. En su forma
ms simple, la sentencia yield es parecida a la sentencia return, excepto en que en
vez de detener la ejecucin de la funcin y devolver un valor, yield facilita el valor
al bucle que itera sobre el generador y pausa la ejecucin de la funcin
generadora.
Ejemplo #1 Ejemplo sencillo de facilitar valores con yield
<?php
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
// Observe que $i es preservado entre yields
yield $i;
}
}

$generator = gen_one_to_three();
foreach ($generator as $value) {
echo "$value\n";


}
?>
El resultado del ejemplo sera:
1
2
3
Nota:
Internamente, las claves enteras secuenciales sern asociadas con los valores
sobre los que se usa yield, como un array no asociativo.
Precaucin
Si se utiliza yield en el contexto de una expresin (por ejemplo, en el lado derecho
de una asignacin), se debe poner la sentencia yield entre parntesis. Por ejemplo,
esto es vlido:
$data = (yield $value);
Pero esto no lo es, y resultar en un error del intrprete:
$data = yield $value;
Esta sintaxis podra usarse junto con el mtodo Generator::send().
Utilizar yield para facilitar valores con claves
PHP soporta arrays asociativos, y los generadores no son menos. Adems de
facilitar valores simples, como se muestra arriba, tambin se puede facilitar una
clave al mismo tiempo.
La sintaxis para facilitar un par clave-valor es muy similar a la utilizada para definir
un array asociativo, como se muestra a continuacin.
Ejemplo #2 Facilitar un par clave-valor
<?php
/*
* La entrada son campos separados por punto y coma, con el primer
* campo siendo la ID utilizada como clave.
*/

$input = <<<'EOF'
1;PHP;Likes dollar signs
2;Python;Likes whitespace
3;Ruby;Likes blocks
EOF;



function input_parser($input) {
foreach (explode("\n", $input) as $line) {
$fields = explode(';', $line);
$id = array_shift($fields);

yield $id => $fields;
}
}

foreach (input_parser($input) as $id => $fields) {
echo "$id:\n";
echo " $fields[0]\n";
echo " $fields[1]\n";
}
?>
El resultado del ejemplo sera:
1:
PHP
Likes dollar signs
2:
Python
Likes whitespace
3:
Ruby
Likes blocks
Precaucin
Como en el ejemplo anterior, facilitar un par clave-valor en contexto de expresin
requiere que la sentencia yield sea puesta entre parntesis:
$data = (yield $key => $value);
Facilitar valores nulos
Yield puede ser invocado sin argumentos para facilitar un valor NULL con una clave
automtica.
Ejemplo #3 Yielding NULLs
<?php
function gen_three_nulls() {
foreach (range(1, 3) as $i) {
yield;
}
}

var_dump(iterator_to_array(gen_three_nulls()));
?>


El resultado del ejemplo sera:
array(3) {
[0]=>
NULL
[1]=>
NULL
[2]=>
NULL
}
Facilitar por referencia
Las funciones generadoras son capaces de facilitar valores por referencia igual que
lo hacen por valor. Esto se hace de la misma forma quedevolviendo referencias
desde funciones: poniendo un ampersand (signo &) delante del nombre de la
funcin.
Ejemplo #4 Facilitar valores por referencia
<?php
function &gen_reference() {
$value = 3;

while ($value > 0) {
yield $value;
}
}

/*
* Observe que es posible cambiar $number desde dentro del bucle, y
* dado que el generador est facilitando referencias, $value
* dentro de gen_reference() cambia.
*/
foreach (gen_reference() as &$number) {
echo (--$number).'... ';
}
?>
El resultado del ejemplo sera:
2... 1... 0...
Objetos Generator
Cuando una funcin generadora es invocada por primera vez, un objeto de la clase
interna Generator es devuelto. Este objeto implementa la interfaz Iterator en
prcticamente el mismo modo que lo hara un iterador unidireccional.


Comparacin entre generadores y objetos Iterator
La principal ventaja de los generadores es su simplicadad. Se ha de escribir mucho
menos cdigo repetitivo en comparacin con el necesario para implementar una
clase Iterator, y el cdigo es generalmente mucho ms legible. Por ejemplo, la
siguiente funcin y clase son equivalentes:
<?php
function getLinesFromFile($fileName) {
if (!$fileHandle = fopen($fileName, 'r')) {
return;
}

while (false !== $line = fgets($fileHandle)) {
yield $line;
}

fclose($fileHandle);
}

// Contra...

class LineIterator implements Iterator {
protected $fileHandle;

protected $line;
protected $i;

public function __construct($fileName) {
if (!$this->fileHandle = fopen($fileName, 'r')) {
throw new RuntimeException('Couldn\'t open file "' . $fileName . '"'
);
}
}

public function rewind() {
fseek($this->fileHandle, 0);
$this->line = fgets($this->fileHandle);
$this->i = 0;
}

public function valid() {
return false !== $this->line;
}

public function current() {
return $this->line;
}



public function key() {
return $this->i;
}

public function next() {
if (false !== $this->line) {
$this->line = fgets($this->fileHandle);
$this->i++;
}
}

public function __destruct() {
fclose($this->fileHandle);
}
}
?>
La flexibilidad, sin embargo, tiene un coste: los generadores son iteradores
unidireccionales, y no pueden ser rebobinados una vez la iteracin ha empezado.
Esto tambin significa que se puede iterar sobre el mismo generador varias veces:
el generador necesitar ser o bien reconstruido llamando a la funcin generadora
de nuevo, o bien clonado a travs de la palabra clave clone.
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 aritmtica de punteros con ellas, realmente no son direcciones de
memoria, etc. Vase Qu NO son las Referencias?para ms informacin. Las
referencias son alias de la tabla de smbolos. 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 analoga ms prxima 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 bsicas que se realizan usando referencias: asignar por
referencia, pasar por referencia, y devolver por referencia. En esta seccin se dar
una introduccin 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 estn 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 automticamente, por lo que
usar =& en este contexto es obsoleto y produce un mensaje E_DEPRECATEDen PHP
5.3 y posteriores, y un mensaje E_STRICT en versiones anteriores. (Tcnicamente,
la diferencia es que, en PHP 5, las variables de objetos, como los recursos, son
meros punteros a la informacin del objeto actual, por lo que estas referencias a


objetos no son "referencias" en el mismo sentido usado antes (alias). Para ms
informacin, vase Objetos y referencias.)
Advertencia
Si se asigna una referencia a una varible declarada global dentro de una funcin,
la referencia ser visible slo dentro de la funcin. 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 slo dentro de la funcin
} else {
$GLOBALS["var2"] =& $var1; // visible tambin 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 d
e ejemplo'
?>
Piense en global $var; como simplificacin de $var =& $GLOBALS['var'];. De
este modo, al asignar otra referencia a $varslo cambia la referencia de la
variable local.
Nota:
Si se asigna un valor a una variable con referencias en una sentencia foreach,
tambin se modifican las referencias.
Ejemplo #3 Referencias y la sentencia foreach
<?php
$ref = 0;
$fila =& $ref;
foreach (array(1, 2, 3) as $fila) {
// hacer algo
}


echo $ref; // 3 - ltimo elemento de la matriz iterada
?>
Mientras que no sea estrictamente una asignacin por referencia, las expresiones
creadas con el constructor de lenguaje array() tambin pueden comportarse
como tales prefijando & al elemento del array a aadir. Ejemplo:
<?php
$a = 1;
$b = array(2, 3);
$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 asignacin 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 tambin se aplica a las llamadas a funciones donde el array es pasado por
valor. Ejemplo:
<?php
/* Asignacin de variables escalares */
$a = 1;
$b =& $a;
$c = $b;
$c = 7; //$c no es una referencia; no cambia $a o $b

/* Asignacin 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 asignacin 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 funcin 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 funcin foo la variable $var hace
referencia al mismo contenido que $a. Para ms informacin sobre esto, lea la
seccin 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
construccin 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 $baren el
mbito de la llamada a otra cosa usando el mecanismo de referencia, ya
que $bar no est disponible en la funcin foo (est representada por$var,
pero $var slo tiene el contenido de la variable y no la vinculacin nombre-a-valor
en la tabla de smbolos de llamada). Se puede usar devolver referencias para
referencias variables seleccionadas por la funcin.
Pasar por Referencia
Se puede pasar una variable por referencia a una funcin y as hacer que la
funcin 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 ningn signo de referencia en una llamada a una funcin - slo en
la definicin de la funcin. 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);. A
partir de PHP 5.4.0, el paso por referencia en tiempo de llamada ha sido eliminado,
por lo que su uso emitir un error fatal.
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 ms sobre devolver por referencia.
Ninguna otra expresin debera pasarse por referencia, ya que el resultado no est
definido. Por ejemplo, los siguientes ejemplos de pasar por referencia no son
vlidos:
<?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); // Expresin, 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 funcin para encontrar a
qu variable debera estar vinculada una referencia. No use devolver por
referencia para aumentar el rendimiento. El motor optimizar automticamente
esto por s mismo. Hay que devolver referencias slo cuando se tenga una razn
tcnicamente vlida 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
funcin obtenerValor debera estar establecida, no la copia, como si estuviera sin
usar la sintaxis de referencia.
Nota: A diferencia de pasar un parmetro, aqu se tiene que usar & en ambos
lugares - para indicar que se quiere devolver por referencia, no una copia, y para
indicar que la vinculacin por referencia, en vez de la asignacin normal, debera
ser hecha para $miValor.
Nota: Si se intenta devolver una referencia desde una funcin con la
sintaxis: return ($this->valor);, no funcionar ya que se est intentando
devolver el resultado de una expresin, y no de una variable, por referencia. Slo
se puede devolver variables por referencia desde una funcin - nada ms. 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 cdigo intenta devolver una expresin dinmica o un resultado
del operador new.
Para usar la referencia retornada, se debe usar la asignacin por referencia:
<?php
function &collector() {
static $collection = array();
return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>
Para pasar la referencia retornada a otra funcin 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 vnculo 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, slo $a.
De nuevo, podra ser til pensar en esto como anlogo a una llamada a unlink de
Unix.


Ubicar las Referencias
Muchas construcciones sintcticas de PHP estn implementadas mediante el
mecanismo de referencia, por lo que todo lo mencionado aqu sobre la vinculacin
de referencias tambin 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 tambin significa que al destruir $var no se destruir la variable global.
$this
En un mtodo 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 externashasta variables
de entorno incorporadas, desde los ltimos mensajes de error hasta los ltimos
encabezados recuperados.
Vase tambin la pregunta frecuente titulada "Cmo me afecta register_globals?"
Superglobals
Superglobals Superglobals son variables internas que estn disponibles siempre
en todos los mbitos
Descripcin
Algunas variables predefinidas en PHP son "superglobales", lo que significa que
estn 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
mtodos.
Las variables superglobals son:


$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
Historial de cambios
Versin Descripcin
4.1.0
Las superglobals son aadidas a
PHP.
Notas
Nota: Disponibilidad de variables
Por defecto, todas las superglobals estn disponibles pero hay directivas que
afectan a su disponibilidad. Para ms informacin, vase la documentacion
de variables_order.
Nota: Tratando con register_globals
Si la directiva obsoleta register_globals tiene el valor on entonces las variables
estn tambien disponibles en el mbito global del cdigo. Por
ejemplo, $_POST['foo'] tambien existir como $foo.
Para informacin relacionada, consulte el FAQ titulado "Cmo puede afectarme
register_globals?"
Nota: Variables variables
Las variables superglobals no pueden ser usadas como variables variables dentro
de funciones o mtodos de clase.
Ver tambin
mbito de las variables
La directiva variables_order
La extensin filter
$GLOBALS


(PHP 4, PHP 5)
$GLOBALS Hace referencia a todas las variables disponibles en el mbito global
Descripcin
Es un array asociativo que contiene las referencias a todas la variables que estn
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 sera 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 mtodos.
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] Informacin del entorno del
servidor y de ejecucin


Descripcin
$_SERVER es un array que contiene informacin, tales como cabeceras, rutas y
localizaciones del cdigo. Las entradas en este array son creadas por el servidor
web. No existe garanta 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 nmero de estas variables se encuentran
recogidas en especificacin CGI 1.1, as que al menos debe esperar encontrar
estas entradas.
$HTTP_SERVER_VARS contiene la misma informacin 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 lnea de comando pocos o ninguno de los siguientes
elementos estarn disponibles (o tendrn algn significado).
'PHP_SELF'
El nombre del archivo de script ejecutndose actualmente, relativa al
directorio raz de documentos del servidor. Por ejemplo, el valor
de $_SERVER['PHP_SELF'] en un script ejecutado en la
direccin 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 lnea
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
lnea de comando se obtiene acceso a los parmetros de lnea de comando
con un estilo parecido a como sera en C. Cuando se ejecuta el script
mediante el mtodo GET, contendr la cadena de la consulta.
'argc'


Contiene el nmero de parmetros de lnea de comando enviados al script
(si se ejecuta en lnea de comando).
'GATEWAY_INTERFACE'
Nmero de revisin de la especificacin CGI que est empleando el
servidor, por ejemplo 'CGI/1.1'.
'SERVER_ADDR'
La direccin 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 identificacin del servidor dada en las cabeceras de respuesta a
las peticiones.
'SERVER_PROTOCOL'
Nombre y nmero de revisin del protocolo de informacin a travs del cual
la pgina es solicitada, por ejemplo 'HTTP/1.0'.
'REQUEST_METHOD'
Mtodo de peticin empleado para acceder a la pgina, es decir 'GET',
'HEAD', 'POST', 'PUT'.


Nota:
El script de PHP se considera terminado despus de enviar las cabeceras (es
decir despus de producir cualquier resultado sin emplear buffers para el
resultado) si el mtodo de la peticin empleado era HEAD.
'REQUEST_TIME'
Fecha Unix de inicio de la peticin. Disponible desde PHP 5.1.0.
'REQUEST_TIME_FLOAT'
El timestamp del inicio de la solicitud, con precisin microsegundo.
Disponible desde PHP 5.4.0.
'QUERY_STRING'
Si existe, la cadena de la consulta de la peticin de la pgina.
'DOCUMENT_ROOT'
El directorio raz de documentos del servidor en el cual se est ejecutando
el script actual, segn est definida en el archivo de configuracin del
servidor.
'HTTP_ACCEPT'
Contenido de la cabecera Accept: de la peticin actual, si existe.


'HTTP_ACCEPT_CHARSET'


Contenido de la cabecera Accept-Charset: de la peticin actual, si existe.
Por ejemplo: 'iso-8859-1,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
Contenido de la cabecera Accept-Encoding: de la peticin actual, si existe.
Por ejemplo: 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
Contenido de la cabecera Accept-Language: de la peticin actual, si
existe. Por ejemplo: 'en'.
'HTTP_CONNECTION'
Contenido de la cabecera Connection: de la peticin actual, si existe. Por
ejemplo: 'Keep-Alive'.
'HTTP_HOST'
Contenido de la cabecera Host: de la peticin actual, si existe.
'HTTP_REFERER'
Direccin 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 peticin actual, si existe.
Consiste en una cadena que indica el agente de usuario empleado para
acceder a la pagina. Un ejemplo tpico 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 pgina
en funcin de las capacidades del agente de usuario empleado.
'HTTPS'
Ofrece un valor no vaco 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
peticin no se ha realizado a travs del protocolo HTTPS.


'REMOTE_ADDR'
La direccin IP desde la cual est viendo la pgina actual el usuario.
'REMOTE_HOST'
El nombre del host desde el cual est viendo la pgina actual el usuario. La
obtencin inversa del dns est basada en laREMOTE_ADDR del usuario.
Nota: Su servidor web debe estar configurado para crear esta variable. Por
ejemplo en Apache necesita que existaHostnameLookups On dentro
de httpd.conf. Consulte tambien gethostbyaddr().
'REMOTE_PORT'
El puerto empleado por la mquina del usuario para comunicarse con el
servidor web.
'REMOTE_USER'
El usuario autenticado.
'REDIRECT_REMOTE_USER'
El usuario autenticado si la peticin es redirigida internamente.
'SCRIPT_FILENAME'
La ruta del script ejecutndose 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
configuracin 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 mquina del servidor usado por el servidor web para la
comunicacin. Para las configuraciones por omisin, el valor ser '80'; el
empleo de SSL, por ejemplo, cambiar dicho valor al valor definido para el
puerto HTTP seguro.
Nota: Bajo Apache 2, se debe establecer UseCanonicalName = On, as
como UseCanonicalPhysicalPort = On para poder obtener el puerto fsico
(real), de otro modo, este valor podra ser burlado y podra o no devolver el
valor del puerto fsico. No es seguro confiar en este valor en contextos que
requieran seguridad.
'SERVER_SIGNATURE'
Cadena que contiene la versin del servidor y el nombre del host virtual que
son aadidas a las pginas generadas por el servidor, si esta habilitada esta
funcionalidad.
'PATH_TRANSLATED'
Ruta de acceso basada en el sistema (no en el directorio raz de
documentos del servidor) del script actual, despus 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
implcita en el SAPI de Apache 2, en comparacin a la situacin de Apache
1, donde era necesario establecer el mismo valor que la variable del
servidor SCRIPT_FILENAMEcuando no era proporcionada por Apache. Este
cambio ha sido realizado para cumplir la
especificacin CGI dondePATH_TRANSLATED slo debe existir
si PATH_INFO esta definida. Los usuarios de Apache 2 pueden
emplearAcceptPathInfo = On dentro de httpd.conf para
definir PATH_INFO.
'SCRIPT_NAME'
Contiene la ruta del script actual. Esto es de utilidad para las pginas 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 pgina. Por ejemplo:
'/index.html'.
'PHP_AUTH_DIGEST'


Cuando se hace autenticacin Digest HTTP, esta variable se establece para
el encabezado 'Authorization' enviado por el cliente (el cual se debe
entonces usar para hacer la validacin apropiada).
'PHP_AUTH_USER'
Cuando se hace autenticacin HTTP, esta variable se establece para el
nombre de usuario provisto por el usuario.
'PHP_AUTH_PW'
Cuando se hace autenticacin 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
autenticacin.
'PATH_INFO'
Contiene cualquier informacin sobre la ruta proporcionada por el cliente a
continuacin del nombre del fichero del script actual pero antecediendo a la
cadena de la peticin, si existe. Por ejemplo, si el script actual se accede a
travs de la
URLhttp://www.example.com/php/path_info.php/some/stuff?foo=bar,
entonces $_SERVER['PATH_INFO'] contendr /some/stuff.
'ORIG_PATH_INFO'
Versin original de 'PATH_INFO' antes de ser procesado por PHP.
Historial de cambios
Versin Descripcin
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 sera 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 mtodos.
Ver tambin
Filtrado de datos
$_GET
$HTTP_GET_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_GET -- $HTTP_GET_VARS [obsoleta] Variables HTTP GET
Descripcin
Un array asociativo de variables pasado al script actual va parmetros URL.
$HTTP_GET_VARS contiene la misma informacin, 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
Versin Descripcin
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 sera 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 mtodos.
Nota:
Las variables GET son pasadas va urldecode().
Ver tambin
Manejo de variables externas
La extensin filter
$_POST
$HTTP_POST_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_POST -- $HTTP_POST_VARS [obsoleta] Variables HTTP POST
Descripcin
Un array asociativo de variables pasadas al script actual a travs del mtodo HTTP
POST.
$HTTP_POST_VARS contiene la misma informacin inicial, pero no es
una superglobal. (Ntese que $HTTP_POST_VARS y $_POST son diferentes
variables y que PHP las trata de forma distinta)
Historial de cambios
Versin Descripcin
4.1.0
Se introdujo $_POST y $HTTP_POST_VARS qued


Versin Descripcin
obsoleta.
Ejemplos
Ejemplo #1 Ejemplo de $_POST
<?php
echo 'Hola ' . htmlspecialchars($_POST["nombre"]) . '!';
?>
Asumiendo que el usuario envi por el mtodo POST nombre=Juan
El resultado del ejemplo sera 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 mtodos.
Ver tambin
Tratando con variables externas
La extensin filter

$_FILES
$HTTP_POST_FILES [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_FILES -- $HTTP_POST_FILES [obsoleta] Variables de Carga de Archivos HTTP
Descripcin
Una variable tipo array asociativo de elementos cargados al script actual a travs
del mtodo POST.
$HTTP_POST_FILES contiene la misma informacin 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
Versin Descripcin
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 mtodos.
Ver tambin
move_uploaded_file() - Mueve un archivo subido a una nueva ubicacin
Gestin de Carga de Archivos
$_REQUEST
(PHP 4 >= 4.1.0, PHP 5)
$_REQUEST Variables HTTP Request
Descripcin
Un array asociativo que por defecto contiene el contenido
de $_GET, $_POST y $_COOKIE.
Historial de cambios
Versin Descripcin
5.3.0
Se introdujo request_order. Esta directiva afecta al contenido
de $_REQUEST.
4.3.0 Se elimin la informacin $_FILES de $_REQUEST.
4.1.0 Se introdujo $_REQUEST.
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 mtodos.
Nota:
Cuando se ejecuta en la lnea de comandos , no se incluirn las
entradas argv y argc; ya que estn presentes en el array $_SERVER
Nota:
Las variables en $_REQUEST se proporcionan al script a travs 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 segn la directiva de configuracin
PHP variables_order.
Ver tambin
import_request_variables() - Importar variables GET/POST/Cookie en el
mbito global
Tratando con variables externas
La extensin filter
$_SESSION
$HTTP_SESSION_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_SESSION -- $HTTP_SESSION_VARS [obsoleta] Variables de sesin
Report a bug
Descripcin
Es un array asociativo que contiene variables de sesin disponibles para el script
actual. Ver la documentacin de Funciones de sesin para ms informacin sobre
su uso.
$HTTP_SESSION_VARS contiene la misma informacin inicial pero no es
una superglobal. (Ntese que $HTTP_SESSION_VARS y$_SESSION son diferentes
variables y PHP las trata de forma distinta)
Report a bug


Historial de cambios
Versin Descripcin
4.1.0
Se introdujo $_SESSION y $HTTP_SESSION_VARS qued
absoleta.
Report a bug
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 mtodos.
Report a bug
Ver tambin
session_start() - Iniciar una nueva sesin o reanudar la existente
$_ENV
$HTTP_ENV_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_ENV -- $HTTP_ENV_VARS [obsoleta] Variables de entorno
Report a bug
Descripcin
Una variable tipo array asociativo de variables pasadas al script actual a travs del
mtodo del entorno.
Estas variables son importadas en el espacio de nombres global de PHP desde el
entorno bajo el que est siendo ejecutado el intrprete PHP. Muchas son
entregadas por el intrprete de comandos bajo el que PHP est corriendo y
diferentes sistemas suelen tener diferentes tipos de intrpretes de comandos, una
lista definitiva es imposible. Por favor consulte la documentacin de su intrprete
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 mdulo del servidor o
procesador CGI.


$HTTP_ENV_VARS contiene la misma informacin inicial, pero no es
una superglobal. (Note que $HTTP_ENV_VARS y $_ENV son variables diferentes y
que PHP las trata como tal)
Report a bug
Historial de cambios
Versin Descripcin
4.1.0
Se introdujo $_ENV,
haciendo $HTTP_ENV_VARS obsoleta.
Report a bug
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 sera algo similar a:
Mi nombre de usuario es bjori!
Report a bug
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 mtodos.
Report a bug
Ver tambin
getenv() - Obtiene el valor de una variable de entorno
La extensin filter
$_COOKIE
$HTTP_COOKIE_VARS [obsoleta]
(PHP 4 >= 4.1.0, PHP 5)
$_COOKIE -- $HTTP_COOKIE_VARS [obsoleta] Cookies HTTP


Report a bug
Descripcin
Una variable tipo array asociativo de variables pasadas al script actual a travs de
Cookies HTTP.
$HTTP_COOKIE_VARS contiene la misma informacin inicial, pero no es
una superglobal. (Note que $HTTP_COOKIE_VARS y $_COOKIEson variables
diferentes y que PHP las trata como tal)
Report a bug
Historial de cambios
Versin Descripcin
4.1.0
Se introdujo $_COOKIE,
haciendo $HTTP_COOKIE_VARS obsoleta.
Report a bug
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 sera algo similar a:
Hola Juan!
Report a bug
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 mtodos.
Report a bug
Ver tambin
setcookie() - Enviar una cookie
Gestin de variables externas
La extensin filter


$php_errormsg
(PHP 4, PHP 5)
$php_errormsg El mensaje de error anterior
Report a bug
Descripcin
$php_errormsg es una variable que contiene el texto del ltimo mensaje de error
generado por PHP. Esta variable solo estar disponible dentro del mbito donde
ocurri el error, y solamente funcionar si la opcin de
configuracin track_errors est activada (por defecto es 'off').
Advertencia
Si est definido un gestor de errores ( set_error_handler()), $php_errormsg estar
establecido solamente si el gestor de errores devuelve FALSE
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de $php_errormsg
<?php
@strpos();
echo $php_errormsg;
?>
El resultado del ejemplo sera algo similar a:
Wrong parameter count for strpos()
$HTTP_RAW_POST_DATA
(PHP 4, PHP 5)
$HTTP_RAW_POST_DATA Datos POST sin tratar
Report a bug
Descripcin
$HTTP_RAW_POST_DATA contiene los datos POST sin tratar.
Vase always_populate_raw_post_data
$http_response_header
(PHP 4 >= 4.0.4, PHP 5)


$http_response_header Encabezados de respuesta HTTP
Report a bug
Descripcin
El array $http_response_header es similar a la functin 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.
Report a bug
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 sera 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)
$argc El nmero de argumentos pasados a un script


Report a bug
Descripcin
Contiene el nmero de argumentos pasados al script actual cuando se ejecuta
desde la lnea de comandos.
Nota: El nombre del script es pasado siempre como argumento del script, por lo
tanto, el valor mnimo de $argc es 1.
Nota: Esta variable slo est disponible cuando register_argc_argv est activado.
Report a bug
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 sera algo similar a:
int(4)
$argv
(PHP 4, PHP 5)
$argv Array de argumentos pasados a un script
Report a bug
Descripcin
Contiene un array de todos los argumentos pasados a un script cuando se ejecuta
desde la lnea 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.
Report a bug
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 sera algo similar a:
array(4) {
[0]=>
string(10) "script.php"
[1]=>
string(4) "arg1"
[2]=>
string(4) "arg2"
[3]=>
string(4) "arg3"
}
Report a bug
Ver tambin
getopt() - Obtiene las opciones de la lista de argumentos de la lnea de
comandos
Excepciones predefinidas
Tabla de contenidos
Exception
(PHP 5 >= 5.1.0)
Introduccin
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 ;
/* Mtodos */
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 excepcin
code
El cdigo de la excepcin
file
El nombre del fichero donde se origin la excepcin
line
La lnea donde se origin la excepcin
Tabla de contenidos
Exception::__construct Constructor de la excepcin
Exception::getMessage Obtiene el mensaje de
Excepcin
Exception::getPrevious Devuelve la excepcin anterior
Exception::getCode Obtiene el cdigo de Excepcin
Exception::getFile Obtiene el fichero en el que ocurri
la excepcin
Exception::getLine Obtiene la lnea en donde ocurri la
excepcin
Exception::getTrace Obtiene el seguimiento de la pila
Exception::getTraceAsString Obtiene el stack trace
como cadena


Exception::__toString Representacin de la excepcin
en formato cadena
Exception::__clone Clona la excepcin
Exception::__construct
(PHP 5 >= 5.1.0)
Exception::__construct Constructor de la excepcin
Report a bug
Descripcin
public Exception::__construct() ([ string $message = "" [, int $code =
0 [, Exception $previous = NULL ]]] )
Construye la Excepcin.
Report a bug
Parmetros
message
Mensaje de la Excepcin a lanzar.
code
El cdigo de la Excepcin.
previous
La excepcin previa usada por el encadenado de la excepcin.
Report a bug
Historial de cambios
Versin Descripcin


Versin Descripcin
5.3.0
Se aadi el
parmetro previous.
Report a bug
Notas
Nota:
El message NO es seguro binariamente.
Exception::getMessage
(PHP 5 >= 5.1.0)
Exception::getMessage Obtiene el mensaje de Excepcin
Report a bug
Descripcin
final public string Exception::getMessage ( void )
Devuelve el mensaje de Excepcin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el mensaje de Excepcin en formato cadena.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::getMessage()
<?php
try {
throw new Exception("Algn mensaje de error");
} catch(Exception $e) {
echo $e->getMessage();


}
?>
El resultado del ejemplo sera algo similar a:
Algn mensaje de error
Exception::getPrevious
(PHP 5 >= 5.3.0)
Exception::getPrevious Devuelve la excepcin anterior
Report a bug
Descripcin
final public Exception Exception::getPrevious ( void )
Devuelve la excepcin anterior (el tercer parmetro de Exception::__construct()).
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve la Exception anterior si est disponible o NULL en caso contrario.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::getPrevious()
Recorre, e imprime, el rastreo de excepciones.
<?php
class MiExcepcinPersonalizada extends Exception {}

function hacerCosas() {
try {
throw new InvalidArgumentException("Lo est haciendo mal!", 112);
} catch(Exception $e) {
throw new MiExcepcinPersonalizada("Ocurri algo", 911, $e);
}
}


try {


hacerCosas();
} 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 sera algo similar a:
/home/bjori/ex.php:8 Ocurri algo (911) [MiExcepcinPersonalizada]
/home/bjori/ex.php:6 Lo est haciendo mal! (112) [InvalidArgumentException]
Exception::getCode
(PHP 5 >= 5.1.0)
Exception::getCode Obtiene el cdigo de Excepcin
Report a bug
Descripcin
final public mixed Exception::getCode ( void )
Devuelve el cdigo de Excepcin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el cdigo de Excepcin en forma de integer en Exception pero
posiblemente en forma de otros tipos en Exception descendientes (por ejemplo
como string en PDOException).
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::getCode()
<?php
try {
throw new Exception("Un mensaje de error", 30);
} catch(Exception $e) {
echo "El cdigo de excepcin es: " . $e->getCode();


}
?>
El resultado del ejemplo sera algo similar a:
El cdigo de excepcin es: 30
Exception::getFile
(PHP 5 >= 5.1.0)
Exception::getFile Obtiene el fichero en el que ocurri la excepcin
Report a bug
Descripcin
final public string Exception::getFile ( void )
Obtiene el nombre del fichero desde donde fue creada la excepcin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el nombre del fichero en donde fue creada la excepcin.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::getFile()
<?php
try {
throw new Exception;
} catch(Exception $e) {
echo $e->getFile();
}
?>
El resultado del ejemplo sera algo similar a:
/home/bjori/tmp/ex.php
Exception::getLine
(PHP 5 >= 5.1.0)


Exception::getLine Obtiene la lnea en donde ocurri la excepcin
Report a bug
Descripcin
final public int Exception::getLine ( void )
Devuelve el nmero de la lnea donde se cre la excepcin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el nmero de la lnea donde se cre la excepcin.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::getLine()
<?php
try {
throw new Exception("Algn mensaje de error");
} catch(Exception $e) {
echo "La excepcin se cre en la lnea: " . $e->getLine();
}
?>
El resultado del ejemplo sera algo similar a:
La excepcin se cre en la lnea: 3
Exception::getTrace
(PHP 5 >= 5.1.0)
Exception::getTrace Obtiene el seguimiento de la pila
Report a bug
Descripcin
final public array Exception::getTrace ( void )
Devuelve el seguimiento de pila de excepcin.


Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el seguimiento de pila de excepcin como un array.
Report a bug
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 sera 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::getTraceAsString Obtiene el stack trace como cadena
Report a bug


Descripcin
final public string Exception::getTraceAsString ( void )
Devuelve el stack trace de la Excepcin como cadena.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el stack trace de la Excepcin como cadena.
Report a bug
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 sera algo similar a:
#0 /home/bjori/tmp/ex.php(7): test()
#1 {main}
Exception::__toString
(PHP 5 >= 5.1.0)
Exception::__toString Representacin de la excepcin en formato cadena
Report a bug
Descripcin
public string Exception::__toString ( void )
Devuelve la representacin de la excepcin en formato string.


Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve la representacin de la excepcin en formato string.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Exception::__toString()
<?php
try {
throw new Exception("Some error message");
} catch(Exception $e) {
echo $e;
}
?>
El resultado del ejemplo sera 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::__clone Clona la excepcin
Report a bug
Descripcin
final private void Exception::__clone ( void )
Intenta clonar la Excepcin, lo que resultar en un error Fatal.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug


Valores devueltos
No devuelve ningn valor.
Report a bug
Errores/Excepciones
Las Excepciones no se pueden clonar.
ErrorException
(PHP 5 >= 5.1.0)
Introduccin
Una excepcin de error.
Sinopsis de la Clase
ErrorException extends Exception {
/* Propiedades */
protected int $severity ;
/* Propiedades heredadas */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* Mtodos */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity =
1 [, string $filename = __FILE__ [, int $lineno =
__LINE__[, Exception $previous = NULL ]]]]]] )
final public int getSeverity ( void )
/* Mtodos 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 excepcin
Ejemplos
Ejemplo #1 Use set_error_handler() para convertir mensajes de
error en objetos ErrorException.
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

/* Desencadenar la excepcin */
strpos();
?>
El resultado del ejemplo sera 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
Tabla de contenidos
ErrorException::__construct Constructor de la Excepcin
ErrorException::getSeverity Obtiene la severidad de la excepcin




ErrorException::__construct Exception::__clone
ErrorException::__construct
(PHP 5 >= 5.1.0)
ErrorException::__construct Constructor de la Excepcin
Report a bug
Descripcin
public ErrorException::__construct() ([ string $message = "" [, int $code =
0 [, int $severity = 1 [, string $filename = __FILE__ [,int $lineno =
__LINE__ [, Exception $previous = NULL ]]]]]] )
Construye la Excepcin.
Report a bug
Parmetros
message
Mensaje de la Excepcin a lanzar.
code
El cdigo de la Excepcin.
severity
Nivel de la severidad de la Excepcin.
filename


Nombre del fichero donde se lanz la Excepcin.
lineno
Nmero de la lnea donde se produjo la excepcin.
previous
La anterior excepcin utilizada para la excepcin de encadenamiento.
Report a bug
Historial de cambios
Versin Descripcin
5.3.0
El parmetro previous fue
aadido.
ErrorException::getSeverity
(PHP 5 >= 5.1.0)
ErrorException::getSeverity Obtiene la severidad de la excepcin
Report a bug
Descripcin
final public int ErrorException::getSeverity ( void )
Devuelve la severidad de la excepcin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug


Valores devueltos
Devuelve el nivel de la severidad de la excepcin.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de ErrorException::getSeverity()
<?php
try {
throw new ErrorException("Exception message", 0, 75);
} catch(ErrorException $e) {
echo "La severidad de la excepcin es: " . $e->getSeverity();
}
?>
El resultado del ejemplo sera algo similar a:
La severidad de la excepcin es: 75
Interfaces y clases predefinidas
La interfaz Traversable
(PHP 5 >= 5.0.0)
Introduccin
Interfaz para detectar si una clase puede ser recorrida mediante foreach.
Una interfaz abstracta base no puede ser implementada sola. En su lugar, debe ser
implementada con IteratorAggregate o con Iterator.
Nota:
Las clases internas que implementan esta interfaz pueden ser usadas en una
construccin foreach y no necesitan implementarIteratorAggregate o Iterator.
Nota:
Este es un motor interno de interfaz que no puede ser implementado en scripts de
PHP. Se debe emplear en su lugar o IteratorAggregate, o bien Iterator. Cuando se
implementa una interfaz que extiende a Traversable, asegrese de
enumerara IteratorAggregate o Iterator antes de su nombre en la clusula de
implementacin.
Sinopsis de la Interfaz
Traversable {


}
Esta interfaz no tiene mtodos; su nico propsito es servir de interfaz base para
todas las clases que se pueden recorrer.
La interfaz Iterator
(PHP 5 >= 5.0.0)
Introduccin
Interfaz para iteradores externos u objetos que pueden ser iterados internamente
por s mismos.
Sinopsis de la Interfaz
Iterator extends Traversable {
/* Mtodos */
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 nmero de iteradores para muchas de las tareas del da a da.
Vase la lista de iteradores SPL.
Ejemplos
Ejemplo #1 Uso bsico
Este ejemplo muestra el orden en el que se llaman a los mtodos 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 sera 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"
Tabla de contenidos
Iterator::current Devuelve el elemento actual
Iterator::key Devuelve la clave del elemento actual
Iterator::next Avanza al siguiente elemento
Iterator::rewind Rebobine la Iterator al primer elemento
Iterator::valid Comprueba si la posicin actual es vlido
Iterator::current
(PHP 5 >= 5.0.0)
Iterator::current Devuelve el elemento actual
Report a bug
Descripcin
abstract public mixed Iterator::current ( void )
Devuelve el elemento actual.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Puede devolver cualquier tipo.
Iterator::key


(PHP 5 >= 5.0.0)
Iterator::key Devuelve la clave del elemento actual
Report a bug
Descripcin
abstract public scalar Iterator::key ( void )
Devuelve la clave del elemento actual.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve scalar en caso de xito, o NULL en caso de error.
Report a bug
Errores/Excepciones
Muestra un E_NOTICE en caso de error.
Iterator::next
(PHP 5 >= 5.0.0)
Iterator::next Avanza al siguiente elemento
Report a bug
Descripcin
abstract public void Iterator::next ( void )
Avanza la posicin actual al siguiente elemento.
Nota:
El mtodo es llamado despus de cada foreach loop.
Report a bug


Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
El valor devuelto es ignorado.
Iterator::rewind
(PHP 5 >= 5.0.0)
Iterator::rewind Rebobine la Iterator al primer elemento
Report a bug
Descripcin
abstract public void Iterator::rewind ( void )
Rebobina de nuevo al primer elemento de la Iterator.
Nota:
Este es el primer mtodo llamado cuando se inicia un foreach bucle. No va a ser
ejecutado despues foreach bucle.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Cualquier valor devuelto se pasa por alto.
Iterator::valid
(PHP 5 >= 5.0.0)
Iterator::valid Comprueba si la posicin actual es vlido
Report a bug


Descripcin
abstract public boolean Iterator::valid ( void )
Este mtodo se llama despus de Iterator::rewind() y Iterator::next() para
comprobar si la posicin actual es vlido.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
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.
La interfaz IteratorAggregate
(PHP 5 >= 5.0.0)
Introduccin
Para crear una interfaz externa Iterator.
Sinopsis de la Interfaz
IteratorAggregate extends Traversable {
/* Mtodos */
abstract public Traversable getIterator ( void )
}
Ejemplo #1 Uso bsico
<?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 sera 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"

Tabla de contenidos
IteratorAggregate::getIterator Recuperar un Iterator externo
IteratorAggregate::getIterator
(PHP 5 >= 5.0.0)
IteratorAggregate::getIterator Recuperar un Iterator externo
Report a bug
Descripcin
abstract public Traversable IteratorAggregate::getIterator ( void )
Devuelve un iterador externo.
Report a bug
Parmetros
Esta funcin no tiene parmetros.


Report a bug
Valores devueltos
Una instancia de un objeto que implementa Iterator o Traversable
Report a bug
Errores/Excepciones
Lanza una Exception en caso de fallo.
La interfaz ArrayAccess
(PHP 5 >= 5.0.0)
Introduccin
Interfaz para proporcionar acceso a objetos como arrays.
Sinopsis de la Interfaz
ArrayAccess {
/* Mtodos */
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 bsico
<?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 sera 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
)

)


Tabla de contenidos
ArrayAccess::offsetExists Comprobar si existe o no un ndice
ArrayAccess::offsetGet Offset para recuperar
ArrayAccess::offsetSet Inicializa un offset
ArrayAccess::offsetUnset Destruye un offset
ArrayAccess::offsetExists
(PHP 5 >= 5.0.0)
ArrayAccess::offsetExists Comprobar si existe o no un ndice
Report a bug
Descripcin
abstract public boolean ArrayAccess::offsetExists ( mixed $offset )
Comprueba si existe o no un ndice.
Este mtodo 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 vaco slo si ArrayAccess::offsetExists()devuelve TRUE.
Report a bug
Parmetros
offset
El ndice a ser comprobado.
Report a bug
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.


Report a bug
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 sera 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::offsetGet Offset para recuperar
Report a bug
Descripcin
abstract public mixed ArrayAccess::offsetGet ( mixed $offset )
Devuelve el valor correspondiente a desplazamiento especificado.
Este mtodo se ejecuta para comprobar si el desplazamiento es empty().
Report a bug
Parmetros
offset
El desplazamiento va a recuperar.
Report a bug
Notas
Nota:
A partir de PHP 5.3.4, el prototipo de los controles se relajaron y es posible
para las implementaciones de este mtodo para devolver por referencia. Esto
hace que las modificaciones indirectas a las dimensiones de los arreglos
sobrecargados de objetos ArrayAccessposibles.
Una modificacin directa es aquella que reemplaza completamente el valor de
la dimensin de el arreglo, como en $obj[6] = 7. Una modificacin indirecta,
por el contrario, slo una parte los cambios de la dimensin, o los intentos de
asignar la dimensin en funcin de otra variable, como en $obj[6][7] =
7 o $var =& $obj[6]. Con incrementos ++ y disminye con -- tambin se
aplican de una manera que requiere la modificacin indirecta.
Si bien la modificacin directa desencadena una llamada
a ArrayAccess::offsetSet(), modificacin indirecta provoca una llamada
aArrayAccess::offsetGet(). En ese caso, la aplicacin


de ArrayAccess::offsetGet() debe ser capaz de volver por la referencia, de
lo contrario un E_NOTICE mensaje es elevado..
Report a bug
Valores devueltos
Puede devolver todos los tipos de valor.
Report a bug
Ver tambin
ArrayAccess::offsetExists() - Comprobar si existe o no un ndice
ArrayAccess::offsetSet
(PHP 5 >= 5.0.0)
ArrayAccess::offsetSet Inicializa un offset
Report a bug
Descripcin
abstract public void ArrayAccess::offsetSet ( mixed $offset , mixed $value )
Asigna un valor a un offset determinado.
Report a bug
Parmetros
offset
El offset al que se asigna el valor.
value
El valor a asignar.
Report a bug


Valores devueltos
No devuelve ningn valor.
Report a bug
Notas
Nota:
El parmetro 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 sera:
Array
(
[0] => primer valor
[1] => segundo valor
)
Nota:
Esta funcin 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
dimensin directamente, sino cambiando una sub-dimensin o sub-
propiedad o asignando la dimensin del array por referencia en otra
variable). En su lugar, se llama a ArrayAccess::offsetGet(). La operacin
tendr xito si devuelve el valor por referencia, lo cul slo es posible
desde PHP 5.3.4.
ArrayAccess::offsetUnset
(PHP 5 >= 5.0.0)
ArrayAccess::offsetUnset Destruye un offset
Report a bug


Descripcin
abstract public void ArrayAccess::offsetUnset ( mixed $offset )
Destruye un offset.
Nota:
Este mtodo no ser llamado cuando se fuerza un tipo mediante (unset)
Report a bug
Parmetros
offset
El offset a destruir.
Report a bug
Valores devueltos
No devuelve ningn valor.
La interfaz Serializable
(PHP 5 >= 5.1.0)
Introduccin
Interfaz para personalizar la serializacin.
Las clases que implementan esta interfaz no soportan __sleep() ni __wakeup(). El
mtodo serialize se llama cuando una instancia requiere ser serializada. Esto no
invoca __destruct() ni tiene ningn efecto adicional a menos que se programe
dentro del mtodo. Cuando los datos son deserializados, la clase es conocida y el
correspondiente mtodo unserialize() es llamado como constructor en lugar de
llamar al mtodo __construct(). Se puede ejecutar el constructor estndar en el
mtodo si fuera necesario.
Sinopsis de la Interfaz
Serializable {
/* Mtodos */
abstract public string serialize ( void )


abstract public void unserialize ( string $serialized )
}
Ejemplo #1 Uso bsico
<?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 sera algo similar a:
string(38) "C:3:"obj":23:{s:15:"Mis datos privados";}"
string(15) "Mis datos privados"
Tabla de contenidos
Serializable::serialize Representacin en formato cadena de un objeto
Serializable::unserialize Construye el objeto
Serializable::serialize
(PHP 5 >= 5.1.0)
Serializable::serialize Representacin en formato cadena de un objeto
Report a bug


Descripcin
abstract public string Serializable::serialize ( void )
Devuelve la representacin de un objeto en formato string.
Nota:
Este mtodo acta como el destructor del objeto. El mtodo __destruct() no ser
llamado despus de usar este mtodo.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve la representacin de un objeto o NULL
Report a bug
Errores/Excepciones
Lanza una Exception cuando de devuelen otros tipos aparte de string y NULL
Report a bug
Ver tambin
__sleep()
Serializable::unserialize
(PHP 5 >= 5.1.0)
Serializable::unserialize Construye el objeto
Report a bug
Descripcin
abstract public void Serializable::unserialize ( string $serialized )
Es llamado durante la unserializacin del objeto.
Nota:


Este mtodo actua como el constructor del objeto. El
mtodo __construct() no ser llamado despus de este mtodo.
Report a bug
Parmetros
serialized
La representacin en formato string de un objeto.
Report a bug
Valores devueltos
El valor devuelto por este mtodo es ignorado.
Report a bug
Ver tambin
__wakeup()
La clase Closure
(PHP 5 >= 5.3.0)
Introduccin
Clase usada para representar funciones annimas.
Las funciones annimas, implementadas en PHP 5.3, producan objetos de este
tipo. Este hecho sola ser considerado como un detalle de implementacin, pero
ahora puede confiarse en l. Desde PHP 5.4, esta clase tiene mtodos que
permiten ms control de las funciones annimas despus de que hayan sido
creadas.
Adems de los mtodos listados aqu, esta clase tambin posse un
mtodo __invoke. Esto es por consistencia con otras clases que implementan
la llamada mgica, ya que este mtodo no se usa para llamar a la funcin.
Sinopsis de la Clase
Closure {
/* Mtodos */


__construct ( void )
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscop
e = 'static' ] )
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] )
}
Tabla de contenidos
Closure::__construct Constructor que anula la instanciacin
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
Closure::__construct
(PHP 5 >= 5.3.0)
Closure::__construct Constructor que anula la instanciacin
Report a bug
Descripcin
Closure::__construct ( void )
Este mtodo slo existe para anular la instanciacin de la clase Closure. Los
objetos de esta clase se crean del modo descrito en la pginafunciones annimas.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Este mtodo no tiene un valor de retorno; simplemente emite un error (de
tipo E_RECOVERABLE_ERROR).
Report a bug


Ver tambin
Funciones annimas
Closure::bind
(PHP 5 >= 5.4.0)
Closure::bind Duplicar un cierre con un objeto vinculado y mbito de clase
especificados
Report a bug
Descripcin
public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $n
ewscope = 'static' ] )
Este mtodo es una versin esttica de Closure::bindTo(). Vase la documentacin
de ese mtodo para ms informacin.
Report a bug
Parmetros
closure
La funcin annima a vincular.
newthis
El objeto al que la funcin annima dada debera 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 mtodos protegidos y privados del objeto
vinculado.


Report a bug
Valores devueltos
Devuelve un nuevo objeto Closure o FALSE en caso de error
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Closure::bind()
<?php
class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};

$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?>
El resultado del ejemplo sera algo similar a:
1
2
Report a bug
Ver tambin
Funciones annimas
Closure::bindTo() - Duplicar el cierre con un objeto vinculado
y mbito de clase nuevos
Closure::bindTo
(PHP 5 >= 5.4.0)
Closure::bindTo Duplicar el cierre con un objeto vinculado y mbito de clase
nuevos
Report a bug


Descripcin
public Closure Closure::bindTo ( object $newthis [, mixed $newscope = 'static' ] )
Crea y devuelve una nueva funcin annima 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
funcin, y el "mbito de clase" representa una clase que determina los miembros
privados y protegidos a los que ser capaz de acceder la funcin annima.
Concretamente, los miembros que sern visibles son los mismos que si la funcin
annima fuese un mtodo de la clase dada como valor del parmetro newscope.
Los cierres estticos no pueden tener ningn objeto vinculado (el valor del
parmetro newthis debera ser NULL), pero esta funcin puede, no obstante, usarse
para cambiar su mbito de clase.
Esta funcin se asegurar de que un cierre no esttico que tenga una instancia
vinculada se le aplique un mbito y viceversa. En este punto, los cierres no
estticos que le son dados un mbito, excepto una instancia NULL, son hechos
estticos, y los cierres no estticos 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 annimas, se puede usar cloning en
su lugar.
Report a bug
Parmetros
newthis
El objeto al que la funcin annima dada debera 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 mtodos protegidos y privados del objeto
vinculado.


Report a bug
Valores devueltos
Devuelve el objeto Closure recin creado o FALSE en caso de error
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Closure::bindTo()
<?php

class A {
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 sera algo similar a:
1
2
Ver tambin
Funciones annimas
Closure::bind() - Duplicar un cierre con un objeto vinculado y
mbito de clase especificados
The Generator class
(PHP 5 >= 5.5.0)
Introduccin
Generator objects are returned from generators.


Precaucin
Generator objects cannot be instantiated via new.
Sinopsis de la Clase
Generator implements Iterator {
/* Mtodos */
public mixed current ( void )
public mixed key ( void )
public void next ( void )
public void rewind ( void )
public mixed send ( mixed $value )
public void throw ( Exception $exception )
public bool valid ( void )
public void __wakeup ( void )
}
Generator::current
(PHP 5 >= 5.5.0)
Generator::current Get the yielded value
Descripcin
public mixed Generator::current ( void )
Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
Returns the yielded value.
Generator::key
(PHP 5 >= 5.5.0)


Generator::key Get the yielded key
Descripcin
public mixed Generator::key ( void )
Advertencia
Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
Returns the yielded key.
Generator::next
(PHP 5 >= 5.5.0)
Generator::next Resume execution of the generator
Descripcin
public void Generator::next ( void )
Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
No devuelve nGenerator::rewind
(PHP 5 >= 5.5.0)
Generator::rewind Rewind the iterator
Descripcin
public void Generator::rewind ( void )
If iteration has already begun, this will throw an exception.


Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
No devuelve ningn valor
Generator::send
(PHP 5 >= 5.5.0)
Generator::send Send a value to the generator
Descripcin
public mixed Generator::send ( mixed $value )
Sends the given value to the generator as the result of the yield expression and
resumes execution of the generator.
Generator::send() allows values to be injected into generator functions while
iterating over them. The injected value will be returned from the yield statement
and can then be used like any other variable within the generator function.
Parmetros
value
Ejemplos
Ejemplo #1 Using Generator::send() to inject values
<?php
function printer() {
while (true) {
$string = yield;
echo $string;
}
}

$printer = printer();
$printer->send('Hello world!');
?>
El resultado del ejemplo sera:
Hello world!


Valores devueltos
Returns the yielded value.
Generator::throw
(PHP 5 >= 5.5.0)
Generator::throw Throw an exception into the generator
Descripcin
public void Generator::throw ( Exception $exception )
Parmetros
exception
Valores devueltos
Returns the yielded value.
Generator::valid
(PHP 5 >= 5.5.0)
Generator::valid Check if the iterator has been closed
Descripcin
public bool Generator::valid ( void )
Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
Returns FALSE if the iterator has been closed. Otherwise returns TRUE.
Generator::__wakeup
(PHP 5 >= 5.5.0)
Generator::__wakeup Serialize callback


Descripcin
public void Generator::__wakeup ( void )
Throws an exception as generators can't be serialized.
Parmetros
Esta funcin no tiene parmetros.
Valores devueltos
No devuelve ningn valor.
Opciones de contexto y parmetros
PHP ofrece varias opciones y parmetros 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 parmetros
constream_context_set_params().
Opciones de contexto de sockets
Opciones de contexto de sockets Listado de opciones de contexto de sockets
Report a bug
Descripcin
Las opciones de contexto de sockets estn disponibles para todas las envolturas
que trabajan sobre sockets, como tcp, http y ftp.
Report a bug
Opciones
bindto
Usada para especificar la direccin IP (ya sea IPv4 o IPv6) y/o el nmero de
puerto que PHP usar para acceder a la red. La sintaxis es ip:puerto para
direcciones IPv4, y [ip]:puerto para direcciones IPv6. Establecer el nmero
IP o de puerto como 0producir que el sistema lo elija por usted.
Nota:


Dado que FTP crea dos conexiones de socket durante la operacin normal,
no es posible especificar el nmero de puerto con esta opcin.
backlog
Usado para limitar el nmero de conexiones pendientes en la cola de
escucha del socket.
Nota:
Solamente se aplica a stream_socket_server().
Report a bug
Historial de cambios
Versin Descripcin
5.1.0 Se agreg bindto.
5.3.3
Se
agreg backlog.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de uso bsico 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 la direccin IPv6 '2001:db8::1'
// y el puerto '7000'
$opciones = array(
'socket' => array(
'bindto' => '[2001:db8::1]: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 HTTP Lista de opciones de contexto de HTTP
Report a bug
Descripcin
Opciones de contexto para los transports http:// y https://.
Report a bug
Opciones
method string
GET, POST, o cualquier otro mtodo HTTP que soporte el servidor remoto.
Por omisin, GET.


header string
Cabeceras adicionales que se envan en la peticin. Los valores
sobrescribirn los existentes (como por ejemplo User-agent:,Host:,
o Authentication:).
user_agent string
Valor de la cabecera User-Agent:. Slo se utilizar si el user-agent no se
ha especificado en la opcin de contexto header vista arriba.
por omisin se utiliza el valor del ajuste user_agent en php.ini.
content string
Datos adicionales a enviar tras las cabeceras. Tpicamente se utiliza con
peticiones POST o PUT.
proxy string
URI que define la direccin 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 peticin. (es
decir, GET http://www.example.com/path/to/file.html HTTP/1.0). A
pesar de que es un formato de peticin no estndar, algunos servidores
proxy requieren que sea as.
Por omisin FALSE.


follow_location integer
Seguir las redirecciones de las cabeceras Location. Establecer a 0 para
deshabilitarlo.
Por omisin 1.
max_redirects integer
Nmero mximo de redirecciones a seguir. Un valor igual o menor
a 1 indica que no se siga ninguna redireccin.
Por omisin 20.
protocol_version float
Versin del protocolo HTTP.
Por omisin 1.0.
Nota:
Las versines de PHP anteriores a la 5.3.0 no implementa decodificacin de
transferencias fragmentadas. Si este valor es1.1, es responsabilidad del
programador cumplir con la versin 1.1.
timeout float
Tiempo de espera de lectura en segundos, especificado por
un float (p.ej. 10.5).
Por omisin se utiliza el valor del ajuste default_socket_timeout de php.ini.


ignore_errors boolean
Captura el contenido incluso con cdigos de estado de error.
Por omisin FALSE.
Historial de cambios
Versin Descripcin
5.3.4 Aadido follow_location.
5.3.0
La opcin protocol_version soporta decodificacin de transferencias fragmentadas
en caso de valer 1.1.
5.2.10 Aadido ignore_errors.
5.2.10 El parmetro header puede ahora ser un array de ndices numricos.
5.2.1 Aadido timeout.
5.1.0 Aadido soporte para HTTPS mediante proxies HTTP.
5.1.0 Aadido max_redirects.
5.1.0 Aadido protocol_version.
Report a bug
Ejemplos
Ejemplo #1 Captura una pgina y enva 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);

// informacin 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);
?>
Report a bug
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: Lnea de estado HTTP
Cuando esta envultura sigue una redireccin, el wrapper_data devuelto
por stream_get_meta_data() no contiene necesariamente la lnea 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 peticin devolvi un 301 (redireccin permanente), de manera que la
envoltura automticamente sigue la redireccin para obtener una respuesta con
cdigo 200 (ndice = 4).
Report a bug
Ver tambin
http://
Opciones de contexto de sockets
Opciones de contexto para SSL
Opciones de contexto para FTP
Opciones de contexto para FTP Listado de opciones de contexto para FTP
Report a bug
Descripcin
Opciones de contexto para transportes ftp:// y ftps://
Report a bug
Opciones
overwrite boolean
Permite sobrescribir archivos ya existentes en el servidor remoto. Se aplica
slo al modo de escritura (subida).
Defaults to FALSE.


resume_pos integer
Desplazamiento de archivo en donde iniciar la transferencia. Se aplica slo
al modo de lectura (descarga).
Por defecto es 0 (inicio del archivo).
proxy string
Peticin FTP al proxy por medio de un servidor proxy http. Se aplica slo a
operaciones de lectura de archivos.
Ejemplo:tcp://squid.example.com:8000.
Report a bug
Historial de cambios
Versin Descripcin
5.1.0 Se aadi proxy.
5.0.0
Se
aadi overwrite y resume_pos.
Report a bug
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://.
Report a bug
Ver tambin
ftp://
Opciones de contexto de sockets
Opciones de contexto para SSL


Opciones de contexto para SSL
Opciones de contexto para SSL Listado de opciones de contexto para SSL
Report a bug
Descripcin
Opciones de contexto para transportes ssl:// y tls://
Report a bug
Opciones
verify_peer boolean
Requiere verificacin 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
Ubicacin del archivo de la entidad emisora de certificados en el sistema de
archivos local, la cual debe ser utilizada con la opcin de
contexto verify_peer para autenticar la identidad del par remoto.
capath string


Si no se especfica 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 contrasea con la cual el archivo local_cert fue codificado.
CN_match string
El nombre comn que se est esperando. PHP realizar comparaciones
limitadas de comodines. Si el nombre comn no coincide con esto, el
intento de conexin 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 opcin de contexto peer_certificate ser
creada, conteniendo el certificado par.
capture_peer_cert_chain boolean
Si se establece en TRUE, una opcin de
contexto peer_certificate_chain ser creada, conteniendo la cadena del
certificado.
SNI_enabled boolean
Si se establece en TRUE, la indicacin del nombre del servidor se activar.
Activando SNI se permiten mltiples certificados en la misma direccin IP.
SNI_server_name string
Si se establece, entonces este valor se utilizar como nombre del servidor
para la indicacin 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.
disable_compression boolean
Si est establecido, deshabilita la comprensin TLS. Esto puede ayudar a
mitigar el vector de ataque CRIME.
Report a bug


Historial de cambios
Versin Descripcin
5.4.13 Se aadi disable_compression. Requiere OpenSSL >= 1.0.0.
5.3.2 Se aadi SNI_enabled y SNI_server_name.
5.0.0
Se
aadi capture_peer_cert, capture_peer_chain y ciphers.
Report a bug
Notas
Nota: Debido a que ssl:// el es transporte subyacente para las
envolturas https:// y ftps://, cualquier opcin de contexto que aplique
para ssl:// tambin 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
utilizaOPENSSL_TLSEXT_SERVER_NAME para determinar si SNI est soportado.
Report a bug
Ver tambin
Opciones de contexto de sockets
Opciones de contexto para CURL
Opciones de contexto para CURL Listado de opciones de contexto para CURL
Report a bug
Descripcin
Las opciones de contexto para CURL estn disponibles cuando la
extensin CURL fue compilada usando la opcin de configuracin --with-
curlwrappers .
Report a bug
Opciones
method string


GET, POST, o cualquier otro mtodo HTTP soportado por el servidor remoto.
Por defecto es GET.
header string
Cabeceras adicionales a ser enviadas durante la peticin. Los valores de
esta opcin sobrescribirn 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 configuracin user_agent de php.ini.
content string
Datos adicionales para ser enviados despus de las cabeceras. Esta opcin
no se utiliza para peticiones GET o HEAD.
proxy string
URI que especifica la direccin del servidor proxy. (Por
ejemplo tcp://proxy.example.com:5100).
max_redirects integer
El nmero mximo 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 opcin est disponible tanto para envolturas del protocolo http como
del ftp.
curl_verify_ssl_peer boolean
Requiere verificacin del certificado SSL utilizado.
Por defecto es FALSE
Nota:
Esta opcin est disponible tanto para envolturas del protocolo http como
del ftp.
Ejemplos
Ejemplo #1 Obtener una pgina 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);

?>
Report a bug
Ver tambin
Opciones de contexto de sockets
Opciones de contexto Phar
Opciones de contexto Phar Listado de opciones de contexto Phar
Report a bug
Descripcin
Opciones de contexto para phar:// envoltura.
Report a bug
Opciones
comprimir int
Uno de Constantes de compresin Phar.
metadata mixed
Metadatos Phar. Ver Phar::setMetadata().
Report a bug
Ver tambin
phar://
Envoltura de secuencias Phar


Contexto parmetros
Contexto parmetros Listado de parmetros de contexto
Report a bug
Descripcin
Estos parametros se pueden establecer en un contexto usando el la
funcin stream_context_set_params().
Report a bug
Parmetros
notification callable
Un valor de tipo callable que se llamar cuando se produce un evento en un
flujo.
Vase stream_notification_callback para ms detalles.
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(). Adems de estas envolturas, se
pueden definir por el usuario utilizando la funcin 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 estn soportadas.
file://
file:// Acceso al sistema de ficheros local
Report a bug
Descripcin
El Sistema de Ficheros es la envoltura por omisin 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 tambin include_path para localizar ficheros con rutas relativas.
Uso
/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 S
Permite Escrituras S
Permite Aadir contenidos S
Permite Lecturas y Escrituras
Simultneas
S
Permite usar la funcin stat() S
Permite usar la funcin unlink() S
Permite usar la funcin rename() S
Permite usar la funcin mkdir() S
Permite usar la funcin rmdir() S



Historial de cambios
Versin Descripcin
5.0.0
Aadido file:/
/.
http://
https://
http:// -- https:// Acceso a URLS en HTTP(s)
Report a bug
Descripcin
Permite acceso de lectura a ficheros/recursos mediante HTTP 1.0, utilizando el
mtodo GET de HTTP. Junto con la peticin, se enva 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
tambin en la peticin.
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 debern 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 parmetros.
Report a bug
Uso
http://ejemplo.com
http://ejemplo.com/fichero.php?var1=val1&var2=val2
http://usuario:contrasea@ejemplo.com
https://ejemplo.com
https://ejemplo.com/fichero.php?var1=val1&var2=val2
https://usuario:contrasea@ejemplo.com
Report a bug


Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen S
Permite Lecturas S
Permite Escrituras No
Permite Aadir contenidos No
Permite Lecturas y Escrituras
Simultneas
N/A
Permite usar la funcin stat() No
Permite usar la funcin unlink() No
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No
Report a bug
Historial de cambios
Versin Descripcin
4.3.7
Detectado errores en servidores IIS para evitar "SSL: Fatal Protocol
Error".
4.3.0 Aadido https://.
4.0.5 Aadido soporte para las redirecciones.


Report a bug
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($response, 0, 10)) == 'location: ') {

/* update $url with where we were redirected to */
$url = substr($response, 10);
}

}

?>
Report a bug
Notas
Nota: Slo habr soporte para HTTPS cuando la extensin openssl est habilitada.
Las conexiones HTTP son de slo 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.
Report a bug
Ver tambin
Opciones de contexto de HTTP
$http_response_header
stream_get_meta_data() - Recuperar meta-informacin o de cabecera de
punteros a flujos/archivo
ftp://
ftps://


ftp:// -- ftps:// Acceso a URLs por FTP(s)
Descripcin
Permite tanto lectura de ficheros existentes como la creacin de nuevos ficheros
va FTP. La conexin fallar si el servidor no soporta FTP en modo pasivo.
Se puede tanto leer como escribir ficheros, pero no las dos cosas
simultneamente. Si el fichero remoto ya existiera en el servidor ftp, y se quisiera
abrir en modo escritura sin especificar la opcin de contexto overwrite, tambin
fallar la conexin. Si fuera necesario sobrescribir un fichero ya existente en ftp,
se tendr que especificar la opcin de contexto overwrite antes de abrir el fichero
para su escritura. Alternativamente, puede usarse la extensin FTP.
Si se ha establecido la directiva from en php.ini, se enviar como contrasea para
conexiones de FTP annimo.
Uso
ftp://ejemplo.com/pub/fichero.txt
ftp://usuario:contrasea@example.com/pub/fichero.txt
ftps://ejemplo.com/pub/fichero.txt
ftps://usuario:contrasea@ejemplo.com/pub/fichero.txt
Opciones
Resumen de la Envoltura
Atributos PHP 4 PHP 5
Restringido
porallow_url_fopen
S S
Permite Lecturas S S
Permite Escrituras
S (slo
en
ficheros
nuevos)
S (ficheros nuevos. En los existentes con overwrite)
Permite Aadir
contenidos
No S


Resumen de la Envoltura
Atributos PHP 4 PHP 5
Permite Lecturas y
Escrituras Simultneas
No No
Permite usar la
funcin stat()
No
Desde PHP 5.0.0: slo los
elementos filesize(), filetype(), file_exists(), is_file(), yis_dir().
Desde PHP 5.1.0: filemtime().
Permite usar la
funcinunlink()
No S
Permite usar la
funcinrename()
No S
Permite usar la
funcinmkdir()
No S
Permite usar la
funcinrmdir()
No S
Historial de cambios
Versin Descripcin
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 conexin se restablece a una conexin
ftp regular sin encriptacin.


Nota: Aadiendo contenido
Desde PHP 5.0.0 se puede aadir contenido a los ficheros mediante la envoltura de
URL ftp://. Si se tratara de aadir contenido a un fichero con ftp:// en versiones
anteriores, se provocara un fallo.
Report a bug
Ver tambin
Opciones de contexto para FTP
php://
php:// Acceso a distintos flujos de E/S
Report a bug
Descripcin
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 estndar, 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 segn 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 ms
tarde se cierra, slo se cerrara la copia del descriptor; el flujo real al que
referencia STDIN no se vera 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 slo lectura, mientras que php://stdout y php://stderr son de
slo escritura.
php://input
php://input es un flujo de slo lectura que permite leer datos del cuerpo solicitado.
En el caso de peticiones POST, es preferible usarphp://input en vez
de $HTTP_RAW_POST_DATA ya que no depende de diretivas php.ini especiales.
Sin embargo, cuando no se genera automticamente $HTTP_RAW_POST_DATA, se
trata de una alternativa que hace un uso menos intensivo de memoria que
activandoalways_populate_raw_post_data. php://input no est disponible
con enctype="multipart/form-data".


Nota: Los flujos que se abren con php://input slo pueden leerse una vez; no hay
soporte para operaciones de bsqueda. Pero, dependiendo de la SAPI, podra ser
posible abrir otro flujo php://input para reiniciar la lectura. Esto slo es posible si
los datos de la peticin se han guardado. Este caso es tpico en peticiones POST,
pero no en otros mtodos de peticin, como por ejemplo PUT o PROPFIND.
php://output
php://output es un flujo de slo 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://temputilizar un fichero temporal cuando la cantidad
de datos almacenados superen el lmite predefinido (por omisin, 2 MB). La
ubicacin de este fichero temporal est determinada de la misma manera que la
funcin sys_get_temp_dir(),
El lmite de memoria de php://temp se puede controlar
aadiendo /maxmemory:NN, donde NN es la cantidad en bytes mxima de
datos a almacenar en memoria antes de recurrir a un fichero temporal.
php://filter
php://filter es una especie de meta-envoltura diseada 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 parmetros como parte de su ruta. Se pueden
especifcar mltiples filtros en una ruta. Por favor, consulte los ejemplos para los
usos concretors de estos parmetros.
parmetros de php://filter
Nombre Descripcin
resource=<flujo a filtrar>
Este parmetro es obligatorio. Especifica el flujo que se desea


parmetros de php://filter
Nombre Descripcin
filtrar.
read=<listra de filtros a
aplicar a la cadena de lectura>
Este parmetro es opcional. Se pueden enumerar uno o ms
filtros, separados por el carcter|.
write=<lista de filtros a
aplicar a la cadena de
escritura>
Este parmetro es opcional. Se puedene enumerar uno o ms
filtros, separados por el carcter|.
<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 segn proceda.
Report a bug
Opciones
Resumen de la Envoltura (Para php://filter, consltese el resumen de la envoltura que se filtra)
Atributo Permitido
Restringido
por allow_url_fope
n
No
Restringido
porallow_url_inclu
de
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:/
/tempsolamente.
Permite Aadir php://stdout, php://stderr, php://output, php://fd, php://memory y php:/


Resumen de la Envoltura (Para php://filter, consltese el resumen de la envoltura que se filtra)
Atributo Permitido
contenidos /tempsolamente. (Equivalente a escrituras)
Permite Lecturas
y Escrituras
Simultneas
php://fd, php://memory y php://temp solamente.
Permite usar la
funcin stat()
php://memory y php://temp solamente.
Permite usar la
funcin unlink()
No
Permite usar la
funcinrename()
No
Permite usar la
funcin mkdir()
No
Permite usar la
funcin rmdir()
No
Permite usar la
funcinstream_sel
ect()
php://stdin, php://stdout, php://stderr, php://fd y php://temp solamente.
Report a bug
Historial de cambios
Versin Descripcin
5.3.6 Se aadi php://fd.
5.1.0
Se
aadi php://memory y php://temp.


Versin Descripcin
5.0.0 Se aadi php://filter.
Report a bug
Ejemplos
Ejemplo #1 php://temp/maxmemory
Este parmetro opcional permite establecer el lmite de memoria a partir del
cual php://temp comienza a usar un fichero temporal.
<?php
// Establecer el lmite a 5 MB.
$fiveMBs = 5 * 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 parmetro tiene que ubicarse al final de la especificacin 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 ningn 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 parmetro contiene uno o ms nombres de filtros separados por el caracter |.
<?php
/* Devolver el contenido de
www.example.com en maysculas */
readfile("php://filter/read=string.toupper/resource=http://www.example.com");

/* Har lo mismo que el ejemplo de arriba
pero adems lo codificar en ROT13 */
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.exam
ple.com");
?>


Ejemplo #4 php://filter/write=<lista de filtros a aplicar a la cadena de
escritura>
Este parmetro contiene uno o ms nombres de filtros separados por el caracter |.
<?php
/* Filtrar el string "Hello World" con
el filtro rot13, y despus 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 compresin
Report a bug
Descripcin
zlib: PHP 4.0.4 - PHP 4.2.3 (slo 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 ambigedad 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 extensin ZIP registra la envoltura zip:.
Report a bug
Uso
compress.zlib://file.gz
compress.bzip2://file.bz2
zip://archive.zip#dir/file.txt
Report a bug


Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permite Lecturas S
Permite Escrituras S (excepto zip://)
Permite Aadir contenidos S (excepto zip://)
Permite Lecturas y Escrituras
Simultaneas
No
Permite usar la funcin stat()
No, utilice la envoltura file:// para consultar la informacin
de un fichero.
Permite usar la funcin unlink()
No, utilice la envoltura file:// para eliminar ficheros
comprimidos.
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No
data://
data:// Data (RFC 2397)
Report a bug
Descripcin
La envoltura del flujo data: ( RFC 2397) est disponible desde PHP 5.2.0.
Report a bug


Uso
data://text/plain;base64,
Report a bug
Opciones
Resumen de la envolutra
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include S
Permite Lecturas S
Permite Escrituras No
Permite Aadir contenido No
Permite Lectura y Escritura
Simultanea
No
Permite usar la funcin stat() No
Permite usar la funcin unlink() No
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No
Report a bug
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 patrn
Report a bug
Descripcin
La envoltura del flujo glob: est disponible desde PHP 5.3.0.
Report a bug
Uso
glob://
Report a bug
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 Aadir Contenidos No


Resumen de la Envoltura
Atributo Permitido
Permite Lecturas y Escrituras
Simultneas
No
Permite usar la funcin stat() No
Permite usar la funcin unlink() No
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No
Report a bug
Ejemplos
Ejemplo #1 Uso bsico
<?php
// Recorrer todos los ficheros *.php del directorio ext/spl/examples/
// y mostrar sus nombres y tamaos
$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
Report a bug


Descripcin
La envoltura de flujo phar:// est disponible desde PHP 5.3.0. Para consultar una
descripcin detallada, revise envoltura del flujo Phar.
Report a bug
Uso
phar://
Report a bug
Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas S
Permite Escrituras S
Permite Aadir contenidos No
Permite Lectura y Escritura
Simultanea
S
Permite usar la funcin stat() S
Permite usar la funcin unlink() S
Permite usar la funcin rename() S
Permite usar la funcin mkdir() S
Permite usar la funcin rmdir() S


Report a bug
Ver tambin
Opciones de contexto Phar
ssh2://
ssh2:// Secure Shell 2
Report a bug
Descripcin
ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// PHP 4.3.0 y
superior (PECL)
Nota: Esta envoltura no est habilitada por omisin
Para poder usarse la envoltura ssh2.*:// debe instalarase la
extensin SSH2 disponible en PECL.
Adems de permitir hacer un login tradicional en la URI, la envoltura ssh2 tambin
puede reutilizar las conexiones ya abiertas, proporcionando el recurso de conexin
en el apartado host de la URL.
Report a bug
Uso
ssh2.shell://usuario:contrasea@ejemplo.com:22/xterm
ssh2.exec://usuario:contrasea@ejemplo.com:22/usr/local/bin/comando
ssh2.tunnel://usuario:contrasea@ejemplo.com:22/192.168.0.1:14
ssh2.sftp://usuario:contrasea@ejemplo.com:22/ruta/a/fichero
Report a bug
Opciones
Resumen de la Envoltura
Atributo ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restringido
por allow_url_fopen
S S S S S
Permite Lecturas S S S S S


Resumen de la Envoltura
Atributo ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Permite Escrituras S S S S No
Permite Aadir contenidos No No No
S (cuando est
soportado por el
servidor)
No
Permite Lecturas y
Escrituras Simultneas
S S S S No
Permite usar la
funcin stat()
No No No S No
Permite usar la
funcin unlink()
No No No S No
Permite usar la
funcin rename()
No No No S No
Permite usar la
funcin mkdir()
No No No S No
Permite usar la
funcin rmdir()
No No No S No
Opciones de contexto
Nombre Uso Valor por omisin
session Recurso ssh2 preconectado a utilizar
sftp Recurso sftp preubicado a reutilizar
methods
mtodos a usar de entre Key exchange, hostkey, cipher,



Opciones de contexto
Nombre Uso Valor por omisin
compression, y MAC
callbacks
username Nombre de usuario con el que conectar
password Contrasea a utilizar en autenticacin con contrasea
pubkey_fil
e
Nombre del fichero con la clave pblica que se usar
para autenticar

privkey_fil
e
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 emulacin del terminal a solicitar cuando se
asigne un pty (pseudo terminal)

term_widt
h
Ancho del terminal solicitado cuando se asigne un pty
term_heigh
t
Altura del terminal solicitado cuando se asigne un pty
term_units Unidades a usar con term_width y con term_height
SSH2_TERM_UNIT_CHAR
S
Report a bug
Ejemplos
Ejemplo #1 Abriendo un flujo a partir de una conexin 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', 'secre
t');
$stream = fopen("ssh2.tunnel://$session/remote.example.com:1234", 'r');
?>
Ejemplo #2 La variable $session debe permanecer disponible!
Para utilizar la envoltura ssh2.*://$session debe mantenerse el
recurso $session disponible. El cdigo siguiente no tendr el efecto deseado:
<?php
$session = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secre
t');
$connection_string = "ssh2.sftp://$session/";
unset($session);
$stream = fopen($connection_string . "path/to/file", 'r');
?>
unset() cierra la sesin, ya que $connection_string no contiene una referencia a la
variable $session, simplemente una representacin de la cadena derivada de ella.
Esto tambin ocurre cuando unset() va implcito porque se sale del mbito (como
dentro de una funcin).
rar://
rar:// RAR
Report a bug
Descripcin
Esta envoltura se compone de una ruta al fichero RAR (relativa o absoluta)
codificada como URL, un asterisco opcional (*), un signo de nmero opcional (#) y
un nombre de entrada codificado como URL que tambin es opcional, tal como se
almacena en el fichero. Cuando se especifique un nombre de entrada, ser
necesario tambin especificar un signo de nmero; adems, se puede aadir 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 devolvern
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 podran parecen datos codificados como URL.
Si no se proporciona ni un signo de nmero ni tampoco un nmero de entrada, se
mostrar la raz del fichero. La diferencia respecto a directorios convencionales es
que el flujo no contendr determinada informacin, tal como la fecha de
modificacin, dado que el directorio raz no se almacena dentro el fichero


comprimido en de una entrada individual. Para usar la envoltura
con RecursiveDirectoryIterator es necesario que al acceder al raz se incluya el
signo de nmero en la URL, para que as las URLs de los nodos hijo se puedan
construir correctamente.
Nota: Esta envoltura no est habilitada por omisin
Para poder usar la envoltura rar://, debe instalarse la extensin rar disponible
en PECL.
rar:// Disponible desde PECL rar 3.0.0
Report a bug
Uso
rar://<nombre de archivo con codificacin url>[*][#[<nombre de entrada
con codificacin url>]]
Report a bug
Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Restringido por allow_url_include No
Permite Lecturas S
Permite Escrituras No
Permite Aadir contenido No
Permite Lecturas y Escrituras
Simultneas
No
Permite usar la funcin stat() S
Permite usar la funcin unlink() No


Resumen de la Envoltura
Atributo Permitido
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No
Opciones de contexto
Nombre Uso
Valor
por
omisin
open_password
Si la hubiera, contrasea utilizada para encriptar las cabeceras del
archivo. WinRAR encriptar todos los ficheros con la misma
contrasea que la cabecera siempre que sta est presente, por lo
que se ignorarfile_password en archivos que contengan cabeceras
encriptadas.

file_password
Si la hubiera, contrasea utilizada para encriptar un fichero. Si las
cabeceras estuvieran tambin encriptadas, se ignorara esta opcin
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
contraseas diferentes para la cabecera y los ficheros. Tenga en
cuenta que si el archivo no tuviera sus cabeceras encriptadas, se
ignoraraopen_password y tendra que usarse en su lugar esta
opcin.

volume_callbac
k
Llamada de retorno que determina la ruta de las partes que no se
hayan podido capturar. Para ms informacin,
revise RarArchive::open().

Report a bug
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 sera 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 (encriptacin 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 creacin ni la de ltimo acceso es obligatoria WinRAR,


* por esa razn la mayora de ficheros no lo tendrn */
var_dump(fstat($stream));
?>
El resultado del ejemplo sera 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
Report a bug
Descripcin
Los ficheros que se abran para lectura usando la envoltura ogg:// se utilizan como
codificaciones de audio comprimido usando el cdecOGG/Vorbis. De forma
similar, los ficheros abiertos para escritura o para aadir contenido usando la
envoltura ogg:// se escriben como datos de audio comprimidos. Cuando se use la
funcin stream_get_meta_data() con un fichero OGG/Vorbis abierto para lectura,
se devolvern diversos detalles del flujo, incluyendo la etiqueta vendor,
cualquier comments que se haya aadido, el nmero de canaleschannels, el ratio de
muestreo, y el rango del ratio de codificacin descrito
por: bitrate_lower, bitrate_upper, bitrate_nominal, ybitrate_window.


ogg:// PHP 4.3.0 and up (PECL)
Nota: Esta envoltura no est habilitada por omisin
Para usar la envoltura ogg:// es necesario instalar la
extensin OGG/Vorbis disponible en PECL.
Report a bug
Uso
ogg://soundfile.ogg
ogg:///path/to/soundfile.ogg
ogg://http://www.example.com/path/to/soundstream.ogg
Report a bug
Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permite Lecturas S
Permite Escrituras S
Permite Aadir contenido S
Permite Lecturas y Escrituras
Simultnea
No
Permite usar la funcin stat() No
Permite usar la funcin unlink() No
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No


Opciones de contexto
Nom
bre
Uso
Valor por
omisin
Modo
pcm
_mod
e
codificacin 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_L
E
Lectura
rate Ratio de muestreo en datos de entradas, expresado en Hz 44100
Escritur
a/Adici
n
bitra
te
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
Escritur
a/Adici
n
chan
nels
El nmero de canales de audio a codificar, normalmente 1
(mono), o 2 (estreo). Puede llegar a 16.
2
Escritur
a/Adici
n
com
ment
s
Un array de strings a codificar en la cabecera de la pista.
Escritur
a/Adici
n
expect://
expect:// Flujos de Interaccin de Procesos
Report a bug
Descripcin
Los flujos que se hayan abierto con la envoltura expect://, darn acceso a stdio,
stdout y stderr (entrada, salida y errores estndar respectivamente) de los
procesos, va PTY.
Nota: Esta envoltura no est habilitada por omisin
Para poder usar la envoltura expect:// se debe instalar la
extensin Expect disponible en PECL.


expect:// PHP 4.3.0 y superior (PECL)
Report a bug
Uso
expect://command
Report a bug
Opciones
Resumen de la Envoltura
Atributo Permitido
Restringido por allow_url_fopen No
Permites Lecturas S
Permite Escrituras No
Permite Aadir contenido S
Permite Lecturas y Escrituras
Simultneas
No
Permite usar la funcin stat() No
Permite usar la funcin unlink() No
Permite usar la funcin rename() No
Permite usar la funcin mkdir() No
Permite usar la funcin rmdir() No





Seguridad
Introduccin
PHP es un potente lenguaje, y su intrprete, bien como mdulo 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 omisin,
sea inseguro todo lo que se ejecute en un servidor web. PHP est diseado
especficamente para ser un lenguaje ms seguro para escribir
aplicaciones CGI que Perl or C. Partiendo de un correcto ajuste de opciones de
configuracin para tiempo de ejecucin y en tiempo de compilacin, y el uso de
prcticas de programacin apropiadas, pueden proporcionarle la combinacin de
libertad y de seguridad que necesita.
Dado que hay muchas vas para ejecutar PHP, existen muchas opciones de
configuracin para controlar su comportamiento. Al haber una extensa seleccin
de opciones se garantiza poder usar PHP para un gran nmero de propsitos, pero
a la vez significa que existen combinaciones que conllevan una configuracin
menos segura.
La flexibilidad de configuracin de PHP rivaliza igualmente con la flexibilidad de su
cdigo. PHP puede ser usado para construir completas aplicaciones de servidor,
con toda la potencia de un usuario de consola, o se puede usar slo desde el lado
del servidor implicando un menor riesgo dentro de un entorno controlado. El cmo
construir ese entorno, y cmo de seguro es, depende del desarrollador PHP.
Este captulo comienza con algunos consejos generales de seguridad, explica las
diferentes combinaciones de opciones de configuracin y las situaciones en que
pueden ser tiles, y describe diferentes consideraciones relacionadas con la
programacin de acuerdo a diferentes niveles de seguridad.
Consideraciones generales
Un sistema completamente seguro es prcticamente un imposible, de modo que el
enfoque usado con mayor frecuencia en la profesin 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 validacin biomtrica (como rastreo de
retinas y anlisis dactilar), usted contara con un nivel extremadamente alto de
confiabilidad. Tambin implicara que llenar los datos de un formulario
razonablemente complejo podra tomar media hora, cosa que podra incentivar a
los usuarios a buscar mtodos 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 cdigo 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
eslabn ms dbil de una cadena. Si todas las transacciones son registradas
copiosamente basndose en la fecha/hora, ubicacin, tipo de transaccin, etc. pero
la verificacin 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 pginas ms simples. Los datos de
entrada que usted puede esperar en sus aplicaciones no necesariamente tendrn
relacin alguna con el tipo de informacin que podra ingresar un empleado
disgustado, un cracker con meses de tiempo entre sus manos, o un gato
domstico caminando sobre el teclado. Es por esto que es mejor observar el
cdigo desde una perspectiva lgica, para determinar en dnde podran
introducirse datos inesperados, y luego hacer un seguimiento de cmo esta
informacin es modificada, reducida o amplificada.
Internet est repleto de personas que tratan de crearse fama al romper la
seguridad de su cdigo, bloquear su sitio, publicar contenido inapropiado, y por lo
dems haciendo que sus das sean ms interesantes. No importa si usted
administra un sitio pequeo o grande, usted es un objetivo por el simple hecho de
estar en lnea, por tener un servidor al cual es posible conectarse. Muchas
aplicaciones de cracking no hacen distinciones por tamaos, simplemente recorren
bloques masivos de direcciones IP en busca de vctimas. Trate de no convertirse
en una.
Ataques posibles
Usar PHP como un binario CGI es una opcin para configuraciones que por alguna
razn no desean integrar PHP como un mdulo dentro del software de servidor
(como Apache), o usarn PHP con diferentes tipos de envoltorios CGI para crear
entornos seguros chroot y setuid para scripts. Esta configuracin usualmente
involucra la instalacin del binario ejecutable de PHP en el directorio cgi-bin del
servidor web. La recomendacin CA-96.11 del CERT recomienda que est en
contra de colocar cualquiera de los intrpretes dentro de cgi-bin. An si el binario
de PHP puede ser usado como un intrprete independiente, PHP est diseado
para prevenir los ataques que esta configuracin hace posible:
Accediendo a los ficheros del sistema: http://mi.servidor/cgi-
bin/php?/etc/passwd La consulta de informacin en una URL despus del
signo de interrogacin (?) es pasado como argumento de la lnea de
comandos al intrprete por la interface del CGI. Usualmente los intrpretes
abren y ejecutan el fichero especificado como el primer argumento en la
lnea de comandos. Cuando es invocado como un binario de CGI, PHP se
rehusa a interpretar los argumentos de lnea 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 informacin de la URL despus 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 configuracin de algunos
servidores web (Apache: Accin) son utilizados para redirigir peticiones a
los documentos como http://mi.servidor/directorio/secreto/script.php al
intrprete de PHP. Con esta configuracin, el servidor web revisa primero
los permisos de acceso a los directorios /directorio/secreto, y despus crea
la peticin redirigida http://mi.servidor/cgi-
bin/php/directorio/secreto/script.php. Desafortunadamente, si la peticin 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 configuracin en tiempo de
ejecucin 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. Vase ms
abajo para una explicacin completa de las diferentes combinaciones.
Caso 1: Ficheros pblicos servidos solamente
Si su servidor no tiene ningn contenido que no est restringido por contrasea o
control de acceso basado en IP, no hay necesidad de estas opciones de
configuracin. Si su servidor web no le permite hacer redirecciones, o el servidor
no tiene una forma de comunicar al binario de PHP que la peticin es una forma
segura de peticin de redireccionamiento, puede especificar la opcin --enable-
force-cgi-redirect para el script de configuracin. Usted todava tiene que
asegurarse que sus scripts de PHP no confan en una forma o en otra para llamar
el script, ni directamentehttp://my.host/cgi-bin/php/dir/script.php ni por
redireccin http://my.host/dir/script.php.
La redireccin puede ser configurada en Apache utilizando directivas Action y
AddHandler (vea ms abajo).
Caso 2: utilizando cgi.force_redirect
La directiva de configuracin cgi.force_redirect previene a cualquiera que llame a
PHP directamente por medio de una URL como estahttp://mi.servidor/cgi-
bin/php/directoriosecreto/script.php. En cambio, PHP solamente lo analizar en
este modo si ste se ha ido a travs de una regla directa del servidor web. Las
versiones de PHP antiguas a la versin 4.2.0 utilizaban --enable-force-cgi-
redirect en opcin de tiempo de compilacin para esto.
Usualmente la redireccin en la configuracin de Apache se hace con las siguientes
directivas:
Action php-script /cgi-bin/php
AddHandler php-script .php
Esta opcin ha sido probada solamente con el servidor web Apache, y se basa en
que en Apache se configure en una variable de entorno no-estndar de


CGI REDIRECT_STATUS para peticiones de redireccin. Si su servidor web no
soporta ninguna forma de decirle si la peticin es directa o redirigida, usted no
puede utilizar esta opcin y debe usar una de las otras formas de ejecutar la
versin 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 prctica insegura.
Si, por el hecho del algn error de configuracin, los scripts no se ejecutan y son
mostrados como documentos HTML regulares, esto podra resultar en una fuga de
informacin de propiedad intelectual o de informacin de seguridad como las
contraseas. Por lo tanto muchos Administradores de Sistemas preferirn
configurar otra estructura de directorios para scripts que sean accesibles
solamente a travs del CGI de PHP, y por lo tanto siempre interpretado y no
desplegado como tal.
Tambin si el mtodo para asegurar las peticiones no es redirigido, como se
describi en la seccin anterior, no est disponible, es necesario configurar un
script doc_root que sea diferente de la raz del documento web.
Usted puede configurar el script de la raz de documento de PHP en la directiva de
configuracin doc_root en el fichero de configuracin, o puede configurar la
variable de entorno PHP_DOCUMENT_ROOT. Si ste es configurado, la versin
del CGI de PHP siempre construir el nombre del fichero para abrir con
este doc_root y la ruta de informacin en la peticin, de tal forma que pueda estar
seguro que ningn script ser ejecutado fuera de este directorio (excepto
por user_dir que se encuentra ms abajo).
Otra opcin 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 peticin
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 expansin de user_dir sucede sin tomar en cuenta la configuracin de doc_root,
as que usted puede controlar el acceso a la raz de los documentos y el directorio
de los usuarios separadamente.


Caso 4: El analizador de PHP fuera del rbol de la web
Una opcin muy segura es poner el binario analizador de PHP en algn lugar fuera
del rbol de ficheros de la web. En /usr/local/bin, por ejemplo. El nico
inconveniente real con esta opcin es que ahora tendr que poner una lnea similar
a:
#!/usr/local/bin/php
como la primera lnea de cualquier fichero que contenga etiquetas de PHP.
Tambin necesitar hacer que el fichero sea ejecutable. Eso significa, tratarlo
exactamente como tratara cualquier otro script de CGI escrito en Perl, sh, bash, o
cualquier otro lenguaje comn de script el cual utilice #!como mecanismo de
ejecucin de si mismo.
Para que PHP maneje la informacin correctamente
de PATH_INFO y PATH_TRANSLATED con esta configuracin, el analizador de PHP
debera ser compilado con la opcin de configuracin --enable-discard-path.
Instalado como mdulo de Apache
Cuando PHP es usado como un mdulo 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
podra tener acceso y modificar la base de datos, incluso sin un nombre de usuario
y contrasea. Es completamente posible que una araa(bot) web pudiera toparse
con la pgina web de administracin de una base de datos, y eliminar todo de la
base de datos. Una proteccin ante este tipo de situaciones es mediante el uso del
mecanismo de autorizacin de Apache, o con modelos de acceso de diseo propio
usando LDAP, archivos .htaccess, etc. e incluir ese cdigo 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 quizs 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 debera ser considerado como una opcin por aquellos que no son
profesionales en seguridad.
Existen otras soluciones ms simples. Mediante el uso de open_basedir se puede
controlar y restringir qu directorios pueden ser usados por PHP. Tambin 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
Cuestiones relacionadas a bytes nulos
PHP est sujeto a la seguridad integrada en la mayora 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 diseado para permitir el acceso a nivel de usuarios para el
sistema de archivos, es perfectamente posible escribir un script PHPque le permita
leer archivos del sistema como /etc/passwd, modificar sus conexiones de red,
enviar trabajos de impresin 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 situacin 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 podra borrar el archivo a pesar
que se supone que no estara permitido hacerlo. En este caso, usted deseara usar
algn otro tipo de autenticacin. Considere lo que podra suceder si las variables
enviadas son "../etc/" y "passwd". El cdigo entonces se ejecutara 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 envan.
Aqu est una versin mejorada del script:
Ejemplo #3 Comprobacin ms 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 autenticacin
$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($logstring, ENT_QUOTES);



?>
Sin embargo, incluso esto no est exento de defectos. Si la autenticacin del
sistema permite a los usuarios crear sus propios inicios de sesin de usuario, y un
usuario eligi la entrada "../etc/", el sistema est expuesto una vez ms. Por esta
razn, puede que prefiera escribir un chequeo ms personalizado:
Ejemplo #4 Comprobacin ms segura del nombre de archivo
<?php
$username = $_SERVER['REMOTE_USER']; // usando un mecanismo de autenticacin
$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 razn, por lo
general es ms fcil crear una poltica en donde se prohba 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 podra 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
sern consideradas por completo, sino slo hasta que ocurra un byte nulo. El
siguiente ejemplo muestra un cdigo 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 ex
iste
include '/home/wwwrun/'.$file.'.php';
// el archivo /etc/passwd se incluir


}
?>
Por lo tanto, cualquier cadena que se utiliza en una operacin de sistema de
archivos siembre deben ser validados correctamente. He aqu una versin
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
Diseando la base de datos
Conectndose a la base de datos
Modelo de almacenamiento encriptado
Inyeccin de SQL
Hoy en da, las bases de datos son componentes cardinales de cualquier aplicacin
basada en la web permitiendo a los sitios web que provean una variedad de
contenido dinmico. Esta informacin 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 informacin usted necesita conectarse a la
base de datos, enviar una consulta legtima, devolver el resultado, y cerrar la
conexin. Hoy en da, el lenguaje de consultas comunmente utilizado en esta
interaccin es el Lenguaje Estructurado de Consultas (SQL, por sus siglas en
ingls). 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 introduccin a lo ms bsico de cmo acceder
y manipular base de datos dentro de scripts de PHP.


Tenga en mente esta simple regla: Proteccin en profundidad. En la mayora de
sitios tome la accin de incrementar la proteccin de su base de datos, para una
menor probabilidad de que un atacante tenga xito en exponer o abusar de
cualquier informacin que tenga almacenada. El buen diseo del esquema de la
base de datos y de la aplicacin se ocupar de sus mayores temores.
Diseando 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 creacin. Usualmente, slo 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 deberan 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
aplicacin con permisos muy limitados a los objetos. La mayora de privilegios que
son requeridos deberan 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 aplicacin, solamente afecta a los cambios que su aplicacin
permita.
Usted est encarecido a no implementar toda la lgica del negocio en la aplicacin
web (Ej., sus scripts), en su lugar hgalo 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
lgica 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 automticamente, lo cual a menudo provee un vistazo al interior cuando hay
problemas de depuracin con su programa o con el sistema de seguimientos de
transacciones de su aplicacin.
Conectndose a la base de datos
Puede ser que quiera establecer las conecciones sobre SSL para encriptar la
comunicacin cliente/servidor para incrementar la seguridad, o tambin puede
usar ssh para encriptar la conexin de red entre los clientes y el servidor de base
de datos. Si alguno de stos es utilizado, el monitoreo de su trfico y la obtencin
de informacin sobre su base de datos ser difcil 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 podran ser divulgados o mal utilizados, a
menos que la informacin 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 encripcin de datos.
La forma ms fcil para trabajar en este problema, es crear primero su propio
paquete de encripcin, y utilizarlo desde de sus scripts de PHP. PHPpuede guiarle
en esto con muchas extensiones, tales como Mcrypt y Mhash, cubriendo as, una
amplia variedad de algoritmos de encripcin. 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 encripcin.
En caso de datos que deben estar ocultos, si no fuera necesario usar su
representacin real (es decir, que no se mostrarn), quizs convenga utilizar
hashing. El ejemplo ms tpico de hashing es cuando se almacena el hash MD5 de
una contrasea en una base de datos, en lugar de almacenar la contrasea en s
misma. Vea tambin las funciones crypt() y md5().
Ejemplo #1 Utilizando campos de contrasea con hash
<?php

// Almacenando la contrasea con hash
// $random_chars se obtuvo, p.ej., usando /dev/random
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($username),
pg_escape_string(crypt($password, '$2a$07$' . $random_chars . '$')))
;
$result = pg_query($connection, $query);

// Consultando si el usuario envi la contrasea correcta
$query = sprintf("SELECT pwd FROM users WHERE name='%s';",
pg_escape_string($username));
$row = pg_fetch_assoc(pg_query($connection, $query));

if ($row && crypt($password, $row['pwd']) == $row['pwd']) {
echo 'Bienvenido, ' . htmlspecialchars($username) . '!';
} else {
echo 'La autenticacin ha fallado para ' . htmlspecialchars($username) . '.'
;
}



?>
Inyeccin de SQL
Muchos desarrolladores web son desprevendios de cmo las consultas SQL pueden
ser manipuladas, y asumen que una consulta SQL es un comando confiable. Esto
significa que las consultas SQL estn expuestas a que sean malversadas en
controles de acceso, y por lo tanto, sobrepasar las revisiones de autenticacin y
autorizacin estndar, y que algunas veces las consultas SQL an podran permitir
el acceso de comandos a nivel de sistema operativo del ordenador.
Comandos directos de Inyeccin SQL es una tcnica donde un atacante crea o
altera comandos SQL existentes para exponer datos ocultos, sobreponerse a los
que son importantes, o peor an, ejecutar comandos peligrosos a nivel de sistema
en el equipo donde se encuentra la base de datos. Esto se logra a travs de la
aplicacin, tomando la entrada del usuario y combinndola con parmetros
estticos para elaborar una consuta SQL. Los siguientes ejemplos estn basados
en historias reales, desafortunadamente.
Debido a la falta de validacin en la entrada de datos y conectndose a la base de
datos con privilegios de super usuario o de alguien con privilegios que puede crear
usuarios, el atacante podra crear un super usuario en su base de datos.
Ejemplo #1 Dividiendo el conjunto de resultados en pginas ... y
haciendo super usuarios (PostgreSQL)
<?php

$offset = $argv[0]; // Cuidado, no hay validacin 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 nmero dcimal. Sin embargo, qu pasa si alguien intenta irrumpir
aadiendo una funcin 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 podra presentarle un acceso de super usuario al
atacante. Ntese que 0; es para proveer un offset vlido a la consulta original y
para finalizarla.
Nota:
Esta es una tcnica comn para forzar al analizador SQL a que ignore el resto de la
consulta escrita por el desarrollador con dos guines: -- los cuales representan un
comentario en SQL.
Una forma factible de obtener contraseas es burlar las pginas de bsqueda 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 clusulas WHERE, ORDER BY,
LIMIT y OFFSET en las declaracionesSELECT. Si su base de datos soporta el
constructor UNION, el atacante podra intentar aadir una consulta enetera a la
consulta original para listar contraseas de una tabla arbitraria. Utilizar campos de
contrasea encriptadoslds es fuertemente recomendado.
Ejemplo #2 Listando nuestros artculos ... y algunas contraseas (de
cualquier servidor de base de datos)
<?php

$query = "SELECT id, name, inserted, size FROM products
WHERE size = '$size'";
$result = odbc_exec($conn, $query);

?>
La parte esttica de la consulta puede ser combinada con otra
declaracin SELECT la cual revela todas las contraseas:
'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from
usertable;
--
Si esta consulta (ejecutndose con ' y --) fuera asignada a una de las variables
utilizadas en $query, la consulta reaccionar bestialmente.
Las consultas de actualizacin de SQL, tambin son susceptibles a ataques. Estas
consultas tambin son amenazadas por acortamiento y adicin en una consulta
completamente nueva a esta. Sin embargo el atacante podra manipularla con la
clusula SET. En este caso, algunos esquemas de informacin 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 contraseas o nombres de usuarios.
Ejemplo #3 Desde re-establecer una contrasea ... hasta ganar ms
privilegios (en cualquier servidor de bases de datos)
<?php
$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>
Pero un usuario malicioso podra enviar el valor ' or uid
like'%admin% a $uid para cambiar la contrasea del administrador, o
simplemente cambiar $pwd a hehehe', trusted=100, admin='yes para obtener
ms privilegios. Entonces, la consulta sera cambiada:
<?php

// $uid: ' or uid like '%admin%
$query = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%';";

// $pwd: hehehe', trusted=100, admin='yes
$query = "UPDATE usertable SET pwd='hehehe', trusted=100, admin='yes' WHERE
...;";

?>
Un ejemplo horrible de cmo 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 enva 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 aadir un usuario nuevo a la base de datos de cuentas locales. Si esta
aplicacin estuviera ejecutndose como sa, y el servicio MSSQLSERVER se est
ejecutando con los privilegios suficientes, el atacante ahora podra tener una
cuenta con la cual tendra acceso a esta mquina.
Nota:
Algunos de los ejemplos de citados arriba estan vinculados a un servidor de base
de datos especfico. Esto no significa que un ataque similar sea imposible en contra
de otros productos. Su servidor de base de datos podra ser vulnerable de forma
similar en otra manera.

Imagen cortesa de xkcd
Tcnicas de evitacin
Pese a que pueda parecer obvio que un atacante debe tener al menos algn
conocimiento de arquitecturas de bases de datos para poder realizar un ataque
con xito, el obtener esta informacin suele ser muy sencillo. Por ejemplo, cuando
la base de datos forma parte de un paquete de software libre, o disponible
pblicamente, con una instalacin predefinida, esta informacin se encuentra
completamente libre y disponible. Esta informacin puede haber sido divulgada en
proyectos de cdigo cerrado - incluso si est codificad, ofuscada o compilada -
incluso por el propio cdigo mediante mensajes de error. Otros mtodos incluyen
el uso de nombres de tablas y columnas frecuentes. Por ejemplo, un formulario de
inicio de sesin que utiliza una tabla 'users' con los nombres de columna 'id',
'username', y 'password'.
Esos ataques estn principalmente basados en explotar el cdigo que no ha sido
escrito teniendo en mente la seguridad. Nunca confes en ningn tipo de entrada,
especialmente la que viene del lado del cliente, an cuando esta venga de una caja
de seleccin, 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.
Use sentencias preparadas con variables vinculadas. Son proporcionadas
por PDO, MySQLi y otras bibliotecas.
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 ms 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 expresin espera una entrada numrica, considere verificar los datos
con la funcin ctype_digit(), o silenciosamente cambie su tipo
utilizando settype(), o use su representacin numrica por medio
de sprintf().
Ejemplo #5 Una forma ms segura de redactar una consulta para
paginacin
<?php

settype($offset, 'integer');
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $of
fset;";

// Fjese en %d en el formato de cadena, utilizar %s podra no tener un r
esultado significativo
$query = sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OF
FSET %d;",
$offset);

?>
Si la capa de la base de datos no admite variables vinculadas, entrecomille
cada valor no numrico proporcionado por el usuario que sea pasado a la
base de datos con la funcin de escapado de cadenas de caracteres
especfica de la base de datos
(p.ej.mysql_real_escape_string(), sqlite_escape_string(), etc.). Las
funciones genricas como addslashes() son tiles solamente en un entorno
muy especfico (p.ej., MySQL en un conjunto de caracteres monobyte
con NO_BACKSLASH_ESCAPES deshabilitada), por lo que es mejor
evitarlas.
No muestre ninguna informacin especfica de la base de datos,
especialmente sobre el esquema, por su correcto significado es como jugar
sucio contra usted mismo. Vea tambin Reporte de errores y Manejo de
errores y funciones de registro.
Podra 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 solucin 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 dao, pero ste
puede ser til para hacer una retro revisin de cual aplicacin ha sido intervenida.
El registro no es til por s mismo, pero lo es debido a la informacin que contiene.
Ms 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 tctica estndar de ataque conlleva a perfilar un sistema; llenndolo de datos
incorrectos, revisando los tipos y contextos de los errores que son devueltos. Esto
le permite al atacante recolectar informacin acerca del servidor, para determinar
posibles debilidades. Por ejemplo, si un atacante ha recogido informacin sobre
una pgina basada en un envo previo, l podra intentar sobrescribir las variables,
o modificarlas:
Ejemplo #1 Atacando variables con una pgina 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 funcin o qu fichero de PHP fall, y el nmero de lnea en donde
la falla ocurri. Toda esta es la informacin 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
depuracin, pero en un sitio en escena, esto puede exponer variables ocultas,
sintxis sin revisar, y otra informacin peligrosa. Es especialmente peligroso el
cdigo en ejecucin de fuentes conocidas con manejadores de depuracin
incluidos, o utilizar tcnicas comunes de depuracin. Si los atacantes pueden
determinar qu tcnica en general usted est utilizando, ellos podran tratar de
usar fuerza bruta en una pgina, enviando varias cadenas comunes de depuracin:
Ejemplo #2 Explotando variables comunes de depuracin
<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 mtodo de manejo de errores, la capacidad de probar errores en
un sistema conlleva a proveer a un atacante con mas informacin.
Por ejemplo, el estilo comn de un error genrico de PHP indica que un sistema
ciertamente est ejecutando PHP. Si un atacante est en una pgina .html, y
quiere probar qu motor hay tras de ese servidor (para buscar debilidades en el
sistema), lo alimenta con datos errneos que lo podran habilitar a que determine
que ese sistema fue construido con PHP.
El error de una funcin puede indicar ya sea, un sistema que puede estar
ejecutando un motor especfico de base de datos, o dar las pistas de cmo una
pgina web puede estar programada o diseada. Esto permite una investigacin
ms profunda dentro de los puertos abiertos de la base de datos, o buscar errores
especficos o debilidades en una pgina web. Pasando diferentes porciones de
datos errneos, por ejemplo, un atacante puede determinar el orden de
autenticacin en un script, (por medio del nmero de lnea de los errores) como
tambin 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 tambin la estructura y organizacin de
ficheros en el servidor web. El cdigo de error escrito por el desarrollador puede
agravar este problema, conllevando a la explotacin fcil de la, hasta entonces,
informacin "oculta".
Hay tres grandes soluciones a este problema. La primera consiste en examinar
todas las funciones, e intentar arreglar la mayora de los errores. La segunda es
deshabilitar completamente la notificacin de errores de el cdigo en ejecucin. La
tercera es utilizar las funciones de manejo de error propias de PHP para crear su
propio manejador de errores. Dependiendo de su poltica de seguridad, puede ser
que encuentre que las tres sean aplicables a su situacin.
Una forma de detectar este problema por adelantado es hacer uso de la funcin
propia de PHP error_reporting(), para ayudarle a asegurar su cdigo y encontrar el
uso de variables que podran ser peligrosas. Al probar su cdigo, antes de
distribuirlo, con E_ALL, usted puede encontrar rapidamente reas donde sus
variables pueden ser abiertas para envenenamiento o modificacin en otras
maneras. Una vez usted est listo para distribuirlo, debera deshabilitar
completamente el reporte de errores poniendo el valor de error_reporting() a 0, o
apagar el visor de errores utilizando la opcin display_errors del
fichero php.ini para aislar su cdigo de ataques. Si decide hacer esto ltimo,
tambin debera 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 estn in
icializados o comprobados antes de utilizar, tendrn acceso
readfile("/ruta/hacia/datos/altamente/sensibles/index.html");
}
?>
Usando Register Globals
Advertencia
Esta caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0
y ELIMINADA a partir de PHP 5.4.0.
Quizs el cambio ms 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 comn y muchas personas ni
siquiera saba que exista y asuman slo que ese era el modo
como PHP funcionaba. Esta pgina explicar cmo se puede escribir cdigo
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 inicializacin de variables, significa que es muy
fcil escribir cdigo inseguro. Fue una decisin difcil, 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 dnde
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 slo si el usuario est autenticado
if (authenticated_user()) {
$authorized = true;
}

// Debido a que no se inicializa $authorized como false, esta podra ser
// definida a travs 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 lgica anterior podra verse comprometida.
Cuando est deshabilitada, $authorized no puede definirse a travs de peticiones,
as que estar bien, aunque realmente en general es una buena prctica de
programacin 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 cdigo anterior podra funcionar con register_globals
activado o desactivado ya que los usuarios de forma predeterminada no seran
autorizados.
Otro ejemplo es aquel de las sesiones. Cuando est register_globals = on, se
puede usar tambin $username en el siguiente ejemplo, pero nuevamente se debe
notar que $username tambin puede provenir de otros medios, tal como GET (a
travs de la URL).
Ejemplo #2 Ejemplo de uso de sesiones con register_globals on u off
<?php
// No se sabra por dnde proviene $username, pero se sabe que $_SESSION es
// para datos de sesin.
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 falsificacin. Si se sabe previamente con exactitud el lugar de donde
una variable debera provenir, se puede verificar si los datos enviados provienen
de una clase inapropiada de sumisin. 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
tambin la seccin del manual sobre el uso de variables desde fuentes externas
sources.
Ejemplo #3 Deteccin de envenenamiento simple de variables
<?php
if (isset($_COOKIE['MAGIC_COOKIE'])) {

// MAGIC_COOKIE viene de una cookie.
// Asegrese de validar la informacin de la cookie!

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {



mail("admin@example.com", "Posible intento de ataque", $_SERVER['REMOTE_ADDR'
]);
echo "Violacin de seguridad, el administrador ha sido alertado.";
exit;

} else {

// MAGIC_COOKIE no se establece a travs de este REQUEST

}
?>
Por supuesto, simplemente deshabilitar register_globals no quiere decir que su
cdigo es seguro. Cada pieza de datos que es remitida, tambin 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 informacin sobre la emulacin de register_globals activado o
desactivado, consulte este FAQ.
Nota: Nota de disponibilidad de Superglobals
Los arrays Superglobal como $_GET, $_POST y $_SERVER, etc. estn disponibles
desde PHP 4.1.0. Para ms informacin, lea la seccin 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 cdigo sin
pensar en la seguridad. Por esta razn, usted debera tomarse siempre el tiempo
para considerar las implicaciones de cada pedazo de cdigo, 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
// quizs de alguien ms?

unlink ($variable_malvada);

// Imprimir el registro del acceso... o quizs una entrada de /etc/passwd?
fwrite ($desc_archivo, $variable_malvada);

// Ejecutar algo trivial.. o rm -rf *?
system ($variable_malvada);
exec ($variable_malvada);

?>


Usted debera examinar siempre, y cuidadosamente su cdigo 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 accin sobre datos inusuales o indeseados?
Puede ser usado este script en formas malintencionadas?
Puede ser usado en conjunto con otros scripts en forma negativa?
Sern adecuadamente registradas las transacciones?
Al preguntarse adecuadamente estas preguntas mientras escribe su script, en
lugar de hacerlo posteriormente, usted previene una desafortunada re-
implementacin 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 tambin desee considerar la deshabilitacin de register_globals,
magic_quotes, u otros parmetros convenientes que pueden causar confusin
sobre la validez, fuente o valor de una determinada variable. Trabajar con PHP en
modo error_reporting(E_ALL) tambin puede ayudarle a advertir variables que
estn siendo usadas antes de ser chequeadas o inicializadas (de modo que puede
prevenir que datos inusuales produzcan operaciones inadvertidas).
Comillas Mgicas
Tabla de contenidos
Qu son las Comillas Mgicas?
Por qu usarlas
Por qu no usarlas
Deshabilitar las comillas mgicas
Advertencia
Esta caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0
y ELIMINADA a partir de PHP 5.4.0.
Las comillas mgicas son un procedimiento que automgicamente limpian los
datos de entrada de un script PHP. Es aconsejable trabajar con las comillas
mgicas deshabilitadas y, en su lugar, hacer un filtrado en tiempo de ejecucin y
bajo demanda.
Qu son las Comillas Mgicas?
Advertencia
Esta caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0
y ELIMINADA a partir de PHP 5.4.0.


Cuando estn habilitadas, todos los caracteres ' (comillas simples), " (comillas
dobles), \ (barras) y NULL son "escapados" automticamente con una barra. Este
comportamiento es equivalente al de la funcin addslashes().
Hay tres directivas para las comillas mgicas:
magic_quotes_gpc Afecta a los datos de peticiones HTTP (GET, POST, y
COOKIE). No se puede habilitar en tiempo de ejecucin, y por omisin
vale on en PHP. Vea tambin 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, tendrn las comillas escapadas con una barra. Puede
habilitarse en tiempo de ejecucin y por omisin vale off en PHP.Vea
tambin 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, anulara por completo a magic_quotes_gpc. Si se tuvieran
habilitadas las dos directivas, slo se escaparan las comillas simples, en la
forma ''. Las comillas dobles, barras y caracteres NULL se mantendran
intactos y sin escapado. Vea tambin ini_get() para consultar su valor.
Por qu usarlas
Advertencia
Esta caracterstica 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 razn para
usarlas. Sin embargo, todava estn ah y ayudan a los programadores
noveles a escribir un mejor cdigo (ms seguro). Sin embargo, si trabaja
con cdigo que dependa de este comportamiento, es preferible actualizar el
cdigo a tener que habilitar las comillas mgicas. Entonces por qu
existen? Sencillo, para ayudar a prevenir ataques de Inyeccin SQL. Hoy,
los desarrolladores son ms cuidadosos con la seguridad y acaban
empleando los mecanismos de escapado especficos de cada base de datos
y/o declaraciones preparadas en lugar de depender de funcionalidades
como las comillas mgicas.
Por qu no usarlas
Advertencia
Esta caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0
y ELIMINADA a partir de PHP 5.4.0.
Portabilidad El asumir que estn 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 insertarn en
una base de datos, existe un impacto negativo en el rendimiento escapando


todos estos datos. Es ms eficiente llamar a las funciones de escapado
(como addslashes()) en tiempo de ejecucin. A pesar de que en php.ini-
development se habilitan por omisin estas directivas, en php.ini-
production se deshabilitan. El motivo de esta recomendacin 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 deberan. Por ejemplo, al
enviar un correo electrnico desde un formulario, y comprobar que hay
varios \' en el correo. Para corregirlo, se necesitar hacer un uso intensivo
de stripslashes().
Deshabilitar las comillas mgicas
Advertencia
Esta caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso est
totalmente desaconsejado.
La directiva magic_quotes_gpc slo puede deshabilitarse en el sistema, y no en
tiempo de ejecucin. En otras palabras, no se puede utilizarini_set().
Ejemplo #1 Deshabilitar comillas mgicas en el servidor
Ejemplo que establece un Off a estas directivas en php.ini. Para ms detalles, lea
la seccin del manual titulada Cmo cambiar los ajustes de configuracin.
; 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 configuracin del servidor, tambin puede
usar .htaccess. Por ejemplo:
php_flag magic_quotes_gpc Off
Si tuviera inters en implementar cdigo portable (aqul que funciona en cualquier
entorno), y no pudiera modificar la configuracin en el servidor, aqu hay un
ejemplo de cmo deshabilitar magic_quotes_gpc en tiempo de ejecucin. Este
mtodo es ineficiente por lo que se recomienda establecer los valores apropiados
para las directivas en otro lugar.
Ejemplo #2 Deshabilitar las comillas mgicas en tiempo de ejecucin
<?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 ms dbiles de la
seguridad. Pero en algunos casos, cada pequeo elemento extra de seguridad es
deseable.
Unas cuantas tcnicas 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
informacin disponible para ellos.
Otra tctica 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 configuracin de Apache. Entonces se pueden utilizar
extensiones de archivo engaosas:
Ejemplo #1 Ocultando PHP como si fuera otro lenguaje
# Hacer ver el cdigo PHP como si fueran otros tipos de cdigo
AddType application/x-httpd-php .asp .py .pl
U oscurecerlo completamente:
Ejemplo #2 Utilizando tipos desconocidos para extensiones de PHP
# Hacer ver el cdigo PHP como si fueran tipos desconocidos
AddType application/x-httpd-php .bop .foo .133t
U ocultarlo como cdigo HTML, lo cual tiene un pequeo impacto de rendimiento
debido a que todos los archivos HTML sern procesados por el motor de PHP:
Ejemplo #3 Utilizando tipos HTML para extensiones de PHP
# Hacer ver el cdigo 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 da
PHP, como cualquier otro sistema de tamao considerable, est bajo constante
escrutinio y remodelacin. Cada nueva versin incluye con frecuencia cambios
mayores y menores para mejorar la seguridad y reparar cualquier fallo, problemas
de configuracin, 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.
Caractersticas
Autenticacin HTTP con PHP
Es posible usar la funcin 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 autenticacin respectivamente. Esas
variables predefinidas son encontradas en los
arrays $_SERVER y $HTTP_SERVER_VARS. Ambos mtodos de autenticacin
"Basic" y "Digest" (desde PHP 5.1.0) son soportados. Ver la funcin header() para
ms informacin.
Nota: Nota de la versin de PHP
Superglobals, como $_SERVER, estn disponibles en PHP 4.1.0.
Un fragmento de ejemplo de un script el cual podra forzar la autenticacin en una
pgina es el siguiente:
Ejemplo #1 Ejemplo de Autenticacin 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 botn 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 Autenticacin HTTP Digest


Este ejemplo muestra como implementar un script PHP de autenticacin Digest.
Para ms informacin 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 botn 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, $
matches, PREG_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 lneas del HTTP header. Para
garantizar la mayor compatibilidad con todos los clientes, la palabra "Basic" debe
ser escrita con maysculas "B", el string real debe ser encerrado en comillas
dobles (no simples), y exactamente un espacio debe preceder el cdigo 401 en la
lnea del header HTTP/1.0 401. Los parmetros de autenticacin 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 debera 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-Authenticateantes 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 pgina que fu autenticada con un mecanismo
externo tradicional, las variables PHP_AUTH no debern ser colocadas si la
autenticacin externa esta habilitada para esa pgina 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 configuracin
PHP usa la presencia de una directiva AuthType para determinar si una
autenticacin externa esta en uso.
Ntese, 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 borrarn el cach de la ventana de
autenticacin del navegador local despus 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 botn de "deslogueo".
Ejemplo #3 Ejemplo de Autenticacin 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 recu
rso\n";
exit;
}

if (!isset($_SERVER['PHP_AUTH_USER']) ||
($_POST['SeenBefore'] == 1 && $_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($_SER
VER['PHP_AUTH_USER']) . "\" />\n";
echo "<input type='submit' value='Re Authenticate' />\n";
echo "</form></p>\n";
}
?>
Este comportamiento no es requerido por la autenticacin HTTP Basic estandar,
as que se debera depender de esto. Probando con Lynxmostrar que Lynx no
limpia las credenciales de autenticacin 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 informacin de autenticacin.
Tambin notese que hasta PHP 4.3.3, la autenticacin HTTP no trabajaba usando
Microsoft IIS con la versin CGI de PHP, una limitacin 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 limitacin si se esta usando el mdulo IIS (ISAPI) y PHP 4, no se debera usar
las variables PHP_AUTH_* pero en su lugar, la
variableHTTP_AUTHORIZATION esta disponible. Por ejemplo, considerar el


siguiente cdigo: list($user, $pw) = explode(':',
base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
Nota: Nota de IIS:
Para que funcione la Autenticacin 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 cul se almacenan datos en el browser remoto y as rastrear o identificar a
usuarios que vuelven. Se pueden configurar Cookies usando la
funcin 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 limitacin que tiene la funcin header(). Se pueden
usar funciones del bffer de salida para retrasar la salida del script hasta que se
halla decidido enviar o no cookies o enviar cualquier otro header.
Algunos envos de cookies desde el cliente sern incluidos automticamente en el
Array auto-global $_COOKIE si variables_order contiene "C". Si se desea asignar
mltiples 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 prctica, esta
caracterstica es desactivada por temas de
seguridad. $HTTP_COOKIE_VARS tambin es configurada en versiones anteriores
de PHP cuando se configura la variable track_vars. (Esta configuracin sta desde
PHP 4.0.3).
Para ms detalles, incluyendo notas de bugs de los browsers, ver la
funcin setcookie() y setrawcookie().
Sesiones
El soporte de sesiones en PHP consiste en una manera de guardar ciertos datos a
travs de diferentes accesos web. Esto permite crear aplicaciones ms
personalizadas y mejorar las caractersticas del sitio web. Toda la informacin est
en la seccin. Referencia de sesiones.
Manejo de XForms


XForms define una variacin 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 descripcin
detallada de como crear XForms, para el fin de este tutorial nicamente veremos
un ejemplo simple.
Ejemplo #1 Un formulario simple de bsqueda 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 botn submit.
Cuando el botn submit es presionado, el formulario ser enviado a la pgina
referenciada por action.
Aqu es donde comienza a verse diferente desde el punto de vista de la aplicacin
web. En un formulario normal HTML, los datos seran enviados
como application/x-www-form-urlencoded, en el mundo XForms, esta
informacin 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_DATAdonde 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 versin de su navegador si el ejemplo falla.
Manejando la carga de archivos
Carga con el mtodo POST
Esta caracterstica permite que los usuarios envien tanto archivos de texto como
binarios. Con la autenticacin de PHP y las funciones de manipulacin de archivos,
se tiene completo control sobre quin 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 tambin las
directivas file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size y ma
x_input_time en php.ini
PHP tambin soporta el mtodo PUT para la carga como lo utilizan los
clientes Netscape Composer y Amaya del W3C. Ver el soporte del mtodo PUTpara
ms detalles.
Ejemplo #1 Formulario para la carga de archivos
Una pgina de carga de archivos puede ser construida mediante la creacin de un
formulario especial el cual se vera algo como esto:
<!-- El tipo de codificacin de datos, enctype, se DEBE especificar como a
continuacin -->
<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 tamao mximo 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 slo para descubrir que
era demasiado grande y fall la transferencia. Tener en cuenta: engaar a esta
configuracin en el lado del navegador es muy fcil, as que nunca se debe confiar
en que archivos con un tamao mayor sern bloqueados por esta caracterstica. Es
simplemente una caracterstica de conveniencia para los usuarios en el lado cliente
de la aplicacin. Sin embargo, la configuracin de PHP (en el lado del servidor)
para un mximo de tamao, no puede ser engaada.
Nota:
Asegrese 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 versin anterior). Este array contendr toda la informacin
sobre el archivo cargado.
El contenido de $_FILES del formulario de ejemplo es el siguiente. Tenga en
cuenta que esto asume la utilizacin del nombre del archivo cargadouserfile, 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 mquina cliente.
$_FILES['userfile']['type']
El tipo mime del archivo, si el navegador proporciona esta informacin. Un
ejemplo podra 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 tamao, 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 cdigo de error asociado a esta carga de archivo. Este elemento fue
aadido 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
directivaupload_tmp_dir en php.ini. El directorio por defecto del servidor puede ser
cambiado mediante el establecimiento de la variable de entorno TMPDIRen el
entorno en el cual se ejecuta PHP. Configurarlo usando putenv() desde un script
PHP no funcionar. Esta variable de entorno tambin se puede utilizar para
asegurarse de que las dems operaciones estn trabajando sobre los archivos
cargados.
Ejemplo #2 Validacin de la carga de archivos
Ver tambin las entradas para las
funciones is_uploaded_file() y move_uploaded_file() para ms informacin. El
siguiente ejemplo procesara la carga de archivo que vendra de un formulario.
<?php
// En versiones de PHP anteriores a 4.1.0, $HTTP_POST_FILES debe utilizarse en l
ugar
// 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 vlido y fue cargado exitosamente.\n";
} else {
echo "Posible ataque de carga de archivos!\n";
}

echo 'Aqu hay ms informacin de depurado:';
print_r($_FILES);

print "</pre>";

?>
El script PHP que recibe el archivo cargado, debe implementar cualquier lgica 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 pequeo o demasiado grande. Se podra utilizar la
variable $_FILES['userfile']['type'] para descartar cualquier archivo que no
corresponda con un cierto criterio de tipo, pero usando esto slo 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 lgica de acuerdo con
loscdigos de error. Cualquiera que sea la lgica, se debe borrar el archivo del
directorio temporal o moverlo a otra parte.


Si ningn 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.
Explicacin de los mensajes de error
A partir de PHP 4.2.0, PHP devuelve un cdigo de error apropiado, junto con el
array del archivo. El cdigo 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 podra 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 slo parcialmente cargado.
UPLOAD_ERR_NO_FILE
Valor: 4; Ningn 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 extensin de PHP detuvo la carga de archivos. PHP no
proporciona una forma de determinar cual extensin 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 tamao de archivo mayor que el
que ha sido configurado en el upload_max_filesize en el archivophp.ini. Por defecto
es 2 megabytes.
Si hay un lmite de memoria activado, un memory_limit ms grande puede ser
necesario. Asegurarse de configurar un memory_limit lo suficientemente grande.
Si el max_execution_time es demasiado pequeo, la ejecucin del script puede
excederse de este valor. Asegurarse de configurar unmax_execution_time lo
suficientemente grande.
Nota: max_execution_time slo afecta al plazo de ejecucin del propio script.
Todo el tiempo gastado en actividades que tengan lugar por fuera de la ejecucin
del script, tales como las llamadas al sistema usando system(), la funcin 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 mximo que el script
ha estado funcionando.
Advertencia
max_input_time establece el tiempo mximo, en segundos, al script se le permite
recibir informacin, esto incluye la subida de archivos. Para archivos grandes o
mltiples, o usuarios con conexiones ms lentas, el valor predeterminado de 60
segundos puede ser excedido.
Si post_max_size se establece demasiado pequeo, los archivos grandes no
pueden ser cargados. Asegurarse de configurar post_max_size lo
suficientemente grande.
A partir de PHP 5.2.12, la configuracin max_file_uploads controla el nmero
mximo de archivos que se pueden cargar en una peticin. Si ms archivos que
ese lmite son subidos, entonces $_FILES parar de procesar archivos una vez se
alcanza el lmite. Por ejemplo, si max_file_uploads se establece en 10,
entonces $_FILES nunca contendr ms de 10 elementos.
No validar sobre cual archivo se opera puede significar que los usuarios pueden
acceder a informacin 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 exticos (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 mltiples archivos
Mltiples archivos pueden ser subidos utilizando diferentes name para los input.
Tambin es posible subir mltiples archivos simultneamente y tener la
informacin organizada automticamente en arrays. Para ello, es necesario utilizar
la misma sintaxis de sumisin de array en el formulario HTML como se hace con
mltiples selects y checkboxes:
Ejemplo #1 Subida de mltiples 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']
sern 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 tambin se inicializan. Cada uno de estos ser un array indexado
numricamente 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] contendra el valor review.html,
y $_FILES['userfile']['name'][1] contendra el valor xwp.out. De manera
similar, $_FILES['userfile']['size'][0] contendra el tamao del
archivo review.html y as sucesivamente.
$_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfi
le']['size'][0], y $_FILES['userfile']['type'][0] tambin son establecidos.
Advertencia
A partir de PHP 5.2.12, la configuracin max_file_uploads acta como un lmite en
el nmero de archivos que se pueden subir en una peticin. Se necesita asegurar
que el formulario no intenta cargar ms archivos que este lmite en una peticin.
Soporte del mtodo PUT
PHP ofrece soporte para el mtodo HTTP PUT utilizado por algunos clientes para
almacenar archivos en un servidor. Las peticiones PUT son mucho ms 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 automticamente 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
peticin. En Apache se hace esto con la directiva de Script. Se puede colocar casi
en cualquier parte del archivo de configuracin de Apache. Un lugar comn es
dentro de un bloque<Directory> o tal vez dentro de un bloque <VirtualHost>.
Una lnea como sta hara el truco:
Script PUT /put.php
Esto le dice a Apache que enve todas peticiones PUT para URIs que coincidan con
el contexto en el cual se pone esta lnea en el script put.php. Esto asume, por


supuesto, que se tiene habilitado PHP para la extensin .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 hara algo como lo siguiente en el put.php. Esto copiara 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 estndar */
$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($putdata, 1024))
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 mayora de las funciones que toman un nombre de archivo
como parmetro. Adems, 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 ms informacin 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 opcin de configuracin --enable-url-fopen-wrapper .
Nota:
Las versiones Windows de PHP ms 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 extensin Funciones de GD e Imgenes


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 pgina 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 ($file, 1024);
/* Esto solo trabaja si el titulo y sus tags estan en una lnea */
if (preg_match ("@\<title\>(.*)\</title\>@i", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>
Tambin 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 mtodo. Si se intenta sobreescribir
un archivo que ya existe, la llamada a la funcin 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 va HTTP cuando se requiere autenticacin
bsica).
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 podra tener la idea del ejemplo anterior que se esta usando esta tcnica para
escribir un archivo de log remoto. Desafortunadamente esto no funcionara porque
la funcin fopen() llamada fallar si el archivo remoto ya existe. Para hacer logs
distribuidos como ese, se debera dar un vistazo a syslog().
Manejo de Conexiones
Internamente en PHP se mantiene un estatus de la conexin. Hay 3 posibles
estados:
0 - NORMAL
1 - ABORTED
2 - TIMEOUT
Cuando un script en PHP esta ejecutndose normalmente, est 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 botn
STOP. Si el tiempo limite PHP-imposed (verset_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 travs de la directiva ignore_user_abort en php.ini as
como a travs de la directiva correspondiente de Apache en httpd.conf php_value
ignore_user_abort o con la funcin ignore_user_abort(). Si se decide no decirle
a PHP que ignore abortar al usuario y el usuario aborta, el script terminar. La
nica excepcin es si se tiene registrada una funcin de cierre
usandoregister_shutdown_function(). Con una funcin de cierre, cuando el usuario
remoto activa el botn STOP, la prxima vez que el script intente mostrar algo,
PHP detectar que la conexin fue abortada y la funcin de cierre es llamada. Esta
funcin de cierre tambin 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 funcinconnection_aborted(). Esta funcin retornar TRUE si la
conexin fue abortada.
El script puede ser terminado tambin 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 Apachehttpd.conf as como con la
funcin set_time_limit(). Cuando el temporizador expira el script ser abortado y
as como el caso del cliente anterior que se desconecto, si la funcin de cierre ha
sido registrada sta ser llamada. Dentro de esta funcin de cierre se puede
comprobar para ver si el timeout causa la funcin de cierre llamando a la


funcin connection_status(). Esta funcin retornar 2 si el timeout causo la
llamada a la funcin 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 podra haber roto la conexin,
pero el script se mantendr ejecutndose. Si este activa el limite de tiempo ser
abortado y la funcin 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 ejecucin del
script termina. Cuando una conexin persistente es solicitada, PHP chequea si ya
existe una conexin persistente idntica (que fuera abierta antes) - y si existe, la
usa. Si no existe, crea el enlace. Una conexin "Idntica" es una conexin 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 distribucin de carga podran 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
transaccin eficiente, pero no hacen muchas otras cosas ms. 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 mtodo 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 pgina (para una pgina PHP) al web server. Porque es destruido despus 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 pginas 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, podra ser servido por un proceso hijo diferente a la primera vez.
Cuando se abre una conexin persistente, cada peticin siguiente de servicios SQL
puede reusar la misma conexin establecida al servidor SQL.


El ltimo mtodo 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. Podran 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 pgina que se conecte a un servidor SQL. Esto significa que por cada hijo que
abri una conexin persistente mantendr una conexin persistente al servidor.
Por ejemplo, si se tienen 20 procesos hijos diferentes que ejecutaran un script que
hace una conexin persistente al servidor SQL, se tendran 20 conexiones
diferentes al servidor SQL, una por cada hijo.
Ntese, 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 sesin 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 podra rpidamente hundida. Chequear la
documentacin de la base de datos para obtener informacin 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 conexin
persistente, si el script por alguna razn no puede soltar el bloqueo, entonces los
scripts subsecuentes que usan la misma conexin sern bloqueadas
indefinidamente y podra ser necesario reiniciar el servidor httpd o el servidor de la
base de datos. Otra cosa es que cuando se usan transacciones, una transaccin
bloqueada tambin podra llevar al siguiente script el cual usa la conexin si la
ejecucin del script termina antes que el bloqueo lo haga. En ese caso, se puede
usar register_shutdown_function() para registrar una funcin de limpieza para
desbloquear las tablas o deshacer la transaccin. Mejor an 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 diseadas para tener
conexiones normales uno a uno. Esto significa siempre que se podra ser capaz de
reemplazar conexiones persistentes con conexiones no-persistentes, y no
cambiara la forma en que este se comporte. Estopodra (y probablemente lo
har) cambiar la eficiencia del script, pero no su comportamiento!.
Ver
tambin fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), ingres_pconnect(), m
sql_pconnect(), mssql_pconnect(), mysql_pconnect(),ociplogon(), odbc_pconnect(
), oci_pconnect(), pfsockopen(), pg_pconnect(), and sybase_pconnect().
Safe Mode
Tabla de contenidos
Security and Safe Mode
Functions restricted/disabled by safe mode
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 caracterstica ha sido declarada OBSOLETA desde PHP 5.3.0
y ELIMINADA a partir de PHP 5.4.0.
Changelog for safe mode
Versin Descripcin
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
Historia
l de
cambios


Security and Safe Mode Configuration Directives
Nombre Por defecto Cambiable
Historia
l de
cambios
safe_mode "0"
PHP_INI_SYSTE
M
Remove
d in PHP
5.4.0.
safe_mode_gid "0"
PHP_INI_SYSTE
M
Available
since
PHP
4.1.0.
Remove
d in PHP
5.4.0.
safe_mode_include_dir NULL
PHP_INI_SYSTE
M
Available
since
PHP
4.1.0.
Remove
d in PHP
5.4.0.
safe_mode_exec_dir ""
PHP_INI_SYSTE
M
Remove
d in PHP
5.4.0.
safe_mode_allowed_env_vars "PHP_"
PHP_INI_SYSTE
M
Remove
d in PHP
5.4.0.
safe_mode_protected_env_var
s
"LD_LIBRARY_PATH
"
PHP_INI_SYSTE
M
Remove
d in PHP
5.4.0.
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.


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 caracterstica 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.
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)


Safe mode limited functions
Function Limitations
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 funcin no est disponible cuando PHP est
corriendo en safe mode.
backtick operator
Esta funcin no est disponible cuando PHP est
corriendo en safe mode.
shell_exec() (functional
equivalent of backticks)
Esta funcin 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


Safe mode limited functions
Function Limitations
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


Safe mode limited functions
Function Limitations
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


Safe mode limited functions
Function Limitations
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


Safe mode limited functions
Function Limitations
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 filessession.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 lnea de comandos
Introduccin
Desde PHP 4.3.0, hay soporte para CLI SAPI. El principal objetivo de este
valor SAPI es el desarrollo de aplicaciones de consola en PHP. En este captulo 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 mayora de
caractersticas.
Para que CLI SAPI est activa por omisin, debe usarse --enable-cli , pero puede
deshabilitarse usando la opcin --disable-cli al ejecutar./configure.
Tanto el nombre, ubicacin y presencia del binario CLI/CGI depende de cmo se
instale PHP en el sistema. Por omisin, al ejecutar make, tanto CGIcomo 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 configuracin, suceder una cosa u otra al ejecutar make
install. Si durante la configuracin se elige un mdulo SAPI, como por ejemplo
apxs, o bien se usa la opcin --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 configuracin, entonces CLI se copiara
a {PREFIX}/bin/php durante make install. Si se deseara sobrescribir la
instalacin del binario de CGI, debe usarse make install-cli tras make install.
Adicionalmente, se puede especificar --disable-cgi en la configuracin.
Nota:
Ya que tanto --enable-cli como --enable-cgi se habilitan por omisin, el simple
hecho de tener --enable-cli en la configuracin no implica queCLI 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 versin CGI se instala como php-cgi.exe.
Adems, se instalara php-win.exe si PHP se hubiera configurado usando --
enable-cli-win32 . Funciona igual que la versin 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 funcin php_sapi_name() y la constante PHP_SAPI.
Nota:
En Unix hay disponible una pgina 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 enva 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 omisin, 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 antigos 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
omisin
enCLI SAPI
Comentario
html_errors FALSE
Siendo FALSE de forma predeterminada, puede
resultar complicado leer mensajes de error en la
consola cuando stos estn mezclados con
etiquetas HTML no interpretadas.
implicit_flush TRUE
En un ambiente de lnea 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 estndar.
max_execution_time 0 (ilimitado)
PHP en un entorno de shell tiende a ser utilizado
para una gama mucho ms amplia de los propsitos
tpicos basados en scripts de la Web, y como stos
pueden ser de muy larga duracin, el tiempo de


Directivas php.ini anuladas
Directiva
Valor por
omisin
enCLI SAPI
Comentario
ejecucin mximo se establece a ilimitado.
register_argc_argv TRUE
Establecer esta directiva a TRUE significa que los
scripts ejecutados va la SAPI CLI siempre
tienen acceso a argc (nmero de argumentos que
se le pasan a la aplicacin) y argv (array con el
contenido de los argumentos reales).
Las variables de PHP $argc y $argv se
establecen automticamente al valor apropiado
cuando se utilizaCLI SAPI. Esos valores tambin
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
estn 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 configuracin php.ini o con un valor personalizado (si se especifica). Esta
limitacin se debe a que los valores son aplicados despus que todos los
ficheros de configuracin han sido analizados. Sin embargo, sus valores
pueden ser cambiados en tiempo de ejecucin (aunque esto no es aplicable
a todas ellas, por ejemploregister_argc_argv).
Nota:
Se recomienda habilitar ignore_user_abort en scripts de lnea de comandos.
Para ms informacin, 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
// Aplicacin de pruebas llamada test.php


echo getcwd(), "\n";
?>
Al usar la versin 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 aqul 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 opcin -C al ejecutarlo desde la lnea de comandos.
Opciones de la lnea de comandos
Se puede consultar en cualquier momento la lista de opciones de lnea de
comandos en el binario de PHP con el modificador -h :
Usage: php [opciones] [-f] <fichero> [--] [args...]
php [opciones] -r <cdigo> [--] [args...]
php [opciones] [-B <cdigo_inicial>] -R <cdigo> [-E <cdigo_final>] [--]
[args...]
php [opciones] [-B <cdigo_inicial>] -F <fichero> [-E <cdigo_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 informacin extendida para el
depurador/perfilador.
-f <fichero> Analiza y ejecuta el <fichero>.
-h Esta ayuda.
-i Informacin de PHP.
-l Solamente revisa la sintxis (lint).
-m Muestra lo compilado en mdulos.
-r <code> Ejecuta el <cdigo> PHP sin utilizar las etiquetas del
script <?..?>.
-B <cdigo_inicial> Ejecuta el <cdigo_inicial> antes de procesar las
lneas de entrada.
-R <code> Ejecuta el <cdigo> PHP por cada lnea de entrada.


-F <file> Analiza y ejecuta el <fichero> por cada lnea de
entrada.
-E <cdigo_final> Ejecuta el <cdigo_final> despus de procesar todas
las lneas de entrada.
-H Oculta los argumentos pasados desde cualquier
herramienta externa.
-S <direccin>:<puerto> Ejecuta con el servidor web interno.
-t <raz_documento> Especifica la raz del documento <raz_documento> para
el servidor web interno.
-s Salida de la fuente en sintxis HTML resaltada.
-v Nmero de versin.
-w Salida de la fuente con espacios en blanco y
comentarios subrayados.
-z <fichero> Carga un <fichero> con extensin de Zend.

args... Argumentos pasados al script. Utilice argumentos con -
- cuando el primer argumento
inicie con - o el script sea ledo desde la entrada
estndar stdin

--ini Muestra los nombres de fichero de configuracin.

--rf <nombre> Muestra informacin sobre la funcin <nombre>.
--rc <nombre> Muestra informacin acerca de la clase <nombre>.
--re <nombre> Muestra informacin acerca de la extensin <nombre>.
--rz <nombre> Muestra informacin acerca de la extensin Zend
<nombre>.
--ri <nombre> Muestra la configuracin para la extensin <nombre>.
Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
-a --interactive Ejecutar PHP de forma interactiva. Para ms
informacin, consltese la seccin Consola interactiva.
-b --bindpath Ruta Ligada en modo de servidor FASTCGI externo
(slo en CGI).
-C --no-chdir
No cambiar el directorio del script (slo en CGI).
-q --no-header Modo silencioso. Elimina la salida de
cabeceras HTTP (slo en CGI).
-T --timing Calcula el tiempo de ejecucin del script un nmero de
veces (slo 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


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin

$ php -c /directorio/propio/fichero-propio.ini
mi_script.php
Si no se especifica esta opcin, 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 configuracin 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 vaco, 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 configuracin
$ 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 informacin 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


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
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 lnea de comandos,
con descripciones de una lnea 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 informacin.
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 mtodo conveniente para realizar solamente
una revisin de sintxis del cdigo proporcionado de
PHP. En caso de xito, se muestra el texto No syntax
errors detected in <filename> en la salida estndar
y se devuelve un cdigo de retorno 0. Si fallara, se
mostrara el texto Errors parsing <filename>,
adems del mensaje de error de anlisis
correspondiente en la salida estndar, y se retornara el
cdigo -1.
Esta opcin no encuentra errores fatales (como
funciones no definidas). Utilice el modificador -f si se
desea tambin comprobar errores fatales.
Nota:
Esta opcin no funciona junto con la opcin -r .
-m --modules
Ejemplo #1 Muestra los mdulos PHP y Zend
incorporados (y habilitados)
$ php -m
[PHP Modules]
xml


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]
-r --run
Permite ejecutar PHP desde la lnea de comandos. Las
etiquetas de inicio y fin (<?php y ?>) no son
necesarias y provocarn un error sintctico si
estuvieran presentes.
Nota:
Debe tenerse cuidado al usar PHP de esta forma para
no colisionar con sustituciones de variables de lnea de
comandos hechas por la propia consola.
Ejemplo #2 Obteniendo un error sintctico
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
sustitucin de variables incluso si estamos usando
comillas dobles ". Puesto que la variable $foo no est
definida, no se sustituye por nada, haciendo que el
cdigo real que se le pasa a la ejecucin de PHP sea:
$ php -r " = get_defined_constants();"
La forma correcta sera usar comillas simples '. Las
variables de texto en comillas simples no se sustituyen
en sh/bash.
Ejemplo #3 Usando comillas simples para


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
prevenir la sustitucin 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 fcil verse en problemas
al tratar de utilizar variables (de la consola o de PHP)
en cdigo de lnea 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 opcin est pensada unicamente para cdigo muy
bsico, as que algunas directivas de configuracin
(tales como auto_prepend_file y auto_append_file) se
ignoran en este modo.
-B --process-begin Cdigo PHP a ejecutar antes de procesar la entrada.
Aadido en PHP 5.
-R --process-code
Cdigo PHP a ejecutar por cada lnea de entrada.
Aadido en PHP 5.
Hay dos variables especiales disponibles en este
modo: $argn y $argi. $argn contendr la lnea que PHP
est procesando en un momento dado, mientras
que $argi contendr el nmero de lnea.


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
-F --process-file Fichero PHP a ejecutar por cada lnea de entrada.
Aadido en PHP 5.
-E --process-end
Cdigo PHP a ejecutar tras procesar cada lnea.
Aadido en PHP 5.
Ejemplo #4 Usando las opciones -B , -R y -
E para contar el nmero de lneas 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 raz del documento para el servidor web
interno. Disponible a partir de PHP 5.4.0.
-s
--syntax-
highlight y --
syntax-
highlighting
Mostrar el cdigo fuente destacando la sintaxis en
color.
Esta opcin utiliza los mecanismos internos de anlisis
del ficheros y escribe una versin HTML coloreada y la
muestra en la salida estndar. Tenga en cuenta que
todo lo que hace es generar un bloque de etiquetas
HTML <code> [...] </code>, sin cabeceras HTML.
Nota:
Esta opcin no puede funcionar junto con la opcin -r .
-v --version
Ejemplo #5 Al usar -v obtenemos el nombre de
la SAPI y la versin 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 cdigo fuente sin comentarios ni lneas en
blanco.
Nota:
Esta opcin no puede usarse junto con la opcin -r .


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
-z
--zend-
extension
Carga una extensin Zend. Si slo se proporciona un
nombre de fichero, PHP trata de cargar la extensin 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 usarn las
rutas de bibliotecas del sistema. Un nombre de fichero
relativo que incluya algn directorio le indicar a PHP
que slo trate de cargar la extensin a partir del
directorio actual.
--ini
Mostrar el nombre del fichero de configuracin 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 informacin de la funcin o mtodo
proporcionado (p.ej. nmero y nombre de los
parmetros). Disponible desde PHP 5.1.2.
Esta opcin slo est disponible si se compil PHP con
soporte para Reflection.
Ejemplo #7 Uso bsico de --rf
$ php --rf var_dump
Function [ <internal> public function var_dump ] {

- Parameters [2] {
Parameter #0 [ <requerido> $var ]
Parameter #1 [ <opcional> $... ]
}
}
--rc --rclass
Muestra informacin de la clase dada (lista de
constantes, propiedades y mtodos). Disponible desde
PHP 5.1.2.
Esta opcin slo est disponible si se compil PHP con


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
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 informacin de la extensin dada (lista de
opciones en php.ini, funciones definidas, constantes y
clases). Disponible desde PHP 5.1.2.
Esta opcin slo 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 ] {
}


Opciones de lnea de comandos
Opcin Opcin Larga Descripcin
}
}
--rz
--
rzendextension
Mostrar la informacin de configuracin para la
extensin Zend proporcionada (la misma informacin
que es devuelta por la funcin phpinfo()). Disponible
como parte de PHP 5.4.0.
--ri --rextinfo
Mostrar informacin de configuracin de la extensin
dada (la misma informacin que muestra phpinfo()).
Disponible desde PHP 5.2.2. La informacin relevante
est disponible usando "main" como nombre de
extensin.
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] slo estn disponibles en CLI.
Ejecutando ficheros PHP
Hay tres formas distintas de proveer a la CLI SAPI con cdigo PHP para que sea
ejecutado:
1. Decirle a PHP que ejecute un determinado fichero.
2. $ php mi_script.php
3.


4. $ php -f mi_script.php
Ambas formas (usando o no el modificador -f ) ejecutan el
fichero mi_script.php. Ntese que no hay restriccin sobre cuales ficheros
puede ser ejecutado; en particular, el nombre del fichero no es necesario
que tenga una extensin .php.
Nota:
Si se necesita proporcionar argumentos al script, utilizando el modificador -
f , el primer argumento debe ser --.
5. Pasar el cdigo PHP para ejecutarlo directamente en la lnea de comandos.
6. $ php -r 'print_r(get_defined_constants());'
Debe tomarse especial cuidado con respecto al uso de comillas y la
sustitucin 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, provocara un error
sintctico.
7. Proporcionar el cdigo PHP a ejecutar a travs de la entrada estndar
(stdin).
Esto ofrece la posibilidad de crear cdigo PHP dinmicamente para
pasrselo 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 cdigo.
Como todas las aplicaciones de consola, el binario de PHP acepta un determinado
nmero de argumentos, sin embargo un script PHP tambin puede recibirlos. El
nmero de argumentos que pueden ser pasados a su script no est limitado por
PHP (aunque la consola tiene un determinado nmero de caracteres lmite;
usualmente usted no alcanzar este lmite). Los argumentos pasados al script
estn disponibles en el array global $argv. El primer ndice (cero) siempre contiene
el nombre del script como se llam desde la lnea de comandos. Ntese que, si el
cdigo es ejecutado en la lnea utilizando el modificador de consola -r , el valor
de $argv[0] ser simplemente un guin medio -). Lo mismo aplica si el cdigo es
ejecutado por medio de una tubera desde la entrada estndar STDIN.
Una segunda variable global, $argc, contiene el nmero de elementos en el
arreglo $argv (pero no el nmero 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 intrprete de PHP pensar que debe
manejarlo l, an 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 pasarn intactos al script.
# Esto no ejecutar el cdigo 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 lnea comience
con #!/usr/bin/php (sustityalo por la ruta a su CLI binario de PHP si es
diferente). El resto del fichero debera contener cdigo PHP normal con las
etiquetas usuales de inicio y fin de PHP. Una vez que se otorguen permisos de
ejecucin 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
parmetros 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 aadirse en la primera lnea del
script seguido de la ruta hacia el binario de PHP para que le indique
autom[aticamente al sistema cual es el programa que debera ejecutar al script. En
plataformas Windows puede asociar php.exepara que funcione al hacer doble clic
en ficheros con extensin .php, o se puede hacer un fichero por lotes para
ejecutar el script mediante PHP. La primera lnea especial "shebang" que se aade
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 incluyndose sin ningn problema. Ms abajo
puede encontrarse un ejemplo sencillo de cmo escribir un programa de lnea de
comandos en PHP.
Ejemplo #2 Script destinado a ejecutarse desde la lnea de comandos
(script.php)
#!/usr/bin/php
<?php

if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

ste es un script PHP de lnea de comandos con un parmetro.

Uso:
<?php echo $argv[0]; ?> <parmetro>

<parmetro> 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 lnea especial "shebang" de Unix para indicar
que este fichero debera ejecutarse por PHP. Puesto que aqu estamos trabajando
con una versin CLI, no se mostrarn cabeceras HTTP.


El programa comprueba primero que hay ms de un parmetro (adicionalmente al
nombre del script, el cual tambin es contado). Si no lo hay, o si el parmetro
fuese --help , -help , -h o -? , se imprime el mensaje de ayuda,
utilizando $argv[0] para escribir el nombre del script dinmicamente tal como se
escribi en la lnea de comandos. De otra manera, el parmetro es mostrado
exactamente como se recibi.
Para ejecutar el script superior en Unix, debe otorgarle permisos de ejecucin al
fichero para hacerlo ejecutable, y llamarlo simplemente comoscript.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 lnea 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 ejecutara
automticamente con los parmetros que se le hayan pasado: script.bat
mostrar_esto o script.bat -h.
Vea tambin la documentacin de extensin Readline para conocer ms funciones
que pueden ser utilizadas para mejorar las aplicaciones de lnea de comandos en
PHP.
Si est en Windows, puede configurar PHP para que no sea necesario aadir
ni C:\php\php.exe ni la extensin .php, tal como se describe en PHP en Lnea de
Comandos en Microsoft Windows.
Flujos de entrada/salida
CLI SAPI define algunas constantes para flujos de E/S que simplifican la
programacin en lnea de comandos.
Constantes especficas de CLI
Constante Descripcin
STDIN
Flujo abierto a stdin. Ahorra tener que abrirlo con
<?php
$stdin = fopen('php://stdin', 'r');
?>
Si se desea leer una sola lnea de stdin, puede usarse


Constantes especficas de CLI
Constante Descripcin
<?php
$line = trim(fgets(STDIN)); // lee una lnea de STDIN
fscanf(STDIN, "%d\n", $number); // lee un nmero 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 explcitamente estos flujos, ya que se cierra
automticamente por PHP al finalizar el script.
Nota:
Estas constantes no estn 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 opcin --with-readline .
Al usar la consola interactiva, se puede escribir directamente cdigo PHP que se
ejecuta al momento.
Ejemplo #1 Ejecutando cdigo 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, adems, proporciona autocompletado mediante el tabulador
de funciones, constantes, nombres de clases, variables, llamadas a mtodos
estticos y constantes de clases.
Ejemplo #2 Autocompletado con el tabulador
Al pulsar dos veces la tecla tabulador habiendo mltiples opciones de completados,
se mostrar una lista con stas:
php > strp[TAB][TAB]
strpbrk strpos strptime
php > strp
Cuando slo hay una posible opcin, slo con pulsar una vez el tabulador se
completar el resto de la lnea:
php > strpt[TAB]ime(
Tambin funciona el autocompletado para nombres que se han definido durante la
sesin 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 configuracin 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 tambin fue posible establecer las configuraciones de php.ini en la
shell interactiva utilizando una notacin abreviada.
Ejemplo #3 Estableciendo configuraciones de php.ini en la shell
interactiva
La configuracin de cli.prompt:
php > #cli.prompt=hola mundo :>
hola mundo :>
Usando comillas simples inclinadas es posible ejecutar cdigo 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 configuracin 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
podra ser \e[032m\v \e[031m\b \e[34m\> \e[0m
\v La versin 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 diseado solamente para propsitos de desarrollo, y no
debera ser utilizado en ambientes en produccin.
Las peticiones se sirven secuencialmente.


Las peticiones de URI se sirven desde el actual directorio de trabajo donde PHP se
inici, a menos que la opcin -t sea utilizada para especificar una raz de
documentos explcita. Si una peticin de URI no especifica un fichero, entonces el
index.php o index.html que estn en el directorio dado sern devueltos. Si ninguno
de los ficheros existen en el directorio, entonces ser devuelto una respuesta de
cdigo 404.
Si un fichero PHP es proporcionado en la lnea de comandos cuando se inicia el
servidor web ste es tratado como un script "enrutador". El script es ejecutado al
inicio de cada peticin HTTP. Si este script devuelve FALSE, entonces el recurso
solicitado se devuelve tal cual est. De otra forma la salida del script se devuelve
en el navegador.
Los tipos MIME estndar son devueltos por ficheros con extensiones: .css, .gif,
.htm, .html, .jpe, .jpeg, .jpg, .js, .png, .svg, y .txt. Las extensiones .htm y .svg
son reconocidas desde PHP 5.4.4 en adelante.
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 raz de documentos es /home/usuario/html_pblico
Presione Ctrl-C para salir
Despus de una peticin 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 raz de documentos es /home/usuario/html_pblico
Presione Ctrl-C para salir.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Peticin leda
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Peticin leda
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Peticin leda
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /mi_script.html - Peticin leda
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Peticin leda
Ejemplo #2 Iniciando con una raz de documentos especfica
$ cd ~/html_pblico
$ 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 raz de documentos es /home/usuario/html_pblico/foo
Presione Ctrl-C para salir
Ejemplo #3 Utilizando un Script enrutador
En este ejemplo, las peticiones a las imgenes se mostrarn, pero las peticiones a
ficheros HTML mostrarn "Bienvenido a PHP":
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])){


return false; // servir la peticin tal cual es.
}else {
echo "<p>Bienvenido a PHP</p>";
}

?>
$ php -S localhost:8000 router.php
Ejemplo #4 Revisin del uso de la CLI del servidor web
Para reutilizar un framework de script enrutador durante el desarrollo con la CLI
del servidor web server y luego con un servidor web en produccin:
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* los activos de ruta esttica y devolver falso */
}
/* seguir adelante con operaciones normales de index.php */
?>
$ php -S localhost:8000 router.php
Ejemplo #5 Manejando tipos de ficheros no soportados
Si necesita servir un recurso esttico cuyo tipo MIME no es manejado por la CLI
del servidor web, utilice:
<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "ogg") {
header("Content-Type: video/ogg");
readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
return FALSE;
}
?>
$ php -S localhost:8000 router.php
Ejemplo #6 Accediendo a la CLI del servidor web desde mquinas
remotas
Puede hacer que el servidor web sea accesible en el puerto 8000 a cualquier
interfaz con:
$ php -S 0.0.0.0:8000





Configuracin INI
Opciones de configuracin 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 explicacin de las directivas de configuracin.
cli_server.color boolean
Habilita el servidor web de desarrollo interno para usa la codificacin de
color ANSI en la salida del terminal.
Recoleccin de Basura
Introduccin a la Cuenta de Referencias
Una variable en PHP se almacena en un contender llamado "zval". Un contenedor
zval contiene, adems del tipo de la variable y su valor, dos bits de informacin
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 tambin un mecanismo contador de
referencias para optimizar el uso de memoria. Esta segunda pieza adicional de
informacin, llamada "refcount", contiene el nmero de variables (tambin
llamadas smbolos) que apuntan a este contenedor zval. Todos los smbolos se
almacenan en una tabla de smbolos, de las cuales hay una por cada mbito. Hay
un mbito para el script principal (es decir, al que el navegador realiz la peticin),
adems de uno por cada funcin o mtodo.
Se crea un contenedor zval cuando se crea una variable con un valor constante,
como por ejemplo:
Ejemplo #1 Creacin de un nuevo contenedor zval
<?php
$a = "nuevo string";
?>
En este caso, el nuevo nombre de smbolo, a, se crea en el mbito actual, y se
crea un nuevo contenedor de variable con el tipo string y el valornuevo string. El
bit "is_ref" por omisin contiene FALSE dado que no se ha creado ninguna
referencia. "refcount" contiene 1 pues slo hay un smbolo que haga uso de este
contenedor de variables. Tenga en cuenta que si "refcount" es 1, "is_ref" siempre


valdr FALSE. Si tiene Xdebuginstalado, puede mostrar esta informacin llamando
a xdebug_debug_zval().
Ejemplo #2 Mostrar informacin zval
<?php
xdebug_debug_zval('a');
?>
El resultado del ejemplo sera:
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 sera:
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 smbolos que lo vinculan, abandona su mbito (p.ej. cuando finaliza
una funcin) o cuando se llama aunset(). 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 sera:
a: (refcount=3, is_ref=0)='nuevo string'
a: (refcount=1, is_ref=0)='nuevo string'
Si ahora llamramos a unset($a);, el contenedor de variable, incluyendo tanto el
tipo como el valor, se eliminaran de la memora.


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 smbolos. 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 sera 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 grficamente

Los tres contenedores zval son: a, meaning, y number. Se aplican reglas similares
a la hora de incrementar y decrementar "refcounts". Abajo, aadimos otro
elemento al array, y fijamos su valor al contenido de un elemento ya existente:
Ejemplo #6 Aadiendo 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 sera 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 grficamente



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
funcin xdebug_debug_zval() no muestra esto, pero puede comprobarse
mostrando el puntero de memoria.
Eliminar un elemento del array es como eliminar un smbolo 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 sera algo similar a:
a: (refcount=1, is_ref=0)=array (
'life' => (refcount=1, is_ref=0)='life'
)
Ahora, las cosas se vuelven interesantes si aadimos 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 creara una copia:
Ejemplo #8 Aadiendo al propio array como elemento de s mismo
<?php
$a = array( 'one' );
$a[] =& $a;
xdebug_debug_zval( 'a' );
?>
El resultado del ejemplo sera algo similar a:
a: (refcount=2, is_ref=1)=array (
0 => (refcount=1, is_ref=0)='one',
1 => (refcount=2, is_ref=1)=...
)


O grficamente

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 cclica, 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 smbolo, y el contador de
referencias del contenedor de variables al que apunte se decrementa en uno. De
modo que, si eliminamos la variable $a despus de ejecutar el cdigo 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 grficamente

Problemas de limpieza
Pese a que ya no hay ningn smbolo en ningn mbito que apunte a esta
estructura, no se puede limpiar ya que el elemento "1" del array todava apunta al
mismo array. Al no haber ningn smbolo externo que apunte a el, 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 peticin, pero antes de entonces, ocupar un valioso espacio
en memoria. Esta situacin ocurre a menudo si se est implementando un
algoritmo de anlisis o en otras situaciones en las que un nodo hijo apunte de
nuevo al elemento "padre". Por supuesto, esta situacin tambin puede suceder


con objetos, donde es ms frecuente que ocurra, ya que los objetos siempre se
usan implcitamente por referencia.
Esto no debera ser un problema si slo ocurre una o dos veces, pero si sucede
miles, o incluso millones, de estas fugas de memoria, lgicamente esto comenzara
a ser un problema. Es especialmente problemtico en scripts de larga duracin,
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 quizs no los tenga el servidor de pruebas.
Recoleccin de referencias Cclicas
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 cclicas. Sin embargo, desde PHP 5.3.0 implementa el algoritmo
sncrono del artculo Recoleccin de Ciclos Concurrentes en Sistemas de
Contabilidad de Referencias que resuelve este asunto.
Una explicacin detallada del funcionamiento del algoritmo queda ms all del
objetivo de esta seccin, pero aqu explicaremos el mecanismo bsico. 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 recoleccin de ciclos slo
puede llevarse a cabo cuando un parmetro refcount se decrementa a un valor que
no sea cero. En segundo lugar, en la recoleccin de ciclos de basura, es posible
averiguar qu partes son basura comprobando si se puede decrementar en uno
sus refcount, para despus comprobar cules han alcanzado a cero.





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 races (zvals) al
"buffer raz" (marcndolos en "prpura"). Tambin se asegura de que cada raz de
basura slo finaliza una vez en el buffer. nicamente cuando el buffer raz est
completo, comienza el mecanismo de recoleccin en los zval que haya en su
interior. Ver paso A en la figura anterior.
En el paso B, el algoritmo inicia una primera bsqueda en profundidad de todas las
posibles races en las que decrementa por uno los refcount de los zval que
encuentra, asegurndose de que no decrementa dos veces el mismo zval
(marcndolo en "gris"). En el paso C, el algoritmo vuelve a llevar a cabo una
bsqueda en profundidad dentro de cada nodo raz, 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
bsqueda en profundidad partiendo de ese punto, y se le vuelve a marcar en
"negro". En el ltimo paso (D), el algoritmo recorre el buffer raz eliminando las
races 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 eliminarn.
Ahora que ya tiene un conocimiento bsico de cmo funciona el algoritmo,
volveremos atrs para ver cmo se integra esto en PHP. Por omisin, el recolector
de basuras de PHP est habilitado. Hay, sin embargo, una directiva en php.ini que
permite cambiar esto: 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 raz. ste
tiene un tamao fijo de 10.000 races posibles (se puede modificar esto cambiando
la contanteGC_ROOT_BUFFER_MAX_ENTRIES en Zend/zend_gc.c del cdigo
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 races seguiran registrndose en el buffer raz, sin importar si el
mecanismo recolector de basuras est habilitado en la configuracin o no.
Si estando deshabilitado el mecanismo recolector de basuras se llenara el buffer
raz de posibles races, no se registrara al resto de races posibles, por lo que no
llegaran a ser analizadas por el algoritmo. Si fueran parte de un ciclo de referencia
circular, nunca se liberaran y podran provocar una fuga de memoria.
La razn por la que se registran las posibles races estando deshabilitado el
mecanismo es porque es ms rpido registrarlas que comprobar en cada una de
ellas si el mecanismo est habilitado. Sin embargo, el recolector de basuras y el
propio mecanismo de anlisis, s puede conllevar una cantidad de tiempo
considerable.
Ademas de poder cambiar la configuracin zend.enable_gc, tambin es posible
habilitar o deshabilitar el mecanismo recolector de basura llamando
agc_enable() o gc_disable() respectivamente. La llamada a estas funciones tiene
el mismo efecto que habilitar o deshabilitar el mecanismo en la propia
configuracin. Tambin es posible forzar la recoleccin de ciclos incluso sin que
est lleno el buffer raz. Para hacer esto, se puede usar la


funcingc_collect_cycles(). Esta funcin devuelve el nmero 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 recoleccin a mano, es porque podra haber determinadas partes de una
aplicacin que necesiten mucha precisin de tiempo. En estos casos, quizs no se
desee que funcione el mecanismo recolector de basuras. Por supuesto, al
deshabilitar el recolector de basuras en algunas partes del cdigo, se corre el
riesgo de provocar fugas de memoria, ya que algunas races podran no caber en
el buffer raz. Por tanto, lo mas prudente sera llamar a gc_collect_cycles() justo
despus de llamar agc_disable() para que libere la memoria ocupada por posibles
races ya registradas en el buffer raz. Esto deja por tanto un buffer vaco, de
modo que queda ms espacio para almacenar posibles races en el tiempo en que
el mecanismo recolector de ciclos est deshabilitado.
Consideraciones acerca del Rendimiento
Como mencionamos en la seccin anterior, la recoleccin de races tiene muy bajo
impacto en el rendimiento, pero aqu es cuando comparamos PHP 5.2 contra PHP
5.3. Si bien la recoleccin de posibles races comparado con la no recoleccin,
como en PHP 5.2, es ms lenta, hay otras modificaciones en tiempo de ejecucin
en PHP 5.3 que impiden que esta prdida 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 reduccin en
tiempo de ejecucin 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 razn 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 implementacin de PHP,
esto sucede cuando el buffer raz est lleno, o cuando se invoca la
funcin gc_collect_cycles(). En el grfico 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 === 0 )
{
echo sprintf( '%8d: ', $i ), memory_get_usage() - $baseMemory, "\n";
}
}
?>

En este ejemplo didctico, 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 iteracin del bucle, tpicamente ocurrira una fuga de memoria. En este
caso, se fugan dos contenedores zval (el zval del objeto, y el zval de la propiead),
pero slo se encuentra una posible raz: la variable que se desasign. Tras 10.000
iteraciones, el buffer se llena (con un total de 10.000 posibles races), y se lanza el
mecanismo recolector de basura y libera la memoria asociada con esas posibles
races. Puede apreciarse claramente en el uso de memoria "dentado" de la grfica
para PHP 5.3. Tras las 10.000 iteraciones, el mecanismo libera la memoria
asociada a las variables con referencias cclicas. 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 mximo 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.
Reduccin en Tiempo de Ejecucin
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 cunto estamos hablando, modificaremos ligeramente el script
anterior para permitir un mayor nmero 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 mquina 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 mximo de memoria del script se ha
reducido en un 98%, pasando de 931Mb a 10Mb. Esta prueba no es muy cientfica,
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 ms referencias cclicas
en la ejecucin del script.


Estadsticas Internas de PHP del Recolector de Basuras
Todava es posible dar ms informacin sobre cmo funciona el mecanismo
recolector de basuras dentro de PHP. Pero para hacerlo, ser necesario recompilar
PHP para habilitar el cdigo de anlises y de recopilacin 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
cmo hacerlo:
Ejemplo #4 Recompilando PHP para habilitar el anlisis 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 ejecucin de PHP:
Ejemplo #5 Estadsticas de Recoleccin 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 estadsticas ms 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 ms 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 raz" es siempre 10.000.
Conclusin
En general el recolector de basuras de PHP slo provocar un retraso cuando el
algoritmo recolector de ciclos funcione, mientras que en scripts normales (ms
pequeos) 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 reduccin de memoria permitir que puedan funcionar
ms scripts concurrentemente en el servidor, ya que en total no utilizarn mucha
memoria.


Los beneficios son ms evidentss en scripts de larga duracin, tales como grandes
suits de pruebas o scripts demonios. Tambin en las aplicaciones PHP-GTK, que
generalmente suelen ejecutarse durante ms 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
Afecta el comportamiento de PHP
Cach Alternativo de PHP
Introduccin
Instalacin/Configuracin
Requerimientos
Instalacin
Configuracin en tiempo de ejecucin
Tipos de recursos
Constantes predefinidas
Funciones de APC
apc_add Poner una nueva variable en cach en el almacn de
datos
apc_bin_dump Obtener una copia binaria de los ficheros y
variables de usuario dados
apc_bin_dumpfile Imprimir a un fichero una copia binaria de los
ficheros 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 fichero a la
cach de fichero/usuario de APC
apc_cache_info Recupera informacin que hay en cach del
almacn 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 cdigo de
byte, evitando todos los filtros
apc_dec Disminuye un nmero almacenado
apc_define_constants Define un conjunto de constantes para
recuperacin y definicin en masa
apc_delete_file Borra archivos de la cach del cdigo de operacin
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 nmero almacenado
apc_load_constants Carga un conjunto de constantes de la cach
apc_sma_info Recupera la informacin de la Asignacin de
Memoria Compartida de APC
apc_store Guardar una variable en cach en el almacn de datos
APCIterator La clase APCIterator


APCIterator::__construct Construye un objeto iterador APCIterator
APCIterator::current Obtener el elemento actual
APCIterator::getTotalCount Obtener la cuenta total
APCIterator::getTotalHits Obtener el total de xitos de la cach
APCIterator::getTotalSize Obtener el tamao total de la cach
APCIterator::key Obtener la clave del iterador
APCIterator::next Mover el puntero al siguiente elemento
APCIterator::rewind Rebobina el iterator
APCIterator::valid Comprueba si la posicin acutal es vlida
Introduccin
El APC, o cach alternativo de PHP (por sus siglas en ingls de Alternative PHP
Cache), es un cdigo de operacin de cach libre y abierto para PHP. Su objetivo
es el de proporcionar un marco robusto, libre y abierto para optimizar cdigo de
PHP intermedio mediante el almacenamiento en cach.
Instalacin/Configuracin
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/apc.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar 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 implementacin ms exhaustivos, altamente tcnicos,
vase el archivo TECHNOTES para desarrolladores .
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Aunque la configuracin predeterminada de APC est bien para la mayora de las
instalaciones, los usuarios dedicados deberan considerar ajustar los siguientes
parmetros.


Hay dos decisiones principales a tomar para configurar APC. Primero, cunta
memoria va a ser asignada a APC; y segundo, si APC debe comprobar si un
archivo ha sido modificado en cada peticin. Las dos directivas ini que controlan
estos ajustes son apc.shm_size y apc.stat, respectivamente. Lea detenidamente
las secciones sobre estas dos directivas ms abajo.
Una vez que el servidor est ejecutndose, el script apc.php que est incluido con
la extensin debera ser copiado a algn lugar dentro del directorio raz de
documentos y visualizarlo con un navegador, ya que porporciona un anlisis
detallado del funcionamiento interno de APC. Si GD est habilitado en PHP,
tambin mostrar algunos grficos interesantes. Lo primero que se debe asegurar
es, por supuesto, que se estn manejando realmente archivos en cach. Si APC
est funcionando, el nmero dado por Cache full count (a la izquierda) mostrar
el nmero de veces que la cach ha alcanzado su mxima capacidad y ha tenido
que limpiar forzosamente cualquier entrada a la que no se haya accedido en los
ltimos apc.ttl segundos. Este nmero 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 ms sencilla de minimizar este nmero es asignar
ms memoria a APC. A menos que se haga esto, debera usarse apc.filters para
almacenar en cach menos scripts.
Cuando APC es compilado con soporte para mmap (Memory Mapping - Mapeo de
Memoria), slo 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 mltiples segmentos de memeria. MMAP no tiene un lmite mximo
como lo tiene SHM en /proc/sys/kernel/shmmax. En general, se recomienda el
soporte para MMAP ya que reclamar la memoria ms rpido cuando el servidor
web sea reiniciado y a fin de cuentas reduce el impacto de asignacion de memoria
al inicio.
Opciones de configuracin de APC
Nombre Por defecto Cambiable
Historial de
cambios
apc.enabled "1"
PHP_INI_SYS
TEM
PHP_INI_SYSTEM
en APC 2.
PHP_INI_ALL en
APC <= 3.0.12.
apc.shm_segments "1"
PHP_INI_SYS
TEM

apc.shm_size "32M"
PHP_INI_SYS



Opciones de configuracin de APC
Nombre Por defecto Cambiable
Historial de
cambios
TEM
apc.shm_strings_buff
er
"4M"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.4.
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_SYS
TEM

apc.user_entries_hint "4096"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.0.
apc.ttl "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.0.
apc.user_ttl "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.0.
apc.gc_ttl "3600"
PHP_INI_SYS
TEM

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_SYS
TEM

apc.mmap_file_mask NULL
PHP_INI_SYS



Opciones de configuracin de APC
Nombre Por defecto Cambiable
Historial de
cambios
TEM
apc.slam_defense "1"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.0.
Anterior a APC
3.1.4, el valor por
defecto
era "0" (deshabilit
ado).
apc.file_update_prot
ection
"2"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.6.
apc.enable_cli "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.7.
apc.max_file_size "1M"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.7.
apc.use_request_tim
e
"1" PHP_INI_ALL
Disponible a partir
de APC 3.1.3.
apc.stat "1"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.10.
apc.write_lock "1"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.11.
apc.report_autofilter "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.11.
apc.include_once_ov
erride
"0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.12.


Opciones de configuracin de APC
Nombre Por defecto Cambiable
Historial de
cambios
apc.rfc1867 "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.13.
apc.rfc1867_prefix "upload_"
PHP_INI_SYS
TEM

apc.rfc1867_name
"APC_UPLOAD_PROG
RESS"
PHP_INI_SYS
TEM

apc.rfc1867_freq "0"
PHP_INI_SYS
TEM

apc.rfc1867_ttl "3600"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.1.
apc.localcache "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.14.
apc.localcache.size "512"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.14.
apc.coredump_unma
p
"0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.16.
apc.stat_ctime "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.0.13.
apc.preload_path NULL
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.1.
apc.file_md5 "0"
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.1.
apc.canonicalize "1"
PHP_INI_SYS Disponible a partir


Opciones de configuracin de APC
Nombre Por defecto Cambiable
Historial de
cambios
TEM de APC 3.1.1.
apc.lazy_functions 0
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.3.
apc.lazy_classes 0
PHP_INI_SYS
TEM
Disponible a partir
de APC 3.1.3.
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
apc.enabled boolean
apc.enabled se puede establecer a 0 para deshabilitar APC. Esto es til
principalmente cuando APC est compilado estticamente en PHP, ya que
no hay otra forma de deshabilitarlo (cuando se compila como un DSO, la
lnea extension en php.ini debe ser descomentada).
apc.shm_segments integer
El nmero de segmentos de memoria compartida a asignar a la cach del
compilador. Si APC est agotando la memoria compartida
peroapc.shm_size est establecido tan alto como el sistema lo permita,
aumentar este valor podra prevenir que APC agote su propia memoria.
apc.shm_size integer
El tamao de cada segmento de memoria compartida en MB. Por defecto,
algunos sistemas (incluidos la mayora de variantes de BSD) tienen lmites
muy bajos del tamao de un segmento de memoria compartida.
apc.shm_strings_buffer string
El tamao de la memoria a usar como bfer compartido para strings usados
internamente por APC. El tamao debera sufijarse con M para megabytes,
G para gigabytes. LA habilitacin de esta opcin reduce la cantidad de
memoria usada por el trabajador PHP-FPM ya que los strings sern
almacenados una vez en lugar de una por cada trabajador.


apc.optimization integer
El nivel de optimizacin. Cero deshabilita el optimizador, y valores mayores
usan optimizaciones ms agresivas. Se esperan mejoras de velocidad muy
modestas. Esto es experimental.
apc.num_files_hint integer
Un "consejo" sobre el nmero de distintos archivos fuente que sern
incluidos o solicitados en su servidor web. Establzcalo a cero u omtalo 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 nmero de distintas
variables de cach de usuario a almacenar. Estblzcalo a cero u omtalo si
no est seguro.
apc.ttl integer
El nmero 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
podra llenarse potencialmente de entradas antiguas mientras que las
nuevas entradas podran 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 nmero 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
podra llenarse potencialmente de entradas antiguas mientras que las
nuevas entradas podran 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 nmero de segundos que una entrada de cach puede permanecer en la
lista de recoleccin 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


versin antigua no ser reclamada hasta que se alcance este TTL.
Estabzcalo a cero para deshabilitar esta caracterstica.
apc.cache_by_default boolean
Activado por defecto, pero se puede desactivar y usarlo junto con un filtro
positivo en apc.filters para que slo 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 patrn coincide con el nombre de archivo fuente, el archivo no
ser almacenado en cach. Observe que el nombre de archivo usado para la
comparacin es pasado para incluirlo/requerirlo, no la ruta absoluta. Si el
primer carcter de una expresin es +, la expresin ser aditiva en el
sentido de que cualquier archivo comparado por la expresin ser
almacenado en cach, y si el primer carcter 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
mscara de archivo estilo mktemp a pasar al mdulo mmap para
determinar si la regin de memoria de mmap va a ser para gestin de
archivos o para gestin de memoria compartida. Para gestin directa de
archivos, establzcalo a algo como /tmp/apc.XXXXXX (exactamente 6 X).
Para usar shm_open/mmap al estilo POSIX ponga .shm en algn lugar de
su mscara, p.ej. /apc.shm.XXXXXX Tambin se puede establecer
a /dev/zero para usar la interfaz /dev/zero de kernel a una memoria de
mmap annima. Dejndolo indefinido forzar un mmap annimo.
apc.slam_defense integer
En servidores muy concurridos cuando se inicia el sercidor o se modifican
archivos, se puede crear una competicin para todos los procesos que
intentn almacenar el mismo archivo al mismo tiempo. Esta opcin
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 caracterstica.
Obsoleto por apc.write_lock.


apc.file_update_protection integer
Cuando un archivo es modificado en un servidor web debera hacerse
realmente de una forma atmica. Es decir, escribir en un archivo temporal y
renombrar (mv) el archivo a su posicin 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 todava 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 modificacin (mtime)
de un archivo muestra que es menor que 2 segundo de atigedad cuando
se acceda a l, no ser almacenado en cach. La persona desafortunada
que acceda a este archivo a medio escribir an lo ver de forma extraa,
pero por lo menos no persistir. Si todos los archivos del servidor web se
actualizan atmicamente mediante algn mtodo como rsync (el cul
actuliza correctamente), se puede deshabilitar esta proteccin estableciendo
esta directiva a 0. Si el sistema se inunda de entradas/salidas y algunos
procesos de actualizacin toman ms de 2 segundos, este ajuste debera
ser aumentado para habilitar la proteccin en las operaciones de
actualizacn ms lentas.
apc.enable_cli integer
Mayormente para probar y depurar. Estableciendo esto habilita APC para la
versin CLI de PHP. Bajo circunstancias normales, no es ideal crear, llenar y
destruir la cach de APC en cada peticin CLI, pero para varios escenarios
de pruebas es til para ser capaz de habilitar APC para la versin CLI de
PHP de manera sencilla.
apc.max_file_size integer
Previene que los archivos ms 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 estadsticas (comprobar) del script en cada peticin para
determinar si ha sido modificado. Si ha sido modificado ser recompilado y
se almacenar en cach la nueva versin. Si este ajuste est desactivado,
APC no har ninguna comprobacin, 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
configuracin de FastCGI del servidor web puede no limpiar la cach al
reinicio. En un servidor de produccin donde los archivos de script
raramente cambian, se puede lograr aumentar el redimiento
significativamente deshabilitando las estadsticas.


Para archivos incluidos/requeridos tambin se aplica esta opcin, pero
observe que para inclusiones de rutras relativas (cualquier ruta que no
empiece con / en Unix), APC tiene que realizar una verificacin para
identificar de manera nica un arcivo. Si se usan inclusiones de rutas
absolutas, APC puede saltarse las estadsticas 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 mltiples veces.
Write_lock garantiza que slo un proceso intentar compilar y almacenar en
cach un script que no lo sta. Los dems procesos que intenten usar el
script se ejecutarn sin usar la cach de cdigo de operaciones, en vez de
mirar y esperar a que la cach se prepare.
apc.report_autofilter boolean
Registra cualquier script que fue automticamente excludo de ser
almacenado en cach debido a cuestiones de enlaces precoces/tardos.
apc.include_once_override boolean
Optimiza las llamadas a include_once y require_once y evita las caras
llamadas al sistema utilizadas.
Advertencia
Esta caracterstica es EXPERIMENTAL. El comportamiento de esta
directiva, su nombre, y la documentacin pertinente puede cambiar sin
previo aviso en una versin futura de APC. El uso de esta caracterstica est
bajo su responsabilidad.
apc.rfc1867 boolean
El gestor de enganche de Progreso de Subidas de Archivo RFC1867 slo 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 automticamente una entrada de cach de usuario
upload_key donde key es el valor de la entradaAPC_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 rateslo est disponible una vez que todas las tranferencias de
ficheros estn completadas.
Ejemplo #1 Un ejemplo de apc.rfc1867
<?php
print_r(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>
El resultado del ejemplo sera 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 debera hacer la actualizacin de la entrada de la cach
de usuario para el progreso de subida. Puede tomar la forma de un porcentaje del
total del tamao del archivo o un tamao en bytes opcionalmente con el
sufijo "k", "m", o "g" para kilobytes, megabytes, o gigabytes respectivamente
(insensible a maysculas-minsculas). Un valor de 0 actualiza tan a menudo como
se pueda, lo que puede causar subidar ms lentas.
apc.rfc1867_ttl integer
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 tamao de la cach de seguimiento de procesos locales, debera 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 seales, como SIGSEGV, que escriben
archivos de ncleo cuando se indican. Cuando estas seales son recibidas,
APC intentar desmapear el segmento de memoria compartida para
excluirlo del archivo de ncleo. Este ajuste puede mejorar la estabilidad del
sistema cuando son recibidas seales fatales y se configura un segmento
grande de memoria compartida de APC.
Advertencia
Esta caracterstica es potencialmente peligrosa. Desmapear el segmento de
memoria compartida en un gestro de seal 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 ncleo, estas implementaciones pueden tambin ignorar segmentos de
memoria compartida tales como el marcador de Apache.
apc.stat_ctime integer
La verificacin con ctime evitar problemas causados por programas como
svn o rsync asegurndose que los i-nodos no han cambiado desde la lima
estadstica. APC normalmente slo verificar mtime.
apc.canonicalize bool
Si est activado, las rutas relativas son canonizadas al modo sin
estadsticas. En tal caso, los ficheros importados a partir de envolturas de
flujos, no se almacern dado que realpath() no soporta las envolutras de
flujos.
apc.preload_path string


Opcionalmente, establece un ruta al directorio que APC cargar cados de
cach al inicio.
apc.use_request_time bool
Usa el tiempo de inicio de la peticin 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.
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
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
Tabla de contenidos
apc_add Poner una nueva variable en cach en el almacn de datos
apc_bin_dump Obtener una copia binaria de los ficheros y variables de
usuario dados
apc_bin_dumpfile Imprimir a un fichero una copia binaria de los ficheros
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 fichero a la cach de
fichero/usuario de APC
apc_cache_info Recupera informacin que hay en cach del almacn 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 cdigo de byte,
evitando todos los filtros
apc_dec Disminuye un nmero almacenado
apc_define_constants Define un conjunto de constantes para
recuperacin y definicin en masa
apc_delete_file Borra archivos de la cach del cdigo de operacin
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 nmero almacenado
apc_load_constants Carga un conjunto de constantes de la cach
apc_sma_info Recupera la informacin de la Asignacin de Memoria
Compartida de APC
apc_store Guardar una variable en cach en el almacn de datos


apc_add
(PECL apc >= 3.0.13)
apc_add Poner una nueva variable en cach en el almacn de datos
Report a bug
Descripcin
bool apc_add ( string $key , mixed $var [, int $ttl = 0 ] )
array apc_add ( array $values [, mixed $unused = NULL [, int $ttl = 0 ]] )
Pone una variable en cach en el almacn de datos, slo si no est ya almacenada.
Nota: A diferencia de otros mecanismos de PHP, las variables almacenadas al
usar apc_add() persistirn entre peticiones (hasta que el valor sea eliminado de
la cach).
Report a bug
Parmetros
key
Almacena la variable usando este nombre. Las claves (keys) son nicas en
la cach, por lo que intentar usar apc_add() para almacenar informacin
con una clave que ya existe no sobrescribir la informacin 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. Despus 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 si realmente se ha aadido algo a la cach, de lo contrario
devuelve FALSE. La segunda sintaxis devuelve un array con las claves de errores.
Report a bug
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 sera:
string(3) "BAR"
string(3) "BAR"
Report a bug
Ver tambin
apc_store() - Guardar una variable en cach en el almacn 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_dump Obtener una copia binaria de los ficheros y variables de usuario
dados
Report a bug
Descripcin
string apc_bin_dump ([ array $files = NULL [, array $user_vars = NULL ]] )
Devuelve una copia binaria de los ficheros y variables de usuario dados desde la
cach de APC. NULL para cada parmetro files o user_vars indica una copia de cada
entrada, mientras que array() no har copia de nada.
Report a bug
Parmetros
files
Los ficheros. 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.
Report a bug
Valores devueltos
Devuelve una copia binaria de los ficheros y variables de usuario dados
desde la cach de APC, FALSE si APC no est habilitado, o NULL si se
produjo un error desconocido.
Report a bug
Ver tambin
apc_bin_dumpfile() - Imprimir a un fichero una copia binaria de los
ficheros 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_dumpfile Imprimir a un fichero una copia binaria de los ficheros y
variables de usuario almacenados en cach
Report a bug
Descripcin
int apc_bin_dumpfile ( array $files , array $user_vars , string $filename [, int $fl
ags = 0 [, resource $context = NULL ]] )
Imprime una copia binaria de los ficheros y variables de usuario dados desde la
cach de APC al fichero con nombre.
Report a bug
Parmetros
files
Los nombres de los fichero que van a ser copiados.
user_vars
Las variables de usuario que van a ser copiadas.
filename
El nombre de fichero donde la copia va a ser guardada.
flags
Banderas pasadas al flujo de filename. Vase la documentacin
de file_put_contents() para ms detalles.


context
El contexto pasado al flujo de filename. Vase la documentacin
de file_put_contents() para ms detalles.
Valores devueltos
El nmero de bytes escritos en el fichero, o si no FALSE si APC no est
habilitado, filename no es un nombre de fichero vlido, filename no se puede abrir,
el fichero copia no puede ser completado (p.ej., el disco duro se ha quedado sin
espacio), o si se produjo un error desconocido.
Report a bug
Ver tambin
apc_bin_dump() - Obtener una copia binaria de los ficheros 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_load Cargar una copia binaria en la cach de archivo/usuario de APC
Report a bug
Descripcin
bool apc_bin_load ( string $data [, int $flags = 0 ] )
Cargar la copia binaria dada en la cach de archivo/usuario de APC.
Report a bug
Parmetros
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 informacin de la copia binaria dada por data se carg
con xito, si no se devuelve FALSE. Tambin se devuelve FALSE si APC no
est habilitado o si data no es una copia binaria vlida de APC (p.ej.,
tamao no esperado).
Ejemplos
Ejemplo #1 Ejemplo de apc_bin_load()
<?php
$data = apc_bin_dump(NULL, NULL);
apc_bin_load($data, APC_BIN_VERIFY_MD5 | APC_BIN_VERIFY_CRC32);
?>
Report a bug
Ver tambin
apc_bin_dump() - Obtener una copia binaria de los ficheros y
variables de usuario dados
apc_bin_loadfile() - Cargar una copia binaria desde un fichero a la
cach de fichero/usuario de APC
apc_bin_loadfile
(PECL apc >= 3.1.4)
apc_bin_loadfile Cargar una copia binaria desde un fichero a la cach de
fichero/usuario de APC
Report a bug
Descripcin
bool apc_bin_loadfile ( string $filename [, resource $context =
NULL [, int $flags = 0 ]] )
Carga una copia binaria desde un fichero a la cach de fichero/usuario de APC.
Report a bug


Parmetros
filename
El nombre de fichero que contiene la copia, probablemente
desde apc_bin_dumpfile().
context
El contexto de ficheros.
flags
Puede ser APC_BIN_VERIFY_CRC32, APC_BIN_VERIFY_MD5, o ambos.
Report a bug
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, filenameno es un nombre de fichero vlido o est vaco,
no se puede abrir filename, la copia del fichero no se puede
completar, o si data no es una copia binaria de APC vlida (p.ej.,
tamao no esperado).
Report a bug
Ver tambin
apc_bin_dumpfile() - Imprimir a un fichero una copia binaria
de los ficheros 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 informacin que hay en cach del almacn de datos
de APC
Report a bug
Descripcin
array apc_cache_info ([ string $cache_type = "" [, bool $limited = false ]] )
Recupera informacin que hay en cach y meta-datos del almacn de datos de
APC.
Report a bug
Parmetros
cache_type
Si cache_type es "user", ser devuelta la informacin acerca de la cach de
usuario.
Si cache_type es "filehits", ser devuelta la informacin acerca de qu
ficheros han sido servidos desde la cach de cdigo de bytes para la
solicitud actual. Esta caracterstica debe ser habilitada en la compilacin
usando --enable-filehits .
Si cache_type no es vlido o no se especifica, ser devuelta la informacin
sobre la cach del sistema (ficheros almacenados 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 reunin de
estadsticas.
Report a bug
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.


Report a bug
Historial de cambios
Versin Descripcin
3.0.11 Se introdujo el parmetro limited.
3.0.16
Se introdujo la opcin "filehits" del
parmetro cache_type.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de apc_cache_info()
<?php
print_r(apc_cache_info());
?>
El resultado del ejemplo sera 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 ficheros en cach)
)
Report a bug
Ver tambin
Directivas de configuracin de APC
APCIterator::getTotalSize() - Obtener el tamao total de la cach


APCIterator::getTotalHits() - Obtener el total de xitos de la cach
APCIterator::getTotalCount() - Obtener la cuenta total
apc_cas
(PECL apc >= 3.1.1)
apc_cas Actualiza un valor anterior por un nuevo valor
Descripcin
bool apc_cas ( string $key , int $old , int $new )
apc_cas() actualiza un nmero entero existente si el parmetro old concuerda
con el valor guardado actualmente con el valor del parmetro new.
Report a bug
Parmetros
key
La clave del valor a ser actualizado.
old
El valor anterior (el valor actualmente guardado).
new
El nuevo valor a actualizar.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug


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', 1, 2) ? 'ok' : '
fallo'), PHP_EOL;
echo '$foobar == 2 ? 1 : 2 = ', (apc_cas('foobar', 2, 1) ? 'ok' : '
fallo'), PHP_EOL;

echo '$foobar = ', apc_fetch('foobar'), PHP_EOL;

echo '$f__bar == 1 ? 2 : 1 = ', (apc_cas('f__bar', 1, 2) ? 'ok' : '
fallo'), PHP_EOL;

apc_store('perfeccin', 'xyz');
echo '$perfeccin == 2 ? 1 : 2 = ', (apc_cas('perfeccin', 2, 1) ?
'ok' : 'fallo pico'), PHP_EOL;

echo '$foobar = ', apc_fetch('foobar'), PHP_EOL;
?>
El resultado del ejemplo sera algo similar a:
$foobar = 2
$foobar == 1 ? 2 : 1 = fallo
$foobar == 2 ? 1 : 2 = ok
$foobar = 1
$f__bar == 1 ? 2 : 1 = fallo
$perfeccin == 2 ? 1 : 2 = fallo pico
$foobar = 1
Report a bug
Ver tambin
apc_dec() - Disminuye un nmero almacenado
apc_store() - Guardar una variable en cach en el almacn de
datos
apc_clear_cache
(PECL apc >= 2.0.0)
apc_clear_cache Limpia la cach de APC
Report a bug
Descripcin
bool apc_clear_cache ([ string $cache_type = "" ] )


Limpiar la cach de usuario/sistema.
Report a bug
Parmetros
cache_type
Si cache_type es "user", se limpiar la cach de usuario; de otro modo, se
limpiar la cach del sistema (ficheros almacenados en cach).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
apc_cache_info() - Recupera informacin que hay en cach del almacn
de datos de APC
apc_compile_file
(PECL apc >= 3.0.13)
apc_compile_file Almacena un archivo en la cach de cdigo de byte, evitando
todos los filtros
Report a bug
Descripcin
mixed apc_compile_file ( string $filename [, bool $atomic = true ] )
Almacena un archivo en la cach de cdigo de byte, evitando todos los filtros.
Report a bug
Parmetros
filename


Ruta completa o relativa al archivo PHP que ser compilado y almacenado
en la cach de cdigo de byte.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
apc_bin_dumpfile() - Imprimir a un fichero una copia binaria de los
ficheros y variables de usuario almacenados en cach
apc_bin_loadfile() - Cargar una copia binaria desde un fichero a la
cach de fichero/usuario de APC
apc_dec
(PECL apc >= 3.1.1)
apc_dec Disminuye un nmero almacenado
Report a bug
Descripcin
int apc_dec ( string $key [, int $step = 1 [, bool &$success ]] )
Disminuye un valor integer almacenado.
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve el valor actual de key en caso de xito, o FALSE en caso de
error
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de apc_dec()
<?php
echo "Vamos a hacer algo con xito", PHP_EOL;

apc_store('unnmero', 42);

echo apc_fetch('unnmero'), PHP_EOL;

echo apc_dec('unnmero'), PHP_EOL;
echo apc_dec('unnmero', 10), PHP_EOL;
echo apc_dec('unnmero', 10, $xito), PHP_EOL;

var_dump($xito);

echo "Ahora, vamos a fracasar", PHP_EOL, PHP_EOL;

apc_store('unacadena', 'foo');

$ret = apc_dec('unacadena', 1, $fracaso);

var_dump($ret);
var_dump($fracaso);
?>
El resultado del ejemplo sera algo similar a:
Vamos a hacer algo con xito
42
41
31
21
bool(true)



Ahora, vamos a fracasar
bool(false)
bool(false)
Report a bug
Ver tambin
apc_inc() - Aumentar un nmero almacenado
apc_define_constants
(PECL apc >= 3.0.0)
apc_define_constants Define un conjunto de constantes para recuperacin y
definicin en masa
Report a bug
Descripcin
bool apc_define_constants ( string $key , array $constants [, bool $case_sensitiv
e = 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
ms eficiente el proceso de definicin de constantes en masa. Sin embargo, esta
funcin no lo realiza tan bien como se esperaba.
Para una solucin de rendimiento mejor, pruebe la extensin hidef de PECL.
Nota: Para eliminar un conjunto de constantes almacenadas (sin limpiar la cach
por completo), se puede pasar un array vaco al parmetro constants, limpiando de
manera eficaz los valores almacenados.
Report a bug
Parmetros
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 nominacin
de constantes. valor debe evaluar un valor escalar.
case_sensitive
El comportamiento predeterminado para las constantes es ser declaradas
sensibles a maysculas-minsculas; es
decir,CONSTANTE y Constante representan valores diferentes. Si este
parmetro es FALSE las constantes sern declaradas como smbolos
insensibles a maysculas-minsculas.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de apc_define_constants()
<?php
$constantes = array(
'UNO' => 1,
'DOS' => 2,
'TRES' => 3,
);
apc_define_constants('nmeros', $constantes);
echo UNO, DOS, TRES;
?>
El resultado del ejemplo sera:
123
Report a bug
Ver tambin
apc_load_constants() - Carga un conjunto de constantes de la
cach
define() - Define una constante con nombre
constant() - Devuelve el valor de una constante
O la referencia de contantes de PHP


apc_delete_file
(PECL apc >= 3.1.1)
apc_delete_file Borra archivos de la cach del cdigo de operacin
Report a bug
Descripcin
mixed apc_delete_file ( mixed $keys )
Borra los archivos dados de la cach del cdigo de operacin.
Report a bug
Parmetros
keys
Los archivos a ser borrados. Acepta un string, un array de strings, o
un object APCIterator.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error. O si keys es un array,
se devuelve un array vaco en caso de xito, o se devuelve un array con los
archivos fallidos.
Report a bug
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 AP
C.", 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 sera 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)
Report a bug
Ver tambin
apc_clear_cache() - Limpia la cach de APC
apc_delete() - Elimina una variable almacenada de la cach
apc_exists() - Comprobar si existe una clave de APC
apc_delete
(PECL apc >= 3.0.0)
apc_delete Elimina una variable almacenada de la cach
Report a bug
Descripcin
mixed apc_delete ( string $key )
Elimina una variable almacenada de la cach.
Report a bug
Parmetros
key


La clave dada por key usada para almacenar el valor (con apc_store()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo apc_delete()
<?php
$bar = 'BAR';
apc_store('foo', $bar);
apc_delete('foo');
// esto es obviamente intil de esta forma
?>
Report a bug
Ver tambin
apc_store() - Guardar una variable en cach en el almacn de datos
apc_fetch() - Traer una variable almacenada desde la cach
apc_exists
(PECL apc >= 3.1.4)
apc_exists Comprobar si existe una clave de APC
Report a bug
Descripcin
mixed apc_exists ( mixed $keys )
Comprueba si una o ms claves de APC existen.
Report a bug
Parmetros
keys


Un string, o un array de strings, que contienen claves.
Report a bug
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 vaco si no existe nada.
Report a bug
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 sera algo similar a:
Foo existe: manzana
Baz no existe
array(2) {
["foo"]=>


bool(true)
["bar"]=>
bool(true)
}
Report a bug
Ver tambin
apc_cache_info() - Recupera informacin que hay en cach del almacn
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
Descripcin
mixed apc_fetch ( mixed $key [, bool &$success ] )
Traer una variable almacenada desde la cach.
Parmetros
key
La clave dada por key usada para almacenar el valor (con apc_store()). Si
se pasa un array cada elemento es trado 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 sera:
string(3) "BAR"
Historial de cambios
Versin Descripcin
3.0.17
Se aadio el
parmetro success.
Ver tambin
apc_store() - Guardar una variable en cach en el almacn de
datos
apc_delete() - Elimina una variable almacenada de la cach
APCIterator

apc_inc
(PECL apc >= 3.1.1)
apc_inc Aumentar un nmero almacenado
Report a bug
Descripcin
int apc_inc ( string $key [, int $step = 1 [, bool &$success ]] )
Aumenta un nmero almacenado.
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve el valor actual de key en caso de xito, o FALSE en caso de
error
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de apc_inc()
<?php
echo "Vamos a hacer algo con xito", PHP_EOL;

apc_store('unnmero', 42);

echo apc_fetch('unnmero'), PHP_EOL;

echo apc_inc('unnmero'), PHP_EOL;
echo apc_inc('unnmero', 10), PHP_EOL;
echo apc_inc('unnmero', 10, $xito), PHP_EOL;

var_dump($xito);

echo "Ahora, vamos a fracasar", PHP_EOL, PHP_EOL;

apc_store('unacadena', 'foo');

$ret = apc_inc('unacadena', 1, $fracaso);

var_dump($ret);
var_dump($fracaso);
?>


El resultado del ejemplo sera algo similar a:
Vamos a hacer algo con xito

42
43
53
63
bool(true)
Ahora, vamos a fracasar

bool(false)
bool(false)
Report a bug
Ver tambin
apc_dec() - Disminuye un nmero almacenado
apc_load_constants
(PECL apc >= 3.0.0)
apc_load_constants Carga un conjunto de constantes de la cach
Report a bug
Descripcin
bool apc_load_constants ( string $key [, bool $case_sensitive = true ] )
Carga un conjunto de constantes de la cach.
Report a bug
Parmetros
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 maysculas-minsculas; es


decir,CONSTANTE y Constante representan valores diferentes. Si este
parmetro es FALSE las constantes sern declaradas como smbolos
insensibles a maysculas-minsculas.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de apc_load_constants()
<?php
$constantes = array(
'UNO' => 1,
'DOS' => 2,
'TRES' => 3,
);
apc_define_constants('nmeros', $constantes);
apc_load_constants('nmeros');
echo UNO, DOS, TRES;
?>
El resultado del ejemplo sera:
123
Report a bug
Ver tambin
apc_define_constants() - Define un conjunto de constantes para
recuperacin y definicin en masa
define() - Define una constante con nombre
constant() - Devuelve el valor de una constante
O la referencia de contantes de PHP
apc_sma_info
(PECL apc >= 2.0.0)
apc_sma_info Recupera la informacin de la Asignacin de Memoria Compartida
de APC
Report a bug
Descripcin
array apc_sma_info ([ bool $limited = false ] )


Recupera la informacin de la Asignacin de Memoria Compartida de APC.
Report a bug
Parmetros
limited
Cuando se establece a FALSE (predeterminado) apc_sma_info() devolver
informacin detallada sobre cada segmento.
Report a bug
Valores devueltos
Un array de informacin de Asignacin de Memoria Compartida; FALSE en caso
de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de apc_sma_info()
<?php
print_r(apc_sma_info());
?>
El resultado del ejemplo sera algo similar a:
Array
(
[num_seg] => 1
[seg_size] => 31457280
[avail_mem] => 31448408
[block_lists] => Array
(
[0] => Array
(
[0] => Array
(
[size] => 31448408
[offset] => 8864
)

)

)

)
Report a bug


Ver tambin
Directivas de configuracin de APC
apc_store
(PECL apc >= 3.0.0)
apc_store Guardar una variable en cach en el almacn de datos
Report a bug
Descripcin
bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )
array apc_store ( array $values [, mixed $unused = NULL [, int $ttl = 0 ]] )
Guarda una variable en cach en el almacn de datos.
Nota: A diferencia de otros mecanismos de PHP, las variables almacenadas al
usar apc_store() persistirn entre peticiones (hasta que el valor sea eliminado de
la cach).
Report a bug
Parmetros
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. Despus 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.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error. La
segunda sintaxis devuelve un array con claves de errores.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de apc_store()
<?php
$bar = 'BAR';
apc_store('foo', $bar);
var_dump(apc_fetch('foo'));
?>
El resultado del ejemplo sera:
string(3) "BAR"
Report a bug
Ver tambin
apc_add() - Poner una nueva variable en cach en el
almacn de datos
apc_fetch() - Traer una variable almacenada desde la
cach
apc_delete() - Elimina una variable almacenada de la
cach




La clase APCIterator
(PECL apc >= 3.1.1)
Introduccin
La clase APCIterator hace que sea ms sencillo iterar sobre grandes cachs de
APC. Esto es tilya que permite iterar sobre grandes cachs por pasos, mientras
aprovecha un nmero 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. Tambin, usar
comparaciones con expresiones regulares es ms eficiente ya as se traslada al
nivel de C.
Sinopsis de la Clase
APCIterator implements Iterator {
/* Methods */
public __construct ( string $cache [, mixed $search = null [, int $format =
APC_ITER_ALL [, int $chunk_size = 100 [, int $list = APC_LIST_ACTIVE ]]]] )
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::__construct Construye un objeto iterador APCIterator
Report a bug


Descripcin
public APCIterator::__construct ( string $cache [, mixed $search =
null [, int $format = APC_ITER_ALL [, int $chunk_size = 100 [, int$list =
APC_LIST_ACTIVE ]]]] )
Construye un object APCIterator .
Report a bug
Parmetros
cache
El tipo de cach, que ser user o file.
search
Una expresin regular de PCRE que se compara con nombres de claves de
APC, como string para una nica expresin regular, o como un array de
expresiones regulares. O, opcionalmente, pase NULL para saltar la bsquda.
format
El formato deseado, como se configur con una o ms de las
constantes APC_ITER_*.
chunk_size
El tamao 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.
Report a bug
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']);
}
?>
Report a bug
Ver tambin
apc_exists() - Comprobar si existe una clave de APC
apc_cache_info() - Recupera informacin que hay en cach del almacn de
datos de APC
APCIterator::current
(PECL apc >= 3.1.1)
APCIterator::current Obtener el elemento actual
Report a bug
Descripcin
public mixed APCIterator::current ( void )
Obtiene el elemento acutal de la pila de APCIterator.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el elemento actual en caso de xito, o FALSE si no existen ms
elementos, o en caso de fallo.


Report a bug
Ver tambin
APCIterator::next() - Mover el puntero al siguiente elemento
Iterator::current() - Devuelve el elemento actual
APCIterator::getTotalCount
(PECL apc >= 3.1.1)
APCIterator::getTotalCount Obtener la cuenta total
Report a bug
Descripcin
public int APCIterator::getTotalCount ( void )
Obtiene la cuenta total.
Advertencia
Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
La cuenta total..
Report a bug
Ver tambin
APCIterator::getTotalHits() - Obtener el total de xitos de la cach
APCIterator::getTotalSize() - Obtener el tamao total de la cach
apc_cache_info() - Recupera informacin que hay en cach del almacn de
datos de APC
APCIterator::getTotalHits


(PECL apc >= 3.1.1)
APCIterator::getTotalHits Obtener el total de xitos de la cach
Report a bug
Descripcin
public int APCIterator::getTotalHits ( void )
Obtiene el nmero total de xitos de la cach.
Advertencia
Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
El nmero de xitos en caso de xito, o FALSE en caso de fallo.
Report a bug
Ver tambin
APCIterator::getTotalCount() - Obtener la cuenta total
APCIterator::getTotalSize() - Obtener el tamao total de la cach
apc_cache_info() - Recupera informacin que hay en cach del almacn de
datos de APC
APCIterator::getTotalSize
(PECL apc >= 3.1.1)
APCIterator::getTotalSize Obtener el tamao total de la cach
Report a bug
Descripcin
public int APCIterator::getTotalSize ( void )


Obtiene el tamao total de la cach.
Advertencia
Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
El tamao total de la cach.
Report a bug
Ver tambin
APCIterator::getTotalCount() - Obtener la cuenta total
APCIterator::getTotalHits() - Obtener el total de xitos de la cach
apc_cache_info() - Recupera informacin que hay en cach del almacn de
datos de APC
APCIterator::key
(PECL apc >= 3.1.1)
APCIterator::key Obtener la clave del iterador
Report a bug
Descripcin
public string APCIterator::key ( void )
Obtiene la clave actual del iterador.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug


Valores devueltos
Devuelve la clave en caso de xito, o FALSE en caso de error.
Report a bug
Ver tambin
APCIterator::current() - Obtener el elemento actual
Iterator::key() - Devuelve la clave del elemento actual
APCIterator::next
(PECL apc >= 3.1.1)
APCIterator::next Mover el puntero al siguiente elemento
Report a bug
Descripcin
public void APCIterator::next ( void )
Mueve el puntero del iterador al siguiente elemento.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
APCIterator::current() - Obtener el elemento actual
APCIterator::rewind() - Rebobina el iterator
Iterator::next() - Avanza al siguiente elemento
APCIterator::rewind
(PECL apc >= 3.1.1)


APCIterator::rewind Rebobina el iterator
Report a bug
Descripcin
public void APCIterator::rewind ( void )
Rebobina el iterador hasta el primer elemento.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ver tambin
APCIterator::next() - Mover el puntero al siguiente elemento
Iterator::next() - Avanza al siguiente elemento
APCIterator::valid
(PECL apc >= 3.1.1)
APCIterator::valid Comprueba si la posicin acutal es vlida
Report a bug
Descripcin
public void APCIterator::valid ( void )
Comprueba si la posicin actual del iterador es vlida.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug


Valores devueltos
Devuelve TRUE si la posicin actual del iterador es vlida, si no FALSE.
Report a bug
Ver tambin
APCIterator::current() - Obtener el elemento actual
Iterator::valid() - Comprueba si la posicin actual es vlido
Depurador Avanzado de PHP
Introduccin
Instalacin/Configuracin
Requerimientos
Instalacin
Compilando en Win32
Configuracin en tiempo de ejecucin
Tipos de recursos
Constantes predefinidas
Ejemplos
Como usar PHP-APD en los scripts
Funciones de APD
apd_breakpoint Detiene el interpretador y espera en un CR desde
el socket
apd_callstack Retorna la actual pila de llamado como una matriz
apd_clunk Lanza una advertencia y una pila de llamado
apd_continue Reinicia el interpretador
apd_croak Lanza un error, una pila de lamado y entonces sale
apd_dump_function_table Muestra la tabla de funciones actual
apd_dump_persistent_resources Retorna todos los recursos
persistentes como una matriz
apd_dump_regular_resources Retorna todos los recursos regulares
actuales como una matriz
apd_echo Echo hacia el socket de depurado
apd_get_active_symbols Obtener una matriz con los nombres de
las variables actuales en el mbito local
apd_set_pprof_trace Inicia la sesin de depurado
apd_set_session_trace_socket Inicia la sesin remota de depurado
apd_set_session_trace Inicia la sesin de depurado
apd_set_session Cambia o configura el nivel actual de depurado
override_function Pasa por alto funciones integradas
rename_function Renombra original_name como new_name en la
tabla global de funciones
Introduccin


APD (por sus siglas en Ingls Advanced PHP Debugger) es el depurador avanzado
de PHP. Fue escrito para brindar capacidades de anlisis de performance y
depurado para el cdigo 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. Tambin ofrece un registro basado en eventos en
el cual varios niveles de informacin (incluyendo llamados a funciones,
argumentos pasados, tiempos, etc.) pueden ser activados o inactivados para
scripts individuales.
Precaucin
APD es una extensin 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).
Instalacin/Configuracin
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/apd.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
En el archivo INI agregue las siguientes lneas:
zend_extension = /absolute/path/to/apd.so
apd.dumpdir = /absolute/path/to/trace/directory
apd.statement_tracing = 0
Dependiendo de la compilacin 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/ -- bsicamente se requiere
tener Microsoft Visual C++, win32build.zip, bison/flex y algn conocimiento sobre
como logar que todo esto funcione. Tambin se debe asegurar que adp.dsp tenga


fines de lnea tipo DOS; si son de tipo unix, Microsoft Visual C++ no lo reconocer
correctamente.
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de Configuracin 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 ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
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 lnea. Activar esto (1) impactar en
el desempeo de la aplicacin.
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
Constantes APD
Constante Valor Descripcin


Constantes APD
Constante Valor Descripcin
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
Como usar PHP-APD en los scripts
1. Como primera lnea del script PHP, llamar la funcin apd_set_pprof_trace()
para iniciar el rastreo.
<?php
apd_set_pprof_trace();
?>
Se puede insertar la lnea en cualquier parte del script, pero si no se inicia
el rastreo al comienzo, se descartarn los datos de depurado que pudieran
llevar a determinar un cuello de botella del desempeo.
2. Ahora se corre el script. La salida ser escrita a apd.dumpdir/pprof_pid.ext.
Sugerencia


Si est corriendo la versin CGI de PHP, es necesario agregar la opcin '-e'
para activar la informacin extendida que APD requiere para trabajar
apropiadamente. Por ejemplo: php -e -f script.php
3. Para mostrar formateados los datos de performance, se enva el
comando pprofp con las opciones de ordenado y presentacin. 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 opcin R usada en este ejemplo, ordena la tabla del performance por la
cantidad de tiempo real que el script gasta ejecutando una funcin dada. La
columna "cumm call" revela cuantas veces cada funcin es llamada y la
columna "s/call" muestra cuantos segundos requiere en promedio cada
llamada a la funcin.
4.Para generar un archivo de rbol de llamados que se pueda importar en la
aplicacin de anlisis de perfil KCacheGrind, enviar el comandopprof2calltree.
Funciones de APD
Informacin 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.


Tabla de contenidos
apd_breakpoint Detiene el interpretador y espera en un CR desde el
socket
apd_callstack Retorna la actual pila de llamado como una matriz
apd_clunk Lanza una advertencia y una pila de llamado
apd_continue Reinicia el interpretador
apd_croak Lanza un error, una pila de lamado y entonces sale
apd_dump_function_table Muestra la tabla de funciones actual
apd_dump_persistent_resources Retorna todos los recursos persistentes
como una matriz
apd_dump_regular_resources Retorna todos los recursos regulares
actuales como una matriz
apd_echo Echo hacia el socket de depurado
apd_get_active_symbols Obtener una matriz con los nombres de las
variables actuales en el mbito local
apd_set_pprof_trace Inicia la sesin de depurado
apd_set_session_trace_socket Inicia la sesin remota de depurado
apd_set_session_trace Inicia la sesin de depurado
apd_set_session Cambia o configura el nivel actual de depurado
override_function Pasa por alto funciones integradas
rename_function Renombra original_name como new_name en la tabla
global de funciones
apd_breakpoint
(PECL apd >= 0.2)
apd_breakpoint Detiene el interpretador y espera en un CR desde el socket
Report a bug
Descripcin
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, slo se enva enter (una lnea
en blanco) o se entra un comando php para ser ejecutado.
Report a bug
Parmetros
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 todava no esta implementada.
Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS
SUMMARY (como strace -c)) use el valor 99
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Sesin tpica 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_callstack Retorna la actual pila de llamado como una matriz
Report a bug
Descripcin
array apd_callstack ( void )
Retorna la actual pila de llamado como una matriz
Report a bug
Valores devueltos
Una matriz que contiene la actual pila de llamado.
Report a bug
Ejemplos
Ejemplo #1 apd_callstack() ejemplo
<?php
print_r(apd_callstack());
?>
apd_clunk
(PECL apd 0.2-0.4)
apd_clunk Lanza una advertencia y una pila de llamado
Report a bug
Descripcin
void apd_clunk ( string $warning [, string $delimiter = "<BR />" ] )
Se comporta como el Carp::cluck de perl. Lanza una advertencia y una pila de
llamado.
Report a bug


Parmetros
warning
La advertencia a lanzar.
delimiter
El delimitador. Por defecto es <BR />.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 apd_clunk() ejemplo
<?php
apd_clunk("Alguna advertencia", "<br/>");
?>
Report a bug
Ver tambin
apd_croak() - Lanza un error, una pila de lamado y entonces sale
apd_continue
(PECL apd >= 0.2)
apd_continue Reinicia el interpretador
Report a bug
Descripcin
bool apd_continue ( int $debug_level )
Usualmente enviado va el socket para reiniciar el interpretador.


Report a bug
Parmetros
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 todava no esta implementada.
Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS
SUMMARY (como strace -c)) use el valor 99
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 apd_continue() ejemplo
<?php
apd_continue(0);
?>
apd_croak
(PECL apd 0.2-0.4)
apd_croak Lanza un error, una pila de lamado y entonces sale
Report a bug
Descripcin
void apd_croak ( string $warning [, string $delimiter = "<BR />" ] )
Se comporta como el Carp::croak de perl. Lanza un error, una pila de lamado y
entonces sale.
Report a bug


Parmetros
warning
La advertencia a lanzar.
delimiter
El delimitador. Por defecto es <BR />.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 apd_croak() ejemplo
<?php
apd_croak("Alguna advertencia","<P>");
?>
Report a bug
Ver tambin
apd_clunk() - Lanza una advertencia y una pila de llamado
apd_dump_function_table
(Unknown)
apd_dump_function_table Muestra la tabla de funciones actual
Report a bug
Descripcin
void apd_dump_function_table ( void )
Muestra la tabla de funciones actual.


Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
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_resources Retorna todos los recursos persistentes como
una matriz
Report a bug
Descripcin
array apd_dump_persistent_resources ( void )
Retorna todos los recursos persistentes como una matriz.
Report a bug
Valores devueltos
Una matriz conteniendo la pila de llamada actual.
Report a bug
Ejemplos
Ejemplo #1 apd_dump_persistent_resources() ejemplo
<?php
print_r(apd_dump_persistent_resources());
?>
Report a bug
Ver tambin
apd_dump_regular_resources() - Retorna todos los recursos regulares
actuales como una matriz


apd_dump_regular_resources
(PECL apd 0.2-0.4)
apd_dump_regular_resources Retorna todos los recursos regulares actuales
como una matriz
Report a bug
Descripcin
array apd_dump_regular_resources ( void )
Retorna todos los recursos regulares actuales como una matriz.
Report a bug
Valores devueltos
Una matriz conteniendo los recursos regulares actuales.
Report a bug
Ejemplos
Ejemplo #1 apd_dump_regular_resources() ejemplo
<?php
print_r(apd_dump_regular_resources());
?>
apd_echo
(PECL apd >= 0.2)
apd_echo Echo hacia el socket de depurado
Report a bug
Descripcin
bool apd_echo ( string $output )
Usualmente es enviado por medio del socket para requerir informacin acerca del
script que esta corriendo.
Report a bug
Parmetros
output


La variable depurada.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 apd_echo() ejemplo
<?php
apd_echo($i);
?>
apd_get_active_symbols
(PECL apd 0.2)
apd_get_active_symbols Obtener una matriz con los nombres de las variables
actuales en el mbito local
Report a bug
Descripcin
array apd_get_active_symbols ( void )
Devuelve los nombres de todas las variables definidas en el mbito activo, (no sus
valores).
Report a bug
Valores devueltos
Una matriz multidimensional con todas las variables.
Report a bug
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_trace Inicia la sesin de depurado
Report a bug
Descripcin
string apd_set_pprof_trace ([ string $dump_directory =
ini_get("apd.dumpdir") [, string $fragment = "pprof" ]] )
Inicia el depurado al archivo pprof_{process_id} en el directorio de volcado.
Report a bug
Parmetros
dump_directory
El directorio en el cual el archivo del volcado del anlisis es escrito. Si no se
especifica, la configuracin apd.dumpdir del archivophp.ini ser usada.
fragment
Report a bug
Valores devueltos
Retorna la ruta del archivo de destino.
Report a bug
Ejemplos
Ejemplo #1 apd_set_pprof_trace() ejemplo
<?php
apd_set_pprof_trace();
?>
Report a bug
Ver tambin
apd_set_session_trace() - Inicia la sesin de depurado
apd_set_session_trace_socket


(PECL apd >= 0.2)
apd_set_session_trace_socket Inicia la sesin remota de depurado
Report a bug
Descripcin
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 enva los datos de
depurado al socket.
Report a bug
Parmetros
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 estndar.
port
Se puede usar cualquier puerto, pero nmeros ms altos son mejores dado
que la mayora de los nmeros 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 todava no esta implementada.
Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 apd_set_session_trace() ejemplo
<?php
apd_set_session_trace(99);
?>
SUMMARY (como strace -c)) use el valor 99
apd_set_session_trace
(PECL apd 0.2-0.4)
apd_set_session_trace Inicia la sesin de depurado
Report a bug
Descripcin
void apd_set_session_trace ( int $debug_level [, string $dump_directory =
ini_get("apd.dumpdir") ] )
Inicia el depurado al archivo apd_dump_{process_id} en el directorio de volcado.
Report a bug
Parmetros
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 todava 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 anlisis es escrito. Si no se
especifica, la configuracin apd.dumpdir del archivophp.ini ser usada.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
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_session Cambia o configura el nivel actual de depurado
Report a bug
Descripcin
void apd_set_session ( int $debug_level )
Esto puede ser usado para incrementar o disminuir el depurado en un rea
diferente de la aplicacin.
Report a bug
Parmetros
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 todava no esta implementada.
Para activar todos los traces funcionales (TIMING, FUNCTIONS, ARGS
SUMMARY (como strace -c)) use el valor 99
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 apd_set_session() ejemplo
<?php
apd_set_session(9);
?>
override_function
(PECL apd >= 0.2)
override_function Pasa por alto funciones integradas
Report a bug
Descripcin
bool override_function ( string $function_name , string $function_args , string $fu
nction_code )
Pasa por alto funciones integradas al reemplazarlas en la tabla de smbolos.
Report a bug
Parmetros
function_name
La funcin para pasar por alto.
function_args


Los argumentos de la funcin, como una cadena separada por comas.
Usualmente se pasa este parmetro as como el parmetro function_code,
como una sola cadena entre comillas simples. La razn para usar cadenas
entre comillas simples es para proteger los nombres de variables del
anlisis sintctico, de otra manera, si se utilizan comillas dobles sera
necesario usar secuencias de escape en los nombres de las variables, como
por ejemplo: \$your_var.
function_code
El nuevo cdigo para la funcin.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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_function Renombra original_name como new_name en la tabla global
de funciones
Report a bug
Descripcin
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.
Report a bug


Parmetros
original_name
El nombre original de la funcin.
new_name
El nuevo nombre para la funcin original_name.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 rename_function() ejemplo
<?php
rename_function('mysql_connect', 'debug_mysql_connect' );
?>
Compilador de cdigo de bytes de PHP (bcompiler)
Introduccin
Instalacin/Configuracin
Requerimientos
Instalacin
Configuracin en tiempo de ejecucin
Tipos de recursos
Constantes predefinidas
Funciones de bcompiler
bcompiler_load_exe Lee y crea clases desde un archivo exe de
bcompiler
bcompiler_load Lee y crea clases desde un archivo comprimido
con bz
bcompiler_parse_class Lee el cdigo de bytes de una clase y
realiza una llamada de retorno a una funcin de usuario
bcompiler_read Lee y crea clases ded un gestor de archivo
bcompiler_write_class Escribe una clase definida como cdigo de
bytes


bcompiler_write_constant Escribe una constante definida como
cdigo de bytes
bcompiler_write_exe_footer Escribe la posicin de inicio y la firma
al final de un archivo de tipo exe
bcompiler_write_file EScribe un archivo fuente de php como
cdigo de bytes
bcompiler_write_footer Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_function Escribe una funcin definida como
cdigo de bytes
bcompiler_write_functions_from_file Escribe todas las funciones
definidas en un archivo como cdigo de bytes
bcompiler_write_header Escribe la cabecera de bcompiler
bcompiler_write_included_filename Escribe un archivo incluido
como cdigo de bytes
Introduccin
Advertencia
Esta extensin es EXPERIMENTAL. Esto significa que el comportamiento de esta
extensin, los nombres de sus funciones y todo lo documentado sobre esta
extensin, puede cambiar en una futura edicin de PHP sin previo aviso. El uso de
esta extensin queda bajo su propia responsabilidad.
Bcompiler ha sido escrito por varias razones:
Para codificar un script completamente en una aplicacin PHP propietaria
Para codificar algunas clases y/o funciones en una aplicacin PHP
propietaria
Para habilitar la produccin de aplicaciones php-gtk que podran 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_foot
er(). Los archivos de cdgio de bytes pueden ser escritos como no comprimidos o
planos. Para usar el cdigo 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_foo
ter(),bcompiler_read(), y bcompiler_load(). Los archivos de cdigo de bytes
pueden ser escritos como no comprimidos o planos. bcompiler_load() Lee un
archivo de cdigo de bytes bzip comprimido, el cul tiende a ser 1/3 del tamao
del archivo original.


Para crear archivos tipo EXE, bcompiler tiene que usarse con un archivo sapi
modificado o una versin de PHP que haya sido compilada como un biblioteca
compartida. En este escenario, bcompiler lee el cdigo de bytes comprimido del
final del archivo exe.
Bcompiler puede mejorar el rendimiento en un 30% cuando se usa solamente con
cdigo de bytes sin comprimir. Pero tenga en cuenta que el cdigo de byte sin
comprimir puede ser hasta 5 veces ms largo que el cdigo fuente original. Usar la
comprensin de cdigo de bytes puede ahorrar espacio, pero la descompresin
requiere mucho ms tiempo que analizar una fuente. bcompiler tampoco realiza
ninguna optimizacin de cdigo de byte, esto podra aadirse en el futuro...
En trminos de proteccin de cdigo es seguro decir que sera imposible recrear el
cdigo fuente exacto desde donde se construy, y sin los comentarios que
acompaan al cdigo fuente. Sera intil usar los cdigos de bytes de bcompiler
para recrear y modificar una clase. Sin embargo, es posible recuperar informacin
de un archivo de cdigo de bytes contruido con bcompiler - por lo que no ponga
sus contraseas privadas o similares en l.
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/bcompiler.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Funciones de bcompiler
Informacin de Contacto
Si tiene algn comentario, alguna correccin 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.
Tabla de contenidos
bcompiler_load_exe Lee y crea clases desde un archivo exe de bcompiler
bcompiler_load Lee y crea clases desde un archivo comprimido con bz
bcompiler_parse_class Lee el cdigo de bytes de una clase y realiza una
llamada de retorno a una funcin de usuario
bcompiler_read Lee y crea clases ded un gestor de archivo
bcompiler_write_class Escribe una clase definida como cdigo de bytes


bcompiler_write_constant Escribe una constante definida como cdigo de
bytes
bcompiler_write_exe_footer Escribe la posicin de inicio y la firma al final
de un archivo de tipo exe
bcompiler_write_file EScribe un archivo fuente de php como cdigo de
bytes
bcompiler_write_footer Escribe el carcter \x00 para indicar el Final de
los datos compilados
bcompiler_write_function Escribe una funcin definida como cdigo de
bytes
bcompiler_write_functions_from_file Escribe todas las funciones definidas
en un archivo como cdigo de bytes
bcompiler_write_header Escribe la cabecera de bcompiler
bcompiler_write_included_filename Escribe un archivo incluido como
cdigo de bytes
bcompiler_load_exe
(PECL bcompiler >= 0.4)
bcompiler_load_exe Lee y crea clases desde un archivo exe de bcompiler
Report a bug
Descripcin
bool bcompiler_load_exe ( string $filename )
Lee la informacin de un archivo exe de bcompiler y crea clases desde el cdigo de
bytes.
Report a bug
Parmetros
filename
La ruta al archivo exe, como cadena.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug


Ejemplos
Ejemplo #1 Ejemplo de bcompiler_load_exe()
<?php

bcompiler_load_exe("/tmp/ejemplo.exe");
print_r(get_defined_classes());

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo aviso
en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_load() - Lee y crea clases desde un archivo comprimido con
bz
bcompiler_load
(PECL bcompiler >= 0.4)
bcompiler_load Lee y crea clases desde un archivo comprimido con bz
Report a bug
Descripcin
bool bcompiler_load ( string $filename )
Lee la informacin de un archivo bz comprimido y crear clases desde el cdigo de
bytes.
Report a bug
Parmetros
filename
La ruta al archivo bz comprimido, como cadena.


Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_load()
<?php

bcompiler_load("/tmp/ejemplo");

print_r(get_defined_classes());

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo aviso
en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Nota:
Por favor, use las sentencias include o require para analizar el cdigo de
bytes, es una manera ms portable y conveniente que usar esta funcin.
Por favor, observe que esta funcin no ejecutar cdigo del cuerpo de un
script que contenido en el archivo de cdigo de bytes.
Report a bug
Ver tambin
bcompiler_load_exe() - Lee y crea clases desde un archivo exe de
bcompiler
bcompiler_parse_class
(PECL bcompiler >= 0.4)
bcompiler_parse_class Lee el cdigo de bytes de una clase y realiza una llamada
de retorno a una funcin de usuario


Report a bug
Descripcin
bool bcompiler_parse_class ( string $class , string $callback )
Lee el cdigo de bytes de una clase y realiza una llamada de retorno a una funcin
de usuario.
Report a bug
Parmetros
class
El nombre de la clase, como cadena.
callback
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_parse_class()
<?php

function leerCdigoBytes($datos) {
print_r($datos);
}

bcompiler_parse_class("DB","leerCdigoBytes");

?>
Report a bug
Notas
Advertencia


Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Nota:
Esta funcin ha sido eliminada de bcompiler y ya no est disponible a
partir de bcompiler 0.5.
bcompiler_read
(PECL bcompiler >= 0.4)
bcompiler_read Lee y crea clases ded un gestor de archivo
Report a bug
Descripcin
bool bcompiler_read ( resource $filehandle )
Lee informacin desde un gestor de archivo abierto y crea clases desde el cdigo
de bytes.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_read()
<?php
$fh = fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());



?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo aviso
en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Nota:
Por favor, use las sentencias include o require para analizar el cdigo de
bytes, es una manera ms portable y conveniente que usar esta funcin.
Por favor, observe que esta funcin no ejecutar cdigo del cuerpo de un
script que contenido en el archivo de cdigo de bytes.
bcompiler_write_class
(PECL bcompiler >= 0.4)
bcompiler_write_class Escribe una clase definida como cdigo de bytes
Report a bug
Descripcin
bool bcompiler_write_class ( resource $filehandle , string $className [, string $
extends ] )
Lee el cdigo de bytes de una clase existente de PHP y lo escribe en el gestor de
archivo abierto.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
className


El nombre de la clase, como cadena.
extends
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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 extie
nde DB_common.
bcompiler_write_class($fh,"DB_common");
bcompiler_write_class($fh,"DB_mysql");
bcompiler_write_footer($fh);
fclose($fh);

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su
comportamiento, su nombre y la documentacin que le acompaa
puede cambiar sin previo aviso en futuras versiones de PHP. Use esta
funcin bajo su propio riesgo.
Nota:
Esta funcin no realiza una comprobacin de dependencia, por lo que
asegrese de escribir las clases en un orden que no resulte en un
error undefined class cuando lo cargue.
Report a bug


Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_footer() - Escribe el carcter \x00 para
indicar el Final de los datos compilados
bcompiler_write_constant
(PECL bcompiler >= 0.5)
bcompiler_write_constant Escribe una constante definida como cdigo de bytes
Report a bug
Descripcin
bool bcompiler_write_constant ( resource $filehandle , string $constantName )
Lee el cdigo de bytes de una constante existente de PHP y lo escribe al gestor de
archivo abierto.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
constantName
El nombre de la constante definida, como cadena.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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);

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_exe_footer
(PECL bcompiler >= 0.4)
bcompiler_write_exe_footer Escribe la posicin de inicio y la firma al final de un
archivo de tipo exe
Report a bug
Descripcin
bool bcompiler_write_exe_footer ( resource $filehandle , int $startpos )
Un archivo EXE (o auto-ejecutable) consiste en 3 partes:
El stub (cdigo ejecutable, p.ej. un programa compilado en C) que carga el
intrprete de PHP, la extensin de bcompiler, el Cdogo de Bytes
almacenado e inicia una llamada a la funcin (p.ej. main) o mtodo de clase
(p.ej. main::main) especificados.
El Cdigo de Bytes (sin comprimir slo por el momento)
El pie EXE de bcompiler


Para obtener un stub apropiado se puede compilar el stub basado en php
embebido phpe.c ubicado en el directorio examples/embed del CVS de bcompiler.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
startpos
La posicin del archivo en la que comienza el Cdigo De Bytes, y se puede
obtener usando ftell().
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_write_exe_footer()
<?php

/* crear el archivo de salida (ejemplo.exe) */
$fh = fopen("ejemplo.exe", "w");

/* 1) escribir un stub (phpe.exe) */
$size = filesize("phpe.exe");
$fr = fopen("phpe.exe", "r");
fwrite($fh, fread($fr, $size), $size);
$startpos = ftell($fh);

/* 2) escribir el cdigo de bytes */
bcompiler_write_header($fh);
bcompiler_write_class($fh, "miclase");
bcompiler_write_function($fh, "main");
bcompiler_write_footer($fh);



/* 3) escribir el pie del EXE */
bcompiler_write_exe_footer($fh, $startpos);

/* cerrar el archivo de salida */
fclose($fh);
?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_class() - Escribe una clase definida como cdigo
de bytes
bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_file
(PECL bcompiler >= 0.6)
bcompiler_write_file EScribe un archivo fuente de php como cdigo de bytes
Report a bug
Descripcin
bool bcompiler_write_file ( resource $filehandle , string $filename )
Esta funcin compila el archivo fuente especificado en cdigo de bytes y lo escribe
al gestor de archivo abierto.
Report a bug
Parmetros
filehandle


Un gestor de archivo como el devuelto por fopen().
filename
La ruta al archivo fuente, como cadena.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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 debera ser equivalente:
include "ejemplo.php";
y
include "ejemplo.phb";
*/
?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler


bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_footer
(PECL bcompiler >= 0.4)
bcompiler_write_footer Escribe el carcter \x00 para indicar el Final de los datos
compilados
Report a bug
Descripcin
bool bcompiler_write_footer ( resource $filehandle )
Escribe el carcter \x00 para indicar el Final de los datos compilados.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_write_footer()
<?php
$fh = fopen("/tmp/ejemplo","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
bcompiler_write_class($fh,"DB_common");
bcompiler_write_footer($fh);
fclose($fh);

?>
Report a bug


Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo aviso
en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_function
(PECL bcompiler >= 0.5)
bcompiler_write_function Escribe una funcin definida como cdigo de bytes
Report a bug
Descripcin
bool bcompiler_write_function ( resource $filehandle , string $functionName )
Lee el cdigo de bytes de una funcin existente de PHP y lo escribe al gestor de
archivo abierto. El orden no es importante, (p.ej. si la funcin b utiliza la funcin a,
y se compila como en el ejemplo de abajo, funcionar perfectamente).
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
functionName
El nombre de la funcin, como cadena.
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de bcompiler_write_function()
<?php
$fh = fopen("/tmp/ejemplo","w");
bcompiler_write_header($fh);
bcompiler_write_function($fh,"mi_funcin_a");
bcompiler_write_function($fh,"mi_funcin_b");
bcompiler_write_footer($fh);
fclose($fh);

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_functions_from_file
(PECL bcompiler >= 0.5)
bcompiler_write_functions_from_file Escribe todas las funciones definidas en un
archivo como cdigo de bytes
Report a bug
Descripcin
bool bcompiler_write_functions_from_file ( resource $filehandle , string $file
Name )


Busca todas las funciones declaradas en el archivo dado y escribe sus cdigos de
bytes correspondientes a un gestor de archivo abierto.
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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);

?>
Report a bug
Notas
Advertencia


Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_header() - Escribe la cabecera de bcompiler
bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_header
(PECL bcompiler >= 0.3)
bcompiler_write_header Escribe la cabecera de bcompiler
Report a bug
Descripcin
bool bcompiler_write_header ( resource $filehandle [, string $write_ver ] )
Escribe la parte de la cabecera de una archivo bcompiler.
Report a bug
Parmetros
filehandle
Un gestor de archivo como el devuelto por fopen().
write_ver
Se puede usar para escribir cdigo de bytes en un formato usado
anteriormente, por lo que lo puede usar con versiones anteriores de
bcompiler.
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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);

?>
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su
nombre y la documentacin que le acompaa puede cambiar sin previo
aviso en futuras versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Ver tambin
bcompiler_write_footer() - Escribe el carcter \x00 para indicar el
Final de los datos compilados
bcompiler_write_included_filename
(PECL bcompiler >= 0.5)
bcompiler_write_included_filename Escribe un archivo incluido como cdigo de
bytes
Report a bug
Descripcin
bool bcompiler_write_included_filename ( resource $filehandle , string $filen
ame )
Advertencia


Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Notas
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Blenc - BLowfish ENCoder for PHP source scripts
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/blenc
It's strongly recommended to install BLENC from sources without 'pecl' command.
In this way you can:
Specify your personal encryption key used to create redistributable keys.
Your sourcecode will be more difficult to decrypt also for users that can read
your key_file on webserver.
Specify a expiration date for the BLENC module. With expiration date you
can decide that BLENC module on target system will work until a date. After
that BLENC will not decrypt any files.
All these configuration options are stored into header file: blenc_protect.h
Please read the content of blenc_protect.h in sources of BLENC to know how set
these hardcoded options.


Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Blenc Opciones de configuracin
Nombre Por defecto Cambiable Historial de cambios
blenc.key_file /usr/local/etc/blenckeys PHP_INI_ALL

He aqu una breve explicacin de las directivas de configuracin.
blenc.key_file string
It's the location where BLENC can find the file containing a list of available
decryption keys. This file must be readable by webserver.
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo cuando la
extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin.
BLENC_EXT_VERSION (string)
blenc_encrypt
(PECL blenc >= 5)
blenc_encrypt Encripta un script PHP con BLENC.
Report a bug
Descripcin
string blenc_encrypt ( string $plaintext , string $encodedfile [, string $encryption
_key ] )
Encripta el contenido del texto sin formato y lo escribe en un fichero codificado
Report a bug
Parmetros
plaintext


El cdigo fuente a encriptar. No necesita contener etiquetas PHP de
abertura/cierre
encodedfile
El nombre del fichero donde BLENC grabar el cdigo codificado.
encryption_key
La clave que utilizar BLENC para encriptar el texto. Si no se especifica
BLENC crear una clave vlida.
Valores devueltos
BLENC devolver la clave redistribuible que debe salvarse dentro de key_file: el
camino de acceso a key_file se especifica en el momento de ejecucin con la
opcin blenc.key_file
Report a bug
Ejemplos
Ejemplo #1 Ejemplo con blenc_encrypt()
<?php

/* leer el cdigo fuente PHP */
$source_code = file_get_contents("my_source_to_protect.php");

/* crear la versin encriptada */
$redistributable_key = blenc_encrypt($source_code, "my_source_encoded.php");

/* leer cul es el fichero key_file */
$key_file = ini_get('blenc.key_file');

/* grabar la clave redistribuible */
file_put_contents($key_file, $redistributable_key, FILE_APPEND);
?>
Manejo y registro de errores
Introduccin
Instalacin/Configuracin


Requerimientos
Instalacin
Configuracin en tiempo de ejecucin
Tipos de recursos
Constantes predefinidas
Ejemplos
Funciones de Manejo de Errores
debug_backtrace Genera un rastreo
debug_print_backtrace Muestra un rastreo
error_get_last Obtener el ltimo error que ocurri
error_log Enviar un mensaje de error a las rutinas de manejo de
errrores definidas
error_reporting Establece cules errores de PHP son notificados
restore_error_handler Recupera la funcin de gestin de errores
previa
restore_exception_handler Restaura la funcin de gestin de
excepciones previamente definida
set_error_handler Establecer una funcin de gestin de errores
definida por el usuario
set_exception_handler Establece una funcin de gestin de
excepciones definida por el usuario
trigger_error Generar un mensaje de error/advertencia/aviso de
nivel de usuario
user_error Alias de trigger_error
Introduccin
Estas funciones se ocupan del manejo y registro de errores. Le permiten definir
sus propias reglas de manejo de errores, as como modificar la manera en que los
errores pueden ser registrados. Esto le permite cambiar y mejorar la notificacin
de errores para acomodarla a sus necesidades.
Con las funciones de registro se pueden enviar mensajes directamente a otras
mquinas, 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 ms importantes de
sus aplicaciones y sitios web.
Las funciones de notificacin de errores le permiten personalizar qu niveles y
tipos de errores se dan, abarcando desde simples avisos hasta funciones
personalizadas devueltas al originarse un error.
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de configuracin 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


Opciones de configuracin de errores y registro
Nombre
Por
defecto
Cambiable Historial de cambios
4.3.2.
error_prepend_string NULL PHP_INI_ALL
error_append_string NULL PHP_INI_ALL
error_log NULL PHP_INI_ALL
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
error_reporting integer
Establece el nivel de notificacin de errores. El parmetro es o bien un valor
de tipo integer que representa un campo de bits, o bien constantes con
nombre. Los niveles de error_reporting y las constantes estn descritos
en Constantes predefinidas, y en php.ini. Para establecerlo en tiempo de
ejecucin, se ha de usar la funcin error_reporting(). Vse tambin la
directiva display_errors.
En PHP 5.3 o posterior, el valor predeterminado es E_ALL & ~E_NOTICE &
~E_STRICT & ~E_DEPRECATED. Este ajuste no muestra los niveles de
error E_NOTICE, E_STRICT y E_DEPRECATED. Quizs quiera mostrarlos durante el
desarrollo. Antes de PHP 5.3.0, el valor predeterminado esE_ALL &
~E_NOTICE & ~E_STRICT. en PHP, el valor predeterminado es E_ALL &
~E_NOTICE.
Nota:
La habilitacin de E_NOTICE durante el desarrollo tiene algunos beneficios.
Para las depuracin: los mensajes NOTICE avisarn de posibles errores en
el cdigo. Por ejemplo, se advierte del uso de valores no asignados. Es
extremadamente til para encontrar errartas y ahorrar tiempo en la
depuracin. Los mensajes NOTICE avisarn de 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 string del array.


Nota:
En PHP 5 est disponible el nuevo nivel de error E_STRICT. Antes de PHP
5.4.0, E_STRICT no estaba incluido dentro de E_ALL, por lo que se tenia de
habilitar explcitamente este tipo de nivel de error en PHP < 5.4.0. La
habilitacin de E_STRICT durante el desarrollo tiene algunos beneficios. Los
mensajes STRICT proporcionan sugerencias que pueden ayudar a
asegurarse de la mejor interoperabilidad y la compatibilidad hacia delante
del cdigo. Estos mensajes pueden incluir cosas como llamar a mtodos no
estticos de forma esttica, definir propiedades en una definicin de clase
compatible mientras se defini en un trait usado, y antes de PHP 5.3,
algunas caractersticas obsoletas emitiran errores E_STRICT como asignar
objetos por referencias durante la instanciacin.
Nota: Constantes de PHP fuera de PHP
El uso de constantes de PHP fuera de PHP, como en httpd.conf, no tiene un
propsito til, por lo que, en tales casos, se requerirn los valores de
tipo integer. Y ya que se aadirn ms niveles de error en el futuro, el valor
mximo (para E_ALL) cambiar igualmente. Por lo que, en lugar de E_ALL se
ha de considerar el uso de un valor grande para cubrir todos los campos de
bits desde la actualidad hasta bien entrado en el futuro, un valor numrico
como 2147483647 (incluye todos los errores, no slo E_ALL).
display_errors string
Determina si los errores deberan ser impresos en pantalla como parte de la
salida o si deberan ocultarse al usuario.
El valor "stderr" enva los errores a stderr en vez de a stdout. Este valor
est disponible a partir de PHP 5.2.4. En versiones anteriores esta directiva
era de tipo boolean.
Nota:
sta es una caracterstica para ayudar al desarrollo y nunca debera usarse
en sistemas de produccin (p.ej. en sistemas conectados a internet).
Nota:
Aunque display_errors puede ser establecido en tiempo de ejecucin
(con ini_set()), no tendr ningn efecto si el script tiene errores fatales.
Esto es debido a que la accin deseada en tiempo de ejecucin 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 la depuracin.
log_errors boolean
Indica si los mensajes de error del script deberan de registrarse en el
registro del servidor o en error_log. Esta opcin es, por lo tanto, especfica
para servidores.
Nota:
Se aconseja encarecidamente usar el registro de errores en lugar de
mostrar los errores en sitios web de produccin.
log_errors_max_len integer
Establece la longitud mxima de log_errors en bytes. En error_log se aade
informacin acerca del origen. El valor predeterminado es 1024, y 0 permite
no aplicar ninguna longitud mxima en absoluto. Esta longitud se aplica a
los errores registrados, a los errores mostrados y tambin
a $php_errormsg.
Cuando se usa un integer, el valor del mismo es medido en bytes. Tambin
se puede usar la notacin reducida, tal como se describe en esta FAQ.
ignore_repeated_errors boolean
No registra mensajes repetidos. Los mensajes repetidos deben ocurrir en la
misma lnea del mismo fichero a menos queignore_repeated_source est
establecido a true.
ignore_repeated_source boolean
Ignora el origen del mensaje cuando se ignoran mensajes repetidos.
Cuando este ajuste est activado (On) no se registrarn errores con
mensajes repetidos de diferentes ficheros o lneas del cdigo fuente.
report_memleaks boolean
Si este parmetro est activado (On), que es lo predeterminado, mostrar
un informe de prdidas de memoria detectado por el gestor de memoria
Zend. Este informe ser enviado a stderr en las plataformas Posix. En
Windows, ser enviado al depurador usando OutputDebugString(), y podr
ser visto con herramientas como DbgView. Este parmetro solo tiene
efecto en una versin de depuracin, 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
pgina describiendo el error o a la funcin que causa el error. Estas
referencias se ven afectadas por docref_root y docref_ext.
xmlrpc_errors boolean
Desactiva la notificacin de errores normal y formatea 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 una pgina que
describe el error o a la funcin que causa el error. En caso de pginas de
manual, se puede descargar el manual en su idioma y establecer esta
directiva ini al URL de su copia local. Si a su copia local del manual se puede
llegar mediante "/manual/" puede usar
simplemente docref_root=/manual/. Adems tiene que establecer docref_ext
para que coincida con las extensiones de fichero de su
copia docref_ext=.html. Es posbile usar referencias externas. Por ejemplo,
se puede
usardocref_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 mayora de las veces ser necesario que el valor de docref_root termine
con una barra "/". Sin embargo, vese el segundo ejemplo de antes, el
cul ni la tiene ni la necesita.
Nota:
Esta es una caracterstica para ayudar al desarrollo, ya que hace ms fcil
buscar una descripcin de una funcin. Sin embargo, nunca debera usarse
en sistemas de produccin (p.ej. en sistemas conectados a internet).
docref_ext string
Vase docref_root.
Nota:


El valor de docref_ext debe comenzar con un punto ".".
error_prepend_string string
String a imprimir antes de un mensaje de error.
error_append_string string
String a imprimir despus de un mensaje de error.
error_log string
Nombre del fichero donde los errores del script deberan ser registrados. El
fichero debera 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 admitido en Windows
95. Vase tambin: syslog(). Si esta directiva no est establecida, los
errores se enviarn al registro de error de la SAPI. Por ejemplo, un registro
de error en Apache o stderr en CLI. Vase tambin error_log().
Constantes predefinidas
Estas constantes estn disponibles siempre ya que forman parte del ncleo de
PHP.
Nota: Se pueden usar estos nombres de constantes en php.ini pero no fuera de
PHP, como en httpd.conf, donde se deberan usar en su lugar valores de mscara
de bits.
Errores y Registro
Valor Constante Descripcin Nota
1 E_ERROR (integer)
Errores Fatales en tiempo de
ejecucin. stos indican
errores que no se pueden
recuperar, tales como un
problema de asignacin de
memoria. La ejecucin del
script se interrumpe.

2 E_WARNING (integer)
Advertencias en tiempo de
ejecucin (errores no fatales).



Errores y Registro
Valor Constante Descripcin Nota
La ejecucin del script no se
interrumpe.
4 E_PARSE (integer)
Errores de anlisis en tiempo
de compilacin. Los errores de
anlisis deberan ser
generados nicamente por el
analizador.

8 E_NOTICE (integer)
Avisos en tiempo de ejecucin.
Indican que el script encontr
algo que podra sealar un
error, pero que tambin
podra 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 ncleo 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
ncleo de PHP.

64 E_COMPILE_ERROR(integer)
Errores fatales en tiempo de
compilacin. Son como
un E_ERROR, excepto que son
generados por Motor de Script
Zend.



Errores y Registro
Valor Constante Descripcin Nota
128 E_COMPILE_WARNING(integer)
Advertencias en tiempo de
compilacin (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 cdigo de PHP
mediante el uso de la funcin
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 cdigo de
PHP mediante el uso de la
funcin 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 cdigo de PHP
mediante el uso de la funcin
de PHP trigger_error().

2048 E_STRICT (integer)
Habiltelo para que PHP
sugiera cambios en su cdigo,
lo que asegurar la mejor
interoperabilidad y
compatibilidad con versiones
posteriores de PHP de su
cdigo.
Desde PHP 5 pero no
incluidoen E_ALL hasta
PHP 5.4.0


Errores y Registro
Valor Constante Descripcin Nota
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
tambin set_error_handler()),
la aplicacin se abortar como
si fuera un E_ERROR.
Desde PHP 5.2.0
8192 E_DEPRECATED(integer)
Avisos en tiempo de ejecucin.
Habiltelo para recibir avisos
sobre cdigo 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
cdigo de PHP mediante el uso
de la funcin de
PHPtrigger_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 (numricos o simblicos) se usan para construir una mscara
de bits que especifica qu errores notificar. Se pueden usar losoperadores a nivel
de bit para combinar estos valores o para enmascarar ciertos tipos de errores.
Observe que slo sern 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 funcin de gestin de errores que registra la informacin en
un archivo (usado un foramto XML), y enva un e-mail a los desarrolladores en
caso de que suceda un error crtico en la lgica.
Ejemplo #1 Usar el manejo de errores en un script
<?php
// haremos nuestro propio manejo de errores
error_reporting(0);

// funcin de gestin de errores definida por el usuario
function gestorErrores($nmerr, $menserr, $nombrearchivo, $nmlnea, $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 deberamos
// 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 cul se guardar un seguimiento de una variabl
e
$errores_usuario = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

$err = "<errorentry>\n";
$err .= "\t<datetime>" . $fh . "</datetime>\n";
$err .= "\t<errornum>" . $nmerr . "</errornum>\n";
$err .= "\t<errortype>" . $tipoerror[$nmerr] . "</errortype>\n";
$err .= "\t<errormsg>" . $menserr . "</errormsg>\n";
$err .= "\t<scriptname>" . $nombrearchivo . "</scriptname>\n";
$err .= "\t<scriptlinenum>" . $nmlnea . "</scriptlinenum>\n";



if (in_array($nmerr, $errores_usuario)) {
$err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</v
artrace>\n";
}
$err .= "</errorentry>\n\n";

// para probar
// echo $err;

// guardar al registro de errores, y enviarme un e-
mail si hay un error crtico de usuario
error_log($err, 3, "/usr/local/php4/error.log");
if ($nmerr == E_USER_ERROR) {
mail("phpdev@example.com", "Error Crtico de Usuario", $err);
}
}


function distancia($vect1, $vect2)
{
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error("Parmetros incorrectos, se esperaba una matriz", E_USER_E
RROR);
return NULL;
}

if (count($vect1) != count($vect2)) {
trigger_error("Los vectores necesitan ser del mismo tamao", E_USER_ERRO
R);
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 nmero, se usa
r cero",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("La coordenada $i del vector 2 no es un nmero, se usa
r 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(2, 3, "foo");
$b = array(5.5, 4.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 tambin
Vase tambin syslog().
Tabla de contenidos
debug_backtrace Genera un rastreo
debug_print_backtrace Muestra un rastreo
error_get_last Obtener el ltimo error que ocurri
error_log Enviar un mensaje de error a las rutinas de manejo de errrores
definidas
error_reporting Establece cules errores de PHP son notificados
restore_error_handler Recupera la funcin de gestin de errores previa
restore_exception_handler Restaura la funcin de gestin de excepciones
previamente definida
set_error_handler Establecer una funcin de gestin de errores definida
por el usuario
set_exception_handler Establece una funcin de gestin de excepciones
definida por el usuario


trigger_error Generar un mensaje de error/advertencia/aviso de nivel de
usuario
user_error Alias de trigger_error
debug_backtrace
(PHP 4 >= 4.3.0, PHP 5)
debug_backtrace Genera un rastreo
Report a bug
Descripcin
array debug_backtrace ([ int $options =
DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )
debug_backtrace() genera un rastreo de PHP.
Report a bug
Parmetros
options
Desde 5.3.6, este parmetro es una mascara de bits para las siguientes
opciones:
debug_backtrace() options
DEBUG_BACKTRACE_PROVIDE_OBJEC
T
Completar el ndice "object" o no.
DEBUG_BACKTRACE_IGNORE_ARGS
Omitir el ndice "args" y por lo tanto todos los
argumentos de las funciones/mtodos 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 opcinDEBUG_BACKTRACE_PROVIDE_OBJECT.
limit


Desde 5.4.0, este parmetro puede ser usado para limitar el nmero 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 Descripcin
functio
n
string El nombre de la funcin actual. Vase tambin __FUNCTION__.
line
intege
r
El nmero de lnea actual. Vase tambin __LINE__.
file string El nombre de archivo actual. Vase tambin __FILE__.
class string El nombre de la clase actual. Vase tambin __CLASS__
object object El objeto actual.
type string
El tipo de llamada actual. Si es una llamada a un mtodo devuelve "->". Si es
una llamada a un mtodo esttico devuelve "::". Si es una llamada a una
funcin no se devuelve nada.
args array
Dentro de una funcin se lista los argumentos de la funcin. Dentro de un
archvo incluido se lista el nombre (o nombres) del archivo incluido.
Report a bug
Historial de cambios
Versin Descripcin
5.4.0 Aadido el parmetro opcional limit.


Versin Descripcin
5.3.6
Se cambi el parmetro provide_object a options y se aadi la opcin
adicional DEBUG_BACKTRACE_IGNORE_ARGS.
5.2.5 Se aadi el parmetro opcional provide_object.
5.1.1 Se aadi el object actual como posible elemento devuelto.
Report a bug
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"
}
}
Report a bug
Ver tambin
trigger_error() - Generar un mensaje de error/advertencia/aviso de nivel de
usuario
debug_print_backtrace() - Muestra un rastreo
debug_print_backtrace
(PHP 5)
debug_print_backtrace Muestra un rastreo
Report a bug
Descripcin
void debug_print_backtrace ([ int $options = 0 [, int $limit = 0 ]] )
debug_print_backtrace() muestra un rastreo PHP. muestra las llamadas a
funcin, archivos includos y el material evaluado medianteeval().
Report a bug
Parmetros
options
Desde 5.3.6, este parmetro es una mscara de bits para las siguientes
opciones:
Opciones de debug_print_backtrace()
DEBUG_BACKTRACE_IGNORE_ARG
S
Omitir el ndice "args" y por lo tanto todos los
argumentos de las funciones/mtodos para ahorrar
memoria o no.
limit


Desde 5.4.0, este parmetro puede ser usado para limitar el nmero de
stack frames que se muestran. Por defecto (limit=0) imprime todos los
stack frames.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Historial de cambios
Versin Descripcin
5.4.0 Aadido el parmetro opcional limit.
5.3.6
Aadido el parmetro
opcional options.
Report a bug
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 sera 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]

error_get_last
(PHP 5 >= 5.2.0)
error_get_last Obtener el ltimo error que ocurri
Report a bug
Descripcin
array error_get_last ( void )
Obtiene informacin sobre el ltimo error que ocurri.
Report a bug
Valores devueltos
Devuelve una matriz asociativa describiendo el ltimo error con las claves "type"
(tipo), "message" (mensaje), "file" (archivo) y "line" (lnea). Si el error ha sido
causado por una funcin interna de PHP, el "message" (mensaje) comienza con su
nombre. Devuelve NULL si no ha habido an un error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de error_get_last()
<?php
echo $a;
print_r(error_get_last());
?>
El resultado del ejemplo sera algo similar a:
Array
(
[type] => 8
[message] => Undefined variable: a
[file] => C:\WWW\index.php
[line] => 2
)


Report a bug
Ver tambin
Constantes de error
La variable $php_errormsg
La directiva display_errors
La directiva html_errors
La directiva xmlrpc_errors
error_log
(PHP 4, PHP 5)
error_log Enviar un mensaje de error a las rutinas de manejo de errrores
definidas
Report a bug
Descripcin
bool error_log ( string $message [, int $message_type =
0 [, string $destination [, string $extra_headers ]]] )
Enva un mensaje de error al registro de errores del servidor web o a un archivo.
Report a bug
Parmetros
message
El mensaje de error que debera ser registrado.
message_type
Indica dnde debera 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 configuracin


est establecida en error_log. Esta es la opcin predeterminada.
1
message es enviado por email a la direccin del parmetro destination. Este es el
nico tipo de mensaje donde se usa el cuarto parmetro extra_headers.
2 Ya no es una opcin.
3
message es aadido al inicio del archivo destination. No se aade automticamente
una nueva lnea al final de la cadenamessage.
4 message es enviado directamente al gestor de registro de SAPI.
destination
El destino. Su significado depende del parmetro message_type tal como se
describi arriba.
extra_headers
Las cabeceras extra. Se usa cuando el parmetro message_type est
establecido a 1. Este tipo de mensaje usa la misma funcin interna
que mail().
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Historial de cambios
Versin Descripcin
5.2.7
El valor posible de 4 se aadi
a message_type.
Report a bug


Ejemplos
Ejemplo #1 Ejemplos de error_log()
<?php
// Enviar una notificacin 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_reporting Establece cules errores de PHP son notificados
Report a bug
Descripcin
int error_reporting ([ int $level ] )
La funcin error_reporting() establece la directiva error_reporting en tiempo de
ejecucin. PHP tiene varios niveles de errores para notificar, al utilizar sta funcin
se define el nivel de duracin (tiempo de ejecucin) de sus scripts. Si el parmetro
opcional level no se define, la funcin error_reporting() slo devolver el nivel
actual de notificacin de error.
Report a bug
Parmetros
level
El nuevo nivel de error_reporting. Este nivel toma una mscara de bit o
constantes nominadas. Al utilizar constantes nominadas se recomienda
encarecidamente asegurar la compatibilidad para versiones futuras. Segn
se aaden niveles de error, el rango de los enteros incrementa, por lo que


los niveles antiguos de errores basados en enteros no siempre se
comportarn como se esperaba.
Las constantes de niveles de error disponibles, y los significados actuales de
esos niveles de error estn descritos en constantes predefinidas.
Report a bug
Valores devueltos
Devuelve el nivel antiguo de error_reporting o el nivel actual si el
parmetro level no se proporciona.
Report a bug
Historial de cambios
Versin Descripcin
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).
Report a bug
Ejemplos
Ejemplo #1 Ejemplos de error_reporting()
<?php

// Desactivar toda notificacin de error
error_reporting(0);

// Notificar solamente errores de ejecucin
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Notificar E_NOTICE tambin 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);

?>
Report a bug
Notas
Advertencia
La mayora de errores E_STRICT son evaluados en tiempo de compilacin 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 mostrarn todos los errores posibles, incluso cuando se
aadan nuevos niveles y constantes en futuras versiones de PHP. La
constante E_ALL tambin se comporta de esta forma en PHP 5.4.
Report a bug
Ver tambin
La directiva display_errors
La directiva html_errors
La directiva xmlrpc_errors
ini_set() - Establece el valor de una directiva de configuracin
restore_error_handler
(PHP 4 >= 4.0.1, PHP 5)
restore_error_handler Recupera la funcin de gestin de errores previa
Report a bug
Descripcin
bool restore_error_handler ( void )


Usada despus de modificar la funcin de gestin de errores
usando set_error_handler(), para revertir al gestor de errores previo (el cual
puede ser el incorporado o una funcin definida por el usuario).
Report a bug
Valores devueltos
Esta funcin siempre devuelve TRUE.
Report a bug
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 invlido.\n";
}

$seriado = 'foo';
set_error_handler('gestor_unserialize');
$original = unserialize($seriado);
restore_error_handler();
?>
El resultado del ejemplo sera:
Valor seriado invlido.
Report a bug
Notas
Nota:
Llamar restore_error_handler() desde la funcin error_handler es ignorado.
Report a bug
Ver tambin
error_reporting() - Establece cules errores de PHP son notificados
set_error_handler() - Establecer una funcin de gestin de errores definida
por el usuario
restore_exception_handler() - Restaura la funcin de gestin de
excepciones previamente definida
trigger_error() - Generar un mensaje de error/advertencia/aviso de nivel de
usuario


restore_exception_handler
(PHP 5)
restore_exception_handler Restaura la funcin de gestin de excepciones
previamente definida
Report a bug
Descripcin
bool restore_exception_handler ( void )
Usada despus de cambiar la funcin de gestin de excepciones al
utilizar set_exception_handler(), para volver al gestor de excepciones anterior (el
cul puede ser la funcin interna o una definida por el usuario).
Report a bug
Valores devueltos
Esta funcin siempre devuelve TRUE.
Report a bug
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 sera:
[gestor_excepciones_1] Esto dispara el primer gestor de excepciones...
Report a bug


Ver tambin
set_exception_handler() - Establece una funcin de gestin de excepciones
definida por el usuario
set_error_handler() - Establecer una funcin de gestin de errores definida
por el usuario
restore_error_handler() - Recupera la funcin de gestin de errores previa
error_reporting() - Establece cules errores de PHP son notificados
set_error_handler
(PHP 4 >= 4.0.1, PHP 5)
set_error_handler Establecer una funcin de gestin de errores definida por el
usuario
Report a bug
Descripcin
mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL |
E_STRICT ] )
Establece una funcin de usuario (error_handler) para manejar los errores de un
script.
Esta funcin se puede usar para definir su propia forma de manejar los errores en
tiempo de ejecucin, por ejemplo en aplicaciones en las que se neceista hacer una
limpieza de datos/archivos cuando ocurre un error crtico, o cuando se necesita
provocar un error bajo ciertas condiciones (usando trigger_error()).
Es importante recordar que el gestor de errores estndar de PHP es
completamente evitado por los tipos de errores especificados porerror_types a
menos que la funcin de llamada de retorno devuelva FALSE. La configuracin
de error_reporting() no tendr efecto y su gestor de errores ser llamado de todas
formas - aunque an 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 aadi al principio el operador de control de errores @ .
Tambin observe que es su responsabilidad realizar un die() si fuera necesario. Si
la funcin de gestin de errores devuelve, la ejecucin del script continuar con la
siguiente sentencia despus de la que caus el error.
Los siguientes tipos de errores no pueden ser manejados con una funcin definida
por el
usuario: E_ERROR, E_PARSE, E_CORE_ERROR,E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_
WARNING, y la mayora de E_STRICT ocasionados en el archivo desde donde se llam
aset_error_handler().


Si sucede algn 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.
Report a bug
Parmetros
error_handler
Una llamada de retorno con la siguiente firma. Se podra pasar NULL en su
lugar para reiniciar este gestor a su estado predeterminado.
bool handler ( int $errno , string $errstr [, string $errfile [, int $errline [, a
rray $errcontext ]]] )
errno
El primer parmetro, errno, contiene el nivel del error ocasionado, como un
valor de tipo integer.
errstr
El segundo parmetro, errstr, contiene el mensaje de error, como cadena.
errfile
El tercer parmetro es opcional, errfile, que contiene el nombre de archivo
que ocasion el error, como cadena.
errline
El cuarto parmetro es opcional, errline, que contiene el nmero de lnea
donde ocurri el error, como valor de tipo integer.
errcontext


El quinto parmetro es opcional, errcontext, el cul es una matriz que
apunta a la tabla de smbolos 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 funcin devuelve FALSE se contina con el gestor
de errores normal.
error_types
Se puede usar para enmascarar la provocacin de la
funcin error_handler al igual que la configuracin error_reporting ini
controla los errores que se muestran. Sin esta mscara
establecida error_handler ser llamada para cada error sin tener en cuenta
la configuracin 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 devuelveNULL. NULL tambin es
devuelto en caso de un error como una llamada de retorno no vlida. Si el gestor
de errores anterior era un mtodo de una clase, esta funcin devolver una matriz
indexada con los nombres de las clases y mtodos.
Report a bug
Historial de cambios
Versin Descripcin
5.5.0 error_handler ahora acepta NULL.
5.2.0 El gestor de errores debe devolver FALSE para rellenar $php_errormsg.
5.0.0 Se introdujo el parmetro error_types.
4.3.0
Tambin se puede proporcionar una matriz que contiene una referencia a un objeto y
un nombre de mtodo, en vez el nombre de una funcin, como error_handler.


Versin Descripcin
4.0.2
Se introdujeron tres parmetros opcionales para la funcin de usuario error_handler.
Son el nombre de archivo, el nmero de lnea, y el contexto.
Report a bug
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
provocacin de errores y tratndolos con una funcin definida por el usuario:
<?php
// funcin de gestin de errores
function miGestorDeErrores($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// Este cdigo 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 lnea $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;
}



// funcin 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 v
alores", E_USER_WARNING);
return null;
}

$temp = array();
foreach($vect as $pos => $valor) {
if (!is_numeric($valor)) {
trigger_error("El valor en la posicin $pos no es un nmero, 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 numrico
echo "vector a\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.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($a, M_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 crtico, log de cero o de un nmero 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 sera 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 posicin 2 no es un nmero, 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 lnea 35 en el archivo trigger_error.php, PHP 5.2.1
(FreeBSD)<br />
Abortando...<br />
Ver tambin
ErrorException
error_reporting() - Establece cules errores de PHP son notificados
restore_error_handler() - Recupera la funcin de gestin de errores previa
trigger_error() - Generar un mensaje de error/advertencia/aviso de nivel de
usuario
constantes de niveles de error
informacin acerca de tipos de llamada de retorno


set_exception_handler
(PHP 5)
set_exception_handler Establece una funcin de gestin de excepciones definida
por el usuario
Report a bug
Descripcin
callable set_exception_handler ( callable $exception_handler )
Establece el gestor de excepciones predeterminado si una excepcin no es
capturada dentro de un bloque try/catch. La ejecucin se detendr despus de la
llamada a exception_handler.
Report a bug
Parmetros
exception_handler
Nombre de la funcin a llamar cuando ocurra una excepcin no capturada.
Esta funcin debe ser definida antes de llamar aset_exception_handler().
Esta funcin de gestin necesita aceptar un parmetro, que ser el objeto
de excepcin que fue lanzado. Esta es la firma del gestor:
void handler ( Exception $$ex )
NULL podra pasarse en su lugar para reiniciar este gestor a su estado
predeterminado.
Report a bug
Valores devueltos
Devuelve el nombre del gestor de excepciones definido anteriormente,
o NULL en caso de error. Si no se defini un gestor anterior tambin
devolver NULL.
Report a bug
Historial de cambios
Versin Descripcin


Versin Descripcin
5.5.0
Anteriormente, si se pasaba NULL, esta funcin devolva TRUE. Devuelve el gestor
anterior desde PHP 5.5.0.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de set_exception_handler()
<?php
function gestor_excepciones($excepcin) {
echo "Excepcin no capturada: " , $excepcin->getMessage(), "\n";
}

set_exception_handler('gestor_excepciones');

throw new Exception('Excepcin No Capturada');
echo "No Ejecutado\n";
?>
Report a bug
Ver tambin
restore_exception_handler() - Restaura la funcin de gestin de
excepciones previamente definida
restore_error_handler() - Recupera la funcin de gestin de errores
previa
error_reporting() - Establece cules errores de PHP son notificados
informacin acerca de tipos de llamada de retorno
Excepciones de PHP 5
trigger_error
(PHP 4 >= 4.0.1, PHP 5)
trigger_error Generar un mensaje de error/advertencia/aviso de nivel de
usuario
Report a bug
Descripcin
bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )
Se usa para provocar una condicin de error de usuario, se puede utilizar junto
con el gestor de errores interno o con una funcin definida por el usuario que ha
sido establecida como el nuevo gestor de errores ( set_error_handler()).


Esta funcin es til cuando se necesita generar una respuesta en particular a una
excepcin en tiempo de ejecucin.
Report a bug
Parmetros
error_msg
El mensaje de error designado para este error. Est limitado a 1024 bytes
de longitud. Cualquier carcter ms all de los 1024 ser truncado.
error_type
El tipo de error designado para este error. Slo funciona con la familia de
constantes E_USER, y por defecto es E_USER_NOTICE.
Report a bug
Valores devueltos
Esta funcin devuelve FALSE si se especifica un error_type errneo, si
no TRUE.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de trigger_error()
Vase set_error_handler() para un ejemplo ms extenso.
<?php
if ($divisor == 0) {
trigger_error("No se puede dividir por cero", E_USER_ERROR);
}
?>
Report a bug
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.
Report a bug


Ver tambin
error_reporting() - Establece cules errores de PHP son notificados
set_error_handler() - Establecer una funcin de gestin de errores
definida por el usuario
restore_error_handler() - Recupera la funcin de gestin de
errores previa
Las constantes de niveles de error
user_error
(PHP 4, PHP 5)
user_error Alias de trigger_error()
Report a bug
Descripcin
Esta funcin es un alias de: trigger_error().
Soporte similar a los archivos htaccess para todos los
SAPIs
Introduccin
La extensin htscanner proporciona el uso de archivos similares a htaccess en la
configuracin de PHP por directorio, como si tratase de los archivos htaccess de
Apache. Esto es til con fastcgi (ISS5/6/7, lighttpd, etc.).
Requerimientos
PHP versin 5.2.0 o superior.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/htscanner
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.


Opciones de configuracin 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 ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
htscanner.config_file string
Nombre para el archivo de configuracin.
htscanner.default_docroot string
Documentacin de root por omisin.
htscanner.default_ttl int
Tiempo de cache para la configuracin de los datos, en segundos.
htscanner.stop_on_error int
Parar los errores (parse error, no puede ser establecido en ini).
Visor de la jerarqua de inclusin
Introduccin
Hace un seguimiento y copia la jerarqua de las inclusiones de archivos y la
herencia de clases en tiempo de ejecucin.
Los archivos pueden haber sido incluidos usando include, include_once, require,
o require_once.


Las dependencias de la herencia de clases tambin son comunicadas.
Requerimientos
PHP versin 5.1.0 o posterior.
El archivo gengraph.php incluido utiliza la biblioteca graphviz, aunque no es
necesaria.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/inclued
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de configuracin de inclued
Nombre Por defecto Cambiable Historial de cambios
inclued.enabled Off PHP_INI_SYSTEM
inclued.dumpdir NULL PHP_INI_SYSTEM
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
inclued.enabled bool
Si habilitar o no inclued.
inclued.dumpdir string
Ubicacin (ruta) del directorio que almacena archivos inclued. Si est
establecido, cada peticin de PHP crear un archivo. Estos archivos son


versiones serializadas de lo que inclued_get_data() producira, por lo que
pueden ser deserializados con unserialize().
Precaucin
Ya que cada peticin crea un archivo, este directorio se puede llenar
rpidamente!
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
Esta extensin no tiene ninguna constante definida.
Ejemplo que implementa inclued en una aplicacin
Este ejemplo muestra el proceso de implementar inclued en una apliacin
existente, viendo los resultados.
Ejemplo #1 Obtener la informacin dentro de la aplicacin misma de
PHP (funcin)
<?php
// Archivo donde almacenar la informacin de inclued
$fp = fopen('/tmp/wp.ser', 'w');
if ($fp) {
$clue = inclued_get_data();
if ($clue) {
fwrite($fp, serialize($clue));
}
fclose($fp);
}
?>
Ahora que existe alguna informacin es hora de hacer que tenga sentido en la
forma de un grfico. 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 informacin de
inclued.
# Primero, creamos el archivo dot
$ php gengraph.php -i /tmp/wp.ser -o wp.dot

# Lo siguiente, creamos la imagen
$ dot -Tpng -o inclued.png wp.dot


Ejemplo #3 Listar informacin mediante volcados (configuracin)
Cuando se usa la directiva inclued.dumpdir, los archivos (incluidos rastros) son
volcados con cada peticin. 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 ' --
nmero de inclusiones: ', count($inc['includes']), PHP_EOL;
}
echo PHP_EOL;
}
} else {
echo 'Hoy estoy lleno de rastros.', PHP_EOL;
}
?>
El resultado del ejemplo sera algo similar a:
Ruta: /tmp/inclued
Archivo inclued: inclued.56521.1
-- nombre de archivo: /Users/philip/test.php
-- nmero de inclusiones: 1

Archivo inclued: inclued.56563.1
-- nombre de archivo: /tmp/none.php
-- nmero de inclusiones: 0

Archivo inclued: inclued.56636.1
-- nombre de archivo: /tmp/three.php
-- nmero de inclusiones: 3


inclued_get_data
(PECL inclued >= 0.1.0)
inclued_get_data Obtener la informacin de inclued
Report a bug
Descripcin
array inclued_get_data ( void )
Obtiene la informacin de inclued.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
La informacin de inclued.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de inclued_get_data()
Vase la seccin ejemplos de inclued para obtener maneras de crear grficos con
esta informacin.
<?php
include 'x.php';

$clue = inclued_get_data();

print_r($clue);
?>
El resultado del ejemplo sera 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
)
)
)
Report a bug
Ver tambin
ejemplos de inclued
debug_backtrace() - Genera un rastreo
include - include
Memtrack
Introduccin
El propsito de esta extensin es detectar los scripts y las funciones ms 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 funcin ejecutora predeterminada
por una funcin especial que compara el uso de memoria antes y despus de
ejecutar el ejecutor original - de esta manera se puede indicar cunto ha cambiado
el uso de memoria durante la ejecucin de la parte actual del cdigo.
El Motor Zend ejecuta su ejecutor para cada matriz de cdigo de operaciones
(op_array), que normalmente significa una funcin, un script plano, y tal, por lo
que memtrack no tiene ningn efecto notable en el rendimiento.
memtrack no proporciona ninguna funcin, slo existen directivas INI que
permiten configurar la forma de su funcionamiento.
Advertencia
Esta extensin es EXPERIMENTAL. Esto significa que el comportamiento de esta
extensin, los nombres de sus funciones y todo lo documentado sobre esta
extensin, puede cambiar en una futura edicin de PHP sin previo aviso. El uso de
esta extensin queda bajo su propia responsabilidad.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/memtrack


Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de Configuracin 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 ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
memtrack.enabled boolean
Habilita o deshabilita la extensin. El valor predeterminado es 0, es decir,
deshabilitado.
memtrack.soft_limit int
Lmite suave de memoria.
La extensin verifica el consumo de memoria antes y despus de la
ejecucin de un op_array y produce una advertencia si la diferencia entre
los dos valores es igual o mayor que el lmite suave, pero slo si la funcin
no es ignorada.
Al establecer esta opcin a 0 tambin deshabilita las advertencias suaves y
duras. El valor predeterminado es 0, es decir, no se producen advertencias.
memtrack.hard_limit int


Lmite duro de memoria.
La extensin verifica el consumo de memoria antes y despus de la
ejecucin de un op_array y produce una advertencia si la diferencia entre
los dos valores es igual o mayor que el lmite duro, incluso si la funcin
es ignorada. EStablecer esta opcin a 0 deshabilita las advertencias de
lmite duro completamente. El valor predeterminado es 0, es decir, no se
porducen advertencias de lmite duro.
memtrack.vm_limit int
Lmite de memoria virtual (establecido en un proceso).
Este lmite slo se comprueba al cierre y se produce una advertencia si el
valor es mayor o igual que el lmite.
Esta funcin slo est soportada actualmente en sistemas operativos donde
est disponible la funcin 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 maysculas-
minsculas, para mtodos de clase use la sintasix clase::mtodo.
Uso bsico
Ejemplo bsico del uso de la extension memtrack:
Ejemplo #1 Crear una matriz grande en una funcin
<?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 sera 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
OPcache
Introduccin
OPcache improves PHP performance by storing precompiled script bytecode in
shared memory, thereby removing the need for PHP to load and parse scripts on
each request.
This extension is bundled with PHP 5.5.0 and later, and is available in PECL for
PHP versions 5.2, 5.3 and 5.4.
Instalacin
The process of installing OPcache varies depending on which version of PHP you're
running. Please refer to the appropriate section below.
Nota:
If you want to use OPcache with Xdebug, you must load OPcache before Xdebug.
PHP 5.5.0 and later
By default, OPcache will be compiled as a shared extension. If you have disabled
the building of default extensions with --disable-all , you must compile PHP with
the --enable-opcache option for OPcache to be available.
Once compiled, you can use the zend_extension configuration directive to load the
OPcache extension into PHP. This can be done
withzend_extension=/full/path/to/opcache.so on non-Windows platforms,
and zend_extension=C:\path\to\php_opcache.dll on Windows.
PHP 5.2, 5.3 and 5.4
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/ZendOpcache.


Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Recommended php.ini settings
The following settings are generally recommended as providing good performance:
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
You may also want to consider disabling opcache.save_comments and
enabling opcache.enable_file_override, however note that you will have to test
your code before using these in production as they are known to break some
frameworks and applications, particularly in cases where documentation comment
annotations are used.
A full list of configuration directives supported by OPcache is also available.
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
OPcache configuration options
Nombre
Por
defecto
Cambiable
Historial de
cambios
opcache.enable "1" PHP_INI_ALL
opcache.enable_cli "0" PHP_INI_SYSTEM
opcache.memory_consumption "64" PHP_INI_SYSTEM
opcache.interned_strings_buffer "4" PHP_INI_SYSTEM
Available since
PHP 5.3.0.


OPcache configuration options
Nombre
Por
defecto
Cambiable
Historial de
cambios
opcache.max_accelerated_files "2000" PHP_INI_SYSTEM
opcache.max_wasted_percentage "5" PHP_INI_SYSTEM
opcache.use_cwd "1" PHP_INI_SYSTEM
opcache.validate_timestamps "1" PHP_INI_ALL
opcache.revalidate_freq "2" PHP_INI_ALL
opcache.revalidate_path "0" PHP_INI_ALL
opcache.save_comments "1" PHP_INI_SYSTEM
opcache.load_comments "1" PHP_INI_ALL
opcache.fast_shutdown "0" PHP_INI_SYSTEM
opcache.enable_file_override "0" PHP_INI_SYSTEM
opcache.optimization_level "0xffffffff" PHP_INI_SYSTEM
opcache.inherited_hack "1" PHP_INI_SYSTEM
opcache.dups_fix "0" PHP_INI_ALL
opcache.blacklist_filename "" PHP_INI_SYSTEM
opcache.max_file_size "0" PHP_INI_SYSTEM
opcache.consistency_checks "0" PHP_INI_ALL


OPcache configuration options
Nombre
Por
defecto
Cambiable
Historial de
cambios
opcache.force_restart_timeout "180" PHP_INI_SYSTEM
opcache.error_log "" PHP_INI_SYSTEM
opcache.log_verbosity_level "1" PHP_INI_SYSTEM
opcache.preferred_memory_model "" PHP_INI_SYSTEM
opcache.protect_memory "0" PHP_INI_SYSTEM
opcache.mmap_base NULL PHP_INI_SYSTEM
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
opcache.enable boolean
Enables the opcode cache. When disabled, code is not optimised and
cached.
opcache.enable_cli boolean
Enables the opcode cache for the CLI version of PHP. This is mostly useful
for testing and debugging.
opcache.memory_consumption integer
The size of the shared memory storage used by OPcache, in megabytes.
opcache.interned_strings_buffer integer
The amount of memory used to store interned strings, in megabytes. This
configuration directive is ignored in PHP < 5.3.0.
opcache.max_accelerated_files integer


The maximum number of keys (and therefore scripts) in the OPcache hash
table. The actual value used will be the first number in the set of prime
numbers { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407,
130987 } that is bigger than the configured value. Only numbers between
200 and 100000 are allowed.
opcache.max_wasted_percentage integer
The maximum percentage of wasted memory that is allowed before a
restart is scheduled.
opcache.use_cwd boolean
If enabled, OPcache appends the current working directory to the script key,
thereby eliminating possible collisions between files with the same base
name. Disabling this directive improves performance, but may break
existing applications.
opcache.validate_timestamps boolean
If enabled, OPcache will check for updated scripts
every opcache.revalidate_freq seconds. When this directive is disabled, you
must reset OPcache manually via opcache_reset(), opcache_invalidate() or
by restarting the Web server for changes to the filesystem to take effect.
opcache.revalidate_freq integer
How often to check script timestamps for updates, in seconds. 0 will result
in OPcache checking for updates on every request.
This configuration directive is ignored if opcache.validate_timestamps if
disabled.
opcache.revalidate_path boolean
If disabled, existing cached files using the same include_path will be reused.
Thus, if a file with the same name is elsewhere in the include_path, it won't
be found.
opcache.save_comments boolean
If disabled, all documentation comments will be discarded from the opcode
cache to reduce the size of the optimised code. Disabling this configuration
directive may break applications and frameworks that rely on comment
parsing for annotations, including Doctrine, Zend Framework 2 and PHPUnit.
opcache.load_comments boolean


If disabled, documentation comments won't be loaded from the opcode
cache even if they exist. This can be used withopcache.save_comments to
only load comments for applications that require them.
opcache.fast_shutdown boolean
If enabled, a fast shutdown sequence is used that doesn't free each
allocated block, but relies on the Zend Engine memory manager to
deallocate the entire set of request variables en masse.
opcache.enable_file_override boolean
When enabled, the opcode cache will be checked for whether a file has
already been cached when file_exists(), is_file() and is_readable() are
called. This may increase performance in applications that check the
existence and readability of PHP scripts, but risks returning stale data
ifopcache.validate_timestamps is disabled.
opcache.optimization_level integer
A bitmask that controls which optimisation passes are executed.
opcache.inherited_hack boolean
In PHP < 5.3, OPcache stores the places where DECLARE_CLASS opcodes
used inheritance; when the file is loaded, OPcache then tries to bind the
inherited classes using the current environment. The problem is that while
the DECLARE_CLASS opcode may not be needed for the current script, if
the script requires that the opcode be defined, it may not run.
This configuration directive is ignored in PHP 5.3 and later.
opcache.dups_fix boolean
This hack should only be enabled to work around "Cannot redeclare class"
errors.
opcache.blacklist_filename string
The location of the OPcache blacklist file. A blacklist file is a text file
containing the names of files that should not be accelerated, one per line.
Wildcards are allowed, and prefixes can also be provided. Lines starting with
a semi-colon are ignored as comments.
A simple blacklist file might look as follows:
; Matches a specific file.


/var/www/broken.php
; A prefix that matches all files starting with x.
/var/www/x
; A wildcard match.
/var/www/*-broken.php
opcache.max_file_size integer
The maximum file size that will be cached, in bytes. If this is 0, all files will
be cached.
opcache.consistency_checks integer
If non-zero, OPcache will verify the cache checksum every N requests,
where N is the value of this configuration directive. This should only be
enabled when debugging, as it will impair performance.
opcache.force_restart_timeout integer
The length of time to wait for a scheduled restart to begin if the cache isn't
active, in seconds. If the timeout is hit, then OPcache assumes that
something is wrong and will kill the processes holding locks on the cache to
permit a restart.
If opcache.log_verbosity_level is set to 3 or above, an error will be recorded
in the error log when this occurs.
opcache.error_log string
The error log for OPcache errors. An empty string is treated the same
as stderr, and will result in logs being sent to standard error (which will be
the Web server error log in most cases).
opcache.log_verbosity_level integer
The log verbosity level. By default, only fatal errors (level 0) and errors
(level 1) are logged. Other levels available are warnings (level 2),
information messages (level 3) and debug messages (level 4).
opcache.preferred_memory_model string
The preferred memory model for OPcache to use. If left empty, OPcache will
choose the most appropriate model, which is the correct behaviour in
virtually all cases.
Possible values include mmap, shm, posix and win32.


opcache.protect_memory boolean
Protects shared memory from unexpected writes while executing scripts.
This is useful for internal debugging only.
opcache.mmap_base string
The base used for shared memory segments on Windows. All PHP processes
have to map shared memory into the same address space. Using this
directive allows "Unable to reattach to base address" errors to be fixed.
opcache_compile_file
(PHP 5 >= 5.5.5, PECL ZendOpcache > 7.0.2)
opcache_compile_file Compiles and caches a PHP script without executing it
Report a bug
Descripcin
boolean opcache_compile_file ( string $file )
This function compiles a PHP script and adds it to the opcode cache without
executing it. This can be used to prime the cache after a Web server restart by
pre-caching files that will be included in later requests.
Report a bug
Parmetros
file
The path to the PHP script to be compiled.
Report a bug
Valores devueltos
Returns TRUE if file was compiled successfully o FALSE en caso de error.
Report a bug
Errores/Excepciones
If file cannot be loaded or compiled, an error of level E_WARNING is generated.
You may use @ to suppress this warning.


Report a bug
Ver tambin
opcache_invalidate() - Invalidates a cached script
opcache_invalidate
(PHP 5 >= 5.5.0, PECL ZendOpcache >= 7.0.0)
opcache_invalidate Invalidates a cached script
Report a bug
Descripcin
boolean opcache_invalidate ( string $script [, boolean $force = FALSE ] )
This function invalidates a particular script from the opcode cache. If force is unset
or FALSE, the script will only be invalidated if the modification time of the script is
newer than the cached opcodes.
Report a bug
Parmetros
script
The path to the script being invalidated.
force
If set to TRUE, the script will be invalidated regardless of whether
invalidation is necessary.
Report a bug
Valores devueltos
Returns TRUE if the opcode cache for script was invalidated or if there was
nothing to invalidate, or FALSE if the opcode cache is disabled.
Report a bug


Ver tambin
opcache_compile_file() - Compiles and caches a PHP script without
executing it
opcache_reset() - Resets the contents of the opcode cache
opcache_reset
(PHP 5 >= 5.5.0, PECL ZendOpcache >= 7.0.0)
opcache_reset Resets the contents of the opcode cache
Report a bug
Descripcin
boolean opcache_reset ( void )
This function resets the entire opcode cache. After calling opcache_reset(), all
scripts will be reloaded and reparsed the next time they are hit.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Returns TRUE if the opcode cache was reset, or FALSE if the opcode cache is
disabled.
Report a bug
Ver tambin
opcache_invalidate() - Invalidates a cached script
Control del bfer de salida
Introduccin
Instalacin/Configuracin
Requerimientos
Instalacin
Configuracin en tiempo de ejecucin
Tipos de recursos
Constantes predefinidas


Ejemplos
Uso bsico
Funciones del Control de la salida
flush Vaciar el bfer de salida
ob_clean Limpiar (eliminar) el bfer de salida
ob_end_clean Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_flush Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_flush Vaciar (enviar) el bfer de salida
ob_get_clean Obtener el contenido del bfer actual y eliminar el
bfer de salida actual
ob_get_contents Devolver el contenido del bfer de salida
ob_get_flush Volcar el bfer de salida, devolverlo como una
cadena de caracteres y deshabilitar el almacenamiento en el bfer de
salida
ob_get_length Devolver la longitud del bfer de salida
ob_get_level Devolver el nivel de anidamiento del mecanismo de
almacenamiento en el bfer de salida
ob_get_status Obtener el estado de los bferes de salida
ob_gzhandler Funcin de llamada de retorno de ob_start para
comprimir el bfer de salida con gzip
ob_implicit_flush Habilitar/deshabilitar el volcado implcito
ob_list_handlers Enumerar todos los gestores de salida en uso
ob_start Activa el almacenamiento en bfer de salida
output_add_rewrite_var Aladir valores al mecanismo de
reescritura de URLs
output_reset_rewrite_vars Restablecer los valores del mecanismo
de reescritura de URLs
Introduccin
Las funciones del Control de la salida permiten controlar cundo la salida se eva
desde un script. Esto puede ser til en diferentes situaciones, especialmente si es
necesario enviar cabeceras al navegador despus de que el script haya comenzado
a producir datos. Las funciones del Control de la salida no afectan a las cabeceras
enviadas usando header() o setcookie(), solamente a las funciones como echo y a
los datos entre bloques de cdigo de PHP.
Nota:
Cuando se actualiza desde PHP 4.1.x (y 4.2.x) a 4.3.x, debido a un error en
versones anteriores, ha de asegurarse de que implicit_flush est en OFF en el
fichero php.ini, de lo contrario cualquier cosa producida con ob_start() no se
ocultar desde la salida.


Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de configuracin del Control de la salida
Nombre
Por
defecto
Cambiable Historial de cambios
output_buffering "0" PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR Disponible desde PHP 4.0.4.
implicit_flush "0" PHP_INI_ALL
PHP_INI_PERDIR en PHP <=
4.2.3.
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
output_buffering boolean/integer
Se puede habilitar el bfer de salida para todos los ficheros estableciendo
esta directiva a 'On'. Si se necesita limitar el tamao del bfer a un tamao
en particular, se puede usar un nmero mximo de bytes en lugar de 'On'
como valor para esta directiva (p.ej., output_buffering=4096). A partir de
PHP 4.3.5, esta direcitva siempre es 'Off' en PHP-CLI.
output_handler string
Se pueden redireccionar todas las salidas producidas por los scripts a una
funcion. Por ejemplo, si se establece output_handler amb_output_handler(),
la codificacin de caracteres ser convertida de forma transparente a la
codificacin especificada. Al establecer cualquier gestor de salida
automticamente se activar el bfer de salida.
Nota:
No se puede usar mb_output_handler() con ob_iconv_handler(), y tampoco
se puedem usar juntos ob_gzhandler() yzlib.output_compression.
Nota:


Solamente se pueden usar funciones internas con esta directiva. Para
funciones definidas por el usuario se ha de usar ob_start().
implicit_flush boolean
Es FALSE de forma predeterminada. Cambiarla a TRUE le dir a PHP que
indique a la capa de salida que se vuelque a s misma automticamente
despus de cada bloque de salida. Esto es equivalente a llamar a la funcin
de PHP flush() despus de cada llamada a print o echo y de cada bloque
de HTML.
Cuando se usa PHP dentro de un entorno web, la activacin de esta opcin
tiene serias implicaciones de rendimiento, por lo que solamente se
recomienda para propsitos de depuracin. Este valor es TRUE de forma
predeterminada cuando se opera bajo la SAPI CLI.
Vase tambin ob_implicit_flush().
Constantes predefinidas
Estas constantes estn disponibles siempre ya que forman parte del ncleo de
PHP.
PHP_OUTPUT_HANDLER_START (integer)
Indica que el almacenamiento en el bfer de salida ha comenzado.
PHP_OUTPUT_HANDLER_WRITE (integer)
Indica que el bfer de salida est siendo volcado y tiene datos para producir
una salida.
Disponible desde PHP 5.4.
PHP_OUTPUT_HANDLER_FLUSH (integer)
Indica que el bfer de salida ha sido volcado.
Disponible desde PHP 5.4.
PHP_OUTPUT_HANDLER_CLEAN (integer)
Indica que el bfer de salida ha sido limpiado.
Disponible desde PHP 5.4.
PHP_OUTPUT_HANDLER_FINAL (integer)


Indica que esta es la operacin final del almacenamiento del bfer de salida.
Disponible desde PHP 5.4.
PHP_OUTPUT_HANDLER_CONT (integer)
Indica que el bfer de salida ha sido volcado, pero que el almacenamiento
en el bfer de salida continur.
A partir de PHP 5.4, esta constante es un alias de PHP_OUTPUT_HANDLER_WRITE.
PHP_OUTPUT_HANDLER_END (integer)
Indica que el almacenamiento del bfer de salida ha finalizado.
A partir de PHP 5.4, esta constante es un alias de PHP_OUTPUT_HANDLER_FINAL.
Uso bsico
Ejemplo #1 Ejemplo de Control de la salida
<?php

ob_start();
echo "Hola\n";

setcookie("nombre_cookie", "datos_cookie");

ob_end_flush();

?>
En el ejemplo de arriba, la salida de echo sera almacenada en el bfer de salida
hasta que se llamara a ob_end_flush(). Mientras tanto, la llamada
asetcookie() almacenara con xito una cookie sin causar ningn error.
(Normalmente no se pueden enviar cabeceras al navegador despus de que los
datos hayan sido enviados.)
Funciones del Control de la salida
Ver tambin
Vase tambin header() y setcookie().
flush
(PHP 4, PHP 5)
flush Vaciar el bfer de salida


Report a bug
Descripcin
void flush ( void )
Vaca los bferes de escritura de PHP y de cualquiera que sea el entorno en el que
se est usando PHP (CGI, un servidor web, etc.). Trata de enviar toda la salida
producida hasta el momento al navegador, aunque se ha de tener en cuenta
algunas cosas.
flush() podra no sobreescribir el esquema del almacenamiento en bfer del
servidor web, por lo que no tiene efecto sobre ningn bfer en el lado del cliente
del navegador. Tampoco afecta al mecanismo del bfer de salida del espacio de
usuario de PHP. Esto significa que se ha de llamar tanto a ob_flush() como
a flush() para volcar los bferes de salida si se estn usando aquellos.
Algunos servidores, especialmente en Win32, seguirn almacenando en bfer la
salida producida por un script hasta que ste termine antes de transmitir los
resultados al navegador.
Puede que algunos mdulos de servidor para Apache, como mod_gzip, usen
bferes propios que causarn que flush() no resulte en un envo inmediato de los
datos al cliente.
Incluso el navegador puede almacenar en bfer su entrada antes de mostrarla.
Netscape, por ejemplo, almacena en bfer el texto hasta que recibe un final de
lnea o el comienzo de una etiqueta, por lo que no interpretar las tablas hasta que
se encuentre la etiqueta </table> de la tabla ms externa.
Algunas versiones de Microsoft Internet Explorer solo empezarn a mostrar la
pgina despus de que han recibido 256 bytes de salida, por lo que puede que sea
necesario enviar espacios en blanco extra antes del volcado para que se muestre
la pgina en tales navegadores.
ob_clean
(PHP 4 >= 4.2.0, PHP 5)
ob_clean Limpiar (eliminar) el bfer de salida
Report a bug
Descripcin
void ob_clean ( void )
Esta funcin desecha el contenido del bfer de salida.
Esta funcin no destruye el bfer de salida, como lo hace ob_end_clean().


Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ver tambin
ob_flush() - Vaciar (enviar) el bfer de salida
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_clean
(PHP 4, PHP 5)
ob_end_clean Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
Report a bug
Descripcin
bool ob_end_clean ( void )
Esta funcin desecha el contenido del bfer de salida en cola y lo deshabilita. Si
fuera necesario continuar procesando el contenido del bfer, se ha de llamar
a ob_get_contents() antes que a ob_end_clean(), ya que el contenido del bfer
es desechado cuando se llama aob_end_clean().
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error. Entre las posibles razones
de un fallo se encuentra llamar la funcin sin un bfer activo, o que por algn
motivo no se pueda eliminar un bfer (posible en el caso de bferes especiales).
Report a bug
Errores/Excepciones
Si la funcin falla, genera un error de nivel E_NOTICE.
Report a bug


Historial de cambios
Versin Descripcin
4.2.0
El valor de retorno booleano fue
agregado.
Report a bug
Ejemplos
El siguiente ejemplo muestra una forma sencilla de deshacerse de todos los
bferes de salida:
Ejemplo #1 Ejemplo de ob_end_clean()
<?php
ob_start();
echo 'Texto que no ser mostrado.';
ob_end_clean();
?>
Report a bug
Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida
ob_get_contents() - Devolver el contenido del bfer de salida
ob_flush() - Vaciar (enviar) el bfer de salida

ob_end_flush
(PHP 4, PHP 5)
ob_end_flush Volcar (enviar) el bfer de salida y deshabilitar el almacenamiento
en el mismo
Report a bug
Descripcin
bool ob_end_flush ( void )
Esta funcin enviar el contenido del bfer de salida en cola (si existe) y los
deshabilitar. Si fuera necesario procesar el contenido del bfer, se ha de llamar
a ob_get_contents() antes que a ob_end_flush(), ya que el contenido del bfer
es descartado despus de llamar aob_end_flush().


Nota: Esta funcin es similar a ob_get_flush(), excepto
que ob_get_flush() devuelve el bfer como una cadena de caracteres.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error. Entre las posibles razones
de un fallo se encuentra llamar la funcin sin un bfer activo, o que por algn
motivo no se pueda eliminar un bfer (posible en el caso de bferes especiales).
Report a bug
Errores/Excepciones
Si la funcin falla, genera un error de nivel E_NOTICE.
Report a bug
Historial de cambios
Versin Descripcin
4.2.0
El valor de retorno booleano fue
agregado.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de ob_end_flush()
El siguiente ejemplo muestra una forma sencilla de volcar y finalizar todos los
bferes de salida:
<?php
while (@ob_end_flush());
?>
Report a bug
Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida
ob_get_contents() - Devolver el contenido del bfer de salida
ob_get_flush() - Volcar el bfer de salida, devolverlo como una cadena de
caracteres y deshabilitar el almacenamiento en el bfer de salida
ob_flush() - Vaciar (enviar) el bfer de salida
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo


ob_flush
(PHP 4 >= 4.2.0, PHP 5)
ob_flush Vaciar (enviar) el bfer de salida
Report a bug
Descripcin
void ob_flush ( void )
Esta funcin enviar el contenido del bfer de salida (si existe). Si fuera necesario
continuar procesando el contenido del bfer, se ha de llamar
a ob_get_contents() antes qeu a ob_flush(), ya que el contenido del bfer es
descartado despus de llamar a ob_flush().
Esta funcin no destruye el bfer de salida, como lo hace ob_end_flush().
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ver tambin
ob_get_contents() - Devolver el contenido del bfer de salida
ob_clean() - Limpiar (eliminar) el bfer de salida
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_get_clean
(PHP 4 >= 4.3.0, PHP 5)
ob_get_clean Obtener el contenido del bfer actual y eliminar el bfer de salida
actual
Report a bug
Descripcin
string ob_get_clean ( void )
Obtiene el contenido del bfer actual y elimina el bfer de salida actual.


ob_get_clean() bsicamente ejecuta ob_get_contents() y ob_end_clean().
Report a bug
Valores devueltos
Devuelve el contenido del bfer de salida y finaliza el almacenamiento en el
mismo. Si el almacenamiento en el bfer de salida no est activo, entonces se
devuelve FALSE.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo sencillo de ob_get_clean()
<?php

ob_start();

echo "Hola Mundo";

$salida = ob_get_clean();
$salida = strtolower($salida);

var_dump($salida);
?>
El resultado del ejemplo sera:

string(10) "hola mundo"

Report a bug
Ver tambin
ob_get_contents() - Devolver el contenido del bfer de salida
ob_start() - Activa el almacenamiento en bfer de salida
ob_get_contents
(PHP 4, PHP 5)
ob_get_contents Devolver el contenido del bfer de salida
Report a bug
Descripcin
string ob_get_contents ( void )


Obtiene el contenido del bfer de salida, sin borrarlo.
Report a bug
Valores devueltos
Devolver el contenido del bfer de salida, o FALSE si el almacenameinto en el
bfer de salida no est activo.
Report a bug
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 sera:
string(5) "Hola "
string(10) "Hola Mundo"
Report a bug
Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida
ob_get_length() - Devolver la longitud del bfer de salida
ob_get_flush
(PHP 4 >= 4.3.0, PHP 5)
ob_get_flush Volcar el bfer de salida, devolverlo como una cadena de
caracteres y deshabilitar el almacenamiento en el bfer de salida
Report a bug


Descripcin
string ob_get_flush ( void )
ob_get_flush() vuelca el bfer de salida, lo devuelve como una cadena de
caracteres y deshabilita el almacenamiento en el bfer de salida.
Nota: Esta funcin es similar a ob_end_flush(), excepto que esta funcin devuelve
el bfer como una cadena de caracteres.
Report a bug
Valores devueltos
Devuelve el bfer de salida, o FALSE si el almacenamiento en el bfer no est
activo.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de ob_get_flush()
<?php
//usando output_buffering=On
print_r(ob_list_handlers());

//guardar el bfer en un fichero
$bfer = ob_get_flush();
file_put_contents('bufer.txt', $bfer);

print_r(ob_list_handlers());
?>
El resultado del ejemplo sera:
Array
(
[0] => default output handler
)
Array
(
)
Report a bug
Ver tambin
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_list_handlers() - Enumerar todos los gestores de salida en uso


ob_get_length
(PHP 4 >= 4.0.2, PHP 5)
ob_get_length Devolver la longitud del bfer de salida
Report a bug
Descripcin
int ob_get_length ( void )
Esta funcin devolver la longitud del contenido del bfer de salida.
Report a bug
Valores devueltos
Devuelve la longitud del contenido del bfer de salida, o FALSE si no est activo el
almacenamiento en bfer.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo sencillo de ob_get_length()
<?php

ob_start();

echo "Hola ";

$longitud1 = ob_get_length();

echo "Mundo";

$longitud2 = ob_get_length();

ob_end_clean();

echo $longitud1 . ", ." . $longitud2;
?>
El resultado del ejemplo sera:
5, 10
Report a bug
Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida


ob_get_contents() - Devolver el contenido del bfer de salida
ob_get_level
(PHP 4 >= 4.2.0, PHP 5)
ob_get_level Devolver el nivel de anidamiento del mecanismo de
almacenamiento en el bfer de salida
Report a bug
Descripcin
int ob_get_level ( void )
Devuelve el nivel de anidamiento del mecanismo de almacenamiento en el bfer
de salida.
Report a bug
Valores devueltos
Devuelve el nivel de los gestores de almacenamiento en bfer de salida anidados,
o cero si el almacenamiento en bfer no est activo.
Report a bug
Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida
ob_get_contents() - Devolver el contenido del bfer de salida
ob_get_status
(PHP 4 >= 4.2.0, PHP 5)
ob_get_status Obtener el estado de los bferes de salida
Report a bug
Descripcin
array ob_get_status ([ bool $full_status = FALSE ] )
ob_get_status() devuelve la informacin de estado sobre el bfer de salida de
nivel superior, o sobre todos los niveles activos de bferes de salida
si full_status es establecido a TRUE.
Report a bug


Parmetros
full_status
TRUE para devolver todos los niveles de bferes de salida activos. Si
es FALSE o no se establece, solo es devuelto el bfer de salida de nivel ms
alto.
Valores devueltos
Si esta funcin es llamada sin el parmetro full_status, o
con full_status = FALSE, se devuelve un nico array con los siguientes
elementos:
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_HANDLE
R_USER (1)
Clave:status
Valor:Un valor
entre PHP_OUTPUT_HANDLER_START (0), PHP_OUTPUT_HANDLER_CO
NT (1) o PHP_OUTPUT_HANDLER_END (2)
Clave:name
Valor:Nombre del gestor de salida activo, o 'default output handler' si no hay
uno establecido


Clave:del
Valor:Bandera de borrado, tal y como est establecido por ob_start()
Si se llama con full_status = TRUE, se devuelve un array con un elemento por
cada nivel de bfer de salida activo. El nivel de salida se usa como la clave del
array de nivel superior, y cada elemento del array en s es otro array que
contiene informacin de estado 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:Tamao del segmento, tal y como es establecido por ob_start()
Clave:size
Valor:...
Clave:blocksize
Valor:...
Report a bug
Ver tambin
ob_get_level() - Devolver el nivel de anidamiento del mecanismo de
almacenamiento en el bfer de salida
ob_list_handlers() - Enumerar todos los gestores de salida en uso
ob_gzhandler
(PHP 4 >= 4.0.4, PHP 5)
ob_gzhandler Funcin de llamada de retorno de ob_start para comprimir el
bfer de salida con gzip
Report a bug
Descripcin
string ob_gzhandler ( string $buffer , int $mode )
ob_gzhandler() tiene por objeto usarse como una funcin de llamada de retorno
para ob_start() para facilitar en envo de datos codificados con gz a los
navegadores web que admiten la compresin de pginas web. Antes de
que ob_gzhandler() realmente enve datos comprimidos, determina el tipo de
codificacin de contenido que aceptar el navegador ("gzip", "deflate" o ninguno) y
devolver su salida en consecuencia. Se admiten todos los navegadores, ya que es
responsabilidad de los mismos enviar la cabecera correcta que indique que acepta
pginas web comprimidas. Si un navegador no admite pginas comprimidas, esta
funcin devolver FALSE.
Report a bug
Parmetros
buffer


mode
Report a bug
Valores devueltos
Report a bug
Historial de cambios
Versin Descripcin
4.0.5
Se aadi el
parmetro mode.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de ob_gzhandler()
<?php

ob_start("ob_gzhandler");

?>
<html>
<body>
<p>Esta debera ser una pgina comprimida.</p>
</body>
</html>
Report a bug
Notas
Nota:
ob_gzhandler() requiere la extensin zlib.
Nota:
No se pueden usar juntos ob_gzhandler() y zlib.output_compression.
Observe tambin que se prefiere el uso dezlib.output_compression antes
que ob_gzhandler().
Report a bug


Ver tambin
ob_start() - Activa el almacenamiento en bfer de salida
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_implicit_flush
(PHP 4, PHP 5)
ob_implicit_flush Habilitar/deshabilitar el volcado implcito
Report a bug
Descripcin
void ob_implicit_flush ([ int $flag = true ] )
ob_implicit_flush() habilitar o deshabilitar el volcado implcito. El volcado
implcito resultar en una operacin de volcado despus de cada llamada que
produzca salida, de modo que no son necesarias las llamadas explcitas a flush().
Report a bug
Parmetros
flag
TRUE para habilitar el volcado implcito, FALSE para deshabilitarlo.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ver tambin
flush() - Vaciar el bfer de salida
ob_start() - Activa el almacenamiento en bfer de salida
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_list_handlers


(PHP 4 >= 4.3.0, PHP 5)
ob_list_handlers Enumerar todos los gestores de salida en uso
Report a bug
Descripcin
array ob_list_handlers ( void )
Enumera todos los gestores de salida en uso.
Report a bug
Valores devueltos
Esta funcin devolver un array con los gestores de salida en uso (si existen).
Si output_buffering est habilitado o se us una funcin annima
con ob_start(), ob_list_handlers() devolver "default output handler" (gestor de
salida predeterminado).
Report a bug
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 annimas
ob_start(create_function('$cadena', 'return $cadena;'));
print_r(ob_list_handlers());
ob_end_flush();
?>
El resultado del ejemplo sera:
Array
(
[0] => default output handler
)

Array
(
[0] => ob_gzhandler
)



Array
(
[0] => default output handler
)
Report a bug
Ver tambin
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_get_flush() - Volcar el bfer de salida, devolverlo como una cadena de
caracteres y deshabilitar el almacenamiento en el bfer de salida
ob_start() - Activa el almacenamiento en bfer de salida
ob_start
(PHP 4, PHP 5)
ob_start Activa el almacenamiento en bfer de salida
Report a bug
Descripcin
bool ob_start ([ callable $output_callback [, int $chunk_size = 0 [, bool $erase =
true ]]] )
Esta funcin activar el almacenamiento en bfer de salida. Mientras dicho
almacenamiento est activo, no se enviar ninguna salida desde el script (aparte
de cabeceras), en su lugar la salida se almacenar en un bfer interno.
El contenido de este bfer interno se puede copiar a una variable de tipo string
usando ob_get_contents(). Para producir la salida de lo almacenado en el bfer
interno se ha de usar ob_end_flush(). De forma
alternativa, ob_end_clean() desechar de manera silenciosa el contenido del bfer.
Advertencia
Algunos servidores web (p.ej. Apache) cambian en directorio de trabajo de un
script cuando se invoca a la funcin de llamada de retorno. Se puede cambiar de
nuevo mediante, por
ejemplo,chdir(dirname($_SERVER['SCRIPT_FILENAME'])) en la funcin de
llamada de retorno.
Los bferes de salida son apilables, es decir, que se podra llamar
a ob_start() mientras otro ob_start() est activo. Se ha de asegurar llamar
a ob_end_flush() las veces apropiadas. Si estn activas mltiples funciones de


llamada de retorno de salida, la salida se filtrar secuencialmente por cada una de
ellas en orden de anidamiento.
Report a bug
Parmetros
output_callback
Se puede especificar una funcin output_callback opcional. Esta funcin
toma un string como parmetro y debera devolver otro string. La funcin
se llamar cuando el bfer de salida sea volcado (enviado), limpiado
(con ob_flush(), ob_clean() o alguna funcin similar) o cuando el bfer de
salida sea volcado al navegador al final de la peticin. Cuando se llame
a output_callback, sta recibir el contenido del bfer de salida como su
propio parmetro, y se espera que devuelva un nuevo bfer de salida como
resultado, que ser enviado al navegador. Si output_callback no es una
funcin llamable, esta funcin devolver FALSE. Esta es la firma de la
llamada de retorno:
bool handler ( string $buffer [, int $phase ] )
buffer
Contenido del bfer de salida.
phase
Mscara de bits de constantes PHP_OUTPUT_HANDLER_*.
Si output_callback devuelve FALSE, se enviar la entrada original al
navegador.
El parmetro output_callback se puede omitir pasando un
valor NULL.
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() y ob_star
t() no se pueden llamar desde una funcin de llamada de retorno.
Si se hace, el comportamiento no estar definido. Si se quiere
borrar el contenido de un bfer, se ha de devolver "" (un string
nulo) desde la funcin de llamada de retorno. Tampoco se pueden


llamar a funciones usando las funciones de bfer de salida
como print_r($expresin,
true) o highlight_file($nombre_fichero, true) desde una
funcin de llamada de retorno.
Nota:
En PHP 4.0.4, ob_gzhandler() se introdujo para facilitar el envo de
datos codificados con gz a los navegadores web que admitan
pginas web comprimidas. ob_gzhandler() determima el tipo de
codificacin de contenido que aceptar el navegador y devolver
su salida en consecuencia.
chunk_size
Si se proporciona el parmetro opcional chunk_size, el bffer ser volcado
despus de cualquier llamada de salida que cause que la longitud del bfer
sea igual o exceda a chunk_size. El valor predeterminado 0 significa que la
funcin de salida ser llamada nicamente cuando el bfer de salida se
cierre.
Antes de PHP 5.4.0, el valor 1 era un caso especial que estableca el
tamao de segmento a 4096 bytes.
erase
Si el parmetro opcional erase se establece a FALSE, el bfer no ser borrado
hasata que el script finalice. Esto ocasiona que las funciones de volcado y
limpieza emitirn un aviso y devuelvan FALSE si se las invoca.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Historial de cambios
Versin Descripcin
5.4.0
Un tamao de segmento de 1 ahora resulta en segmentos de 1 byte que se van a enviar


Versin Descripcin
al bfer de salida.
4.3.2
Se modfic esta funcin para devolver FALSE en caso de que la
funcin output_callback pasada no poda ejecutarse.
4.2.0 Se aadi el parmetro erase.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de una funcin de llamada de retorno definida por
el usuario
<?php

function callback($bfer)
{
// reemplazar todas las manzanas por naranjas
return (str_replace("manzanas", "naranjas", $bfer));
}

ob_start("callback");

?>
<html>
<body>
<p>Es como comparar manzanas con naranjas.</p>
</body>
</html>
<?php

ob_end_flush();

?>
El resultado del ejemplo sera:
<html>
<body>
<p>Es como comparar naranjas con naranjas.</p>
</body>
</html>
Report a bug


Ver tambin
ob_get_contents() - Devolver el contenido del bfer de salida
ob_end_clean() - Limpiar (eliminar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_end_flush() - Volcar (enviar) el bfer de salida y deshabilitar el
almacenamiento en el mismo
ob_implicit_flush() - Habilitar/deshabilitar el volcado implcito
ob_gzhandler() - Funcin de llamada de retorno de ob_start para comprimir
el bfer de salida con gzip
ob_iconv_handler() - Convierte la codificacin de caracteres al manejador
del buffer de salida
mb_output_handler() - Funcin de llamada de retorno que convierte la
codificacin de caracteres en bfer de salida
ob_tidyhandler() - Funcin callback de ob_start para reparar el buffer
output_add_rewrite_var
(PHP 4 >= 4.3.0, PHP 5)
output_add_rewrite_var Aladir valores al mecanismo de reescritura de URLs
Report a bug
Descripcin
bool output_add_rewrite_var ( string $name , string $value )
Esta funcin aade otro par nombre/valor al mecanismo de reescritura de URLs. El
nombre y el valor se agregarn a los URLs (como parmetros de GET) y a los
formularios (como camos intput ocultos) de la misma forma que el ID de sesin
cuando la reescritura de URLs de forma transparente est habilitada
con session.use_trans_sid. Observe que los URLs absolutos
(http://example.com/..) no son reescritos.
El comportamiento de esta funcin est controlado por el
parmetro url_rewriter.tags de php.ini.
Nota: Al llamar a esta funcin se iniciar el almacenamiento implcito en bfer de
salida si no estaba ya activo.
Report a bug
Parmetros
name


El nombre de la variable.
value
El valor de la variable.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de output_add_rewrite_var()
<?php
output_add_rewrite_var('var', 'valor');

// algunos enlaces
echo '<a href="fichero.php">enlace</a>
<a href="http://example.com">enlace2</a>';

// un formulario
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>';

print_r(ob_list_handlers());
?>
El resultado del ejemplo sera:
<a href="fichero.php?var=valor">enlace</a>
<a href="http://example.com">enlace2</a>

<form action="script.php" method="post">
<input type="hidden" name="var" value="valor" />
<input type="text" name="var2" />
</form>

Array
(
[0] => URL-Rewriter
)
Report a bug


Ver tambin
output_reset_rewrite_vars() - Restablecer los valores del mecanismo de
reescritura de URLs
ob_flush() - Vaciar (enviar) el bfer de salida
ob_list_handlers() - Enumerar todos los gestores de salida en uso
output_reset_rewrite_vars
(PHP 4 >= 4.3.0, PHP 5)
output_reset_rewrite_vars Restablecer los valores del mecanismo de reescritura
de URLs
Report a bug
Descripcin
bool output_reset_rewrite_vars ( void )
Esta funcin restablece el mecanismo de reescritura de URLs y elimina todas las
variables de reescritura establecidas previamente por la
funcin output_add_rewrite_var() o por el mecanismo de sesiones
(si session.use_trans_sid se estableci en session_start()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de output_reset_rewrite_vars()
<?php
session_start();
output_add_rewrite_var('var', 'valor');

echo '<a href="fichero.php">enlace</a>';
ob_flush();

output_reset_rewrite_vars();
echo '<a href="fichero.php">enlace</a>';
?>
El resultado del ejemplo sera:
<a href="fichero.php?PHPSESSID=xxx&var=valor">enlace</a>
<a href="fichero.php">enlace</a>


Report a bug
Ver tambin
output_add_rewrite_var() - Aladir valores al mecanismo de reescritura de
URLs
ob_flush() - Vaciar (enviar) el bfer de salida
ob_list_handlers() - Enumerar todos los gestores de salida en uso
session_start() - Iniciar una nueva sesin o reanudar la existente
Opciones e Informacin de PHP
Introduccin
Estas funciones permiten obtener mucha informacin sobre PHP, p.ej.,
configuracin en tiempo de ejecucin, extensiones en uso, versin, y mucho ms.
Tambin se pueden encontrar funciones para establecer opciones al ejecutar PHP.
Aqu se puede encontrar la funcin probablemente ms conocida de PHP -
phpinfo() -.
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de PHP/Opciones de configuracin Inf
Nombre
Por
defect
o
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_SYSTE
Esta caracterstica
obsoleta ser eliminada co


Opciones de PHP/Opciones de configuracin Inf
Nombre
Por
defect
o
Cambiable Historial de cambios
M n 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_lev
el
"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 ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
assert.active boolean
Activa la evaluacin de aserciones().
assert.bail boolean
Terminar la ejecucin del script si falla una asercin.
assert.warning boolean
Lanza un PHP warning for cada asercin que falle.


assert.callback string
Funcin de usuario a llamar cuando fallen las aserciones.
assert.quiet_eval boolean
Usar la configuracin actual de error_reporting() durante las expresiones de
evaluacin de aserciones. Si est habilitado, no se mostrarn errores
(incondicional error_reporting(0)) durante evaluacin. Si est deshabitado,
se mostrarn errores segn la configuracin deerror_reporting()
enable_dl boolean
Esta directiva es muy til solamente en la versin PHP con el mdulo
Apache. Se puede activar o desactivar la carga dinmica de extensiones
PHP con dl() por servidor virtual o directorio.
La razn principal para desactivar la carga dinmica es por seguridad. Con
la carga dinmica, es posible ignorar todas las restriccionesopen_basedir.
De forma predeterminada se permite la car rga dinmica excepto cuando se
usa safe mode. En safe mode, es imposible usar dl().
max_execution_time integer
Este valor establece el tiempo mximo 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 lnea de comandos el valor por defecto es 0.
El tiempo de ejecucin mxima no est afectada por llamadas al sistema,
operaciones de stream etc. Por favor vase la funcinset_time_limit() para
ms informacin.
No se puede cambiar esta opcin con ini_set() cuando se ejecuta en safe
mode. La nica manera es desactivar safe mode o cambiando el lmite
en php.ini.
El servidor web puede tener otras configuraciones de tiempo de espera que
quiz interrumpan la ejecucin de PHP. Apache tiene la directivaTimeout y
IIS tiene la funcin CGI timeout. Las dos de 300 segundos por omisin.
Vase la documentacin del servidor web para informacin especfica.
max_input_time integer
Establece el tiempo mximo en segundos que se permite a un script
analizar datos de entrada, como POST, GET. Se mide desde el momento de
recepcin de todos los datos en el servidor hasta el inicio de la ejecucin del
script.


max_input_nesting_level integer
Establece el mximo de profundidad de anidamiento para variables de
entrada (p.ej. $_GET, $_POST..)
max_input_vars integer
Cuantas variables de entrada pueden ser aceptadas (el lmite se aplica a los
arrays superglobales $_GET, $_POST y $_COOKIE de forma separada). El
uso de esta directiva mitiga la posibilidad de ataques de denegacin de
servicio que utilizan colisiones de hash. Si hay ms 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.
magic_quotes_gpc boolean
Advertencia
Esta caracterstica 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 estn activadas, todas las ' (comillas simples), "
(comillas dobles), \ (barra invertida) y NUL's son escapados con una barra
invertida de forma automtica..
Nota:
En PHP 4, tambin las variables $_ENV son escapadas.
Nota:
Si la directiva magic_quotes_sybase tambin 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 permanecern igual sin ser
escapadas.
Ver tambin get_magic_quotes_gpc()
magic_quotes_runtime boolean
Advertencia
Esta caracterstica 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 mayora de funciones que
devuelven datos desde cualquier tipo de recurso externo incluyendo bases
de datos y ficheros de texto contendrn comillas escapadas con barras
invertidas. Si magic_quotes_sybase tambin est habilidado, las comillas
simples sern escapadas con comillas simples en lugar de barras invertidas.
Funciones afectadas por magic_quotes_runtime (no incluye funciones de
PECL):
get_meta_tags()
file_get_contents()
file()
fgets()
fwrite()
fread()
fputcsv()
stream_socket_recvfrom()
exec()
system()
passthru()
stream_get_contents()
bzread()
gzfile()
gzgets()
gzwrite()
gzread()
exif_read_data()
dba_insert()
dba_replace()
dba_fetch()
ibase_fetch_row()
ibase_fetch_assoc()
ibase_fetch_object()
mssql_fetch_row()
mssql_fetch_object()
mssql_fetch_array()
mssql_fetch_assoc()
mysqli_fetch_row()
mysqli_fetch_array()
mysqli_fetch_assoc()
mysqli_fetch_object()
pg_fetch_row()
pg_fetch_assoc()
pg_fetch_array()
pg_fetch_object()
pg_fetch_all()
pg_select()
sybase_fetch_object()
sybase_fetch_array()
sybase_fetch_assoc()


SplFileObject::fgets()
SplFileObject::fgetcsv()
SplFileObject::fwrite()
zend.enable_gc boolean
Habilita o deshabilita el colector de referencia circular.
Constantes predefinidas
Estas constantes estn disponibles siempre ya que forman parte del ncleo de
PHP.
Constantes predefinidas en phpcredits()
Constante Valor Descripcin
CREDITS_GROUP 1 Lista de los desarrolladores del ncleo
CREDITS_GENERAL 2
Crditos generales: Diseo del lenguaje y concepto, autores de PHP y
mdulos SAPI.
CREDITS_SAPI 4 Lista de los mdulos API para PHP y sus autores.
CREDITS_MODULES 8 Lista de los mdulos de extensin para PHP y sus autores.
CREDITS_DOCS 16 Los crditos del equipo de documentacin.
CREDITS_FULLPAGE 32
Normalmente se utiliza en combiacin con otras opciones.Indica que
una pgina HTML independiente debe ser mostrada incluyendo la
informacin indicada por otras opciones.
CREDITS_QA 64 Los crditos del equipo de testers.
CREDITS_ALL -1
Todos los crditos, es equivalente a usar: CREDITS_DOCS +
CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES +
CREDITS_QA CREDITS_FULLPAGE. Genera una pgina HTML
independiente con las apropiadas etiquetas. Este es el valor por
defecto.


Constantes de phpinfo()
Constante Valor Descripcin
INFO_GENERAL 1
La lnea de comandos de configuracin, php.ini ruta, fecha del
build, servidor Web, sistema y dems.
INFO_CREDITS 2 Crditos de PHP. Ver tambin phpcredits().
INFO_CONFIGURATION 4
Valores locales y maestros actuales para directivas PHP. Ver
tambin ini_get().
INFO_MODULES 8 Mdulos cargados y sus respectivas opciones.
INFO_ENVIRONMENT 16
Informacin de variables de entorno, tambin est disponible
en $_ENV.
INFO_VARIABLES 32
Muestra todas las variables predefinidas desde EGPCS (Entorno,
GET, POST, Cookie, Server).
INFO_LICENSE 64
Informacin de la licencia de PHP. Ver tambin 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 Descripcin
INI_USER 1 Sin uso
INI_PERDIR 2 Sin uso
INI_SYSTEM 4 Sin uso
INI_ALL 7 Sin uso


Constantes de asercin, estos valores se usan para definir opciones de asercin
en assert_options().
Constantes assert()
Constante Opcin INI Descripcin
ASSERT_ACTIVE assert.active Habilita la evaluacin de assert().
ASSERT_CALLBACK assert.callback
Llamada de retorno a llamar en caso que falle la
asercin.
ASSERT_BAIL assert.bail Terminar la ejecuccin al finalizar aserciones.
ASSERT_WARNING assert.warning Genera un warning PHP por cada asercin que falle
ASSERT_QUIET_EVAL assert.quiet_eval
Desactiva error_reporting durante la evaluacin de
expresiones de asercin.
Las siguientes constantes estn disponibles nicamente si se est ejecutando el
sistema operativo Windows y muestran informacin sobre las diferentes versiones.
Esto hace posible el detectar determinadas caractersticas para poder hacer uso de
ellas. Disponibles desde PHP 5.3.0.
Constantes especficas para Windows
Constante Descripcin
PHP_WINDOWS_VERSION_MAJOR
El nmero mayor de la versin 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 nmero menor de la versin 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 nmero del build de Windows (por ejemplo, Windows


Constantes especficas para Windows
Constante Descripcin
Vista con SP1 sera el build nmero 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 nmero mayor de la versin del service pack instalado,
su valor es 0 si no hay ningn service pack instalado. Por
ejemplo, Windows XP con service pack 3 instalado har
que el valor sea 3.
PHP_WINDOWS_VERSION_SP_MINOR
El nmero menor de la versin del service pack instalado,
su valor es 0 si no hay ningn service pack instalado.
PHP_WINDOWS_VERSION_SUITEMASK
El suitemask es una mscara de bits que puede indicar si
determinadas caractersticas de Windows estn
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 estacin de trabajo (pej. Vista/XP/2000/NT4)
Esta tabla muestra una lista de caractersticas que pueden ser comprobadas al
usar la mscara de bits PHP_WINDOWS_VERSION_SUITEMASK.


Windows suitemask campos de bits
Bits Descripcin
0x00000004 Los componentes de Microsoft BackOffice estn 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 sesin 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 versin de Windows.
0x00000020 Microsoft Small Business Server est instalado con la restriccin 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 ejecutndose 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_options Establecer/obtener valores de las directivas relacionadas con las
aserciones
Report a bug
Descripcin
mixed assert_options ( int $what [, mixed $value ] )
Se utiliza para establecer el valor de las diferentes opciones de la
funcin assert() o consultar su valor actual.
Report a bug
Parmetros
what
Assert Options
Opcin
Configuracin
inicial
Valor
predeterminado
Descripcin
ASSERT_ACTIVE assert.active 1 Activa la funcin assert()
ASSERT_WARNING assert.warning 1
Cada vez que una asercin
falla se genera una
advertencia
ASSERT_BAIL assert.bail 0
Termina la ejecucin
cuando falla una asercin
ASSERT_QUIET_EVA
L
assert.quiet_eva
l
0
Desactiva la directiva
error_reporting durante la
evaluacin de la asercin


Assert Options
Opcin
Configuracin
inicial
Valor
predeterminado
Descripcin
ASSERT_CALLBACK assert.callback (NULL)
Funcin que se encargar
de gestionar las aserciones
cuando fallen
value
Nuevo valor para la directiva.
Report a bug
Valores devueltos
Devuelve el valor original de cualquiera de las opciones o FALSE en caso
de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de assert_options()
<?php
// Esta es nuestra funcin manejadora
// de los fallos en un asercin
function assert_failure()
{
echo 'Assert failed';
}

// Esta es nuestra funcin 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 asercin falla se detiene la ejecucin
assert_options(ASSERT_BAIL, true);


// Si una asercin falla NO se genera una advertencia
assert_options(ASSERT_WARNING, false);
// Establecemos la funcin 'assert_failure' como manejadora (callback)
de las aserciones
assert_options(ASSERT_CALLBACK, 'assert_failure');

// Creamos una asercin la cual queremos que falle
test_assert(1);

// Este cdigo nunca se ejecuta porque ASSERT_BAIL
// est a TRUE
echo 'Never reached';
?>
Report a bug
Ver tambin
assert() - Checks if assertion is FALSE
assert
(PHP 4, PHP 5)
assert Checks if assertion is FALSE
Report a bug
Descripcin
bool assert ( mixed $assertion [, string $description ] )
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
theassert_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 beTRUE 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). Users of PHP 5.4.8 and later may also provide a fourth optional
argument, which will contain the description given to assert(), if it was set.
Report a bug
Parmetros
assertion
The assertion.
description
An optional description that will be included in the failure message if
the assertion fails.
Report a bug
Valores devueltos
FALSE if the assertion is false, TRUE otherwise.
Report a bug


Historial de cambios
Versin Descripcin
5.4.8
The description parameter was added. The description is also now
provided to a callback function in ASSERT_CALLBACK mode as the fourth
argument.
Report a bug
Ejemplos
Ejemplo #1 Handle a failed assertion with a custom handler
<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);

// 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("")');
?>
Ejemplo #2 Using a custom handler to print a description
<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);

// Create a handler function
function my_assert_handler($file, $line, $code, $desc = null)
{
echo "Assertion failed at $file:$line: $code";
if ($desc) {
echo ": $desc";


}
echo "\n";
}

// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');

// Make an assertion that should fail
assert('2 < 1');
assert('2 < 1', 'Two is less than one');
?>
El resultado del ejemplo sera:
Assertion failed at test.php:21: 2 < 1
Assertion failed at test.php:22: 2 < 1: Two is less than one
Report a bug
Ver tambin
assert_options() - Establecer/obtener valores de las directivas
relacionadas con las aserciones
cli_get_process_title
(PHP 5 >= 5.5.0)
cli_get_process_title Returns the current process title
Report a bug
Descripcin
string cli_get_process_title ( void )
Returns the current process title, as set by cli_set_process_title(). Note that this
may not exactly match what is shown in ps or top, depending on your operating
system.
This function is available only in CLI mode.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug


Valores devueltos
Return a string with the current process title or NULL on error.
Report a bug
Errores/Excepciones
An E_WARNING will be generated if the operating system is unsupported.
Report a bug
Ejemplos
Ejemplo #1 cli_get_process_title() example
<?php
echo "Process title: " . cli_get_process_title() . "\n";
?>
Report a bug
Ver tambin
cli_set_process_title() - Sets the process title
cli_set_process_title
(PHP 5 >= 5.5.0)
cli_set_process_title Sets the process title
Report a bug
Descripcin
bool cli_set_process_title ( string $title )
Sets the process title visible in tools such as top and ps. This function is available
only in CLI mode.
Report a bug
Parmetros
title
The new title.


Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Errores/Excepciones
An E_WARNING will be generated if the operating system is unsupported.
Report a bug
Ejemplos
Ejemplo #1 cli_set_process_title() example
<?php
$title = "My Amazing PHP Script";
$pid = getmypid(); // you can use this to see your process title in ps

if (!cli_set_process_title($title)) {
echo "Unable to set process title for PID $pid...\n";
exit(1);
} else {
echo "The process title '$title' for PID $pid has been set for your proc
ess!\n";
sleep(5);
}
?>
Report a bug
Ver tambin
cli_get_process_title() - Returns the current process title
dl
(PHP 4, PHP 5)
dl Carga una extensin PHP en tiempo de ejecuccin
Report a bug
Descripcin
bool dl ( string $library )
Carga la extensin PHP dada por el parmetro library.


Utilice la funcin extension_loaded() para comprobar si la extensin ya est
cargada o no. Funciona tanto para extensiones ya integradas en PHP o para
extensiones que se han cargado dinmicamente (ya sea a travs
de php.ini o dl()).
Advertencia
Esta funcin ha sido eliminada en algunos mdulos SAPI en PHP 5.3.
Report a bug
Parmetros
library
Este parmetro es solamente el fichero de la extensin a cargar el cual
depende del sistema operativo. Por ejemplo, la extensin sockets (si se
compila como librera, 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 extensin ser cargada tambin depende del
sistema operativo:
En Windows - a no ser que se defina explicitamente en php.ini, la extensin
ser cargada por defecto desdeC:\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 opcin --enable-debug o no
Si PHP fu comiplado con soporte (experimental) ZTS (Zend Thread
Safety) o no
El mdulo interno actual ZEND_MODULE_API_NO (Nmero interno
del API Zend, que es bsicamente la fecha en que se produjo un
cambio de versin, 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.
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error. Si la funcionalidad de
cargar mdulos 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 ejecuccin de PHP. Si dl() fall porque la librera
especificacda no pudo cargarse a dems de FALSE se producir un
mensaje E_WARNING.
Report a bug
Ejemplos
Ejemplo #1 Ejemplos de dl()
<?php
// En este ejemplo se carga una extensin u otra dependiendo del sistema ope
rativo
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === '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);
}
?>
Report a bug
Historial de cambios
Versin Descripcin
5.3.0
dl() est desactivado en algunos mdulos 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
Report a bug
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 maysculas en sistemas Unix.
Nota: Esta funcin no est disponible cuando PHP est corriendo en safe
mode.
Report a bug
Ver tambin
Directivas de cargas de extensiones
extension_loaded() - Encontrar si una extensin est cargada
extension_loaded
(PHP 4, PHP 5)
extension_loaded Encontrar si una extensin est cargada
Report a bug
Descripcin
bool extension_loaded ( string $name )
Encuentra si la extensin est cargada.
Report a bug
Parmetros
name
El nombre de la extensin.
Es posible ver los nombres de varias extensiones usando phpinfo(), o si
usted usa la versin 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]
Report a bug
Valores devueltos
Devuelve TRUE si la extensin identificada por nombre est cargada, FALSE de lo
contrario.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de extension_loaded()
<?php
if (!extension_loaded('gd')) {
if (!dl('gd.so')) {
exit;
}
}
?>
Report a bug
Historial de cambios
Versin Descripcin
5.0.0
extension_loaded() usa el nombre interno de extensin para probar si una
extensin determinada est disponible o no. La mayora de nombres internos de
extensin estn escritos en minsculas pero es posible que hayan extensiones
disponibles que usen tambin letras maysculas. Antes de PHP 5, esta funcin
comparaba los nombres sensible a maysculas.
Report a bug
Ver tambin
get_loaded_extensions() - Devuelve un array con los nombres de todos
los mdulos compilados y cargados


get_extension_funcs() - Devuelve una matriz con los nombres de
funciones de un mdulo
phpinfo() - Muestra informacin sobre la configuracin de PHP
dl() - Carga una extensin PHP en tiempo de ejecuccin
function_exists() - Devuelve TRUE si la funcin dada ha sido definida
gc_collect_cycles
(PHP 5 >= 5.3.0)
gc_collect_cycles Las fuerzas de la coleccin de todos los ciclos de basura
existentes
Report a bug
Descripcin
int gc_collect_cycles ( void )
Recogida de las fuerzas de los ciclos de basura existentes.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el nmero de ciclos de recogida.
Report a bug
Ver tambin
Recoleccin de Basura
gc_disable
(PHP 5 >= 5.3.0)
gc_disable Desactiva el recolector de referencia circular
Report a bug
Descripcin
void gc_disable ( void )


Desactiva el recolector de referencia circular. zend.enable_gc a 0.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ver tambin
Recoleccin de Basura
gc_enable
(PHP 5 >= 5.3.0)
gc_enable Activa el colector de referencia circular
Report a bug
Descripcin
void gc_enable ( void )
Activa el colector de referencia circular, estableciendo zend.enable_gc a 1.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug


Ver tambin
Garbage Collection
gc_enabled
(PHP 5 >= 5.3.0)
gc_enabled Devuelve el estado del colector de referencia circular
Report a bug
Descripcin
bool gc_enabled ( void )
Devuelve el estado del colector de referencia circular.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE si el recolector de basura est activado, FALSE en caso contrario.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de gc_enabled()
<?php
if(gc_enabled()) gc_collect_cycles();
?>
Report a bug
Ver tambin
Recoleccin de Basura
get_cfg_var
(PHP 4, PHP 5)
get_cfg_var Obtiene el valor de una opcin de configuracin de PHP


Report a bug
Descripcin
string get_cfg_var ( string $option )
Obtiene el valor de una opcin de configuracin de PHP.
Esta funcin no retornar informacin de configuracin establecida cuando PHP fue
compilado, o lee un fichero de configuracin de Apache.
Para comprobar si el sistema est usando un fichero de configuracin, intente
recuperar el valor de la opcin de configuracin cfg_file_path. Si est disponible,
un fichero de configuracin est siendo utilizado.
Report a bug
Parmetros
option
El nombre de la opcin de configuracin.
Report a bug
Valores devueltos
Devuelve el valor actual de la variable de configuracin de PHP especificada
por option, o FALSE si se produce un error.
Report a bug
Historial de cambios
Versin Descripcin
5.3.0
get_cfg_var() se fij para ser capaz de retornar un "array" con las opciones
ini.
Report a bug
Ver tambin
ini_get() - Devuelve el valor de una directiva de configuracin
ini_get_all() - Obtiene todas las opciones de configuracin
get_current_user


(PHP 4, PHP 5)
get_current_user Obtiene el nombre del propietario del script PHP actual
Report a bug
Descripcin
string get_current_user ( void )
Devuelve el nombre del propietario del script PHP actual.
Report a bug
Valores devueltos
Devuelve el nombre de usuario como un string.
Report a bug
Ejemplos
Ejemplo #1 get_current_user() ejemplo
<?php
echo 'Propietario script actual: ' . get_current_user();
?>
El resultado del ejemplo sera algo similar a:
Propietario script actual: SYSTEM
Report a bug
Ver tambin
getmyuid() - Obtiene el UID del dueo del script PHP
getmygid() - Obtener el GID del dueo del script PHP
getmypid() - Obtiene el ID del proceso PHP
getmyinode() - Obtiene el inode del script actual
getlastmod() - Obtiene la hora de la ltima modificacin de la pgina
get_defined_constants
(PHP 4 >= 4.1.0, PHP 5)
get_defined_constants Devuelve un array asociativo con los nombres de todas
las constantes y sus valores
Report a bug
Descripcin
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
funcin define().
Report a bug
Parmetros
categorize
Provoca que la funcin retorne un array multi-dimensional con categorias en
las claves de la primera dimensin y constantes y sus valores en la segunda
dimensin.
<?php
define("MI_CONSTANTE", 1);
print_r(get_defined_constants(true));
?>
El resultado del ejemplo sera 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
)

)
Report a bug
Valores devueltos
Devuelve un array de arrays nombre_constante => valor_constante,
opcionalmente agrupados por nombre de extensin registrando la constante.
Report a bug
Historial de cambios
Versin Descripcin
5.3.1
Slo para Windows: las constantes fundamentales se clasifican en Core,
previamente mhash.
5.3.0
Constantes fundamentales se clasifican en Core, antes internal. En Windows, las
constantes fundamentales se clasifican enmhash.


Versin Descripcin
5.2.11
El parmetro categorize ahora funciona correctamente. Anteriormente, el
parmetro 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 parmetro categorize fue agregado.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de get_defined_constants()
<?php
print_r(get_defined_constants());
?>
El resultado del ejemplo sera 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
)
Report a bug
Ver tambin
defined() - Comprueba si existe una constante con nombre dada
get_loaded_extensions() - Devuelve un array con los nombres de todos
los mdulos compilados y cargados
get_defined_functions() - Devuelve una matriz de todas las funciones
definidas
get_defined_vars() - Devuelve una matriz con todas las variables
definidas
get_extension_funcs
(PHP 4, PHP 5)


get_extension_funcs Devuelve una matriz con los nombres de funciones de un
mdulo
Report a bug
Descripcin
array get_extension_funcs ( string $module_name )
Esta funcin devuelve los nombres de todas las funciones definidas en el mdulo
indicado por nombre_modulo.
Report a bug
Parmetros
module_name
El nombre del mdulo.
Nota:
Este parmetro debe estar en minsculas.
Report a bug
Valores devueltos
Devuelve una matriz con todas las funciones, o FALSE si nombre_modulo no es
una extensin vlida.
Report a bug
Ejemplos
Ejemplo #1 Imprime las funciones XML
<?php
print_r(get_extension_funcs("xml"));
?>
El resultado del ejemplo sera 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
)
Report a bug
Ver tambin
get_loaded_extensions() - Devuelve un array con los nombres de todos
los mdulos compilados y cargados
ReflectionExtension::getFunctions() - Obtiene las funciones de una
extensin
get_include_path
(PHP 4 >= 4.3.0, PHP 5)
get_include_path Obtiene la opcin de configuracin include_path actual
Report a bug
Descripcin
string get_include_path ( void )
Obtiene el valor actual de la opcin de configuracin include_path.
Report a bug
Valores devueltos
Devuelve la ruta, como una cadena.
Report a bug


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');
?>
Report a bug
Ver tambin
ini_get() - Devuelve el valor de una directiva de configuracin
restore_include_path() - Restablece el valor de la opcin de configuracin
include_path
set_include_path() - Establece la opcin de configuracin include_path
include - include
get_included_files
(PHP 4, PHP 5)
get_included_files Devuelve un array con los nombres de los archivos incluidos
o requeridos
Report a bug
Descripcin
array get_included_files ( void )
Obtiene los nombres de todos los archivos que han sido incluidos
usando include, include_once, require o require_once.
Report a bug
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 mltiples veces solo aparecen una vez
en el array devuelto.
Report a bug


Historial de cambios
Versin Descripcin
4.0.1
En PHP 4.0.1 y versiones anteriores esta funcin asuma que los archivos requeridos
finalizaban en la extensin .php; otras extensiones no sern devueltas. La array devuelto
por get_included_files() era un array asociativo y solo listaba los archivos incluidos
por include e include_once.
Report a bug
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 sera:
abc.php
test1.php
test2.php
test3.php
test4.php
Report a bug
Notas
Nota:
Los archivos incluidos usando la directiva de configuracin auto_prepend_file no
son incluidos en el array devuelta.
Report a bug


Ver tambin
include - include
include_once - include_once
require - require
require_once - require_once
get_required_files() - Alias de get_included_files
get_loaded_extensions
(PHP 4, PHP 5)
get_loaded_extensions Devuelve un array con los nombres de todos los
mdulos compilados y cargados
Descripcin
array get_loaded_extensions ([ bool $zend_extensions = false ] )
Esta funcin devuelve los nombres de todos los mdulos compilados y cargados en
el intrprete de PHP.
Parmetros
zend_extensions
Slo 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 mdulos.
Historial de cambios
Versin Descripcin
5.2.4
Fue aadido el parmetro
opcional zend_extensions
Ejemplos
Ejemplo #1 get_loaded_extensions()
<?php
print_r(get_loaded_extensions());
?>


El resultado del ejemplo sera 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 tambin
get_extension_funcs() - Devuelve una matriz con los nombres de
funciones de un mdulo
extension_loaded() - Encontrar si una extensin est cargada
dl() - Carga una extensin PHP en tiempo de ejecuccin
phpinfo() - Muestra informacin sobre la configuracin de PHP
get_magic_quotes_gpc
(PHP 4, PHP 5)
get_magic_quotes_gpc Obtiene el valor actual de configuracin de
magic_quotes_gpc
Report a bug
Descripcin
bool get_magic_quotes_gpc ( void )
Devuelve el valor actual del parmetro de configuracin magic_quotes_gpc
Tenga en cuenta que intentar establecer el parmetro magic_quotes_gpc no
funcionar en tiempo de ejecucin.
Para ms informacin sobre magic_quotes, vea esta seccin de seguridad.
Report a bug
Valores devueltos
Devuelve 0 si las comillas mgicas estn deshabilitadas, 1 de lo contrario. O
siempre devuelve FALSE a partir de PHP 5.4.0.


Report a bug
Historial de cambios
Versin Descripcin
5.4.0
Siempre devuelve FALSE debido a que la caracterstica de comillas mgicas ha sido
eliminada de PHP.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de get_magic_quotes_gpc()
<?php
// Si las comillas mgicas estn 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')";
?>
Report a bug
Notas
Nota:
Si la directiva magic_quotes_sybase se encuentra habilitada (ON), sobrescribir
completamente magic_quotes_gpc. As que aun
cuandoget_magic_quotes_gpc() devuelve TRUE, ni las comillas dobles, ni las
barras invertidas o caracteres NUL sern escapados. Slo las comillas sencillas
sern escapadas. En este caso se vern de este modo: ''
Report a bug


Ver tambin
addslashes() - Escapa un string con barras invertidas
stripslashes() - Quita las barras de un string con comillas escapadas
get_magic_quotes_runtime() - Obtiene el valor de configuracin activo
actual de magic_quotes_runtime
ini_get() - Devuelve el valor de una directiva de configuracin
get_magic_quotes_runtime
(PHP 4, PHP 5)
get_magic_quotes_runtime Obtiene el valor de configuracin activo actual de
magic_quotes_runtime
Report a bug
Descripcin
bool get_magic_quotes_runtime ( void )
Devuelve el valor de configuracin activo actual de magic_quotes_runtime.
Report a bug
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.
Report a bug
Historial de cambios
Versin Descripcin
5.4.0
Siempre devuelve FALSE debido a que la caracterstica de comillas mgicas ha sido
eliminada de PHP.
Report a bug
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);


}
?>
Report a bug
Ver tambin
get_magic_quotes_gpc() - Obtiene el valor actual de configuracin de
magic_quotes_gpc
set_magic_quotes_runtime() - Establece el valor de configuracin activo
actual de magic_quotes_runtime
get_required_files
(PHP 4, PHP 5)
get_required_files Alias de get_included_files()
Report a bug
Descripcin
Esta funcin es un alias de: get_included_files().
getenv
(PHP 4, PHP 5)
getenv Obtiene el valor de una variable de entorno
Report a bug
Descripcin
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 estn listadas bajo la especificacin RFC 3875, especficamente
la seccin 4.1, "Request Meta-Variables".
Report a bug
Parmetros
varname


El nombre de variable.
Report a bug
Valores devueltos
Devuelve el valor de la variable de entorno varname, o FALSE si la variable
entorno varname no existe.
Report a bug
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'];
?>
Report a bug
Ver tambin
putenv() - Establece el valor de una variable de entorno
apache_getenv() - Obtiene una variable del entorno subprocess_env de
Apache
Superglobales
getlastmod
(PHP 4, PHP 5)
getlastmod Obtiene la hora de la ltima modificacin de la pgina
Report a bug
Descripcin
int getlastmod ( void )
Obtiene la hora de la ltima modificacin de la pgina actual.
Si est interesado en obtener la hora de la ltima modificacin de un archivo
diferente, considere el uso de filemtime().
Report a bug


Valores devueltos
Devuelve la hora de la ltima modificacin de la pgina actual. El valor devuelto es
una marca de tiempo Unix, apropiada para ser pasada adate(). Devuelve FALSE en
caso de fallo.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de getlastmod()
<?php
// imprime p.ej. 'Ultima modificacin: March 04 1998 20:43:59.'
echo "Ultima modificacin: " . date ("F d Y H:i:s.", getlastmod());
?>
Report a bug
Ver tambin
date() - Dar formato a la fecha/hora local
getmyuid() - Obtiene el UID del dueo del script PHP
getmygid() - Obtener el GID del dueo 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 modificacin de un archivo
getmygid
(PHP 4 >= 4.1.0, PHP 5)
getmygid Obtener el GID del dueo del script PHP
Report a bug
Descripcin
int getmygid ( void )
Obtiene el ID de grupo del script actual.
Report a bug
Valores devueltos
Devuelve el ID de grupo del script actual, o FALSE en caso de error.
Report a bug


Ver tambin
getmyuid() - Obtiene el UID del dueo del script PHP
getmypid() - Obtiene el ID del proceso PHP
get_current_user() - Obtiene el nombre del propietario del script PHP actual
getmyinode() - Obtiene el inode del script actual
getlastmod() - Obtiene la hora de la ltima modificacin de la pgina
getmyinode
(PHP 4, PHP 5)
getmyinode Obtiene el inode del script actual
Report a bug
Descripcin
int getmyinode ( void )
Obtiene el inode del script actual.
Report a bug
Valores devueltos
Devuelve el inodo del script actual como un entero, o FALSE en caso de error.
Report a bug
Ver tambin
getmygid() - Obtener el GID del dueo del script PHP
getmyuid() - Obtiene el UID del dueo 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 modificacin de la pgina
getmypid
(PHP 4, PHP 5)
getmypid Obtiene el ID del proceso PHP
Report a bug
Descripcin
int getmypid ( void )


Obtiene el ID del proceso PHP actual.
Report a bug
Valores devueltos
Devuelve el ID del proceso PHP actual, o FALSE si ocurre un error.
Report a bug
Notas
Advertencia
Los IDs de proceso no son nicos, por lo tanto son una fuente dbil de entropa. Es
recomendable no depender en ids de proceso en contextos sujetos a
consideraciones de seguridad.
Report a bug
Ver tambin
getmygid() - Obtener el GID del dueo del script PHP
getmyuid() - Obtiene el UID del dueo del script PHP
get_current_user() - Obtiene el nombre del propietario del script PHP actual
getmyinode() - Obtiene el inode del script actual
getlastmod() - Obtiene la hora de la ltima modificacin de la pgina
getmyuid
(PHP 4, PHP 5)
getmyuid Obtiene el UID del dueo del script PHP
Report a bug
Descripcin
int getmyuid ( void )
Obtiene el ID de usuario para el script actual.
Report a bug
Valores devueltos
Devuelve el ID de usuario del script actual, o FALSE en caso de error.
Report a bug


Ver tambin
getmygid() - Obtener el GID del dueo del script PHP
getmypid() - Obtiene el ID del proceso PHP
get_current_user() - Obtiene el nombre del propietario del script PHP actual
getmyinode() - Obtiene el inode del script actual
getlastmod() - Obtiene la hora de la ltima modificacin de la pgina
getopt
(PHP 4 >= 4.3.0, PHP 5)
getopt Obtiene las opciones de la lista de argumentos de la lnea de comandos
Report a bug
Descripcin
array getopt ( string $options [, array $longopts ] )
Analiza las opciones pasadas al script.
Report a bug
Parmetros
options
Cada carcter de esta cadena de texto se usar como un carcter de opcin
y se comparar con aquellas opciones pasadas al script que comiencen con
un guin simple (-). Por ejemplo, el string de opciones "x" reconocer la
opcin -x. Slo 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 compararn con aquellas opciones pasadas al script que
comiencen con dos guiones (--). Por ejemplo, longopts tuviera un elemento
con "opt", reconocera la opcin --opt.
El parmetro options puede contener los siguientes elementos:
Caracteres individuales (no acepta valores)
Caracteres seguidos por dos puntos (el parmetro exije un valor)


Caracteres seguidos dos veces por dos puntos (valor opcional)
Los valores de opcin sern 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
opcin) mientras que options contiene un string (donde cada carcter es
la opcin).
Report a bug
Valores devueltos
Esta funcin devolver un array de pares opciones / argumentos,
o FALSE en caso de error.
Nota:
El anlisis de opciones finalizar cuando se encuentre alguna no-opcin.
Todo lo que haya a continuacin ser descartado.
Report a bug
Historial de cambios
Versin Descripcin
5.3.0 Aadido soporte para usar "=" como separador de argumento/valor.
5.3.0 Aadido soporte para valores opcionales (especificado mediante "::").
5.3.0 El parmetro longopts est disponible en todos los sistemas.
5.3.0
Esta funcin ya no depende del sistema y funciona tambin en
Windows.
Report a bug
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 mltiples 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)
}
Report a bug
Ver tambin
$argv
getrusage
(PHP 4, PHP 5)
getrusage Obtiene el uso de los recursos actuales
Report a bug
Descripcin
array getrusage ([ int $who = 0 ] )
Esta es una interfaz de getrusage(2). Obtiene datos devueltos de la llamada al
sistema.
Report a bug
Parmetros
who
Si el parmetro who es 1, getrusage ser llamado con RUSAGE_CHILDREN.
Report a bug


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.
Report a bug
Ejemplos
Ejemplo #1 getrusage() ejemplo
<?php
$dat = getrusage();
echo $dat["ru_nswap"]; // nmero de intercambios
echo $dat["ru_majflt"]; // nmero de fallos de pgina
echo $dat["ru_utime.tv_sec"]; // tiempo de usuario utilizado (segundos)
echo $dat["ru_utime.tv_usec"]; // tiempo de usuario usado (microsegundos)
?>
Report a bug
Notas
Nota: Esta funcin no est implementada en plataformas Windows.
Report a bug
Ver tambin
Pgina principal de sistema sobre getrusage(2)
ini_alter
(PHP 4, PHP 5)
ini_alter Alias de ini_set()
Report a bug
Descripcin
Esta funcin es un alias de: ini_set().
ini_get_all
(PHP 4 >= 4.2.0, PHP 5)
ini_get_all Obtiene todas las opciones de configuracin


Report a bug
Descripcin
array ini_get_all ([ string $extension [, bool $details = true ]] )
Devuelve todas las opciones de configuracin registradas.
Report a bug
Parmetros
extension
Un nombre de extensin opcional. Si se establece, la funcin de retornar
nicamente opciones especficas para esa extensin.
details
Recupera los detalles de configuracin o slo el valor actual de cada
configuracin. Por omisin es TRUE (recuperar detalles).
Report a bug
Valores devueltos
Devuelve un array asociativo con el nombre de la directiva como la clave
del array.
Cuando el parmetro details es TRUE (por omisin) 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 parmetro details es FALSE el valor ser el valor actual de la
opcin.
Vea la seccin del manual para obtener informacin sobre lo que
significan los niveles de acceso.
Nota:
Es posible que una directiva tenga mltiples niveles de acceso, por lo que
el access muestra los valores de mscara de bits adecuado.
Report a bug


Historial de cambios
Versin Descripcin
5.3.0
Se
aadi details.
Report a bug
Ejemplos
Ejemplo #1 ini_get_all() ejemplos
<?php
print_r(ini_get_all("pcre"));
print_r(ini_get_all());
?>
El resultado del ejemplo sera 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 aadi en PHP 5.3.0
print_r(ini_get_all(null, false)); // Se aadi en PHP 5.3.0
?>
El resultado del ejemplo sera algo similar a:
Array
(
[pcre.backtrack_limit] => 100000
[pcre.recursion_limit] => 100000
)
Array
(
[allow_call_time_pass_reference] => 0
[allow_url_fopen] => 1
...
)
Report a bug
Ver tambin
Cmo cambiar los ajustes de configuracin
ini_get() - Devuelve el valor de una directiva de configuracin
ini_restore() - Restablece el valor de una opcin de configuracin
ini_set() - Establece el valor de una directiva de configuracin
get_loaded_extensions() - Devuelve un array con los nombres de
todos los mdulos compilados y cargados
phpinfo() - Muestra informacin sobre la configuracin de PHP
ReflectionExtension::getINIEntries() - Obtiene las entradas INI de
la extensin
ini_get
(PHP 4, PHP 5)
ini_get Devuelve el valor de una directiva de configuracin
Report a bug
Descripcin
string ini_get ( string $varname )
En caso de xito devuelve el valor de una directiva de configuracin.
Report a bug


Parmetros
varname
Nombre de la directiva de configuracin.
Report a bug
Valores devueltos
Devuelve el valor de la opcin de configuracin como cadena en caso de xito,
o una cadena vaca para valores null. Devuelve FALSE si la opcin de
configuracin no existe.
Report a bug
Ejemplos
Ejemplo #1 Unos cuantos ejemplos de la funcin ini_get()
<?php
/*
Dentro del php.ini tenemos las siguientes directivas junto con sus valores i
niciales:

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 sera algo similar a:

display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

Report a bug
Notas
Nota: Cuando se consultan valores booleanos
El valor booleano off ser devuelto como una cadena vaca o "0", mientras
que el valor booleano on ser devuelto ser devuelto como "1". Esta funcin
tambin puede devolver valores iniciales como cadenas.
Nota: Cuando se consultan valores de tamaos de memoria
Muchos valores iniciales de tamaos de memoria, tales
como upload_max_filesize, estn almacenados en el fichero php.ini en
notacin abreviada. ini_get() devolver la cadena exacta almacenada en el
fichero php.ini y NO su valor de tipo integer equivalente. Utilizar estos valores
en funciones aritmticas puede provocar resultados inesperados. El ejemplo
anterior muestra una manera de convertir la notacin abreviada a bytes, muy
similar a cmo lo hace el cdigo fuente de PHP.
Report a bug
Historial de cambios
Versin Descripcin
5.3.0
Anteriormente, se devolva un string si la opcin de configuracin no exista. Ahora
en su lugar se devuelve FALSE.
Report a bug
Ver tambin
get_cfg_var() - Obtiene el valor de una opcin de configuracin de PHP
ini_get_all() - Obtiene todas las opciones de configuracin


ini_restore() - Restablece el valor de una opcin de configuracin
ini_set() - Establece el valor de una directiva de configuracin
ini_restore
(PHP 4, PHP 5)
ini_restore Restablece el valor de una opcin de configuracin
Report a bug
Descripcin
void ini_restore ( string $varname )
Restaura una opcin de configuracin dado su valor original.
Report a bug
Parmetros
varname
El nombre de la opcin de configuracin.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 ini_restore() ejemplo
<?php
$setting = 'y2k_compliance';

echo 'Valor actual \'' . $setting . '\': ' . ini_get($setting), PHP_EOL;

ini_set($setting, ini_get($setting) ? 0 : 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 sera:
Valor actual 'y2k_compliance': 1
Nuevo valor 'y2k_compliance': 0
Valor original 'y2k_compliance': 1
Report a bug
Ver tambin
ini_get() - Devuelve el valor de una directiva de configuracin
ini_get_all() - Obtiene todas las opciones de configuracin
ini_set() - Establece el valor de una directiva de configuracin
ini_set
(PHP 4, PHP 5)
ini_set Establece el valor de una directiva de configuracin
Report a bug
Descripcin
string ini_set ( string $varname , string $newvalue )
Establece el valor de la directiva de configuracin dada. La opcin de configuracin
mantendr este nuevo valor durante la ejecucin del script, y se restaurar cuando
acabe el mismo.
Report a bug
Parmetros
varname
No todas las directivas pueden ser modificadas con ini_set(). Hay una lista
con todas las directivas disponibles en el apndice.
newvalue
El nuevo valor para la opcin.
Report a bug


Valores devueltos
Devuelve el valor anterior en caso de xito, FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Establece una opcin ini
<?php
echo ini_get('display_errors');

if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}

echo ini_get('display_errors');
?>
Report a bug
Ver tambin
get_cfg_var() - Obtiene el valor de una opcin de configuracin de
PHP
ini_get() - Devuelve el valor de una directiva de configuracin
ini_get_all() - Obtiene todas las opciones de configuracin
ini_restore() - Restablece el valor de una opcin de configuracin
Cmo cambiar los ajustes de configuracin
magic_quotes_runtime
(PHP 4, PHP 5)
magic_quotes_runtime Alias de set_magic_quotes_runtime()
Report a bug
Descripcin
Esta funcin es un alias de: set_magic_quotes_runtime()
main
main Funcin main() falsa
Report a bug


Descripcin
No existe ninguna funcin main(), salvo en el cdigo fuente de PHP. En PHP 4.3.0,
se introdujo un nuevo tipo de manejador de errores en el cdigo fuente de PHP
(php_error_docref). Existe una opcin que permite enlazar a pginas del manual
de PHP en los errores de mensaje cuando las directivas de
PHP html_errors (habilitado por omisin) y docref_root (hasta PHP 4.3.2,
habilitado por omisin) estn habilitadas.
Algunos mensajes de error apuntan a la pgina del manual para la
funcin main(), que es por lo que esta pgina existe. Si descubre alguna
referencia a esta pgina, por favor reporte un informe de error, indicando la
funcin PHP que provoc el error que apunt amain(), para que sea corregido y
documentado.
Errores conocidos que apuntaban a main()
Nombre de la funcin No apunta aqu desde
include 5.1.0
include_once 5.1.0
require 5.1.0
require_once 5.1.0
Report a bug
Ver tambin
html_errors
display_errors
memory_get_peak_usage
(PHP 5 >= 5.2.0)
memory_get_peak_usage Devuelve el mximo de memoria asignada por PHP
Report a bug
Descripcin
int memory_get_peak_usage ([ bool $real_usage = false ] )


Devuelve el mximo de memoria, en bytes, que se ha asignado a su script PHP.
Report a bug
Parmetros
real_usage
Si se deja en TRUE puede obtener el tamao real de memoria asignada por
el sistema. Si no se establece o es FALSE, la memoria utilizada
por emalloc() es reportada.
Report a bug
Valores devueltos
Devuelve el mximo de memoria en bytes.
Report a bug
Historial de cambios
Versin Descripcin
5.2.1
Compilar con --enable-memory-limit ya no es necesario para que esta funcin
exista.
5.2.0 se aade real_usage.
Report a bug
Ver tambin
memory_get_usage() - Devuelve la cantidad de memoria asignada a
PHP
memory_limit
memory_get_usage
(PHP 4 >= 4.3.2, PHP 5)
memory_get_usage Devuelve la cantidad de memoria asignada a PHP
Report a bug


Descripcin
int memory_get_usage ([ bool $real_usage = false ] )
Devuelve la cantidad de memoria, en bytes, que actualmente se asigna a su script
PHP.
Report a bug
Parmetros
real_usage
Debe establecer esto a TRUE para obtener el tamao real de memoria
asignada por el sistema. Si no se establece o es FALSE slo se reportar la
memoria usada por emalloc().
Report a bug
Valores devueltos
Devuelve la cantidad de memoria en bytes.
Report a bug
Historial de cambios
Versin Descripcin
5.2.1
Compilar con --enable-memory-limit ya no es necesario para que exista esta
funcin.
5.2.0 Se aadi real_usage.
Report a bug
Ejemplos
Ejemplo #1 A memory_get_usage() ejemplo
<?php
// Este es slo un ejemplo, los siguientes nmeros
// sern 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

?>
Report a bug
Ver tambin
memory_get_peak_usage() - Devuelve el mximo de memoria
asignada por PHP
memory_limit
php_ini_loaded_file
(PHP 5 >= 5.2.4)
php_ini_loaded_file Recupera la ruta de acceso al archivo php.ini cargado
Report a bug
Descripcin
string php_ini_loaded_file ( void )
Comprueba si un archivo php.ini se ha cargado, y recupera su ruta de acceso.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
La ruta de php.ini cargado, o FALSE si uno no se ha cargado.
Report a bug
Ejemplos
Ejemplo #1 php_ini_loaded_file() ejemplo
<?php
$inipath = php_ini_loaded_file();



if ($inipath) {
echo 'archivo php.ini cargado: ' . $inipath;
} else {
echo 'ningn archivo php.ini ha sido cargado';
}
?>
El resultado del ejemplo sera algo similar a:
Loaded php.ini: /usr/local/php/php.ini
Report a bug
Ver tambin
php_ini_scanned_files() - Devuelve una lista de ficheros .ini procesados del
directorio adicional ini dir
phpinfo() - Muestra informacin sobre la configuracin de PHP
El archivo de configuracin
php_ini_scanned_files
(PHP 4 >= 4.3.0, PHP 5)
php_ini_scanned_files Devuelve una lista de ficheros .ini procesados del
directorio adicional ini dir
Report a bug
Descripcin
string php_ini_scanned_files ( void )
php_ini_scanned_files() devuelve una lista separada por comas de los ficheros
de configuracin procesados por php.ini. Estos archivos se encuentran en un
directorio definido por la opcin --with-config-file-scan-dir que se establece
durante la compilacin.
Los archivos de configuracin devueltos tambin incluyen la ruta como se declara
en la opcin --with-config-file-scan-dir .
Report a bug
Valores devueltos
Devuelve un string separado por comas de archivos .ini en caso de xito. Cada
coma es seguido por un salto de lnea. Si la directiva --with-config-file-scan-
dir no fu definida, devolver FALSE. Si se trata de establecer y el directorio estaba
vaco, un string vaco ser retornado. Si un archivo es irreconocible, el archivo
todava hace que se devuelva un string pero un error de PHP tambin dar lugar.
Este error de PHP se ver tanto en tiempo de compilacin y durante el uso
de php_ini_scanned_files().


Report a bug
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";
}
}
}
?>
Report a bug
Ver tambin
ini_set() - Establece el valor de una directiva de configuracin
phpinfo() - Muestra informacin sobre la configuracin de PHP
php_ini_loaded_file() - Recupera la ruta de acceso al archivo php.ini
cargado
php_logo_guid
(PHP 4, PHP 5 < 5.5)
php_logo_guid Obtiene el valor guid del logo
Report a bug
Descripcin
string php_logo_guid ( void )
Esta funcin 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.
Advertencia
Esta funcin ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.5.0.
Report a bug


Valores devueltos
Devuelve PHPE9568F34-D428-11d2-A769-00AA001ACF42.
Report a bug
Historial de cambios
Versin Descripcin
5.5.0
php_logo_guid() ha sido eliminada de
PHP.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de php_logo_guid()
<?php

echo '<img src="' . $_SERVER['PHP_SELF'] .
'?=' . php_logo_guid() . '" alt="Logo de PHP!" />';

?>
Report a bug
Ver tambin
phpinfo() - Muestra informacin sobre la configuracin de PHP
phpversion() - Obtiene la versin de PHP
phpcredits() - Imprime los crditos de PHP
zend_logo_guid() - Obtiene el valor guid de Zend
php_sapi_name
(PHP 4 >= 4.0.1, PHP 5)
php_sapi_name Devuelve el tipo de interfaz que hay entre PHP y el servidor
Report a bug
Descripcin
string php_sapi_name ( void )
Devuelve una cadena en minsculas 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 podra tener varios valores diferentes dependiendo
de la SAPI que se utilice. Ms abajo se enumeran los posibles valores.


Report a bug
Valores devueltos
Devuelve el tipo de interfaz, como cadena de texto en minsculas.
Pese a no ser una lista completa, los posibles valores
incluyen aolserver, apache, apache2filter, apache2handler, caudium, cgi (h
asta PHP 5.3), cgi-
fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web,
roxen, thttpd, tux, y webjames.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de php_sapi_name()
Este ejemplo comprueba si est la cadena cgi, ya que podra darse un nombre
como cgi-fcgi.
<?php
$sapi_type = php_sapi_name();
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "Est usando PHP CGI\n";
} else {
echo "No est usando PHP CGI\n";
}
?>
Report a bug
Notas
Nota: Una forma alternativa
La constante de PHP PHP_SAPI contiene el mismo valor que php_sapi_name().
Sugerencia
Posible malentendido
Podra no ser evidente cul es la SAPI en uso, ya que, por ejemplo, en lugar
de apache podra aparecer definida como apache2handler o
como apache2filter.
Report a bug
Ver tambin
PHP_SAPI


php_uname
(PHP 4 >= 4.0.2, PHP 5)
php_uname Devuelve informacin sobre el sistema operativo en que se est
ejecutando PHP
Report a bug
Descripcin
string php_uname ([ string $mode = "a" ] )
php_uname() devuelve una descripcin del sistema operativo en que se est
ejecutando PHP. Esta misma informacin 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 ms antigos de UNIX, es posible que no se pueda determinar
la informacin 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.
Report a bug
Parmetros
mode
mode es un caracter simple que define qu informacin 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 versin liberada. ej. 5.1.2-RELEASE.
'v': Informacin de la versin. Varia mucho entre los sistemas
operativos.
'm': Tipo de mquina. ej. i386.
Report a bug
Valores devueltos
Devuelve la descripcin, como una cadena de texto.


Report a bug
Ejemplos
Ejemplo #1 Algnos ejemplos de php_uname()
<?php
echo php_uname();
echo PHP_OS;

/* Algnos 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_OS, 0, 3)) === 'WIN') {
echo 'Este un servidor usando Windows!';
} else {
echo 'Este es un servidor que no usa Windows!';
}

?>
Tambin 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; // ;
?>
Report a bug
Ver tambin
phpversion() - Obtiene la versin de PHP


php_sapi_name() - Devuelve el tipo de interfaz que hay entre PHP y el
servidor
phpinfo() - Muestra informacin sobre la configuracin de PHP
phpcredits
(PHP 4, PHP 5)
phpcredits Imprime los crditos de PHP
Report a bug
Descripcin
bool phpcredits ([ int $flag = CREDITS_ALL ] )
Esta funcin imprime la lista de crditos de los desarrolladores de PHP, mdulos,
etc Genera los cdigos HTML apropiados para insertar la informacin en una
pgina.
Report a bug
Parmetros
flag
Para generar una pgina de crditos personalizada, puede utilizar el
parmetro flag.
Pre-defined phpcredits() flags
name description
CREDITS_ALL
Todos los crditos, equivalente a
usar: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP +CREDITS_MO
DULES + CREDITS_FULLPAGE. Genera una completa e independiente,
pgina HTML con las etiquetas apropiadas.
CREDITS_DO
CS
Los crditos para el equipo de documentacin
CREDITS_FUL
Por lo general se utiliza en combinacin con las otras flags. Indica que es
independiente de la pgina HTML debe ser impreso con la informacin


Pre-defined phpcredits() flags
name description
LPAGE indicada por las otras flags.
CREDITS_GE
NERAL
Crditos generales: Diseo y concepto del lenguaje, autores de PHP y el
mdulo SAPI.
CREDITS_GR
OUP
Una lista de los desarrolladores del ncleo.
CREDITS_MO
DULES
Una lista de los mdulos de extensin para PHP, y sus autores.
CREDITS_SAP
I
Una lista de los mdulos de servidor API para PHP, y sus autores.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Imprimir los crditos generales
<?php
phpcredits(CREDITS_GENERAL);
?>
Ejemplo #2 Imprimir los desarrolladores principales y el grupo de
documentacin
<?php
phpcredits(CREDITS_GROUP | CREDITS_DOCS | CREDITS_FULLPAGE);
?>
Ejemplo #3 Imprimir todos los crditos
<html>
<head>
<title>Mi pgina de crditos</title>
</head>
<body>


<?php
// Algn cdigo propio
phpcredits(CREDITS_ALL - CREDITS_FULLPAGE);
// algo ms de cdigo
?>
</body>
</html>
Report a bug
Notas
Nota:
phpcredits() genera texto plano en lugar de HTML al usar el modo CLI.
Report a bug
Ver tambin
phpversion() - Obtiene la versin de PHP
php_logo_guid() - Obtiene el valor guid del logo
phpinfo() - Muestra informacin sobre la configuracin de PHP
phpinfo
(PHP 4, PHP 5)
phpinfo Muestra informacin sobre la configuracin de PHP
Report a bug
Descripcin
bool phpinfo ([ int $what = INFO_ALL ] )
Muestra gran cantidad de informacin sobre el estado actual de PHP. Incluye
informacin sobre las opciones de compilacin y extensiones de PHP, versin de
PHP, informacin del servidor y entrono (si se compil como mdulo), entorno
PHP, versin del OS, rutas, valor de las opciones de configuracin locales y
generales, cabeceras HTTP y licencia de PHP.
Como cada sistema se instala diferente phpinfo() se usa comnmente para
revisaropciones de configuracin y variables predefinidasdisponibles en un sistema
dado
phpinfo() tambin es una valiosa herramienta de depuracin ya que contiene
todos valores EGPCS (Environment, GET, POST, Cookie, Server).
Report a bug


Parmetros
what
El resultado de salida puede ser personalizado al pasar una o ms de las
siguientes constantes sumadas juntas bit a bit en el parmetro
opcional what. Tambin se pueden combinar las respectivas constantes con
el operador bit a bit or.
phpinfo() opciones
Nombre(constante) Valor Descripcin
INFO_GENERAL 1
La lnea de configuracin, ubicacin de php.ini, fecha de
compilacin, servidor Web, sistema y ms.
INFO_CREDITS 2 Crditos de PHP. Ver tambin phpcredits().
INFO_CONFIGURATIO
N
4
Valores Locales y Maestros actuales de las directivas
PHP. Ver tambin ini_get().
INFO_MODULES 8
Mdulos cargados y sus respectivos parmetros Ver
tambin get_loaded_extensions().
INFO_ENVIRONMENT 16
Informacin 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
Informacin de Licencia de PHP. Ver tambin el FAQ de
licencia.
INFO_ALL -1 Muestra toda la informacin anterior
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Historial de cambios
Versin Descripcin
5.5.0
Los GUIDs de logos fueron reemplazados con URIs de datos, por lo que desactivar
ahora expose_php no tiene efecto sobre el resutaldo de phpinfo(). Los crditos
ahora tambin han sido embebidos en la salida misma en vez mediante enlaces.
5.2.2
Se aadi la informacin del "Fichero de configuracin cargado", mientras que
anteriormente solo exista "Ruta del fichero de configuracin (php.ini).
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de phpinfo()
<?php

// Muestra toda la informacin, por defecto INFO_ALL
phpinfo();

// Muestra solamente la informacin de los mdulos.
// phpinfo(8) hace exactamente lo mismo.
phpinfo(INFO_MODULES);

?>
Report a bug
Notas
Nota:
En versiones de PHP anteriores a la 5.5.0, las partes de la informacin que se
muestra estn deshabilidadas cuando la opcin de
configuracin expose_php est establecida a off. Esto incluye los logos de PHP
y Zend y los crditos.
Nota:
phpinfo() muestra texto plano en lugar de HTML cuando se utiliza en la lnea
de comandos.


Report a bug
Ver tambin
phpversion() - Obtiene la versin de PHP
phpcredits() - Imprime los crditos de PHP
php_logo_guid() - Obtiene el valor guid del logo
ini_get() - Devuelve el valor de una directiva de configuracin
ini_set() - Establece el valor de una directiva de configuracin
get_loaded_extensions() - Devuelve un array con los nombres de todos
los mdulos compilados y cargados
Variables predefinidas
phpversion
(PHP 4, PHP 5)
phpversion Obtiene la versin de PHP
Report a bug
Descripcin
string phpversion ([ string $extension ] )
Devuelve una cadena que contiene la versin del analizador de PHP en ejecucin o
extensin.
Report a bug
Parmetros
extension
Un nombre de extensin opcional.
Report a bug
Valores devueltos
Si el parmetro opcional extension ha sido
especificado, phpversion() devuelve la versin de la extensin, o FALSE si no
hay informacin de versin asociada o la extensin no est habilitada.
Report a bug


Ejemplos
Ejemplo #1 phpversion() Ejemplo bsico
<?php
// Imprime ejemplo 'Versin actual de PHP: 5.3.8'
echo 'Versin actual de PHP: ' . phpversion();

// Imprime ejemplo '2.0' o nada si la extensin 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
// versin 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 + $ver
sion[2]));
}

// PHP_VERSION_ID se define como un nmero, donde el mayor nmero,
// es la versin ms reciente de PHP usada. Se define tal como se utiliza la
// expresin anterior.
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_ve
rsion;
//
// Ahora, con PHP_VERSION_ID podemos comprobar las caractersticas que la ve
rsin de
// PHP pueda tener, esto no requiere el uso version_compare () cada vez que
compruebe si la
// versin de PHP no es compatible con una caracterstica.
//
// Por ejemplo, aqu podemos definir las constantes PHP_VERSION_ * que
// no estn 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, ...
}
?>
Report a bug


Notas
Nota:
Esta informacin tambin est disponible en la constante
predefinida PHP_VERSION. Ms informacin de versin est disponible utilizando
las constantes PHP_VERSION_*
Report a bug
Ver tambin
constantes predefinidas
version_compare() - Compara dos nmeros de versiones
estandarizados de PHP
phpinfo() - Muestra informacin sobre la configuracin de PHP
phpcredits() - Imprime los crditos de PHP
php_logo_guid() - Obtiene el valor guid del logo
zend_version() - Obtiene la versin del motor Zend actual
putenv
(PHP 4, PHP 5)
putenv Establece el valor de una variable de entorno
Report a bug
Descripcin
bool putenv ( string $setting )
Agrega setting al entorno del servidor. La variable de entorno existir nicamente
durante la peticin actual. Al final de la peticin 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_varscontiene 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 omisin, los usuarios slo podrn definir variables
de entorno que comiencen con PHP_ (p.ej. PHP_FOO=BAR). Nota: si esta
directiva se encuentra vaca, 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 sern protegidas incluso


si safe_mode_allowed_env_vars se establece de tal modo que permita
modificarlas.
Report a bug
Parmetros
setting
El parmetro, como p.ej. "FOO=BAR"
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Definicin de una variable de entorno
<?php
putenv("UNIQID=$uniqid");
?>
Report a bug
Notas
Advertencia
La
directiva safe_mode_allowed_env_vars y safe_mode_protected_env_v
ars slo tendrn efecto cuandosafe_mode est habilitado.
Report a bug
Ver tambin
getenv() - Obtiene el valor de una variable de entorno
restore_include_path
(PHP 4 >= 4.3.0, PHP 5)
restore_include_path Restablece el valor de la opcin de configuracin
include_path


Report a bug
Descripcin
void restore_include_path ( void )
Restablece la opcin de configuracin include_path a su valor maestro original, tal
y como se encuentre definido en php.ini
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
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

?>
Report a bug
Ver tambin
ini_restore() - Restablece el valor de una opcin de configuracin
get_include_path() - Obtiene la opcin de configuracin include_path actual
set_include_path() - Establece la opcin de configuracin include_path
include - include
set_include_path
(PHP 4 >= 4.3.0, PHP 5)


set_include_path Establece la opcin de configuracin include_path
Descripcin
string set_include_path ( string $new_include_path )
Establece la opcin de configuracin include_path durante la duracin del script.
Parmetros
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 Aadir a la ruta de inclusin
Haciendo uso de la constante PATH_SEPARATOR es posible extender la ruta de
inclusin 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 tambin
ini_set() - Establece el valor de una directiva de configuracin
get_include_path() - Obtiene la opcin de configuracin include_path
actual
restore_include_path() - Restablece el valor de la opcin de
configuracin include_path


include - include
set_magic_quotes_runtime
(PHP 4, PHP 5 < 5.4.0)
set_magic_quotes_runtime Establece el valor de configuracin activo actual de
magic_quotes_runtime
Report a bug
Descripcin
bool set_magic_quotes_runtime ( bool $new_setting )
Establecer el ajuste de configuracin activo actual de magic_quotes_runtime.
Advertencia
Esta funcin ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a
partir de PHP 5.4.0.
Report a bug
Parmetros
new_setting
FALSE para off, TRUE para on.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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 acrnimo recursivo');



// Sin magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(false);

echo 'Sin magic_quotes_runtime: ' . fread($fp, 64), PHP_EOL;

// Con magic_quotes_runtime
rewind($fp);
set_magic_quotes_runtime(true);

echo 'Con magic_quotes_runtime: ' . fread($fp, 64), PHP_EOL;

// Clean up
fclose($fp);
?>
El resultado del ejemplo sera:
Sin magic_quotes_runtime: 'PHP' es un acrnimo recursivo
Con magic_quotes_runtime: \'PHP\' es un acrnimo recursivo
Report a bug
Ver tambin
get_magic_quotes_gpc() - Obtiene el valor actual de configuracin de
magic_quotes_gpc
get_magic_quotes_runtime() - Obtiene el valor de configuracin activo
actual de magic_quotes_runtime
set_time_limit
(PHP 4, PHP 5)
set_time_limit Limita el tiempo mximo de ejecucin
Report a bug
Descripcin
void set_time_limit ( int $seconds )
Establece el nmero de segundos que se permite la ejecucin de un script. Si esto
se alcanza, el script devuelve un error fatal. El lmite 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 ejecucin 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.


Report a bug
Parmetros
seconds
El tiempo de ejecucin mximo, en segundos. Si se pone a cero se impone
sin lmite de tiempo.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Notas
Advertencia
Esta funcin no tiene efecto cuando PHP se ejecuta en safe mode. No hay
ninguna solucin ms que deshabilitar el modo seguro o cambiar el tiempo
lmite en el php.ini.
Nota:
La funcin set_time_limit() y la directiva de
configuracin max_execution_time slo afectan el tiempo de ejecucin del
script mismo. Todo el tiempo dedicado a la actividad que ocurre fuera de la
ejecucin 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 mximo del script en funcionamiento. Esto no
es cierto en Windows, donde el tiempo medido es real.
Report a bug
Ver tambin
max_execution_time
max_input_time
sys_get_temp_dir
(PHP 5 >= 5.2.1)
sys_get_temp_dir Devuelve la ruta del directorio para archivos temporales


Report a bug
Descripcin
string sys_get_temp_dir ( void )
Devuelve la ruta del directorio donde PHP almacena los archivos temporales por
defecto.
Report a bug
Valores devueltos
Devuelve la ruta del directorio temporal.
Report a bug
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 sera algo similar a:
C:\Windows\Temp\TuxA318.tmp
Report a bug
Ver tambin
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_compare Compara dos nmeros de versiones estandarizados de PHP
Report a bug
Descripcin
mixed version_compare ( string $version1 , string $version2 [, string $operator ]
)


version_compare() compara dos nmeros de versiones estandarizados de PHP.
Puede ser de utilidad en caso de escribir programas que tan solo funcionen en
determinadas versiones de PHP.
Esta funcin, en primer lugar reemplaza los _, - y + por puntos . y las cadenas de
texto de versiones y aade puntos . antes y despus de cualquier cdigo no
numrico, de manera que '4.3.2RC1' sera '4.3.2.RC.1'. Despus, trocea el
resultado tal como hara la funcin explode('.', $ver). Posteriormente compara
cada una de las partes, de izquierda a derecha. Si alguna parte contuviera un
texto especial de versin, se manejaran 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 tambin se pueden comparar versiones especficas de PHP que contengan
el estado de desarrollo en que se encuentran.
Report a bug
Parmetros
version1
Primer nmero de versin.
version2
Segundo nmero de versin.
operator
Si se especificara el argumento opcional operator, se podran comprobar
determinadas realciones. Los operadores posibles
son: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectivamente
.
Este parmetro es sensible a maysculas, por lo que debe introducirse en
minsculas.
Report a bug


Valores devueltos
Por omisin, version_compare() devuelve -1 si la primera versin
es inferior a la segunda, 0 si son iguales, y 1 si la segunda es
inferior.
Al usar el argumento opcional operator, la funcin de volver TRUE si
se cumpliera la relacin especificada por el operador, oFALSE en caso
contrario.
Report a bug
Ejemplos
Los siguientes ejemplos usan la constante PHP_VERSION, ya que esta
contiene el valor de la versin de PHP con que se est ejecutando el
cdigo.
Ejemplo #1 Ejemplos de version_compare()
<?php
if (version_compare(PHP_VERSION, '6.0.0') >= 0) {
echo 'Soy al menos la versin 6.0.0 de PHP, mi versin: ' . PHP
_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
echo 'Soy al menos la versin 5.3.0 de PHP, mi versin: ' . PHP
_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
echo 'Estoy usando la versin 5 de PHP, mi versin: ' . PHP_VER
SION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '<')) {
echo 'Estoy usando la versin 4 de PHP, mi versin: ' . PHP_VER
SION . "\n";
}
?>
Report a bug
Notas
Nota:
La constante PHP_VERSION almacena la versin de PHP en uso.


Nota:
Tenga presente que las versiones preeliminares, como por ejemplo
5.3.0-dev, se las considera inferiroes a la versin final (como por
ejemplo 5.3.0).
Nota:
Las cadenas de versiones especiales como alpha y beta son
sensibles a maysculas/minsculas. Las cadenas de versiones desde
fuentes arbitrarias que no se adhieren al estndar de PHP podran
necesitar ser convertidas a minsculas mediantestrtolower() antes de
llamar a version_compare().
Report a bug
Ver tambin
phpversion() - Obtiene la versin de PHP
php_uname() - Devuelve informacin sobre el sistema
operativo en que se est ejecutando PHP
function_exists() - Devuelve TRUE si la funcin dada ha sido
definida
zend_logo_guid
(PHP 4, PHP 5 < 5.5)
zend_logo_guid Obtiene el valor guid de Zend
Report a bug
Descripcin
string zend_logo_guid ( void )
Esta funcin devuelve el ID que puede ser usado para desplegar el logo de Zend
usando la imagen incorporada.
Advertencia
Esta funcin ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.5.0.
Report a bug
Valores devueltos
Devuelve PHPE9568F35-D428-11d2-A769-00AA001ACF42.
Report a bug


Historial de cambios
Versin Descripcin
5.5.0
zend_logo_guid() ha sido eliminada de
PHP.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de zend_logo_guid()
<?php

echo '<img src="' . $_SERVER['PHP_SELF'] .
'?=' . zend_logo_guid() . '" alt="Logo Zend!" />';

?>
Report a bug
Ver tambin
php_logo_guid() - Obtiene el valor guid del logo
zend_thread_id
(PHP 5)
zend_thread_id Devuelve un identificador nico del thread actual
Report a bug
Descripcin
int zend_thread_id ( void )
Esta funcin devuelve un identificador nico del thread actual.
Report a bug
Valores devueltos
Devuelve thread id en formato integer.
Report a bug
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 sera algo similar a:
El thread actual es: 7864
Report a bug
Notas
Nota:
Esta funcin solo est disponible en PHP compilado con soporte ZTS (Zend Thread
Safety) y modo debug (--enable-debug).
zend_version
(PHP 4, PHP 5)
zend_version Obtiene la versin del motor Zend actual
Report a bug
Descripcin
string zend_version ( void )
Devuelve una cadena que contiene la versin del Motor Zend ejecutndose
actualmente.
Report a bug
Valores devueltos
Devuelve el nmero de versin del Motor Zend, como una cadena.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de zend_version()
<?php
echo "Versin del motor Zend: " . zend_version();
?>
El resultado del ejemplo sera algo similar a:
Versin del motor Zend: 2.2.0
Report a bug


Ver tambin
phpinfo() - Muestra informacin sobre la configuracin de PHP
phpcredits() - Imprime los crditos de PHP
php_logo_guid() - Obtiene el valor guid del logo
phpversion() - Obtiene la versin de PHP
runkit
Introduccin
La extensin runkit proporciona medios para modificar constantes, funciones
definidas por el usuario y clases definidas por el usuario. Tambin proporciona
variables superglobales personalizadas y sub-intrpretes que se pueden embeber
mediante aislamiento de procesos (sandboxing).
Este paquete est hecho como una caracterstica aadida para reemplazar al
paquete classkit. Cuando se compila con la opcin --enable-runkit=classkit a
./configure, exportar las definiciones de funciones y constantes compatibles con
classkit.
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
RUNKIT_IMPORT_FUNCTIONS (integer)
Bandera de runkit_import() que indica que las funciones normales deberan
ser importadas desde el archivo especificado.
RUNKIT_IMPORT_CLASS_METHODS (integer)
Bandera de runkit_import() que indica que los mtodos de clases deberan
ser importados desde el archivo especificado.
RUNKIT_IMPORT_CLASS_CONSTS (integer)
Bandera de runkit_import() que indica que las constantes de clases
deberan ser importadas desde el archivo especificado. Observe que esta
bandera slo 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 estndar de
clases deberan 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,
mtodos, contantes o propiedades importados ya existen deberan ser
reemplazados con las nuevas definiciones. Si esta bandera no est
establecida, cualquier definicin importada que ya exista ser descartada.
RUNKIT_ACC_PUBLIC (integer)
Bandera especfica de PHP 5 para runkit_method_add()
RUNKIT_ACC_PROTECTED (integer)
Bandera especfica de PHP 5 para runkit_method_add()
RUNKIT_ACC_PRIVATE (integer)
Bandera especfica de PHP 5 para runkit_method_add()
CLASSKIT_ACC_PUBLIC (integer)
Bandera especfica de PHP 5 para classkit_method_add() Slo definida
cuando la compatibilidad con classkit est habilitada.
CLASSKIT_ACC_PROTECTED (integer)
Bandera especfica de PHP 5 para classkit_method_add() Slo definida
cuando la compatibilidad con classkit est habilitada.
CLASSKIT_ACC_PRIVATE (integer)
Bandera especfica de PHP 5 para classkit_method_add() Slo definida
cuando la compatibilidad con classkit est habilitada.
CLASSKIT_AGGREGATE_OVERRIDE (integer)
Bandera especfica de PHP 5 para classkit_import() Slo definida cuando la
compatibilidad con classkit est habilitada.
RUNKIT_VERSION (string)
Definida para la versin actual del paquete runkit.
CLASSKIT_VERSION (string)
Definida para la versin actual del paquete runkit. Slo definida cuando la
compatibilidad con classkit est habilitada.
Requerimientos
Modificar Constantes, Funciones, Clases y Mtodos funciona con todas las
distribuciones de PHP 4 y PHP 5. No se necesitan requisitos especiales.


Las Superglobales Personalizadas slo estn 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 versin de PHP
est en uso se debe compilar con la opcin --enable-maintainer-zts. Vea el
archivo README en el paquete de runkit para informacin adicional.
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/runkit.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de Configuracin de Runkit
Nombre Por defecto Cambiable Historial de cambios
runkit.superglobal "" PHP_INI_PERDIR
runkit.internal_override "0" PHP_INI_SYSTEM
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
runkit.superglobal string
Una lista separada por comas de nombres de variables que van a ser
tratadas como superglobales. Este valor debera estar establecido a travs
del archivo php.ini, pero puede funcionar en contextos de configuracin 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.
Runkit_Sandbox
(PECL runkit >= 0.7.0)
Runkit_Sandbox La Clase Runkit Sandbox -- Mquina Virtual de PHP
Report a bug
Descripcin
Al instanciar la clase Runkit_Sandbox se crea un nuevo hilo con su prpio 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 intrprete primario
puede hacer y proporciona un entorno seguro para ejecutar cdigo proporcionado
por el usuario.
Nota: Soporte para Entorno de Pruebas (requerido
por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) est disponible
slo 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 ms informacin.
Report a bug
Constructor
void Runkit_Sandbox::__construct ([ array $options ] )


options es un array asociativo que contiene cualquier combinacin 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 configuracin 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 configuracin 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 directoriosafe_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 tambin puede ser limpiado para indicar que la
caracterstica 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 confuguracin
actual de open_basedir. Si open_basedirno est establecido dentro del
mbito global, se asume que es el directorio raz y puede ser establecido a
cualquier ubicacin.


allow_url_fopen
Como safe_mode, esta configuracin slo puede ser hecha ms restrictiva, en
este caso establecindola a FALSEcuando estaba anteriomente establecida
a TRUE
disable_functions
Una lista de funciones separadas por comas a deshabilitar dentro del sub-
intrprete del aisalmiaento de procesos. Esta lista no necesita contener los
nombres de las funciones actualmente deshabiltadas, permanecern
deshabiltadas ya estn listadas o no.
disable_classes
Una lista de clases separadas por comas a deshabilitar dentro del sub-
intrprete del aisalmiaento de procesos. Esta lista no necesita contener los
nombres de las clases actualmente deshabiltadas, permanecern
deshabiltadas ya estn listadas o no.
runkit.superglobal
Una lista de varables separadas por comas a ser tratadas como
superglobales dentro del sub-intrprete del aislamiaento de procesos. Estas
variables sers usadas adems de cualquier variable definida internamente
o a travs de la configuracin global runkit.superglobal.
runkit.internal_override
La opcin 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);
?>
Report a bug
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 intrpretes. Adems, todas las matrices se copian en
profundidad y cualquier referencia se perder. Esto tambin siginifiva que las
referencias entre intrpretes 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 sera:
bar
barbaz
bool(false)
Report a bug


Llamar a Funciones de PHP
Cualquier funcin definida dentro del entorno de aislamiento de procesos puede
ser llamada como un mtodo del objeto de aislamiento de procesos. Esto tambin
incluye algunos contructores de lenguaje de pseudo-
funcin: 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 sera:
fbc
Cuando se pasan argumentos a una funcin 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, asegrese 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 sera:
bar
baz
Report a bug
Cambiar la Configuracin del Aislamiento de Procesos
A partir de la versin 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 slo lectura y proporcionan informacin de
estado. Otros ajustes, como output_handler, se pueden establecer y leer como un


ndice de matriz normal. Ajustes futuros puede ser de slo escritura, sin embargo
actualmente no existen tales ajustes.
Configuracin del Aislamiento de Procesos / Indicadores de estado
Configuracin Tipo Propsito Predeterminado
active
Boolean(Sl
o Lectura)
TRUE si el Aislamiento de Procesos est an
en un estado usable, FALSE si la peticini est
abandonada debido a una llamada a die(),
exit(), o a causa de una condicin de error
fatal.
TRUE (Inicial)
output_handle
r
Callback
Cuando se establece a una llamada de
retorno vlida, toda la salida generada por la
instancia del Aislamiento de Procesos ser
procesada por la funcin 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 claseRunkit_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
cdigo arbitrario en su contexto
padre? PELIGROSO
FALSE
parent_includ
Boolean
El aislamiento de procesos puede incluir
archivos de cdigo php en su contexto
FALSE


Configuracin del Aislamiento de Procesos / Indicadores de estado
Configuracin Tipo Propsito Predeterminado
e padre? PELIGROSO
parent_echo Boolean
El aislamiento de procesos puede hacer eco
de informacin 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 vaco. 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
Report a bug


Descripcin
void Runkit_Sandbox_Parent::__construct ( void )
Instanciar la clase Runkit_Sandbox_Parent desde dentro de un entorno de
aislamiento de procesos creado desde la claseRunkit_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
slo 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 ms informacin.
Para que cualquier caracterstica 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;
?>
Report a bug
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 (adems del ajuste
base parent_access). El acceso a escritura, a su vez, se habilita a travs 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 slo 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
cdigo del aislamiento de proceosos actual estuviera ejecutndose. Valores
mayores recorren hacia atrs las funciones que llamaron a las funciones que
llevaron al cdigo de ejecucin 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 sera:
string(6) "Global"
string(7) "tres()"
string(5) "dos()"


string(5) "uno()"
string(6) "Global"
string(6) "Global"
Report a bug
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
configuracin apropiada. Habilitar parent_call permitir al aislamiento de
procesos llamar a todas las funciones disponibles en el mbito padre. Los
constructores del lenguaje estn 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 travs
deparent_include.
runkit_class_adopt
(PECL runkit >= 0.7.0)
runkit_class_adopt Convertir una clase base en una clase heredada, aadiendo
mtodos ancestrales cuando sea apropiado
Report a bug
Descripcin
bool runkit_class_adopt ( string $classname , string $parentname )
Report a bug
Parmetros
classname
Nombre de la clase a ser adoptada
parentname
La clase padre en la que se extiende la hija
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de runkit_class_adopt()
<?php
class miPadre {
function funcPadre() {
echo "Salida de la Funcin Padre\n";
}
}

class miHija {
}

runkit_class_adopt('myChild','funcPadre');
miHija::funcPadre();
?>
El resultado del ejemplo sera:
Salida de la Funcin Padre
Report a bug
Ver tambin
runkit_class_emancipate() - Convertir una clase heredada en una
clase base, eliminando cualquier mtodo 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 mtodo cuyo mbito sea ancestral
Report a bug
Descripcin
bool runkit_class_emancipate ( string $classname )
Report a bug


Parmetros
classname
Nombre de la clase a emancipar
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de runkit_class_emancipate()
<?php
class miPadre {
function funcPadre () {
echo "Salida de la Funcin Padre\n";
}
}
class miHija extends miPadre {
}

miHija::funcPadre();
runkit_class_emancipate('miHija');
miHija::funcPadre();
?>
El resultado del ejemplo sera:
Salida de la Funcin Padre
Fatal error: Call to undefined function: funcPadre() in example.php on line
12
Report a bug
Ver tambin
runkit_class_adopt() - Convertir una clase base en una clase heredada,
aadiendo mtodos ancestrales cuando sea apropiado
runkit_constant_add
(PECL runkit >= 0.7.0)


runkit_constant_add Similar a define(), excepto que tambin permite definir en
definiciones de clase
Report a bug
Descripcin
bool runkit_constant_add ( string $constname , mixed $value )
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
define() - Define una constante con nombre
runkit_constant_redefine() - Redefinir una constante ya definida
runkit_constant_remove() - Eliminar/Borrar una constante ya
definida
runkit_constant_redefine
(PECL runkit >= 0.7.0)
runkit_constant_redefine Redefinir una constante ya definida
Report a bug


Descripcin
bool runkit_constant_redefine ( string $constname , mixed $newvalue )
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
runkit_constant_add() - Similar a define(), excepto que tambin
permite definir en definiciones de clase
runkit_constant_remove() - Eliminar/Borrar una constante ya
definida
runkit_constant_remove
(PECL runkit >= 0.7.0)
runkit_constant_remove Eliminar/Borrar una constante ya definida
Report a bug
Descripcin
bool runkit_constant_remove ( string $constname )
Report a bug


Parmetros
constname
Nombre de la constante a eliminar. Una cadena que indica la constante
global, o nombreclase::constname que indica la constante de clase.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
define() - Define una constante con nombre
runkit_constant_add() - Similar a define(), excepto que tambin
permite definir en definiciones de clase
runkit_constant_redefine() - Redefinir una constante ya definida
runkit_function_add
(PECL runkit >= 0.7.0)
runkit_function_add Aadir una nueva funcin, similar a create_function()
Report a bug
Descripcin
bool runkit_function_add ( string $funcname , string $arglist , string $code )
Report a bug
Parmetros
funcname
Nombre de la funcin que va a ser creada
arglist


Lista de argumentos separados por comas
code
Cdigo que compone la funcin
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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 sera:
El valor de a es 1
El valor de b es 2
Report a bug
Ver tambin
create_function() - Crear una funcin annima (estilo lambda)
runkit_function_redefine() - Reemplazar una definicin de
funcin con una nueva implementacin
runkit_function_copy() - Copiar una funcin a un nombre de
funcin nuevo
runkit_function_rename() - Cambiar el nombre de una funcin
runkit_function_remove() - Eliminar una definicin de funcin
runkit_method_add() - Aadir dinmicamente un nuevo
mtodo a una clase dada
runkit_function_copy
(PECL runkit >= 0.7.0)
runkit_function_copy Copiar una funcin a un nombre de funcin nuevo


Report a bug
Descripcin
bool runkit_function_copy ( string $funcname , string $targetname )
Report a bug
Parmetros
funcname
Nombre de la funcin existente
targetname
Nombre de la funcin donde se va a copiar la definicin
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de runkit_function_copy()
<?php
function original() {
echo "En una funcin\n";
}
runkit_function_copy('original','duplicado');
original();
duplicado();
?>
El resultado del ejemplo sera:
En una funcin
En una funcin
Report a bug


Ver tambin
runkit_function_add() - Aadir una nueva funcin, similar a
create_function
runkit_function_redefine() - Reemplazar una definicin de funcin
con una nueva implementacin
runkit_function_rename() - Cambiar el nombre de una funcin
runkit_function_remove() - Eliminar una definicin de funcin
runkit_function_redefine
(PECL runkit >= 0.7.0)
runkit_function_redefine Reemplazar una definicin de funcin con una nueva
implementacin
Report a bug
Descripcin
bool runkit_function_redefine ( string $funcname , string $arglist , string $code )
Nota: Por defecto, slo funciones del espacio de usuario pueden ser eliminadas,
renombradas, o modificadas. Para controlar funciones internas, la
opcin runkit.internal_override en php.ini debe ser habilitada.
Report a bug
Parmetros
funcname
Nombre de la funcin a redefinir
arglist
Nueva lista de argumentos a ser aceptados por la funcin
code
Nueva implementacin de cdigo


Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Un ejemplo de runkit_function_redefine()
<?php
function testme() {
echo "Implementacin Original de Testme\n";
}
testme();
runkit_function_redefine('testme','','echo "Nueva Implementacin de
Testme\n";');
testme();
?>
El resultado del ejemplo sera:
Implementacin Original de Testme
Nueva Implementacin de Testme
Report a bug
Ver tambin
runkit_function_add() - Aadir una nueva funcin, similar a
create_function
runkit_function_copy() - Copiar una funcin a un nombre de
funcin nuevo
runkit_function_rename() - Cambiar el nombre de una funcin
runkit_function_remove() - Eliminar una definicin de funcin
runkit_function_remove
(PECL runkit >= 0.7.0)
runkit_function_remove Eliminar una definicin de funcin
Report a bug
Descripcin
bool runkit_function_remove ( string $funcname )
Nota: Por defecto, slo funciones del espacio de usuario pueden ser eliminadas,
renombradas, o modificadas. Para controlar funciones internas, la
opcin runkit.internal_override en php.ini debe ser habilitada.


Report a bug
Parmetros
funcname
Nombre de la funcin a ser borrada
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
runkit_function_add() - Aadir una nueva funcin, similar a
create_function
runkit_function_copy() - Copiar una funcin a un nombre de funcin
nuevo
runkit_function_redefine() - Reemplazar una definicin de funcin con
una nueva implementacin
runkit_function_rename() - Cambiar el nombre de una funcin
runkit_function_rename
(PECL runkit >= 0.7.0)
runkit_function_rename Cambiar el nombre de una funcin
Report a bug
Descripcin
bool runkit_function_rename ( string $funcname , string $newname )
Nota: Por defecto, slo funciones del espacio de usuario pueden ser eliminadas,
renombradas, o modificadas. Para controlar funciones internas, la
opcin runkit.internal_override en php.ini debe ser habilitada.
Report a bug
Parmetros
funcname


Nombre actual de la funcin
newname
Nombre nuevo de la funcin
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
runkit_function_add() - Aadir una nueva funcin, similar a
create_function
runkit_function_copy() - Copiar una funcin a un nombre de
funcin nuevo
runkit_function_redefine() - Reemplazar una definicin de funcin
con una nueva implementacin
runkit_function_remove() - Eliminar una definicin de funcin
runkit_import
(PECL runkit >= 0.7.0)
runkit_import Procesar un archivo PHP importando definiciones de funciones y
clases, sobrescribiendo cuando sea apropiado
Report a bug
Descripcin
bool runkit_import ( string $filename [, int $flags =
RUNKIT_IMPORT_CLASS_METHODS ] )
Similar a include, sin embargo cualquier cdigo que resida fuera de una funcin o
clase es simplemente ignorado. Adems, dependiendo del valor de flags, cualquier
funcin o clase ya existente en el entorno de ejecucin actual ser sobrescrito
automticamente por sus nuevas definiciones.
Report a bug


Parmetros
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_*.
Report a bug
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
Report a bug
Descripcin
bool runkit_lint_file ( string $filename )
La funcin runkit_lint_file() lleva a cabo una verifiacin de sintaxis (lint) (pelusa
en ingls) sobre el nombre de archivo especificado comprobando errores en la
escritura del script. Esto es similar a usar php -l desde la lnea de comandos.
Nota: Soporte para Entorno de Pruebas (requerido
por runkit_lint(), runkit_lint_file(), y la clase Runkit_Sandbox) est disponible
slo 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 ms informacin.
Report a bug


Parmetros
filename
Archivo que contiene el cdigo PHP a ser verificado de "pelusas" (lint)
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
runkit_lint() - Verificar la sintaxis PHP del cdigo php especificado
runkit_lint
(PECL runkit >= 0.7.0)
runkit_lint Verificar la sintaxis PHP del cdigo php especificado
Report a bug
Descripcin
bool runkit_lint ( string $code )
La funcin runkit_lint() lleva a cabo una verifiacin de sintaxis (lint) (pelusa en
ingls) sobre el cdigo php especificado comprobando errores en la escritura del
script. Esto es similar a usar php -l desde la lnea de comandos excepto
querunkit_lint() acepta cdigo 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
slo 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 ms informacin.
Report a bug
Parmetros
code


El cdigo PHP a ser verificado de "pelusas" (lint)
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
runkit_lint_file() - Verificar la sintaxis PHP del archivo especificado
runkit_method_add
(PECL runkit >= 0.7.0)
runkit_method_add Aadir dinmicamente un nuevo mtodo a una clase dada
Report a bug
Descripcin
bool runkit_method_add ( string $classname , string $methodname , string $args , s
tring $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Parmetros
classname
La clase donde se va a aadir el mtodo
methodname


El nombre del mtodo a aadir
args
Lista de argumentos delimitados por comas para el recin creado mtodo
code
El cdigo a ser evaluado cuando methodname sea llamado
flags
El tipo de mtodo a crear, puede
ser RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED o RUNKIT_ACC_PRIVATE
Nota:
Este parmetro slo se usa a partir de PHP 5, ya que, antes de esta versin,
todos los mtodos eran pblicos.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de runkit_method_add()
<?php
class Ejemplo {
function foo() {
echo "foo!\n";
}
}

// crear un objeto de Ejemplo
$e = new Ejemplo();



// Aadir un nuevo mtodo pblico
runkit_method_add(
'Ejemplo',
'sumar',
'$num1, $num2',
'return $num1 + $num2;',
RUNKIT_ACC_PUBLIC
);

// sumar 12 + 4
echo $e->sumar(12, 4);
?>
El resultado del ejemplo sera:
16
Report a bug
Ver tambin
runkit_method_copy() - Copia un mtodo de una clase a otra
runkit_method_redefine() - Cambiar dinmicamente el cdigo del mtodo
dado
runkit_method_remove() - Eliminar dinmicamente el mtodo dado
runkit_method_rename() - Cambiar dinmicamente el nombre del mtodo
dado
runkit_function_add() - Aadir una nueva funcin, similar a create_function
runkit_method_copy
(PECL runkit >= 0.7.0)
runkit_method_copy Copia un mtodo de una clase a otra
Report a bug
Descripcin
bool runkit_method_copy ( string $dClass , string $dMethod , string $sClass [, stri
ng $sMethod ] )
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug


Parmetros
dClass
Clase destino del mtodo a copiar
dMethod
Nombre del mtodo destino
sClass
Clase fuente del mtodo a copiar
sMethod
Nombre del mtodo a copiar desde la clase fuente. Si se omite este
parmetro, se asume el valor de dMethod.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de runkit_method_copy()
<?php
class Foo {
function ejemplo() {
return "foo!\n";
}
}

class Bar {
// inicialmete sin mtodos


}

// copiar el mtodo ejemplo() desde la clase Foo a la clase Bar, como baz()
runkit_method_copy('Bar', 'baz', 'Foo', 'ejemplo');

// imprimir la funcin copiada
echo Bar::baz();
?>
El resultado del ejemplo sera:
foo!
Report a bug
Ver tambin
runkit_method_add() - Aadir dinmicamente un nuevo mtodo a una clase
dada
runkit_method_redefine() - Cambiar dinmicamente el cdigo del mtodo
dado
runkit_method_remove() - Eliminar dinmicamente el mtodo dado
runkit_method_rename() - Cambiar dinmicamente el nombre del mtodo
dado
runkit_function_copy() - Copiar una funcin a un nombre de funcin nuevo
runkit_method_redefine
(PECL runkit >= 0.7.0)
runkit_method_redefine Cambiar dinmicamente el cdigo del mtodo dado
Report a bug
Descripcin
bool runkit_method_redefine ( string $classname , string $methodname , string $ar
gs , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Nota: Esta funcin no puede ser utilizada para manipular el actual mtodo en
ejecucin (o extendido).
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug


Parmetros
classname
La clase en la que se va a redefinir el mtodo
methodname
El nombre del mtodo a redefinir
args
Lista de argumentos delimitados por coma para el mtodo redefinido
code
El nuevo cdigo a ser evaluado cuando methodname sea llamado
flags
El mtodo redefinido puede
ser RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED o RUNKIT_ACC_PRIVATE
Nota:
Este parmetro slo se usa a partir de PHP 5, ya que, antes de esta versin,
todos los mtodos eran pblicos.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug


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 mtodo 'foo'
runkit_method_redefine(
'Ejemplo',
'foo',
'',
'return "bar!\n";',
RUNKIT_ACC_PUBLIC
);

// imprimir Ejemplo::foo() (despus de redefinir)
echo "Despus: " . $e->foo();
?>
El resultado del ejemplo sera:
Antes: foo!
Despus: bar!
Report a bug
Ver tambin
runkit_method_add() - Aadir dinmicamente un nuevo mtodo a una clase
dada
runkit_method_copy() - Copia un mtodo de una clase a otra
runkit_method_remove() - Eliminar dinmicamente el mtodo dado
runkit_method_rename() - Cambiar dinmicamente el nombre del mtodo
dado
runkit_function_redefine() - Reemplazar una definicin de funcin con una
nueva implementacin
runkit_method_remove
(PECL runkit >= 0.7.0)


runkit_method_remove Eliminar dinmicamente el mtodo dado
Report a bug
Descripcin
bool runkit_method_remove ( string $classname , string $methodname )
Nota: Esta funcin no puede ser utilizada para manipular el actual mtodo en
ejecucin (o extendido).
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Parmetros
classname
La clase en la que se va a eliminar el mtodo
methodname
El nombre del mtodo a eliminar
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de runkit_method_remove()
<?php
class Ejemplo {
function foo() {
return "foo!\n";
}



function bar() {
return "bar!\n";
}
}

// Eliminar el mtodo 'foo'
runkit_method_remove(
'Ejemplo',
'foo'
);

echo implode(' ', get_class_methods('Ejemplo'));

?>
El resultado del ejemplo sera:
bar
runkit_method_rename
(PECL runkit >= 0.7.0)
runkit_method_rename Cambiar dinmicamente el nombre del mtodo dado
Report a bug
Descripcin
bool runkit_method_rename ( string $classname , string $methodname , string $new
name )
Nota: Esta funcin no puede ser utilizada para manipular el actual mtodo en
ejecucin (o extendido).
Advertencia
Esta funcin ha sido declarada EXPERIMENTAL. Su comportamiento, su nombre y
la documentacin que le acompaa puede cambiar sin previo aviso en futuras
versiones de PHP. Use esta funcin bajo su propio riesgo.
Report a bug
Parmetros
classname
La clase en la que se renombrar el mtodo


methodname
El nombre del mtodo a renombrar
newname
El nombre nuevo a dar al mtodo renombrado
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de runkit_method_rename()
<?php
class Ejemplo {
function foo() {
return "foo!\n";
}
}

// Renombrar el mtodo 'foo' a 'bar'
runkit_method_rename(
'Ejemplo',
'foo',
'bar'
);

// salida de la funcin renombrada
echo Ejemplo::bar();
?>
El resultado del ejemplo sera:
foo!
Report a bug


Ver tambin
runkit_method_add() - Aadir dinmicamente un nuevo
mtodo a una clase dada
runkit_method_copy() - Copia un mtodo de una clase a otra
runkit_method_redefine() - Cambiar dinmicamente el cdigo
del mtodo dado
runkit_method_remove() - Eliminar dinmicamente el mtodo
dado
runkit_function_rename() - Cambiar el nombre de una funcin
runkit_return_value_used
(PECL runkit >= 0.8.0)
runkit_return_value_used Determina si se usarn los valores devueltos por las
funciones actuales
Report a bug
Descripcin
bool runkit_return_value_used ( void )
Report a bug
Valores devueltos
Devuelve TRUE si el valor devuelto de la funcin actual se usa por el alcance de la
llamada, de otro modo FALSE
Report a bug
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 sera:
bool(false)
bool(true)
runkit_sandbox_output_handler


(PECL runkit >= 0.7.0)
runkit_sandbox_output_handler Especificar una funcin para capturar y/o
procesar la salida de un aislamiento de procesos de runkit
Report a bug
Descripcin
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 funcin 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
slo 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 ms informacin.
Nota: Obsoleto
A partir de la versin 0.5 de runkit, esta funcin est obsoleta y est programada
para ser eliminada del paquete antes de la distribucin de la versin 1.0. Para una
instancia de Runkit_Sandbox, el gestor de salida puede ser ledo/establecido
usando la sintaxis de ndice de array mostrado en la pgina de definicin de la
clase Runkit_Sandbox.
Report a bug
Parmetros
sandbox
Instancia de objeto de la clase Runkit_Sandbox en la que establecer el
gestor de salida.
callback
Nombre de una funcin que espera un parmetro. 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


parmetro no se pasa, la gestin de salida no ser cambiada. Si se pasa un
valor no verdadero, la gestin de salida ser deshabilitada y ser vuelta a la
muestra directa.
Report a bug
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.
Report a bug
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 sera:
Sandbox Completado

Hola
string(9) "Lo sientoe"
Me perd.
runkit_superglobals
(PECL runkit >= 0.7.0)
runkit_superglobals Devolver el array indexado numricamente de las
superglobales registradas


Report a bug
Descripcin
array runkit_superglobals ( void )
Report a bug
Valores devueltos
Devuelve un array indexado numricamente de las globales registradas
actualmente, esto es, _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER,
_ENV, _FILES
Report a bug
Ver tambin
mbito de Variable
Desactivar silenciar errores
Introduccin
La extensin scream permite la posibilidad de desactivar el silenciado del operador
de control de errores as que todos los errores sern expuestos. Esta caracterstica
est controlada por una directiva ini.
Requerimientos
Versin de PHP 5.2.0 o superior.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/scream
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Opciones de configuracin de scream


Nombre Por defecto Cambiable Historial de cambios
scream.enabled Off PHP_INI_ALL
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
scream.enabled int
Cuando est o no est scream activado.
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 ejecucin
<?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 sera 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 configuracin
php.ini en lugar de cambiar el cdigo.



Referencias dbiles
Introduccin
Las referencias dbiles proporcionan una va no intrusiva para objetos efmeros. A
diferencia de las referencias normales (fuertes), las referencias dbiles no evita
que el recolector de basura libere un objeto. Por esta razn, un objeto podra ser
destruido aunque an exista una referencia dbil a tal objeto. En tales condiciones,
la referencia dbil sera perfectamente invlida.
Ejemplo #1 Ejemplo de uso de Weakref
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}

$o1 = new MiClase;

$r1 = new Weakref($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";
var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}

unset($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";
var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}
?>
El resultado del ejemplo sera:
El objeto an existe!
object(MiClase)#1 (0) {
}
Destruyendo el objeto!
El objeto est muerto!


Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/weakref.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
La clase WeakRef
(PECL weakref >= 0.1.0)
Introduccin
La clase WeakRef proporciona una va para objetos sin evitar que el recolector de
basura libere tales objetos. Tambin proporciona una manera de convertir una
referencia dbil en una fuerte.
Sinopsis de la Clase
WeakRef {
/* Mtodos */
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 Ejemplo de uso de WeakRef
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}



$o1 = new MiClase;

$r1 = new Weakref($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";
var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}

unset($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";
var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}
?>
El resultado del ejemplo sera:
El objeto an existe!
object(MiClase)#1 (0) {
}
Destruyendo el objeto!
El objeto est muerto!
Tabla de contenidos
Weakref::acquire Adquiere una referencia fuerte de un objeto
Weakref::__construct Construye una nueva referencia dbil
Weakref::get Devuelve el objeto apuntado por una referencia dbil
Weakref::release Libera una referencia previmente adquirida
Weakref::valid Comprueba si el objeto referenciado an existe
Weakref::acquire
(PECL weakref >= 0.1.0)
Weakref::acquire Adquiere una referencia fuerte de un objeto
Report a bug
Descripcin
public bool Weakref::acquire ( void )


Adquiere una referencia fuerte de un objeto, convirtiendo virtualmente la
referencia dbil en una fuerte.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE si la referencia era vlida y pudo ser convertida a una referencia
fuerte, de lo contrario FALSE.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Weakref::acquire()
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}

$o1 = new MiClase;

$r1 = new Weakref($o1);

$r1->acquire();

echo "Destruyendo o1...\n";
unset($o1);

$o2 = $r1->get();

$r1->release();

echo "Destruyendo o2...\n";
unset($o2);
?>
El resultado del ejemplo sera:
Destruyendo o1...
Destruyendo o2...
Destruyendo el objeto!


Ejemplo #2 Ejemplo de acquire/release anidados
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}

$o1 = new MiClase;

$r1 = new Weakref($o1);

echo "Adquiriendo...\n";
$r1->acquire();

echo " Destruyendo...\n";
unset($o1);

echo " Adquiriendo...\n";
$r1->acquire();

echo " Adquiriendo...\n";
$r1->acquire();

echo " Liberando...\n";
$r1->release();

echo " Liberando...\n";
$r1->release();

echo "Liberando...\n";
$r1->release();

?>
El resultado del ejemplo sera:
Adquiriendo...
Destruyendo...
Adquiriendo...
Adquiriendo...
Liberando...
Liberando...
Liberando...
Destruyendo el objeto!
Report a bug
Ver tambin
Weakref::release() - Libera una referencia previmente adquirida



Weakref::__construct
(PECL weakref >= 0.1.0)
Weakref::__construct Construye una nueva referencia dbil
Report a bug
Descripcin
public Weakref::__construct() ([ object $object ] )
Construye una nueva referencia dbil.
Report a bug
Parmetros
object
El objeto a referenciar.
Report a bug
Valores devueltos
No devuelve ningn valor.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Weakref::__construct()
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}

$o1 = new MiClase;

$r1 = new Weakref($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";


var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}

unset($o1);

if ($r1->valid()) {
echo "El objeto an existe!\n";
var_dump($r1->get());
} else {
echo "El objeto est muerto!\n";
}
?>
El resultado del ejemplo sera:
El objeto an existe!
object(MiClase)#1 (0) {
}
Destruyendo el objeto!
El objeto est muerto!
Weakref::get
(PECL weakref >= 0.1.0)
Weakref::get Devuelve el objeto apuntado por una referencia dbil
Report a bug
Descripcin
public object Weakref::get ( void )
Devuelve el objeto apuntado por una referencia dbil.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el objeto si la referencia an es vlida, o NULL en caso contrario.
Report a bug


Ver tambin
Weakref::valid() - Comprueba si el objeto referenciado an existe
Weakref::release
(PECL weakref >= 0.1.0)
Weakref::release Libera una referencia previmente adquirida
Report a bug
Descripcin
public bool Weakref::release ( void )
Libera una referencia previmente adquirida. Potencialmente, vuelve a convertir
una referencia fuerte en una dbil.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE si la referencia fue previamente adquirida y pudo ser liberada, de lo
contrario FALSE.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de Weakref::release()
<?php
class MiClase {
public function __destruct() {
echo "Destruyendo el objeto!\n";
}
}

$o1 = new MiClase;

$r1 = new Weakref($o1);

$r1->acquire();



echo "Detruyendo o1...\n";
unset($o1);

$o2 = $r1->get();

$r1->release();

echo "Detruyendo o2...\n";
unset($o2);
?>
El resultado del ejemplo sera:
Detruyendo o1...
Detruyendo o2...
Destruyendo el objeto!
Report a bug
Ver tambin
Weakref::acquire() - Adquiere una referencia fuerte de un objeto
Weakref::valid
(PECL weakref >= 0.1.0)
Weakref::valid Comprueba si el objeto referenciado an existe
Report a bug
Descripcin
public bool Weakref::valid ( void )
Comprueba si el objeto referenciado an existe.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE si el objeto an existe y es accesible mediante Weakref::get(),
o FALSE en caso contrario.
Report a bug


Ver tambin
Weakref::get() - Devuelve el objeto apuntado por una referencia dbil
La clase WeakMap
(PECL weakref >= 0.2.0)
Introduccin
Sinopsis de la Clase
WeakMap implements Countable , ArrayAccess , Iterator {
/* Mtodos */
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 Ejemplo de uso de Weakmap
<?php
$wm = new WeakMap();

$o = new StdClass;

class A {
public function __destruct() {
echo "Muerto!\n";


}
}

$wm[$o] = new A;

var_dump(count($wm));
echo "Destruyendo..\n";
unset($o);
echo "Hecho\n";
var_dump(count($wm));
El resultado del ejemplo sera:
int(1)
Destruyendo..
Muerto!
Hecho
int(0)
Tabla de contenidos
WeakMap::__construct Construye un nuevo mapa
WeakMap::count Cuenta el nmero de entradas vivas de un mapa
WeakMap::current Devuelve el valor actual de la iteracin
WeakMap::key Devuelve la clave actual de la iteracin
WeakMap::next Avanza al siguiente elemento del mapa
WeakMap::offsetExists Comprueba si un cierto objeto est en un mapa
WeakMap::offsetGet Devuelve el valor apuntado por un cierto objeto
WeakMap::offsetSet Actualiza el mapa con un nuevo par clave-valor
WeakMap::offsetUnset Elimina una entrada del mapa
WeakMap::rewind Sita el iterador al comienzo del mapa
WeakMap::valid Devuelve si el iterador an est sobre un elemento
vlido de un mapa
WeakMap::__construct
(PECL weakref >= 0.2.0)
WeakMap::__construct Construye un nuevo mapa
Report a bug
Descripcin
public WeakMap::__construct ( void )
Construye un nuevo mapa.
Report a bug


Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
WeakMap::count
(PECL weakref >= 0.2.0)
WeakMap::count Cuenta el nmero de entradas vivas de un mapa
Report a bug
Descripcin
public int WeakMap::count ( void )
Cuenta el nmero de entradas vivas de un mapa.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve el nmero de entradas vivas de un mapa.
WeakMap::current
(PECL weakref >= 0.2.0)
WeakMap::current Devuelve el valor actual de la iteracin
Report a bug
Descripcin
public mixed WeakMap::current ( void )
Devuelve el valor actual del mapa que est siendo iterado.


Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
El valor actual que est siendo iterado.
WeakMap::key
(PECL weakref >= 0.2.0)
WeakMap::key Devuelve la clave actual de la iteracin
Report a bug
Descripcin
public object WeakMap::key ( void )
Devuelve el objeot que sirve como clave del mapa, en la posicin actual de la
iteracin.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
La clave del objeto que est siendo iterado.
WeakMap::next
(PECL weakref >= 0.2.0)
WeakMap::next Avanza al siguiente elemento del mapa
Report a bug
Descripcin
public void WeakMap::next ( void )


Avanza al siguiente elemento del mapa.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
WeakMap::offsetExists
(PECL weakref >= 0.2.0)
WeakMap::offsetExists Comprueba si un cierto objeto est en un mapa
Report a bug
Descripcin
public bool WeakMap::offsetExists ( object $object )
Comprueba si el objeto pasado est referenciado en el mapa.
Report a bug
Parmetros
object
El objeto que comprobar.
Report a bug
Valores devueltos
Devuelve TRUE si el objeto est contenido en el mapa, FALSE en caso contrario.
WeakMap::offsetGet
(PECL weakref >= 0.2.0)
WeakMap::offsetGet Devuelve el valor apuntado por un cierto objeto


Report a bug
Descripcin
public mixed WeakMap::offsetGet ( object $object )
Devuelve el valor apuntado por un cierto objeto.
Report a bug
Parmetros
object
Algn objeto contenido como clave del mapa.
Report a bug
Valores devueltos
Devuelve el valor asociado al objeto pasado como argumento, o NULL en caso
contrario.
WeakMap::offsetSet
(PECL weakref >= 0.2.0)
WeakMap::offsetSet Actualiza el mapa con un nuevo par clave-valor
Report a bug
Descripcin
public void WeakMap::offsetSet ( object $object , mixed $value )
Actualiza el mapa con un nuevo par clave-valor. Si la clave ya existiera en el
mapa, el valor antiguo se reemplazara con el nuevo.
Report a bug
Parmetros
object
El objeto que sirve como clave del par clave-valor.


value
Los datos arbitrarios que sirven como valor del par clave-valor.
Report a bug
Valores devueltos
No devuelve ningn valor.
WeakMap::offsetUnset
(PECL weakref >= 0.2.0)
WeakMap::offsetUnset Elimina una entrada del mapa
Report a bug
Descripcin
public void WeakMap::offsetUnset ( object $object )
Elimina una entrada del mapa.
Report a bug
Parmetros
object
El objeto clave a eliminar del mapa.
Report a bug
Valores devueltos
No devuelve ningn valor.
WeakMap::rewind
(PECL weakref >= 0.2.0)
WeakMap::rewind Sita el iterador al comienzo del mapa


Report a bug
Descripcin
public void WeakMap::rewind ( void )
Sita el iterador al comienzo del mapa.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
No devuelve ningn valor.
WeakMap::valid
(PECL weakref >= 0.2.0)
WeakMap::valid Devuelve si el iterador an est sobre un elemento vlido de
un mapa
Report a bug
Descripcin
public bool WeakMap::valid ( void )
Devuelve si el iterador an est sobre un elemento vlido de un mapa.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Devuelve TRUE si el iterador est sobre un elemento vlido al que se puede
acceder, FALSE en caso contrario.



Windows Cache for PHP
Introduccin
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.


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.
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
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.

Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
The following table lists and explains the configuration settings provided by the
WinCache extension:
WinCache configuration options
Nombre
Por
defect
o
Minimu
m
Maximu
m
Cambiable
Historia
l de
cambio
s
wincache.fcenabled "1" "0" "1" PHP_INI_ALL
Available
since
WinCach
e 1.0.0
wincache.fcenabledfilt
er
"NULL" "NULL" "NULL"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.fcachesize "24" "5" "255"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0


WinCache configuration options
Nombre
Por
defect
o
Minimu
m
Maximu
m
Cambiable
Historia
l de
cambio
s
wincache.fcndetect "1" "0" "1"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.1.0
wincache.maxfilesize "256" "10" "2048"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.ocenabled "1" "0" "1" PHP_INI_ALL
Available
since
WinCach
e 1.0.0
wincache.ocenabledfilt
er
"NULL" "NULL" "NULL"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.ocachesize "96" "15" "255"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.filecount "4096" "1024" "16384"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.chkinterval "30" "0" "300"
PHP_INI_SYSTE
M
Available
since
WinCach


WinCache configuration options
Nombre
Por
defect
o
Minimu
m
Maximu
m
Cambiable
Historia
l de
cambio
s
e 1.0.0
wincache.ttlmax "1200" "0" "7200"
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.enablecli 0 0 1
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.ignorelist NULL NULL NULL PHP_INI_ALL
Available
since
WinCach
e 1.0.0
wincache.namesalt NULL NULL NULL
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.0.0
wincache.ucenabled 1 0 1
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.1.0
wincache.ucachesize 8 5 85
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.1.0
wincache.scachesize 8 5 85
PHP_INI_SYSTE Available


WinCache configuration options
Nombre
Por
defect
o
Minimu
m
Maximu
m
Cambiable
Historia
l de
cambio
s
M since
WinCach
e 1.1.0
wincache.rerouteini NULL NULL NULL
PHP_INI_SYSTE
M
Available
since
WinCach
e 1.2.0
Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede
realizar un ajuste de configuracin.
He aqu una breve explicacin de las directivas de configuracin.
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.fcenabledfilterwill 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.ocenabledfilterwill have the opcode cache
turned off; if wincache.ocenabled is set to 0, then the sites listed in
the wincache.ocenabledfilterwill 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_AUTHENTICATIO
N 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/u
se
* any other kind of authentication like Basic/Negotiate/Digest etc, this will n
ot 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:
file_exists
file_get_contents
readfile
is_readable
is_writable
is_dir
realpath
filesize
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
towincache_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
wincache_fcache_fileinfo
(PECL wincache >= 1.0.0)
wincache_fcache_fileinfo Retrieves information about files cached in the file
cache
Report a bug
Descripcin
array wincache_fcache_fileinfo ([ bool $summaryonly = false ] )
Retrieves information about file cache content and its usage.
Report a bug
Parmetros
summaryonly


Controls whether the returned array will contain information about
individual cache entries along with the file cache summary.
Report a bug
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
Report a bug
Ejemplos
Ejemplo #1 A wincache_fcache_fileinfo() example
<pre>
<?php
print_r(wincache_fcache_fileinfo());
?>
</pre>
El resultado del ejemplo sera:
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)
)
)
Report a bug
Ver tambin
wincache_fcache_meminfo() - Recupera informacin sobre el uso de
memoria cach de ficheros
wincache_ocache_fileinfo() - Retrieves information about files cached in
the opcode cache
wincache_ocache_meminfo() - Retrieves information about opcode
cache memory usage
wincache_rplist_fileinfo() - Retrieves information about resolve file path
cache
wincache_rplist_meminfo() - Retrieves information about memory
usage by the resolve file path cache
wincache_refresh_if_changed() - Refreshes the cache entries for the
cached files
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_scache_info() - Retrieves information about files cached in
the session cache
wincache_scache_meminfo() - Recupera informacin sobre el uso de
memoria cach de sesin
wincache_rplist_meminfo
(PECL wincache >= 1.0.0)
wincache_rplist_meminfo Retrieves information about memory usage by the
resolve file path cache
Report a bug
Descripcin
array wincache_rplist_meminfo ( void )


Retrieves information about memory usage by resolve file path cache.
Report a bug
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
Report a bug
Ejemplos
Ejemplo #1 A wincache_rplist_meminfo() example
<pre>
<?php
print_r(wincache_rplist_meminfo());
?>
</pre>
El resultado del ejemplo sera:
Array
(
[memory_total] => 9437184
[memory_free] => 9416744
[num_used_blks] => 23
[num_free_blks] => 1
[memory_overhead] => 416
)
Report a bug
Ver tambin
wincache_fcache_fileinfo() - Retrieves information about files cached in the
file cache
wincache_fcache_meminfo() - Recupera informacin sobre el uso de
memoria cach de ficheros


wincache_ocache_fileinfo() - Retrieves information about files cached in the
opcode cache
wincache_ocache_meminfo() - Retrieves information about opcode cache
memory usage
wincache_rplist_fileinfo() - Retrieves information about resolve file path
cache
wincache_refresh_if_changed() - Refreshes the cache entries for the cached
files
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_scache_info() - Retrieves information about files cached in the
session cache
wincache_scache_meminfo() - Recupera informacin sobre el uso de
memoria cach de sesin
wincache_scache_info
(PECL wincache >= 1.1.0)
wincache_scache_info Retrieves information about files cached in the session
cache
Report a bug
Descripcin
array wincache_scache_info ([ bool $summaryonly = false ] )
Retrieves information about session cache content and its usage.
Report a bug
Parmetros
summaryonly
Controls whether the returned array will contain information about
individual cache entries along with the session cache summary.
Report a bug
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
Report a bug
Ejemplos
Ejemplo #1 A wincache_scache_info() example
<pre>
<?php
print_r(wincache_scache_info());
?>
</pre>
El resultado del ejemplo sera:
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)
)
)
Report a bug
Ver tambin
wincache_fcache_fileinfo() - Retrieves information about files cached in
the file cache
wincache_fcache_meminfo() - Recupera informacin sobre el uso de
memoria cach de ficheros
wincache_ocache_meminfo() - Retrieves information about opcode
cache memory usage
wincache_rplist_fileinfo() - Retrieves information about resolve file path
cache
wincache_rplist_meminfo() - Retrieves information about memory
usage by the resolve file path cache
wincache_refresh_if_changed() - Refreshes the cache entries for the
cached files
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_scache_meminfo() - Recupera informacin sobre el uso de
memoria cach de sesin
wincache_scache_meminfo
(PECL wincache >= 1.1.0)
wincache_scache_meminfo Recupera informacin sobre el uso de memoria
cach de sesin
Report a bug
Descripcin
array wincache_scache_meminfo ( void )
Recupera informacin sobre el uso de memoria cach de la sesin.
Report a bug
Valores devueltos
Array de metadatos sobre el uso de la memoria cach de sesin o FALSE en caso de
error


El array devuelto por esta funcin contiene los siguientes elementos:
memory_total - cantidad de memoria en bytes asignado para la cach de
sesin
memory_free - cantidad de memoria libre en bytes disponible para la
cach de sesin
num_used_blks - nmero de bloques de memoria utilizados por el cach
de la sesin
num_free_blks - nmero de bloques disponibles en la memoria de la
cach de sesin
memory_overhead - cantidad de memoria en bytes utilizado para las
estructuras de sesin de cach interna
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de wincache_scache_meminfo()
<pre>
<?php
print_r(wincache_scache_meminfo());
?>
</pre>
El resultado del ejemplo sera:
Array
(
[memory_total] => 5242880
[memory_free] => 5215056
[num_used_blks] => 6
[num_free_blks] => 3
[memory_overhead] => 176
)
Report a bug
Ver tambin
wincache_fcache_fileinfo() - Retrieves information about files cached in the
file cache
wincache_fcache_meminfo() - Recupera informacin sobre el uso de
memoria cach de ficheros
wincache_ocache_fileinfo() - Retrieves information about files cached in the
opcode cache
wincache_rplist_fileinfo() - Retrieves information about resolve file path
cache
wincache_rplist_meminfo() - Retrieves information about memory usage by
the resolve file path cache
wincache_refresh_if_changed() - Refreshes the cache entries for the cached
files
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario


wincache_scache_info() - Retrieves information about files cached in the
session cache
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
Report a bug
Descripcin
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.
Report a bug
Parmetros
key
Store the variable using this key name. If a variable with same key is
already present the function will fail and returnFALSE. 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.
Report a bug
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 sera:
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 sera:
array(0) { }
array(4) {
["green"]=> int(-1)
["Blue"]=> int(-1)
["yellow"]=> int(-1)
["cyan"]=> int(-1)
}
string(1) "6"
Report a bug
Ver tambin
wincache_ucache_set() - Adds a variable in user cache and overwrites a
variable if it already exists in the cache
wincache_ucache_get() - Obtiene una variable almacenada en la cach del
usuario
wincache_ucache_delete() - Elimina las variables de la memoria cach del
usuario
wincache_ucache_clear() - Elimina todo el contenido de la cach del usuario
wincache_ucache_exists() - Comprueba si una variable existe en la cach
del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
__sleep()
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
Report a bug
Descripcin
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.


Report a bug
Parmetros
key
El parmetro key que se utiliza para almacenar la variable en la
cach. key distingue maysculas de minsculas.
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 funcin
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 funcin devolver FALSE.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Usando wincache_ucache_cas()
<?php
wincache_ucache_set('counter', 2922);
var_dump(wincache_ucache_cas('counter', 2922, 1));
var_dump(wincache_ucache_get('counter'));
?>
El resultado del ejemplo sera:
bool(true)
int(1)
Report a bug


Ver tambin
wincache_ucache_inc() - Incrementa el valor asociado a la
clave
wincache_ucache_dec() - Disminuye el valor asociado a la
clave
wincache_ucache_clear
(PECL wincache >= 1.1.0)
wincache_ucache_clear Elimina todo el contenido de la cach del usuario
Report a bug
Descripcin
bool wincache_ucache_clear ( void )
Borra o elimina todos los valores almacenados en la cach del usuario.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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 sera:
array(5) { ["green"]=> int(1)
["red"]=> int(2)
["orange"]=> int(4)
["blue"]=> int(8)
["cyan"]=> int(16) }


bool(true)
bool(false)
Report a bug
Ver tambin
wincache_ucache_set() - Adds a variable in user cache and overwrites a
variable if it already exists in the cache
wincache_ucache_add() - Adds a variable in user cache only if variable does
not already exist in the cache
wincache_ucache_delete() - Elimina las variables de la memoria cach del
usuario
wincache_ucache_get() - Obtiene una variable almacenada en la cach del
usuario
wincache_ucache_exists() - Comprueba si una variable existe en la cach
del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_ucache_dec
(PECL wincache >= 1.1.0)
wincache_ucache_dec Disminuye el valor asociado a la clave
Report a bug
Descripcin
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.
Report a bug
Parmetros
key
El parmetro key que se utiliza para almacenar la variable en la
cach. key distingue maysculas de minsculas.
dec_by


El valor de la variable asociada por el que conseguir que key disminuya. Si
el argumento es un nmero de punto flotante se truncar al integer ms
cercano. La variable asociada con la key debe ser de tipo long, en caso
contrario la funcin falla y devolver FALSE.
success
Ser establecido a TRUE en caso de xito y FALSE en caso de error.
Report a bug
Valores devueltos
Devuelve el valor decrementado en caso de xito y FALSE en caso de
error.
Report a bug
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 sera:
int(2922)
bool(true)
Report a bug
Ver tambin
wincache_ucache_inc() - Incrementa el valor asociado a la
clave
wincache_ucache_cas() - Compara la variable con el valor
antiguo y le asigna un nuevo valor a este
wincache_ucache_delete
(PECL wincache >= 1.1.0)
wincache_ucache_delete Elimina las variables de la memoria cach del usuario


Report a bug
Descripcin
bool wincache_ucache_delete ( mixed $key )
Elimina los elementos de la cach del usuario apuntado por key.
Report a bug
Parmetros
key
El parmetro key que se utiliza para almacenar la variable en la
cach. key distingue maysculas de minsculas. keypuede ser un array de
claves.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Si key es un array, entonces la funcin 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.
Report a bug
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 sera:
bool(true)
bool(false)
Ejemplo #2 Using wincache_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 sera:
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 sera:
array(2) { [0]=> string(6) "yellow"
[1]=> string(4) "cyan" }
Report a bug
Ver tambin
wincache_ucache_set() - Adds a variable in user cache and overwrites
a variable if it already exists in the cache
wincache_ucache_add() - Adds a variable in user cache only if variable
does not already exist in the cache
wincache_ucache_get() - Obtiene una variable almacenada en la cach
del usuario
wincache_ucache_clear() - Elimina todo el contenido de la cach del
usuario
wincache_ucache_exists() - Comprueba si una variable existe en la
cach del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_ucache_exists
(PECL wincache >= 1.1.0)
wincache_ucache_exists Comprueba si una variable existe en la cach del
usuario
Report a bug


Descripcin
bool wincache_ucache_exists ( string $key )
Comprueba si una variable con la key existe en la cach de usuario o no.
Report a bug
Parmetros
key
La key que se utiliza para almacenar la variable en la cach. key distingue
maysculas de minsculas.
Report a bug
Valores devueltos
Devuelve TRUE si la variable con la key existe, en caso contrario
devuelve FALSE.
Report a bug
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 sera:
bool(true)
Report a bug
Ver tambin
wincache_ucache_set() - Adds a variable in user cache and overwrites
a variable if it already exists in the cache
wincache_ucache_add() - Adds a variable in user cache only if variable
does not already exist in the cache
wincache_ucache_get() - Obtiene una variable almacenada en la cach
del usuario
wincache_ucache_clear() - Elimina todo el contenido de la cach del
usuario


wincache_ucache_delete() - Elimina las variables de la memoria cach
del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_ucache_get
(PECL wincache >= 1.1.0)
wincache_ucache_get Obtiene una variable almacenada en la cach del usuario
Report a bug
Descripcin
mixed wincache_ucache_get ( mixed $key [, bool &$success ] )
Obtiene una variable almacenada en la cach del usuario.
Report a bug
Parmetros
key
La key que se utiliza para almacenar la variable en la cach. key distingue
maysculas de minsculas. 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 sern decodificados. Vase __wakeup()para ms
detalles sobre decodificar objetos.
success
Se establecer en TRUE en caso de xito y FALSE en caso de error.
Report a bug


Valores devueltos
Si key es un string, la funcin devuelve el valor de la variable almacenada
con esa clave. El parmetro success es establecido aTRUE en caso de xito
y a FALSE en caso de error.
El parmetro key es un array, el parmetro success siempre se establece
en TRUE. El array devuelto (pares nombre => valor) will contendr slo
aquellos pares nombre => valor en donde la operacin de obtencin 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
vaco ser devuelto.
Report a bug
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 sera:
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 sera:
array(4) { ["green"]=> string(1) "5"
["Blue"]=> string(1) "6"
["yellow"]=> string(1) "7"
["cyan"]=> string(1) "8" }
bool(true)
Report a bug
Ver tambin
wincache_ucache_add() - Adds a variable in user cache only if
variable does not already exist in the cache


wincache_ucache_set() - Adds a variable in user cache and
overwrites a variable if it already exists in the cache
wincache_ucache_delete() - Elimina las variables de la memoria
cach del usuario
wincache_ucache_clear() - Elimina todo el contenido de la cach
del usuario
wincache_ucache_exists() - Comprueba si una variable existe en la
cach del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso
de memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
__wakeup()
wincache_ucache_inc
(PECL wincache >= 1.1.0)
wincache_ucache_inc Incrementa el valor asociado a la clave
Report a bug
Descripcin
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.
Report a bug
Parmetros
key
La key que se utiliza para almacenar la variable en la cach. key distingue
maysculas de minsculas.
inc_by
El valor por el cual la variable asociada con la key ser incrementada. Si el
argumento es un nmero de punto flotante se truncar al integer ms
cercano. La variable asociada con la key debe ser de tipo long, de lo
contrario la funcin falla y devuelve FALSE.


success
Se establecer en TRUE en caso de xito y FALSE en caso de error.
Report a bug
Valores devueltos
Devuelve el valor incrementado en caso de xito y FALSE en caso de
error.
Report a bug
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 sera:
int(2922)
bool(true)
Report a bug
Ver tambin
wincache_ucache_dec() - Disminuye el valor asociado a la
clave
wincache_ucache_cas() - Compara la variable con el valor
antiguo y le asigna un nuevo valor a este
wincache_ucache_info
(PECL wincache >= 1.1.0)
wincache_ucache_info Recupera informacin sobre los datos almacenados en la
cach del usuario
Report a bug
Descripcin
array wincache_ucache_info ([ bool $summaryonly = false [, string $key ]] )


Recupera informacin sobre los datos almacenados en la cach del usuario.
Report a bug
Parmetros
summaryonly
Controla si el array devuelto contiene informacin 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
continuacin, el array devuelto contendr informacin slo acerca de que la
entrada de cach. Si no se especifica y summaryonly es establecido
a FALSE entonces el array devuelto contendr informacin sobre todas las
entradas en la cach.
Report a bug
Valores devueltos
Array de metadatos sobre cach de usuario o FALSE en caso de error
El array devuelto por esta funcin contiene los siguientes elementos:
total_cache_uptime - tiempo total en segundos que el cach de
usuario ha sido activo
total_item_count - nmero total de elementos que estn
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 - nmero de veces que los datos se han servido
de la memoria cach
total_miss_count - nmero de veces que los datos no se han
encontrado en la cach
ucache_entries - un array que contiene la informacin 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 cdigo de operacin
last_check - tiempo en segundos desde el fichero ha sido
chequeado para modificaciones
is_session - indica si los datos son una variable de sesin
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 aadidos en la cach
hitcount - nmero de veces que los datos se han servido
de la memoria cach
Report a bug
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 sera:
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)
)
)
)
Report a bug
Ver tambin
wincache_fcache_meminfo() - Recupera informacin sobre el uso
de memoria cach de ficheros


wincache_ocache_fileinfo() - Retrieves information about files
cached in the opcode cache
wincache_ocache_meminfo() - Retrieves information about opcode
cache memory usage
wincache_rplist_meminfo() - Retrieves information about memory
usage by the resolve file path cache
wincache_rplist_fileinfo() - Retrieves information about resolve file
path cache
wincache_refresh_if_changed() - Refreshes the cache entries for
the cached files
wincache_ucache_meminfo() - Recupera informacin sobre el uso
de memoria cach de usuario
wincache_scache_info() - Retrieves information about files cached
in the session cache
wincache_scache_meminfo() - Recupera informacin sobre el uso
de memoria cach de sesin
wincache_ucache_meminfo
(PECL wincache >= 1.1.0)
wincache_ucache_meminfo Recupera informacin sobre el uso de memoria
cach de usuario
Report a bug
Descripcin
array wincache_ucache_meminfo ( void )
Recupera informacin sobre el uso de memoria cach del usuario.
Report a bug
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 funcin 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 - nmero de bloques de memoria utilizados por el cach
del usuario
num_free_blks - nmero 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
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de wincache_ucache_meminfo()
<pre>
<?php
print_r(wincache_ucache_meminfo());
?>
</pre>
El resultado del ejemplo sera:
Array
(
[memory_total] => 5242880
[memory_free] => 5215056
[num_used_blks] => 6
[num_free_blks] => 3
[memory_overhead] => 176
)
Report a bug
Ver tambin
wincache_fcache_fileinfo() - Retrieves information about files cached in the
file cache
wincache_fcache_meminfo() - Recupera informacin sobre el uso de
memoria cach de ficheros
wincache_ocache_fileinfo() - Retrieves information about files cached in the
opcode cache
wincache_rplist_fileinfo() - Retrieves information about resolve file path
cache
wincache_rplist_meminfo() - Retrieves information about memory usage by
the resolve file path cache
wincache_refresh_if_changed() - Refreshes the cache entries for the cached
files
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_scache_info() - Retrieves information about files cached in the
session cache
wincache_scache_meminfo() - Recupera informacin sobre el uso de
memoria cach de sesin
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
Report a bug
Descripcin
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.
Report a bug
Parmetros
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.
Report a bug
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.
Report a bug
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 sera:
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 sera:
array(0) {}
array(0) {}
string(1) "6"
Report a bug
Ver tambin
wincache_ucache_add() - Adds a variable in user cache
only if variable does not already exist in the cache
wincache_ucache_get() - Obtiene una variable
almacenada en la cach del usuario
wincache_ucache_delete() - Elimina las variables de la
memoria cach del usuario
wincache_ucache_clear() - Elimina todo el contenido de la
cach del usuario
wincache_ucache_exists() - Comprueba si una variable
existe en la cach del usuario
wincache_ucache_meminfo() - Recupera informacin
sobre el uso de memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los
datos almacenados en la cach del usuario
__sleep()
wincache_unlock
(PECL wincache >= 1.1.0)
wincache_unlock Libera un bloqueo exclusivo sobre una clave dada
Report a bug
Descripcin
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 mayora de las operaciones en la cach de usuario no es necesario el uso
de estas funciones.
Report a bug
Parmetros
key
Nombre de la llave en la cach para liberar el bloqueo.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Usar wincache_unlock()
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (wincache_lock(lock_txt_lock)) { // hacer un bloqueo exclusivo
ftruncate($fp, 0); // 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);
?>
Report a bug
Ver tambin
wincache_lock() - Acquires an exclusive lock on a given key
wincache_ucache_set() - Adds a variable in user cache and overwrites
a variable if it already exists in the cache
wincache_ucache_get() - Obtiene una variable almacenada en la cach
del usuario
wincache_ucache_delete() - Elimina las variables de la memoria cach
del usuario
wincache_ucache_clear() - Elimina todo el contenido de la cach del
usuario


wincache_ucache_exists() - Comprueba si una variable existe en la
cach del usuario
wincache_ucache_meminfo() - Recupera informacin sobre el uso de
memoria cach de usuario
wincache_ucache_info() - Recupera informacin sobre los datos
almacenados en la cach del usuario
wincache_scache_info() - Retrieves information about files cached in
the session cache
Building for Windows
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
Introduccin
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.


Requerimientos
Aunque no es obligatorio, xhprof incluye una interfaz que est escrito en PHP. Se
utiliza para guardar y mostrar los datos reseados en una forma utilizable, donde
la observacin se realiza mediante un navegador web. Por lo tanto, un servidor
web PHP activado probablemente mejorara la experiencia xhprof.
Tambin hay un tenedor de la interfaz grfica de usuario
en http://github.com/preinheimer/xhprof
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/xhprof
Configuracin en tiempo de ejecucin
El comportamiento de estas funciones se ve afectado por la configuracin
de php.ini.
Xhprof Opciones de configuracin
Nombre Por defecto Cambiable Historial de cambios
xhprof.output_dir "" PHP_INI_ALL
He aqu una breve explicacin de las directivas de configuracin.
xhprof.output_dir string
Directorio utilizado por la aplicacin por defecto de la interfaz iXHProfRuns
(es decir, la clase XHProfRuns_Default) para el almacenamiento XHProf.
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
XHPROF_FLAGS_NO_BUILTINS (integer)


Se utiliza para saltar todas las funciones incorporadas (internas)
XHPROF_FLAGS_CPU (integer)
Se utiliza para agregar informacin de la CPU a la salida.
XHPROF_FLAGS_MEMORY (integer)
Se utiliza para agregar informacin de la memoria a la salida.
Ejemplos
Ejemplo #1 Ejemplo Xhprof con interfaz grfica de usuario opcional
En este ejemplo se inicia y detiene el perfilador, a continuacin, utiliza interfaz
grfica de usuario para guardar y analizar los resultados. En otras palabras, el
cdigo de la extensin 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 sera algo similar a:
http://localhost/xhprof/xhprof_html/index.php?run=t11_4bdf44d21121f&source=xhpro
f_testing
Xhprof Funciones
xhprof_disable
(PECL xhprof >= 0.9.0)
xhprof_disable Detiene el perfilador xhprof
Report a bug


Descripcin
array xhprof_disable ( void )
Detiene el perfilador, y devuelve los datos xhprof de la carrera.
Parmetros
Esta funcin no tiene parmetros.
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 sera 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_enable Inicia perfil xhprof
Report a bug
Descripcin
void xhprof_enable ([ int $flags = 0 [, array $options ]] )
Inicia perfiles xhprof.
Report a bug
Parmetros
flags
Flags opcionales para aadir informacin adicional a la creacin de perfiles.
Vase las constantes XHprof Para obtener ms informacin acerca de estos
flags, p.e.j., XHPROF_FLAGS_MEMORY para permitir perfiles de memoria.
options
Un array de opciones opcionales, es decir, la opcin 'ignored_functions' para
pasar en las funciones que se ignoraron durante el perfilado.
Report a bug
Valores devueltos
NULL
Report a bug
Historial de cambios
Versin Descripcin
0.9.2
El parmetro opcional options fu
agregado.
Report a bug


Ejemplos
Ejemplo #1 Ejemplos de xhprof_enable()
<?php
// 1. tiempo transcurrido + memoria + perfiles CPU; e ignorar las funci
ones integradas (internas)
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAG
S_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')));
?>
Report a bug
Ver tambin
xhprof_disable() - Detiene el perfilador xhprof
xhprof_sample_enable() - Descripcin
memory_get_usage() - Devuelve la cantidad de memoria asignada
a PHP
getrusage() - Obtiene el uso de los recursos actuales
xhprof_sample_disable
(PECL xhprof >= 0.9.0)
xhprof_sample_disable Detiene la muestra del perfilador xhprof
Report a bug
Descripcin
array xhprof_sample_disable ( void )
Detiene la muestra el modo perfilador xhprof, y
Report a bug


Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
Un array de los datos de muestra xhprof, de la ejecucin.
Report a bug
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 sera algo similar a:
Array
(
[1272935300.800000] => main()
[1272935300.900000] => main()
)
xhprof_sample_enable
(PECL xhprof >= 0.9.0)
xhprof_sample_enable Descripcin
Report a bug
Descripcin
void xhprof_sample_enable ( void )
Inicia la creacin de perfiles en modo de muestra, que es una versin ms 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 funcin completa. El caso de uso


principal es en gastos indirectos ms bajos se requiere cuando se hace la
supervisin del rendimiento y de diagnstico.
Advertencia
Esta funcin no est documentada actualmente, solamente se encuentra
disponible la lista de parmetros.
Report a bug
Parmetros
Esta funcin no tiene parmetros.
Report a bug
Valores devueltos
NULL
Report a bug
Ver tambin
xhprof_sample_disable() - Detiene la muestra del perfilador xhprof
xhprof_enable() - Inicia perfil xhprof
memory_get_usage() - Devuelve la cantidad de memoria asignada a PHP
getrusage() - Obtiene el uso de los recursos actuales
Manipulacin de formatos de audio
Etiquetas ID3
Introduccin
Estas funciones permiten leer y manipular etiquetas ID3. Las etiquetas ID3 se
utilizan en archivos MP3 para almacenar el ttulo de la cancin, as como
informacin acerca del artista, lbum, gnero, ao y nmero de pista.
Desde la versin 0.2 tambin es posible extraer marcos de texto desde etiquetas
ID3 v2.2+.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,


informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/id3.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Constantes Predefinidas
La mayora de las funciones ID3 permiten especificar u obtener la versin de la
etiqueta. Para especificar la versin 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 ttulo, artista, lbum, gnero, ao 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 informacin abarcada por las etiquetas v1.0 ms el
nmero 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 versin
de etiquetas debera ser usado.
id3_get_frame_long_name
(PECL id3 >= 0.2)
id3_get_frame_long_name Obtiene el nombre largo de un marco ID3v2
Report a bug


Descripcin
string id3_get_frame_long_name ( string $frameId )
id3_get_frame_long_name() Retorna el nombre largo para un marco ID3v2.
Report a bug
Parmetros
frameId
Un marco ID3v2
Report a bug
Valores devueltos
Retorna el nombre largo del marco o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de id3_get_frame_long_name()
<?php
$longName = id3_get_frame_long_name("TOLY");
echo $longName;
?>
El resultado del ejemplo sera:
Original lyricist(s)/text writer(s)
Report a bug
Ver tambin
id3_get_frame_short_name() - Obtiene el nombre corto de un marco
ID3v2
id3_get_frame_short_name
(PECL id3 >= 0.2)
id3_get_frame_short_name Obtiene el nombre corto de un marco ID3v2
Report a bug


Descripcin
string id3_get_frame_short_name ( string $frameId )
id3_get_frame_short_name() Retorna el nombre corto para un marco ID3v2.
Report a bug
Parmetros
frameId
Un marco ID3v2
Report a bug
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().
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de id3_get_frame_short_name()
<?php
$nombreCorto = id3_get_frame_short_name("TOLY");
echo $nombreCorto;
?>
El resultado del ejemplo sera:
originalLyricist
Report a bug
Ver tambin
id3_get_frame_long_name() - Obtiene el nombre largo de un marco
ID3v2
id3_get_genre_id
(PECL id3 >= 0.1)
id3_get_genre_id Obtiene el id correspondiente para un gnero musical


Report a bug
Descripcin
int id3_get_genre_id ( string $genre )
id3_get_genre_id() Retorna el id correspondiente a un gnero.
Report a bug
Parmetros
genre
Nombre del gnero como un string.
Report a bug
Valores devueltos
El id del gnero o FALSE en caso de error.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de id3_get_genre_id()
<?php
$id = id3_get_genre_id("Alternative");
echo $id;
?>
El resultado del ejemplo sera:
20
Report a bug
Ver tambin
id3_get_genre_name() - Obtiene el nombre del gnero correspondiente
a un id
id3_get_genre_list() - Obtiene todos los valores posibles para la
etiqueta gnero
id3_get_genre_list
(PECL id3 >= 0.1)
id3_get_genre_list Obtiene todos los valores posibles para la etiqueta gnero


Report a bug
Descripcin
array id3_get_genre_list ( void )
id3_get_genre_list() Retorna un array conteniendo todos los posibles gneros
que pueden ser almacenados en la etiqueta ID3 correspondiente. Esta lista fue
creada por Eric Kemp y ms tarde ampliada por WinAmp.
Esta funcin es til para proveer a los usuarios una lista de gneros donde puedan
seleccionar uno de ellos. Al actualizar la etiqueta ID3 siempre se debe especificar
el gnero como un entero entre 0 y 147.
Report a bug
Valores devueltos
Retorna un array conteniendo todos los valores posibles para la etiqueta ID3.
Report a bug
Ejemplos
Ejemplo #1 Ejemplo de id3_get_genre_list()
<?php
$generos = id3_get_genre_list();
print_r($generos);
?>
El resultado del ejemplo sera:
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
)
Report a bug
Ver tambin
id3_get_genre_name() - Obtiene el nombre del gnero correspondiente a
un id
id3_get_genre_id() - Obtiene el id correspondiente para un gnero musical
id3_get_genre_name
(PECL id3 >= 0.1)
id3_get_genre_name Obtiene el nombre del gnero correspondiente a un id
Report a bug
Descripcin
string id3_get_genre_name ( int $genre_id )
id3_get_genre_name() Retorna el nombre de un gnero correspondiente a un
id dado.
Report a bug
Parmetros
genre_id
Un entero entre 0 to 147


Report a bug
Valores devueltos
Retorna el nombre del gnero en ingls 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 sera:
Alternative
Ver tambin
id3_get_genre_list() - Obtiene todos los valores posibles para la
etiqueta gnero
id3_get_genre_id() - Obtiene el id correspondiente para un gnero
musical
id3_get_tag
(PECL id3 >= 0.1)
id3_get_tag Obtiene toda la informacin almacenada en una etiqueta ID3
Descripcin
array id3_get_tag ( string $filename [, int $version = ID3_BEST ] )
id3_get_tag() Es usada para obtener toda la informacin almacenada en la
etiqueta ID3 del fichero especificado.
Parmetros
filename
Ruta al fichero MP3
En lugar de un nombre de fichero puede pasarse un contexto de flujos
vlido.


version
Permite especificar la versin de la etiqueta debido a que los ficheros MP3
pueden contener ambas, etiquetas versin 1.x y 2.x
Desde la versin 0.2 id3_get_tag() tambin soporta etiquetas ID3 versin
2.2, 2.3 y 2.4. Para extraer informacin de esas etiquetas deben pasarse las
constantes ID3_V2_2, ID3_V2_3 o ID3_V2_4 como segundo parmetro. Las
etiquetas ID3 v2.x pueden contener mucha ms informacin 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
funcin 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 sera 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 sera algo similar a:
Array
(
[copyright] => Dirty Mac
[originalArtist] => Dirty Mac


[composer] => Marcus Gtze
[artist] => Dirty Mac
[title] => Little Big Man
[album] => Demo-Tape
[track] => 5/12
[genre] => (17)Rock
[year] => 2001
)
Ver tambin
id3_set_tag() - Actualiza la informacin almacenada en una
etiqueta ID3
id3_remove_tag() - Elimina una etiqueta ID3 existente
id3_get_version() - Obtiene la versin de una etiqueta ID3
id3_get_version
(PECL id3 >= 0.1)
id3_get_version Obtiene la versin de una etiqueta ID3
Report a bug
Descripcin
int id3_get_version ( string $filename )
id3_get_version() Obtiene la o las versiones de una o ms 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 versin 1.1 es slo una extensin de la 1.0.
Report a bug
Parmetros
fichero
La ruta al fichero MP3
En lugar de un nombre de fichero puede ser pasado un contexto de flujos
vlido.
Report a bug


Valores devueltos
Retorna el nmero de versin de la etiqueta ID3 del archivo. Como una
etiqueta puede contener etiquetas ID3 v1.x y v2.x, la respuesta de esta
funcin debera ser comparada bit a bit con las constantes
predefinidas ID3_V1_0, ID3_V1_1 e ID3_V2.
Report a bug
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 sera algo similar a:
Contiene una etiqueta 1.x
Contiene una etiqueta 1.1
Report a bug
Ver tambin
id3_set_tag() - Actualiza la informacin almacenada en una etiqueta
ID3
id3_get_tag() - Obtiene toda la informacin almacenada en una
etiqueta ID3
id3_remove_tag() - Elimina una etiqueta ID3 existente
id3_remove_tag
(PECL id3 >= 0.1)
id3_remove_tag Elimina una etiqueta ID3 existente
Report a bug
Descripcin
bool id3_remove_tag ( string $filename [, int $version = ID3_V1_0 ] )


id3_remove_tag() Es usada para eliminar informacin almacenada de una
etiqueta ID3.
Report a bug
Parmetros
filename
Ruta al fichero MP3
En lugar de un nombre de fichero puede pasarse un contexto de flujos
vlido.
version
Permite especificar la versin de la etiqueta, esto se debe a que los ficheros
MP3 pueden contener ambas versiones de etiquetas, 1.x y 2.x
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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
Report a bug


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 versin
1.1 es slo una extensin de la 1.0.
Report a bug
Ver tambin
id3_set_tag() - Actualiza la informacin almacenada en una
etiqueta ID3
id3_get_tag() - Obtiene toda la informacin almacenada en una
etiqueta ID3
id3_get_version() - Obtiene la versin de una etiqueta ID3
id3_set_tag
(PECL id3 >= 0.1)
id3_set_tag Actualiza la informacin almacenada en una etiqueta ID3
Report a bug
Descripcin
bool id3_set_tag ( string $filename , array $tag [, int $version = ID3_V1_0 ] )
id3_set_tag() Es usada para modificar la informacin almacenada de una
etiqueta ID3. Si la etiqueta no se encuentra presente, ser aadida al fichero.
Report a bug
Parmetros
filename
Ruta al fichero MP3
En lugar de un nombre de fichero puede pasarse un contexto de flujos
vlido.
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 versin
title cadena con un mximo de 30 caracteres v1.0, v1.1
artist cadena con un mximo de 30 caracteres v1.0, v1.1
album cadena con un mximo de 30 caracteres v1.0, v1.1
year 4 dgitos v1.0, v1.1
genre entero entre 0 y 147 v1.0, v1.1
comme
nt
cadena con un mximo de 30 caracteres (28 en
v1.1)
v1.0, v1.1
track entero entre 0 y 255 v1.1
version
Permite especificar la versin de la etiqueta, esto se debe a que los ficheros
MP3 pueden contener ambas versiones de etiquetas, 1.x y 2.x
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
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", $datos, ID3_V1_0 );
if ($resultado === true) {
echo "Etiqueta actualizada correctamente\n";
}
?>
Si es posible escribir en el fichero, imprimir:
Etiqueta actualizada correctamente
Report a bug
Notas
Nota: Actualmente id3_set_tag() solamente soporta las versiones
1.0 y 1.1.
Report a bug
Ver tambin
id3_remove_tag() - Elimina una etiqueta ID3 existente
id3_get_tag() - Obtiene toda la informacin almacenada en
una etiqueta ID3
id3_get_version() - Obtiene la versin de una etiqueta ID3
KTaglib
Introduccin
KTaglib es un objeto vinculante orientado a la biblioteca taglib del proyecto KDE,
utilizado en proyectos como Amarok para leer y escribir etiquetas ID3 y Ogg. La
biblioteca tambin ofrece acceso a la informacin de audio. Los enlaces son
diseados por lo general siguiendo la API de C++ subyacente, pero se cambiarn
cuando haya una forma ms similar a PHP.
Nota:
Por el momento ktaglib es capaz de leer y escribir etiquetas ID3v1 e ID3v2.
Requerimientos
Si quiere desarrollar con ktaglib necesita tener instalado al menos la versin taglib
1.5. Para obtener la librera taglib consulte la pgina del proyecto taglib. Las


DLL's Windows son construidas estticamente contrariamente a taglib, por lo tanto
no hay necesidad de tener taglib instalado.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/ktaglib.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
KTaglib utiliza constantes de clase. La mayora de las constantes son asignadas de
acuerdo a las enumeraciones y constantes Taglib.
KTaglib_MPEG_Header::Version1 (integer)
ID3 version es 1.0
KTaglib_MPEG_Header::Version2 (integer)
ID3 version es 2.0
KTaglib_MPEG_Header::Version2_5 (integer)
ID3 version es 2.5
KTaglib_ID3v2_AttachedPictureFrame::Other (integer)
Otro tipo de imagen
KTaglib_ID3v2_AttachedPictureFrame::FileIcon (integer)
Tipo de imagen Archivo de icono
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon (integer)
Tipo de imagen Otro archivo de icono
KTaglib_ID3v2_AttachedPictureFrame::FrontCover(integer)
Tipo de imagen Portada
KTaglib_ID3v2_AttachedPictureFrame::BackCover(integer)
Tipo de imagen ContraPortada


KTaglib_ID3v2_AttachedPictureFrame::LeafletPage(integer)
Tipo de imagen Folleto de pgina
KTaglib_ID3v2_AttachedPictureFrame::Media(integer)
Tipo de imagen Media
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist(integer)
Tipo de imagen Responsable Artstico
KTaglib_ID3v2_AttachedPictureFrame::Artist(integer)
Tipo de imagen Artista
KTaglib_ID3v2_AttachedPictureFrame::Conductor(integer)
Tipo de imagen Director de orquesta
KTaglib_ID3v2_AttachedPictureFrame::Band (integer)
Tipo de imagen Banda
KTaglib_ID3v2_AttachedPictureFrame::Composer(integer)
Tipo de imagen Compositor
KTaglib_ID3v2_AttachedPictureFrame::Lyricist(integer)
Tipo de imagen Letrista
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation(integer)
Tipo de imagen Lugar de grabacin
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording(integer)
Tipo de imagen Durante la grabacin
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance(integer)
Tipo de imagen Durante la ejecucin
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture(integer)
Tipo de imagen Captura de pantalla de video
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish(integer)
Tipo de imagen Un pez de colores brillantes
KTaglib_ID3v2_AttachedPictureFrame::Illustration(integer)
Tipo de imagen Ilustracin
KTaglib_ID3v2_AttachedPictureFrame::BandLogo(integer)
Tipo de imagen Logotipo de la banda



La clase KTaglib_MPEG_File
(0.0.1)
Introduccin
Representa un archivo MPEG. Los archivos MPEG pueden tener etiquetas ID3v1,
ID3v2 y propiedades de audio.
Sinopsis de la clase
KTaglib_MPEG_File {
/* Mtodos */
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::__construct Abre un fichero nuevo
Report a bug
Descripcin
public KTaglib_MPEG_File::__construct() ( string $filename )
Abre un fichero MPEG nuevo.
Report a bug
Parmetros
filename
El fichero a leer
Report a bug


Ejemplos
Ejemplo #1 Abre un fichero MP3 nuevo y lee el ttulo
<?php
$mpeg = new KTaglib_MPEG_File('example.mp3');
echo $mpeg->getID3v1Tag()->getTitle();
?>
KTaglib_MPEG_File::getAudioProperties
(0.0.1)
KTaglib_MPEG_File::getAudioProperties Devuelve un objeto que proporciona
acceso a las propiedades de audio
Report a bug
Descripcin
public KTaglib_MPEG_File KTaglib_MPEG_File::getAudioProperties ( void )
Devuelve un objeto que proporciona acceso a las propiedades de audio de el
fichero mpeg.
Report a bug
Valores devueltos
Devuelve un objeto KTaglib_MPEG_AudioProperties o falso.
KTaglib_MPEG_File::getID3v1Tag
(0.0.1)
KTaglib_MPEG_File::getID3v1Tag Devuelve un objeto que representa una
etiqueta ID3v1
Report a bug
Descripcin
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 informacin sobre la etiqueta ID3v1.
Report a bug


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::getID3v2Tag Devuelve un objeto ID3v2
Report a bug
Descripcin
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.
Report a bug
Valores devueltos
Devuelve el objeto KTaglib_ID3v2_Tag del fichero MPEG o falso si no hay una
etiqueta ID3v2
La clase KTaglib_MPEG_AudioProperties
(0.0.1)
Introduccin
Representa las propiedades de audio de un fichero MPEG, como la duracin, la tasa
de bits o la tasa de muestreo.
Sinopsis de la clase
KTaglib_MPEG_AudioProperties {
/* Mtodos */
public int KTaglib_MPEG_AudioProperties::getBitrate ( void )
public int KTaglib_MPEG_AudioProperties::getChannels ( void )
public int KTaglib_MPEG_AudioProperties::getLayer ( void )
public int KTaglib_MPEG_AudioProperties::getLength ( void )


public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )
public int KTaglib_MPEG_AudioProperties::getVersion ( void )
public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )
public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )
public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )
}
KTaglib_MPEG_AudioProperties::getBitrate
(0.0.1)
KTaglib_MPEG_AudioProperties::getBitrate Devuelve el bitrate del archivo MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getBitrate ( void )
Devuelve el bitrate del archivo MPEG
Report a bug
Valores devueltos
Devuelve el bitrate como un entero
KTaglib_MPEG_AudioProperties::getChannels
(0.0.1)
KTaglib_MPEG_AudioProperties::getChannels Devuelve la cantidad de canales
de un archivo MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getChannels ( void )
Devuelve la cantidad de canales de un archivo MPEG
Report a bug


Valores devueltos
Devuelve el nmero de canales como un entero
KTaglib_MPEG_AudioProperties::getLayer
(0.0.1)
KTaglib_MPEG_AudioProperties::getLayer Devuelve la capa de un archivo MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getLayer ( void )
Devuelve la capa del archivo MPEG (por lo general 3 para MP3).
Report a bug
Valores devueltos
Devuelve la capa como un nmero entero
KTaglib_MPEG_AudioProperties::getLength
(0.0.1)
KTaglib_MPEG_AudioProperties::getLength Devuelve la duracin de un archivo
MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getLength ( void )
Devuelve la duracin de un archivo MPEG
Report a bug
Valores devueltos
Devuelve la duracin como un entero
KTaglib_MPEG_AudioProperties::getSampleBitrate
(0.0.1)


KTaglib_MPEG_AudioProperties::getSampleBitrate Devuelve la frecuencia de
muestreo o tasa de bits de un archivo MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )
Devuelve la frecuencia de muestreo o tasa de bits de un archivo MPEG
Report a bug
Valores devueltos
Devuelve la frecuencia de muestreo o tasa de bits como un entero
KTaglib_MPEG_AudioProperties::getVersion
(0.0.1)
KTaglib_MPEG_AudioProperties::getVersion Devuelve la versin de un archivo
MPEG
Report a bug
Descripcin
public int KTaglib_MPEG_AudioProperties::getVersion ( void )
Devuelve la versin de la cabecera de un archivo MPEG. Las posibles versiones son
definidas en Tag_MPEG_Header (Version1, Version2, Version2.5).
Report a bug
Valores devueltos
Devuelve la versin
KTaglib_MPEG_AudioProperties::isCopyrighted
(0.0.1)
KTaglib_MPEG_AudioProperties::isCopyrighted Devuelve el estado de derecho
de autor de un archivo MPEG
Report a bug
Descripcin
public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )


Devuelve true si el archivo MPEG tiene derechos de autor
Report a bug
Valores devueltos
Devuelve true si el archivo MPEG tiene derechos de autor
KTaglib_MPEG_AudioProperties::isOriginal
(0.0.1)
KTaglib_MPEG_AudioProperties::isOriginal Devuelve si el archivo est marcado
como el archivo original
Report a bug
Descripcin
public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )
Devuelve true si el archivo est marcado como el archivo original
Report a bug
Valores devueltos
Devuelve true si el archivo est marcado como el archivo original
KTaglib_MPEG_AudioProperties::isProtectionEnabled
(0.0.1)
KTaglib_MPEG_AudioProperties::isProtectionEnabled Devuelve si los
mecanismos de proteccin de un archivo MPEG estn habilitados
Report a bug
Descripcin
public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )
Devuelve true si los mecanismos de proteccin (como el DRM) estn habilitados
para este archivo
Report a bug


Valores devueltos
Devuelve true si los mecanismos de proteccin (como el DRM) estn habilitados
para este archivo
La clase KTaglib_Tag
(0.0.1)
Introduccin
Clase base para las etiquetas ID3v1 o ID3v2
Sinopsis de la clase
KTaglib_Tag {
/* Mtodos */
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::getAlbum Devuelve la cadena lbum de una etiqueta ID3
Report a bug
Descripcin
public string KTaglib_Tag::getAlbum ( void )
Devuelve la cadena lbum de una etiqueta ID3. Este mtodo es implementado en
etiquetas ID3v1 y ID3v2.


Report a bug
Valores devueltos
Devuelve la cadena lbum
KTaglib_Tag::getArtist
(0.0.1)
KTaglib_Tag::getArtist Devuelve la cadena artista de una etiqueta ID3
Report a bug
Descripcin
public string KTaglib_Tag::getArtist ( void )
Devuelve la cadena artista de una etiqueta ID3. Este mtodo es implementado en
etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve la cadena artista
KTaglib_Tag::getComment
(0.0.1)
KTaglib_Tag::getComment Devuelve el comentario de una etiqueta ID3
Report a bug
Descripcin
public string KTaglib_Tag::getComment ( void )
Devuelve el comentario de una etiqueta ID3. Este mtodo es implementado en
etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve la cadena comentario
KTaglib_Tag::getGenre


(0.0.1)
KTaglib_Tag::getGenre Devuelve el gnero de una etiqueta ID3
Report a bug
Descripcin
public string KTaglib_Tag::getGenre ( void )
Devuelve el gnero de una etiqueta ID3. Este mtodo es implementado en
etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve la cadena gnero
KTaglib_Tag::getTitle
(0.0.1)
KTaglib_Tag::getTitle Devuelve la cadena de ttulo de una etiqueta ID3
Report a bug
Descripcin
public string KTaglib_Tag::getTitle ( void )
Devuelve la cadena de ttulo de una etiqueta ID3. Este mtodo es implementado
en etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve la cadena ttulo
KTaglib_Tag::getTrack
(0.0.1)
KTaglib_Tag::getTrack Devuelve el nmero de pista de una etiqueta ID3
Report a bug
Descripcin
public int KTaglib_Tag::getTrack ( void )


Devuelve el nmero de pista en una etiqueta ID3. Este mtodo es implementado
en etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve el nmero de pista como un entero
KTaglib_Tag::getYear
(0.0.1)
KTaglib_Tag::getYear Devuelve el ao de una etiqueta ID3
Report a bug
Descripcin
public int KTaglib_Tag::getYear ( void )
Devuelve el ao de una etiqueta ID3. Este mtodo es implementado en etiquetas
ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve el ao como un nmero entero
KTaglib_Tag::isEmpty
(0.0.1)
KTaglib_Tag::isEmpty Devuelve true si la etiqueta est vaca
Report a bug
Descripcin
public bool KTaglib_Tag::isEmpty ( void )
Devuelve true si la etiqueta existe, pero est vaca. Este mtodo es implementado
en etiquetas ID3v1 y ID3v2.
Report a bug
Valores devueltos
Devuelve true si la etiqueta est vaca, en caso contrario devuelve false.


La clase KTaglib_ID3v2_Tag
(0.0.1)
Introduccin
Representa una etiqueta ID3v2. Proporciona una lista de marcos ID3v2 y puede
ser utilizada para aadir y eliminar marcos adicionales.
Sinopsis de la clase
extends KTaglib_Tag {
/* Mtodos */
public bool addFrame ( KTaglib_ID3v2_Frame $frame )
public array getFrameList ( void )
/* Mtodos 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::addFrame Agregar un frame a la etiqueta ID3v2
Report a bug
Descripcin
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 vlido. Para guardar la etiqueta, es necesario invocar a la
funcin guardar.
Report a bug
Valores devueltos
Devuelve true en caso de xito, de lo contrario false.
KTaglib_ID3v2_Tag::getFrameList
(0.0.1)
KTaglib_ID3v2_Tag::getFrameList Devuelve un array de frames ID3v2,
asociados con la etiqueta ID3v2
Report a bug
Descripcin
public array KTaglib_ID3v2_Tag::getFrameList ( void )
Devuelve un array de frames ID3v2, asociados con la etiqueta ID3v2.
Report a bug
Valores devueltos
Devuelve un array de objetos KTaglib_ID3v2_Frame
La clase KTaglib_ID3v2_Frame
(0.0.1)
Introduccin
La clase base para tramas ID3v2. Las etiquetas ID3v2 son separadas en varias
tramas especializadas. Algunas tramas pueden estar presente mltiples veces.
Sinopsis de clase
extends KTaglib_Tag {
/* Mtodos */
public int getSize ( void )
public string __toString ( void )


/* Mtodos 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::getSize Devuelve el tamao de el frame en bytes
Report a bug
Descripcin
public int KTaglib_ID3v2_Frame::getSize ( void )
Devuelve el tamao de el frame en bytes. Por favor, referirse a id3.org para ver
qu son los frames ID3v2 y cmo estn definidos.
Report a bug
Valores devueltos
Devuelve el tamao de el frame en bytes
KTaglib_ID3v2_Frame::__toString
(0.0.1)
KTaglib_ID3v2_Frame::__toString Devuelve un string de representacin de el
frame
Report a bug


Descripcin
public string KTaglib_ID3v2_Frame::__toString ( void )
Devuelve un string de representacin de el frame. Esto podra ser solamente el id
del frame, pero podra contener ms informacin. Por favor vea la documentacin
de ktaglib para ms informacin
Report a bug
Valores devueltos
Devuelve un string de representacin de el frame.
La clase KTaglib_ID3v2_AttachedPictureFrame
(0.0.1)
Introduccin
Representa una trama ID3v2 que puede contener una imagen.
Sinopsis de Clase
extends KTaglib_ID3v2_Frame {
/* Mtodos */
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 )
/* Mtodos 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::getDescription Devuelve una descripcin
de la imagen en un marco de fotos
Report a bug
Descripcin
public string KTaglib_ID3v2_AttachedPictureFrame::getDescription ( void )
Devuelve la descripcin que se acompaa de un marco de fotos en un marco de
ID3v2.x.
Report a bug
Valores devueltos
Devuelve una descripcin de la imagen en un marco de fotos
KTaglib_ID3v2_AttachedPictureFrame::getMimeType
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::getMimeType Devuelve el tipo mime de
la imagen
Report a bug
Descripcin
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 mtodo 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 mtodo 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 vaca.
Report a bug
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::getType Devuelve el tipo de la imagen
Report a bug
Descripcin
public int KTaglib_ID3v2_AttachedPictureFrame::getType ( void )
Devuelve el tipo de la imagen.
La especificacin ID3v2 permite una AttachedPictureFrame para establecer el tipo
de una imagen. Esto puede ser por ejemplo, FrontCover or FileIcon. Por favor
refirase a la descripcin de la clase KTaglib_ID3v2_AttachedPictureFrame para
obtener una lista de tipos disponibles.
Report a bug
Valores devueltos
Devuelve la representacin de entero de este tipo.
KTaglib_ID3v2_AttachedPictureFrame::savePicture
(0.0.1)
KTaglib_ID3v2_AttachedPictureFrame::savePicture Guarda la imagen en un
archivo
Report a bug


Descripcin
public bool KTaglib_ID3v2_AttachedPictureFrame::savePicture ( string $file
name )
Guarda la imagen adjunta al archivo especificado.
Report a bug
Valores devueltos
Devuelve true si tiene xito, false en caso contrario
KTaglib_ID3v2_AttachedPictureFrame::setMimeType
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::setMimeType Establece el tipo mime de
la imagen
Report a bug
Descripcin
public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( string $type )
Establece el tipo mime de la imagen. Esto debe en la mayora de los casos es
"image/png" o "image/jpeg".
KTaglib_ID3v2_AttachedPictureFrame::setPicture
(0.0.1)
KTaglib_ID3v2_AttachedPictureFrame::setPicture Establece el marco de la
imagen a la imagen dada
Report a bug
Descripcin
public void KTaglib_ID3v2_AttachedPictureFrame::setPicture ( string $filena
me )
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.
Report a bug


Valores devueltos
Devuelve true si tiene xito, false en caso contrario
KTaglib_ID3v2_AttachedPictureFrame::setType
(0.2.0)
KTaglib_ID3v2_AttachedPictureFrame::setType Establecer el tipo de la imagen
Report a bug
Descripcin
public void KTaglib_ID3v2_AttachedPictureFrame::setType ( int $type )
Establece el tipo de la imagen. Esto puede ser por ejemplo, FrontCover io FileIcon.
Vase la descripcin de la clase KTaglib_ID3v2_AttachedPictureFrame para una
lista de tipos disponibles y sus asignaciones de constantes.
OGG/Vorbis
Introduccin
El formato de fichero OGG/Vorbis, tal como est definido
en http://www.vorbis.com/, es un esquema para comprimir flujos de audio
mediante mltiples factores con un mnimo de prdida de calidad. Esta extensin
aade el soporte Ogg Vorbis a las Envolturas URL de PHP. Cuando se utiliza en
modo lectura, la informacin OGG/Vorbis comprimida se expande a audio PCM sin
tratar en uno de los formatos de codificacin PCM listados despus.
Requerimientos
Esta extensin requiere PHP >= 4.3.0, libogg >= 1.0, y libvorbis >= 1.0.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/oggvorbis
Constantes predefinidas


Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
OGG/Vorbis soporta codificaciones PCM en los siguientes formatos
Constante Definicin
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
Opcin Definicin Relevancia Predeterminado
pcm_mode
Codificacin PCM de byte usada.
Vase las constantes.
Lectura /
Escritura
OGGVORBIS_PCM_S16_LE
rate
Velocidad de muestreo PCM.
Medida en Hz.
Slo
escritura
44100
bitrate
Codificacin de Velocidad de
Tranferencia Media / Codificacin
de Velocidad de Tranferencia
Variable de Vorbis. Medido en bps
(ABR) o nivel de Calidad (VBR: 0.0 a
1.0). 128000 ABR es
Slo
escritura
128000


OGG/Vorbis tuning options
Opcin Definicin Relevancia Predeterminado
aproximadamente igual a 0.4 VBR.
channels
Nmero de canales PCM. 1 ==
Mono, 2 == Estreo.
Slo
escritura
2
serialno
Nmero de Serie del flujo dentro
de fichero. Debe ser nico dentro
del fichero. Debido a la
posibilidades de seleccionar un
nmero de serie duplicado dentro
de un fichero encadenado, se han
de realizar esfuerzon para asignar
manualmente nmeros nicos al
codificar.
Slo
escritura
Aleatorio
comments
Array asociativo de comentarios de
ficheros. Ser traducido
astrtoupper($nombre) . "=$valor".
Nota: Esta opcin de contexto no
est disponible en oggvorbis-0.1
Slo
escritura
array('ENCODER' =>
'PHP/OggVorbis,
http://pear.php.net/oggvorbis')
Ejemplo de uso de ogg:// wrapper.
Ejemplo #1 Leer un fichero OGG/Vorbis
<?php
dl("oggvorbis.so");

/* Por omisin, ogg:// decodificar a 16 bit sin signo Little Endian */
$fp = fopen('ogg://myaudio.ogg', 'r');

/* Recopilar informacin sobre el fichero. */
$metadatos = stream_get_meta_data($fp);

/* Inspeccionar la primera cancin (normalmente una nica cancin,
pero los ficheros OGG/Vorbis pueden ser encadenados) */
$datos_cancin = $metadatos['wrapper_data'][0];

echo "Fichero OGG/Vorbis codificado por: {$datos_cancin['vendor']}\n.";


echo " {$datos_cancin['channels']} canales de {$datos_cancin['rate']}Hz muest
reo codificado a {$datos_cancin['bitrate_nominal']}bps.\n";
foreach($datos_cancin['comments'] as $comentario) {
echo " $comentario\n";
}

while ($audio_data = fread($fp, 8192)) {
/* 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 aadir informacin. 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
Introduccin
Vinculaciones de audio independientes de la plataforma. Requiere la biblioteca
OpenAL.


Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/openal.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Tipos de recursos
Esta extensin define cuatro tipos de recursos: Open AL(Device) - Devuelto
por openal_device_open(), Open AL(Context) - Devuelto
poropenal_context_create(), Open AL(Buffer) - Devuelto
por openal_buffer_create(), y Open AL(Source) - Devuelto
por openal_source_create().
Constantes predefinidas
Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
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
openal_buffer_create
(PECL openal >= 0.1.0)
openal_buffer_create Genera un buffer OpenAL
Report a bug


Descripcin
resource openal_buffer_create ( void )
Report a bug
Valores devueltos
Devuelve un recurso Open AL(Buffer) en xito o FALSE en fallo.
Report a bug
Ver tambin
openal_buffer_loadwav() - Carga un archivo .wav dentro de un buffer
openal_buffer_data() - Carga un buffer con datos
openal_buffer_data
(PECL openal >= 0.1.0)
openal_buffer_data Carga un buffer con datos
Report a bug
Descripcin
bool openal_buffer_data ( resource $buffer , int $format , string $data , int $freq
)
Report a bug
Parmetros
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_STEREO
16


data
Bloque de datos de audio binario en el format y el freq especificado.
freq
Frecuencia de data dados en Hz.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
openal_buffer_destroy
(PECL openal >= 0.1.0)
openal_buffer_destroy Destruye un buffer OpenAL
Report a bug
Descripcin
bool openal_buffer_destroy ( resource $buffer )
Report a bug
Parmetros
buffer
Un recurso Open AL(Buffer) (previamente creado
por openal_buffer_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.


Report a bug
Ver tambin
openal_buffer_create() - Genera un buffer OpenAL
openal_buffer_get
(PECL openal >= 0.1.0)
openal_buffer_get Recupera una propiedad del buffer OpenAL
Report a bug
Descripcin
int openal_buffer_get ( resource $buffer , int $property )
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve un valor entero apropiada a la property requerida o FALSE en
caso de error.
Report a bug
Ver tambin
openal_buffer_create() - Genera un buffer OpenAL


openal_buffer_loadwav
(PECL openal >= 0.1.0)
openal_buffer_loadwav Carga un archivo .wav dentro de un buffer
Report a bug
Descripcin
bool openal_buffer_loadwav ( resource $buffer , string $wavfile )
Report a bug
Parmetros
buffer
Un recurso Open AL(Buffer) (previamente creado
por openal_buffer_create()).
wavfile
Ruta al archivo .wav en el sistema de archivo local.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_buffer_data() - Carga un buffer con datos
openal_stream() - Empieza la salida de una fuente
openal_context_create
(PECL openal >= 0.1.0)
openal_context_create Crea un contexto de procesamiento de audio


Report a bug
Descripcin
resource openal_context_create ( resource $device )
Report a bug
Parmetros
device
Un recurso Open AL(Device) (previamente creado
por openal_device_open()).
Report a bug
Valores devueltos
Devuelve un recurso Open AL(Context) en xito o FALSE en fallo.
Report a bug
Ver tambin
openal_device_open() - Inicia la capa de audio del OpenAL
openal_context_destroy() - Destruye un contexto
openal_context_current
(PECL openal >= 0.1.0)
openal_context_current Crea el corriente contexto especificado
Report a bug
Descripcin
bool openal_context_current ( resource $context )
Report a bug
Parmetros
context


Un recurso Open AL(Context) (previamente creado
por openal_context_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_context_create() - Crea un contexto de procesamiento de audio
openal_context_destroy
(PECL openal >= 0.1.0)
openal_context_destroy Destruye un contexto
Report a bug
Descripcin
bool openal_context_destroy ( resource $context )
Report a bug
Parmetros
context
Un recurso Open AL(Context) (previamente creado
por openal_context_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug


Ver tambin
openal_context_create() - Crea un contexto de procesamiento de audio
openal_context_process
(PECL openal >= 0.1.0)
openal_context_process Procesa un contexto especificado
Report a bug
Descripcin
bool openal_context_process ( resource $context )
Report a bug
Parmetros
context
Un recurso Open AL(Context) (previamente creado
por openal_context_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_context_create() - Crea un contexto de procesamiento de audio
openal_context_current() - Crea el corriente contexto especificado
openal_context_suspend() - Suspende el contexto especificado
openal_context_suspend
(PECL openal >= 0.1.0)
openal_context_suspend Suspende el contexto especificado
Report a bug


Descripcin
bool openal_context_suspend ( resource $context )
Report a bug
Parmetros
context
Un recurso Open AL(Context) (previamente creado
por openal_context_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_context_create() - Crea un contexto de procesamiento de audio
openal_context_current() - Crea el corriente contexto especificado
openal_context_process() - Procesa un contexto especificado
openal_device_close
(PECL openal >= 0.1.0)
openal_device_close Cierra un dispositivo OpenAL
Report a bug
Descripcin
bool openal_device_close ( resource $device )
Report a bug
Parmetros
device


Un recurso Open AL(Device) (previamente creado
por openal_device_open()) para ser cerrado.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_device_open() - Inicia la capa de audio del OpenAL
openal_device_open
(PECL openal >= 0.1.0)
openal_device_open Inicia la capa de audio del OpenAL
Report a bug
Descripcin
resource openal_device_open ([ string $device_desc ] )
Report a bug
Parmetros
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.
Report a bug
Valores devueltos
Devuelve un recurso Open AL(Device) en xito o FALSE en fallo.
Report a bug


Ver tambin
openal_device_close() - Cierra un dispositivo OpenAL
openal_context_create() - Crea un contexto de procesamiento de audio
openal_listener_get
(PECL openal >= 0.1.0)
openal_listener_get Devuelve una propiedad de oyente
Report a bug
Descripcin
mixed openal_listener_get ( int $property )
Report a bug
Parmetros
property
Propiedad para recuperar, una
de: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(f
loat,float,float)) yAL_ORIENTATION (array(float,float,float)).
Report a bug
Valores devueltos
Devuelve un flotante o un arreglo de flotantes (como apropiado) o FALSE en
caso de error.
Report a bug
Ver tambin
openal_listener_set() - Establece una propiedad de oyente
openal_listener_set
(PECL openal >= 0.1.0)
openal_listener_set Establece una propiedad de oyente
Report a bug


Descripcin
bool openal_listener_set ( int $property , mixed $setting )
Report a bug
Parmetros
property
Propiedad a establecer, una
de: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(f
loat,float,float)) yAL_ORIENTATION (array(float,float,float)).
setting
Valor a establecer, ya sea flotante, o un arreglo de flotantes como
apropiado.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_listener_get() - Devuelve una propiedad de oyente
openal_source_create
(PECL openal >= 0.1.0)
openal_source_create Genera una fuente de recursos
Report a bug
Descripcin
resource openal_source_create ( void )
Report a bug


Valores devueltos
Devuelve un recurso Open AL(Source) en xito o FALSE en fallo.
Report a bug
Ver tambin
openal_source_set() - Establece la propiedad de la fuente
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_destroy() - Destruye una fuente de recursos
openal_source_destroy
(PECL openal >= 0.1.0)
openal_source_destroy Destruye una fuente de recursos
Report a bug
Descripcin
bool openal_source_destroy ( resource $source )
Report a bug
Parmetros
source
Un recurso Open AL(Source) (previamente creado
por openal_source_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_create() - Genera una fuente de recursos
openal_source_get


(PECL openal >= 0.1.0)
openal_source_get Recupera una propiedad de una fuente del OpenAL
Report a bug
Descripcin
mixed openal_source_get ( resource $source , int $property )
Report a bug
Parmetros
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_ROL
LOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float),AL_CONE_INNER_ANGLE (float), AL
_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(fl
oat,float,float)),AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(flo
at,float,float)).
Report a bug
Valores devueltos
Devuelve el tipo asociado con la propiedad que se recupera o FALSE en
caso de error.
Report a bug
Ver tambin
openal_source_create() - Genera una fuente de recursos
openal_source_set() - Establece la propiedad de la fuente
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_pause


(PECL openal >= 0.1.0)
openal_source_pause Pausa la fuente
Report a bug
Descripcin
bool openal_source_pause ( resource $source )
Report a bug
Parmetros
source
Un recurso Open AL(Source) (previamente creado
por openal_source_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_stop() - Detiene la reproduccin de la fuente
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_rewind() - Rebobina la fuente
openal_source_play
(PECL openal >= 0.1.0)
openal_source_play Empieza la reproduccin de la fuente
Report a bug
Descripcin
bool openal_source_play ( resource $source )
Report a bug


Parmetros
source
Un recurso Open AL(Source) (previamente creado
por openal_source_create()).
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_stop() - Detiene la reproduccin de la fuente
openal_source_pause() - Pausa la fuente
openal_source_rewind() - Rebobina la fuente
openal_source_rewind
(PECL openal >= 0.1.0)
openal_source_rewind Rebobina la fuente
Report a bug
Descripcin
bool openal_source_rewind ( resource $source )
Report a bug
Parmetros
source
Un recurso Open AL(Source) (previamente creado
por openal_source_create()).
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_stop() - Detiene la reproduccin de la fuente
openal_source_pause() - Pausa la fuente
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_set
(PECL openal >= 0.1.0)
openal_source_set Establece la propiedad de la fuente
Report a bug
Descripcin
bool openal_source_set ( resource $source , int $property , mixed $setting )
Report a bug
Parmetros
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_O
UTER_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 descripcin de
la property para una descripcin de el valor(es) esperando.
Report a bug
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_create() - Genera una fuente de recursos
openal_source_get() - Recupera una propiedad de una fuente
del OpenAL
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_stop
(PECL openal >= 0.1.0)
openal_source_stop Detiene la reproduccin de la fuente
Report a bug
Descripcin
bool openal_source_stop ( resource $source )
Report a bug
Parmetros
source
Un recurso Open AL(Source) (previamente creado
por openal_source_create()).
Report a bug


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_play() - Empieza la reproduccin de la fuente
openal_source_pause() - Pausa la fuente
openal_source_rewind() - Rebobina la fuente
openal_stream
(PECL openal >= 0.1.0)
openal_stream Empieza la salida de una fuente
Report a bug
Descripcin
resource openal_stream ( resource $source , int $format , int $rate )
Report a bug
Parmetros
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_STEREO
16
rate


Frecuencias de datos para las salidas dadas en Hz.
Report a bug
Valores devueltos
Devuelve un recurso de salida en success o FALSE en caso de error.
Report a bug
Ver tambin
openal_source_create() - Genera una fuente de recursos
fwrite() - Escritura de un archivo en modo binario seguro
Servicios de autenticacin
Kerberos V
Introduccin
Estos paquetes le permite acceder a la administracin en los servidores Kerberos
V. Se puede crear, modificar y eliminar directores y politicas en Kerberos V.
Ms informacin acerca de Kerberos se puede encontrar
en http://web.mit.edu/kerberos/www/.
La documentacin 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.
Instalacin
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/kadm5.
Nota:
Si se utiliza esta opcin 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 mdulo 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.


Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Tipos de recursos
Esta extensin define un manejador KADM5 devuelto
por kadm5_init_with_password().
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


Attributes for use by the KDC
constant
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.


Options for creating/modifying/retrieving principals
constant funcdef description
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.
El uso bsico
Este sencillo ejemplo muestra cmo 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
Tabla de contenidos
kadm5_chpass_principal Changes the principal's password
kadm5_create_principal Creates a kerberos principal with the given
parameters
kadm5_delete_principal Deletes a kerberos principal
kadm5_destroy Closes the connection to the admin server and releases
all related resources
kadm5_flush Flush all changes to the Kerberos database
kadm5_get_policies Gets all policies from the Kerberos database
kadm5_get_principal Gets the principal's entries from the Kerberos
database
kadm5_get_principals Gets all principals from the Kerberos database
kadm5_init_with_password Opens a connection to the KADM5 library
kadm5_modify_principal Modifies a kerberos principal with the given
parameters


Radius
Introduccin
Este paquete se basa en los libradius de FreeBSD (Autenticacin remota telefnica
de servicio de usuario). Permite a los clientes realizar la autenticacin y la
contabilidad por medio de solicitudes de red a servidores remotos.
Esta extensin PECL aade soporte completo para la autenticacin Radius ( RFC
2865) y contabilidad Radius ( RFC 2866). Este paquete est disponible para Unix
(probado en FreeBSD y Linux) y para Windows.
Nota:
Una descripcin exacta de libradius se pueden encontrar
http://www.freebsd.org/cgi/man.cgi?query=libradius
Una descripcin detallada del archivo de configuracin se puede encontrar
http://www.freebsd.org/cgi/man.cgi?query=radius.conf
Instalacin
Esta extensin PECL no se distribuye con PHP.
Se puede encontrar informacin para la instalacin de esta extensin PECL en el
captulo del manual titulado Instalacin de extensiones PECL. Se puede encontrar
informacin adicional, tal como nuevos lanzamientos, descargas, ficheros fuente,
informacin de mantenimiento, y un CHANGELOG,
aqu: http://pecl.php.net/package/radius.
Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase
tambin la seccin Compilar en Windows .
Constantes predefinidas
Tabla de contenidos
RADIUS Options
RADIUS Packet Types
RADIUS Attribute Types
RADIUS Vendor Specific Attribute Types
Ejemplos
Cmo iniciar?


Obtener un recurso radius
Configurar la librera
Crear la peticin
Poner atributos
Enviar la peticin
Recibir atributos
Cerrar el recurso radius (opcional)
Tambin 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 ms complicado, porque usted necesita md4, sha1 y des para generar los
datos correctos. Los ejemplos adjuntos demuestran todos los mtodos de
autenticacin, incluyendo MS-CHAPv1 y MS-CHAPv2. Para tener funcionando MS-
CHAP necesita las extensionesmcrypt y mhash iniciando con la version 1.2 de este
paquete, la extensin mcrypt ya no es necesaria.
radius_acct_open
(PECL radius >= 1.1.0)
radius_acct_open Crea un manejador Radius para el conteo
Report a bug
Descripcin
resource radius_acct_open ( void )
Report a bug
Valores devueltos
Devuelve un manejador en caso de tener xito, FALSE en caso de error. Esta
funcin falla solamente si hay insuficiencia de memoria.
Report a bug
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");
?>
http://www.php.net/manual/es/function.radius-acct-open.php

Вам также может понравиться