Referencias Explicadas ¿Qué son las Referencias? Las Referencias en PHP son medios de acceder al mismo contenido de una variable mediante diferentes nombres. No son como los punteros de C; por ejemplo, no se puede realizar aritmética de punteros con ellas, realmente no son direcciones de memoria, etc. Véase ¿Qué NO son las Referencias? para más información. Las referencias son alias de la tabla de símbolos. Observe que en PHP el nombre de la variable y el contenido de la variable son cosas diferentes, por lo que el mismo contenido puede tener diferentes nombres. La analogía más próxima es con los archivos y los nombres de archivos de Unix - los nombres de variables son entradas de directorio, mientras que el contenido de las variables es el archivo en sí. Las referencias se pueden vincular a enlaces duros en sistemas de archivos Unix. ¿Qué hacen las referencias? Hay tres operaciones básicas que se realizan usando referencias: asignar por referencia, pasar por referencia, y devolver por referencia. En esta sección se dará una introducción a estas operaciones, con enlaces para una lectura complementaria. Asignar por Referencia En la primera de estas operaciones, las referencias de PHP permiten hacer que dos variables hagan referencia al mismo contenido. Es decir, cuando se hace: <?php $a =& $b; ?> significa que $a y $b apuntan al mismo contenido. Nota: $a y $b aquí son completamente iguales. $a no está apuntando a $b o viceversa. $a y $b están apuntando al mismo lugar. Nota: Si se asigna, pasa, o devuelve una variable no definida por referencia, la variable se creará. Ejemplo #1 Usar referencias con variables no definidas <?php function foo(&$var) { } foo($a); // $a es "creada" y asignada a null $b = array(); foo($b['b']); var_dump(array_key_exists('b', $b)); // bool(true) $c = new StdClass; foo($c->d); var_dump(property_exists($c, 'd')); // bool(true) ?> Se puede usar la misma sintaxis con funciones que devuelven referencias y con el operador new (desde PHP 4.0.4 y anterior a PHP 5.0.0): <?php $foo =& find_var($bar); ?> Desde PHP 5, new devuelve una referencia automáticamente, por lo que usar =& en este contexto es obsoleto y produce un mensaje E_DEPRECATED en PHP 5.3 y posteriores, y un mensaje E_STRICT en versiones anteriores. (Técnicamente, la diferencia es que, en PHP 5, las variables de objetos, como los recursos, son meros punteros a la información del objeto actual, por lo que estas referencias a objetos no son "referencias" en el mismo sentido usado antes (alias). Para más información, véase Objetos y referencias.) Advertencia Si se asigna una referencia a una varible declarada global dentro de una función, la referencia será visible sólo dentro de la función. Se puede evitar esto usando la matriz $GLOBALS. Ejemplo #2 Refenciar variables globales dentro de funciones <?php $var1 = "Variable de ejemplo"; $var2 = ""; function referencias_globales($usar_globals) { global $var1, $var2; if (!$usar_globals) { $var2 =& $var1; // visible sólo dentro de la función } else { $GLOBALS["var2"] =& $var1; // visible también en el contexto global } } referencias_globales(false); echo "var2 está establecida a '$var2'\n"; // var2 está establecida a '' referencias_globales(true); echo "var2 está establecida a '$var2'\n"; // var2 está establecida a 'Variable de ejemplo' ?> Piense en global $var; como simplificación de $var =& $GLOBALS['var'];. De este modo, al asignar otra referencia a $var sólo cambia la referencia de la variable local. Nota: Si se asigna un valor a una variable con referencias en una sentencia foreach, también se modifican las referencias. Ejemplo #3 Referencias y la sentencia foreach <?php $ref = 0; $fila =& $ref; foreach (array(1, 2, 3) as $fila) { // hacer algo } echo $ref; // 3 - último elemento de la matriz iterada ?> Mientras que no sea estrictamente una asignación por referencia, las expresiones creadas con el constructor de lenguaje array() también pueden comportarse como tales prefijando & al elemento del array a añadir. Ejemplo: <?php $a = 1; $b = array(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 asignación normal (no por referencia) con una referencia en el lado derecho no convierte el lado izquierdo en una referencia, pero las referencias dentro de arrays son conservadas en estas asignaciones normales. Esto también se aplica a las llamadas a funciones donde el array es pasado por valor. Ejemplo: <?php /* Asignación de variables escalares */ $a = 1; $b =& $a; $c = $b; $c = 7; //$c no es una referencia; no cambia $a o $b /* Asignación de variables de array */ $arr = array(1); $a =& $arr[0]; // $a y $arr[0] son el mismo conjunto de referencias $arr2 = $arr; // ¡no es una asignación por referencia! $arr2[0]++; /* $a == 2, $arr == array(2) */ /* ¡El contenido de $arr se cambia incluso si no es una referencia! */ ?> En otras palabras, el comportamiento de las referencias de arrays está definido en una base elemento-por-elemento; el comportamiento de las referencias de elementos individuales está desasociado del estado de la referencia del array contenedor. Pasar por Referencia Lo segundo que hacen las referencias es pasar variables por referencia. Esto se lleva a cabo haciendo que una variable local en una función y una variable en el ámbito de la llamada referencien al mismo contenido. Ejemplo: <?php function foo(&$var) { $var++; } $a=5; foo($a); ?> hará que $a sea 6. Esto sucede porque en la función foo la variable $var hace referencia al mismo contenido que $a. Para más información sobre esto, lea la sección pasar por referencia. Devolver por Referencia Lo tercero que hacen las referncias es devolver por referencia. ¿Qué NO son las Referencias? Como se dijo antes, las referencias no son punteros. Es decir, la siguiente construcción no hará lo que se esperaba: <?php function foo(&$var) { $var =& $GLOBALS["baz"]; } foo($bar); ?> Lo que sucede es que $var en foo será ligada con $bar en la llamada, pero entonces será religada con $GLOBALS["baz"]. No hay forma de ligar $bar en el ámbito de la llamada a otra cosa usando el mecanismo de referencia, ya que $bar no está disponible en la función foo (está representada por $var, pero $varsólo tiene el contenido de la variable y no la vinculación nombre-a-valor en la tabla de símbolos de llamada). Se puede usar devolver referencias para referencias variables seleccionadas por la función. Pasar por Referencia Se puede pasar una variable por referencia a una función y así hacer que la función pueda modificar la variable. La sintaxis es la siguiente: <?php function foo(&$var) { $var++; } $a=5; foo($a); // $a es 6 aquí ?> Nota: No existe ningún signo de referencia en una llamada a una función - sólo en la definición de la función. Las definiciones de funciones por sí solas son suficientes para pasar correctamente el argumento por referencia. A partir de PHP 5.3.0, se obtendrá una advertencia diciendo que "call-time pass-by-reference" (pasar por referencia en tiempo de llamada) está obsoleto cuando se use & en foo(&$a);. 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 más sobre devolver por referencia. Ninguna otra expresión debería pasarse por referencia, ya que el resultado no está definido. Por ejemplo, los siguientes ejemplos de pasar por referencia no son válidos: <?php function foo(&$var) { $var++; } function bar() // Observe que falta el & { $a = 5; return $a; } foo(bar()); // Produce un error fatal a partir de PHP 5.0.5 foo($a = 5); // Expresión, no una variable foo(5); // Produce un error fatal ?> Estos requerimientos son para PHP 4.0.4 y posterior. Devolver Referencias Devolver por referencia es útil cuando se quiere usar una función para encontrar a qué variable debería estar vinculada una referencia. No use devolver por referencia para aumentar el rendimiento. El motor optimizará automáticamente esto por sí mismo. Hay que devolver referencias sólo cuando se tenga una razón técnicamente válida para hacerlo. Para devolver referencias use esta sintaxis: <?php class foo { public $valor = 42; public function &obtenerValor() { return $this->valor; } } $obj = new foo; $miValor = &$obj->obtenerValor(); // $miValor es una referencia a $obj->valor, que es 42. $obj->valor = 2; echo $miValor; // imprime el nuevo valor de $obj->valor, esto es, 2. ?> En este ejemplo, la propiedad del objeto devuelto por la función obtenerValor debería estar establecida, no la copia, como si estuviera sin usar la sintaxis de referencia. Nota: A diferencia de pasar un parámetro, aquí se tiene que usar & en ambos lugares - para indicar que se quiere devolver por referencia, no una copia, y para indicar que la vinculación por referencia, en vez de la asignación normal, debería ser hecha para $miValor. Nota: Si se intenta devolver una referencia desde una función con la sintaxis: return ($this>valor);, no funcionará ya que se está intentando devolver el resultado de una expresión, y no de una variable, por referencia. Sólo se puede devolver variables por referencia desde una función nada más. Desde PHP 4.4.0 en la rama PHP 4, y PHP 5.1.0 en la rama PHP 5, se emite un error E_NOTICE si el código intenta devolver una expresión dinámica o un resultado del operador new. Para usar la referencia retornada, se debe usar la asignación por referencia: <?php function &collector() { static $collection = array(); return $collection; } $collection = &collector(); $collection[] = 'foo'; ?> Para pasar la referencia retornada a otra función que espera una referencia se puede usar la siguiente sintaxis: <?php function &collector() { static $collection = array(); return $collection; } array_push(collector(), 'foo'); ?> Nota: Observe que array_push(&collector(), 'foo'); no funcionará, resultará en un error fatal. Destruir Referencias Cuando se destruye una referencia, se rompe el vínculo entre el nombre de la variable y el contenido de la variable. Esto no significa que el contenido de la variable sea destruida. Por ejemplo: <?php $a = 1; $b =& $a; unset($a); ?> no destruirá $b, sólo $a. De nuevo, podría ser útil pensar en esto como análogo a una llamada a unlink de Unix. Ubicar las Referencias Muchas construcciones sintácticas de PHP están implementadas mediante el mecanismo de referencia, por lo que todo lo mencionado aquí sobre la vinculación de referencias también se aplica a estas construcciones. Algunas construcciones, como pasar y devolver por referencia, han sido mencionadas antes. Otras construcciones que usan referencias son: Referencias globales Cuando se declara una variable como global $var, de hecho se está creando una referencia a una variable global. Es decir, esto es lo mismo que: <?php $var =& $GLOBALS["var"]; ?> Esto también significa que al destruir $var no se destruirá la variable global. $this En un método de un objeto, $this es siempre una referencia al objeto que realiza la llamada. Variables predefinidas PHP proporciona una gran cantidad de variables predefinidas para todos los scripts. Las variables representan de todo, desde variables externas hasta variables de entorno incorporadas, desde los últimos mensajes de error hasta los últimos encabezados recuperados. Véase también la pregunta frecuente titulada "¿Cómo me afecta register_globals?" Superglobals Superglobals — Superglobals son variables internas que están disponibles siempre en todos los ámbitos Report a bug Descripción Algunas variables predefinidas en PHP son "superglobales", lo que significa que están disponibles en todos los ámbitos a lo largo del script. No es necesario emplear global $variable; para acceder a ellas dentro de las funciones o métodos. Las variables superglobals son: $GLOBALS $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV Report a bug Historial de cambios Versión 4.1.0 Descripción Las superglobals son añadidas a PHP. Report a bug Notas Nota: Disponibilidad de variables Por defecto, todas las superglobals están disponibles pero hay directivas que afectan a su disponibilidad. Para más información, véase la documentacion de variables_order. Nota: Tratando con register_globals Si la directiva obsoleta register_globals tiene el valor on entonces las variables están tambien disponibles en el ámbito global del código. Por ejemplo, $_POST['foo'] tambien existirá como $foo. Para información relacionada, consulte el FAQ titulado "¿Cómo puede afectarme register_globals?" Nota: Variables variables Las variables superglobals no pueden ser usadas como variables variables dentro de funciones o métodos de clase. Report a bug Ver también ámbito de las variables La directiva variables_order La extensión filter $GLOBALS (PHP 4, PHP 5) $GLOBALS — Hace referencia a todas las variables disponibles en el ámbito global Report a bug Descripción Es un array asociativo que contiene las referencias a todas la variables que están definidas en el ámbito global del script. Los nombres de las variables son las claves del array. Report a bug Ejemplos Ejemplo #1 Ejemplo de $GLOBALS <?php function test() { $foo = "variable local"; echo '$foo en el ámbito global: ' . $GLOBALS["foo"] . "\n"; echo '$foo en el ámbito simple: ' . $foo . "\n"; } $foo = "Contenido de ejemplo"; test(); ?> El resultado del ejemplo sería algo similar a: $foo en el ámbito global: Contenido de ejemplo $foo en el ámbito simple: variable local 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 métodos. Nota: Disponibilidad de las variables A diferencia de todas las otras superglobals, $GLOBALS ha estado esencialmente siempre disponible en PHP. $_SERVER $HTTP_SERVER_VARS [obsoleto] (PHP 4 >= 4.1.0, PHP 5) $_SERVER -- $HTTP_SERVER_VARS [obsoleto] — Información del entorno del servidor y de ejecución Report a bug Descripción $_SERVER es un array que contiene información, tales como cabeceras, rutas y localizaciones del código. Las entradas en este array son creadas por el servidor web. No existe garantía que cada servidor web proporcione todas estas entradas, ya que existen servidores que pueden omitir algunas o proporcionar otras que no se encuentran recogidas aquí. Un gran número de estas variables se encuentran recogidas en » especificación CGI 1.1, así que al menos debe esperar encontrar estas entradas. $HTTP_SERVER_VARS contiene la misma información inicial, pero no es una variable superglobal. (Fijese que $HTTP_SERVER_VARS y $_SERVER son diferentes variables y que por tanto PHP las trata diferente). Report a bug Índices Puede encontrar o no los siguientes elementos en $_SERVER. Tenga en cuenta que si ejecuta PHP desde línea de comando pocos o ninguno de los siguientes elementos estarán disponibles (o tendrán algún significado). 'PHP_SELF' El nombre del archivo de script ejecutándose actualmente, relativa al directorio raíz de documentos del servidor. Por ejemplo, el valor de$_SERVER['PHP_SELF'] en un script ejecutado en la dirección http://example.com/test.php/foo.bar será /test.php/foo.bar. La constante__FILE__ contiene la ruta completa del fichero actual, incluyendo el nombre del archivo. Si PHP se está ejecutando como un proceso de línea de comando, esta variable es el nombre del script desde PHP 4.3.0. En anteriores versiones no estaba disponible. 'argv' Array de los argumentos enviados al script. Cuando se ejecuta el script en línea de comando se obtiene acceso a los parámetros de línea de comando con un estilo parecido a como sería en C. Cuando se ejecuta el script mediante el método GET, contendrá la cadena de la consulta. 'argc' Contiene el número de parámetros de línea de comando enviados al script (si se ejecuta en línea de comando). 'GATEWAY_INTERFACE' Número de revisión de la especificación CGI que está empleando el servidor, por ejemplo 'CGI/1.1'. 'SERVER_ADDR' La dirección IP del servidor donde se está ejecutando actualmente el script. 'SERVER_NAME' El nombre del host del servidor donde se está ejecutando actualmente el script. Si el script se ejecuta en un host virtual se obtendrá el valor del nombre definido para dicho host virtual. 'SERVER_SOFTWARE' Cadena de identificación del servidor dada en las cabeceras de respuesta a las peticiones. 'SERVER_PROTOCOL' Nombre y número de revisión del protocolo de información a través del cual la página es solicitada, por ejemplo 'HTTP/1.0'. 'REQUEST_METHOD' Método de petición empleado para acceder a la página, es decir 'GET', 'HEAD', 'POST', 'PUT'. Nota: El script de PHP se considera terminado después de enviar las cabeceras (es decir después de producir cualquier resultado sin emplear buffers para el resultado) si el método de la petición empleado era HEAD. 'REQUEST_TIME' Fecha Unix de inicio de la petición. Disponible desde PHP 5.1.0. 'REQUEST_TIME_FLOAT' El timestamp del inicio de la solicitud, con precisión microsegundo. Disponible desde PHP 5.4.0. 'QUERY_STRING' Si existe, la cadena de la consulta de la petición de la página. 'DOCUMENT_ROOT' El directorio raíz de documentos del servidor en el cual se está ejecutando el script actual, según está definida en el archivo de configuración del servidor. 'HTTP_ACCEPT' Contenido de la cabecera Accept: de la petición actual, si existe. 'HTTP_ACCEPT_CHARSET' Contenido de la cabecera Accept-Charset: de la petición actual, si existe. Por ejemplo: 'iso8859-1,*,utf-8'. 'HTTP_ACCEPT_ENCODING' Contenido de la cabecera Accept-Encoding: de la petición actual, si existe. Por ejemplo: 'gzip'. 'HTTP_ACCEPT_LANGUAGE' Contenido de la cabecera Accept-Language: de la petición actual, si existe. Por ejemplo: 'en'. 'HTTP_CONNECTION' Contenido de la cabecera Connection: de la petición actual, si existe. Por ejemplo: 'KeepAlive'. 'HTTP_HOST' Contenido de la cabecera Host: de la petición actual, si existe. 'HTTP_REFERER' Dirección de la pagina (si la hay) que emplea el agente de usuario para la pagina actual. Es definido por el agente de usuario. No todos los agentes de usuarios lo definen y algunos permiten modificar HTTP_REFERER como parte de su funcionalidad. En resumen, es un valor del que no se puede confiar realmente. 'HTTP_USER_AGENT' Contenido de la cabecera User-Agent: de la petición actual, si existe. Consiste en una cadena que indica el agente de usuario empleado para acceder a la pagina. Un ejemplo típico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Entre otras opciones, puede emplear dicho valor conget_browser() para personalizar el resultado de la salida de la página en función de las capacidades del agente de usuario empleado. 'HTTPS' Ofrece un valor no vacío si el script es pedido mediante el protocolo HTTPS. Nota: Tenga en cuenta que si se emplea ISAPI con IIS el valor será off si la petición no se ha realizado a través del protocolo HTTPS. 'REMOTE_ADDR' La dirección IP desde la cual está viendo la página actual el usuario. 'REMOTE_HOST' El nombre del host desde el cual está viendo la página actual el usuario. La obtención inversa del dns está basada en la REMOTE_ADDR del usuario. Nota: Su servidor web debe estar configurado para crear esta variable. Por ejemplo en Apache necesita que exista HostnameLookups On dentro de httpd.conf. Consulte tambien gethostbyaddr(). 'REMOTE_PORT' El puerto empleado por la máquina del usuario para comunicarse con el servidor web. 'REMOTE_USER' El usuario autenticado. 'REDIRECT_REMOTE_USER' El usuario autenticado si la petición es redirigida internamente. 'SCRIPT_FILENAME' La ruta del script ejecutándose actualmente en forma absoluta. Nota: Si un script se ejecuta mediante CLI como ruta relativa, como por ejemplo file.php o ../file.php, entonces$_SERVER['SCRIPT_FILENAME'] contendrá la ruta relativa especificada por el usuario. 'SERVER_ADMIN' El valor dado a la directiva SERVER_ADMIN (de Apache) en el archivo de configuración del servidor web. Si el script se está ejecutando en un host virtual, el valor dado será el definido para dicho host virtual. 'SERVER_PORT' El puerto de la máquina del servidor usado por el servidor web para la comunicación. Para las configuraciones por omisión, el valor será '80'; el empleo de SSL, por ejemplo, cambiará dicho valor al valor definido para el puerto HTTP seguro. 'SERVER_SIGNATURE' Cadena que contiene la versión del servidor y el nombre del host virtual que son añadidas a las páginas generadas por el servidor, si esta habilitada esta funcionalidad. 'PATH_TRANSLATED' Ruta de acceso basada en el sistema (no en el directorio raíz de documentos del servidor) del script actual, después de cualquier mapeo de virtual a real realizada por el servidor. Nota: A partir de PHP 4.3.2, PATH_TRANSLATED no está definida de forma implícita en el SAPI de Apache 2, en comparación a la situación de Apache 1, donde era necesario establecer el mismo valor que la variable del servidor SCRIPT_FILENAME cuando no era proporcionada por Apache. Este cambio ha sido realizado para cumplir la especificación CGI donde PATH_TRANSLATED sólo debe existir si PATH_INFO esta definida. Los usuarios de Apache 2 pueden emplear AcceptPathInfo = On dentro de httpd.conf para definirPATH_INFO. 'SCRIPT_NAME' Contiene la ruta del script actual. Esto es de utilidad para las páginas que necesiten apuntarse a si mismas. La constante __FILE__ contiene la ruta absoluta y el nombre del archivo actual incluido. 'REQUEST_URI' La URI que se empleó para acceder a la página. Por ejemplo: '/index.html'. 'PHP_AUTH_DIGEST' Cuando se hace autenticación Digest HTTP, esta variable se establece para el encabezado 'Authorization' enviado por el cliente (el cual se debe entonces usar para hacer la validación apropiada). 'PHP_AUTH_USER' Cuando se hace autenticación HTTP, esta variable se establece para el nombre de usuario provisto por el usuario. 'PHP_AUTH_PW' Cuando se hace autenticación HTTP, esta variable se establece para la clave provista por el usuario. 'AUTH_TYPE' Cuando se hace autenticado HTTP, está variable se establece para el tipo de autenticación. 'PATH_INFO' Contiene cualquier información sobre la ruta proporcionada por el cliente a continuación del nombre del fichero del script actual pero antecediendo a la cadena de la petición, si existe. Por ejemplo, si el script actual se accede a través de la URLhttp://www.example.com/php/path_info.php/some/stuff?foo=bar, entonces $_SERVER['PATH_INFO'] contendrá /some/stuff. 'ORIG_PATH_INFO' Versión original de 'PATH_INFO' antes de ser procesado por PHP. Historial de cambios Versión 4.1.0 Descripción Se introdujo $_SERVER que deprecaba $HTTP_SERVER_VARS. Report a bug Ejemplos Ejemplo #1 Ejemplo de $_SERVER <?php echo $_SERVER['SERVER_NAME']; ?> El resultado del ejemplo sería algo similar a: www.example.com 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 métodos. Report a bug Ver también Filtrado de datos $_GET $HTTP_GET_VARS [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_GET -- $HTTP_GET_VARS [obsoleta] — Variables HTTP GET Report a bug Descripción Un array asociativo de variables pasado al script actual vía parámetros URL. $HTTP_GET_VARS contiene la misma información, pero no es una superglobal. (Note que $HTTP_GET_VARS y $_GET son diferentes variables y que PHP los usa de forma diferente) Report a bug Historial de cambios Versión 4.1.0 Descripción Se introduzco $_GET y $HTTP_GET_VARS quedó obsoleto. Report a bug Ejemplos Ejemplo #1 Ejemplo de $_GET <?php echo 'Hola ' . htmlspecialchars($_GET["nombre"]) . '!'; ?> Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes El resultado del ejemplo sería algo similar a: Hola Hannes! 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 métodos. Nota: Las variables GET son pasadas vía urldecode(). Report a bug Ver también Manejo de variables externas La extensión filter $_POST $HTTP_POST_VARS [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_POST -- $HTTP_POST_VARS [obsoleta] — Variables HTTP POST Report a bug Descripción Un array asociativo de variables pasadas al script actual a través del método HTTP POST. $HTTP_POST_VARS contiene la misma información inicial, pero no es una superglobal. (Nótese que $HTTP_POST_VARS y $_POST son diferentes variables y que PHP las trata de forma distinta) Report a bug Historial de cambios Versión 4.1.0 Descripción Se introdujo $_POST y $HTTP_POST_VARS quedó obsoleta. Report a bug Ejemplos Ejemplo #1 Ejemplo de $_POST <?php echo 'Hola ' . htmlspecialchars($_POST["nombre"]) . '!'; ?> Asumiendo que el usuario envió por el método POST nombre=Juan El resultado del ejemplo sería algo similar a: Hola Juan! 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 métodos. Report a bug Ver también Tratando con variables externas La extensión filter $_FILES $HTTP_POST_FILES [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_FILES -- $HTTP_POST_FILES [obsoleta] — Variables de Carga de Archivos HTTP Report a bug Descripción Una variable tipo array asociativo de elementos cargados al script actual a través del método POST. $HTTP_POST_FILES contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_POST_FILES y $_FILES son variables diferentes y que PHP las trata como tal) Report a bug Historial de cambios Versión 4.1.0 Descripción Se introdujo $_FILES, haciendo $HTTP_POST_FILES obsoleta. 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 métodos. Report a bug Ver también move_uploaded_file() - Mueve un archivo subido a una nueva ubicación Gestión de Carga de Archivos $_REQUEST (PHP 4 >= 4.1.0, PHP 5) $_REQUEST — Variables HTTP Request Report a bug Descripción Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE. Report a bug Historial de cambios Versión 5.3.0 Descripción Se introdujo request_order. Esta directiva afecta al contenido de $_REQUEST. 4.3.0 Se eliminó la información $_FILES de $_REQUEST. 4.1.0 Se introdujo $_REQUEST. 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 métodos. Nota: Cuando se ejecuta en la línea de comandos , no se incluirán las entradas argv y argc; ya que están presentes en el array $_SERVER Nota: Las variables en $_REQUEST se proporcionan al script a través de los mecanismos de entrada GET, POST, y COOKIE y por lo tanto pueden ser manipulados por el usuario remoto y no debe confiar en el contenido. La presencia y el orden de las variables listadas en este array se definen según la directiva de configuración PHP variables_order. Report a bug Ver también import_request_variables() - Importar variables GET/POST/Cookie en el ámbito global Tratando con variables externas La extensión filter $_SESSION $HTTP_SESSION_VARS [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_SESSION -- $HTTP_SESSION_VARS [obsoleta] — Variables de sesión Report a bug Descripción Es un array asociativo que contiene variables de sesión disponibles para el script actual. Ver la documentación de Funciones de sesión para más información sobre su uso. $HTTP_SESSION_VARS contiene la misma información inicial pero no es una superglobal. (Nótese que $HTTP_SESSION_VARS y $_SESSION son diferentes variables y PHP las trata de forma distinta) Report a bug Historial de cambios Versión 4.1.0 Descripción 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 métodos. Report a bug Ver también session_start() - Iniciar una nueva sesión o reanudar la existente $_SESSION $HTTP_SESSION_VARS [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_SESSION -- $HTTP_SESSION_VARS [obsoleta] — Variables de sesión Report a bug Descripción Es un array asociativo que contiene variables de sesión disponibles para el script actual. Ver la documentación de Funciones de sesión para más información sobre su uso. $HTTP_SESSION_VARS contiene la misma información inicial pero no es una superglobal. (Nótese que $HTTP_SESSION_VARS y $_SESSION son diferentes variables y PHP las trata de forma distinta) Report a bug Historial de cambios Versión 4.1.0 Descripción 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 métodos. Report a bug Ver también session_start() - Iniciar una nueva sesión 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 Descripción Una variable tipo array asociativo de variables pasadas al script actual a través del método del entorno. Estas variables son importadas en el espacio de nombres global de PHP desde el entorno bajo el que está siendo ejecutado el intérprete PHP. Muchas son entregadas por el intérprete de comandos bajo el que PHP está corriendo y diferentes sistemas suelen tener diferentes tipos de intérpretes de comandos, una lista definitiva es imposible. Por favor consulte la documentación de su intérprete de comandos para una lista de las variables de entorno que se definen. Otras variables de entorno incluyen las variables CGI, colocadas allí independientemente de que PHP esté siendo ejecutado como módulo del servidor o procesador CGI. $HTTP_ENV_VARS contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_ENV_VARS y $_ENV son variables diferentes y que PHP las trata como tal) Report a bug Historial de cambios Versión 4.1.0 Descripción 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 sería 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 métodos. Report a bug Ver también getenv() - Obtiene el valor de una variable de entorno La extensión filter $_COOKIE $HTTP_COOKIE_VARS [obsoleta] (PHP 4 >= 4.1.0, PHP 5) $_COOKIE -- $HTTP_COOKIE_VARS [obsoleta] — Cookies HTTP Report a bug Descripción Una variable tipo array asociativo de variables pasadas al script actual a través de Cookies HTTP. $HTTP_COOKIE_VARS contiene la misma información inicial, pero no es una superglobal. (Note que $HTTP_COOKIE_VARS y $_COOKIE son variables diferentes y que PHP las trata como tal) Report a bug Historial de cambios Versión 4.1.0 Descripción 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 sería 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 métodos. Report a bug Ver también setcookie() - Enviar una cookie Gestión de variables externas La extensión filter $php_errormsg (PHP 4, PHP 5) $php_errormsg — El último mensaje de error Report a bug Descripción $php_errormsg es una variable que contiene el texto del último mensaje de error generado por PHP. Esta variable solo está disponible en el entorno en donde el error ocurrió y solamente funcionará si la opción de configuración track_errors está activada on (por defecto es off). Nota: Esta variable solamente está disponible cuando la directiva track_errors está activada en el php.ini. Advertencia Si el usuario ha definido un controlador de errores ( set_error_handler()), $php_errormsg tendrá un valor solamente si el controlador de errores devuelve FALSE Report a bug Ejemplos Ejemplo #1 Ejemplo de $php_errormsg <?php @strpos(); echo $php_errormsg; ?> El resultado del ejemplo sería algo similar a: Wrong parameter count for strpos() $HTTP_RAW_POST_DATA (PHP 4, PHP 5) $HTTP_RAW_POST_DATA — Datos POST sin tratar Report a bug Descripción $HTTP_RAW_POST_DATA contiene los datos POST sin tratar. Véase always_populate_raw_post_data add a noteUser Contributed Notes $HTTP_RAW_POST_DATA Ray dot Paseur at GMail dot com 12-Nov-2009 07:33 To get the Raw Post Data: <?php $postdata = file_get_contents("php://input"); ?> Please see the notes here: http://us.php.net/manual/en/wrappers.php.php $http_response_header (PHP 4 >= 4.0.4, PHP 5) $http_response_header — Encabezados de respuesta HTTP Report a bug Descripción El array $http_response_header es similar a la functión get_headers(). Cuando se hace uso de HTTP wrapper, $http_response_header será poblado con los encabezados de respuesta HTTP. $http_response_header será creada en el ámbito global. 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 sería algo similar a: array(9) { [0]=> string(15) [1]=> string(35) [2]=> string(29) [3]=> string(44) [4]=> string(27) [5]=> string(20) [6]=> string(19) [7]=> string(17) [8]=> string(38) } NULL "HTTP/1.1 200 OK" "Date: Sat, 12 Apr 2008 17:30:38 GMT" "Server: Apache/2.2.3 (CentOS)" "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT" "ETag: "280100-1b6-80bfd280"" "Accept-Ranges: bytes" "Content-Length: 438" "Connection: close" "Content-Type: text/html; charset=UTF-8" $argc (PHP 4, PHP 5) $argc — El número de argumentos pasados a un script Report a bug Descripción Contiene el número de argumentos pasados al script actual cuando se ejecuta desde la línea de comandos. Nota: El nombre del script es pasado siempre como argumento del script, por lo tanto, el valor mínimo de $argc es 1. Nota: Esta variable sólo está disponible cuando register_argc_argv está activado. 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 sería algo similar a: int(4) $argv (PHP 4, PHP 5) $argv — Array de argumentos pasados a un script Report a bug Descripción Contiene un array de todos los argumentos pasados a un script cuando se ejecuta desde la línea de comandos. Nota: El primer argumento $argv[0] siempre es el nombre del fichero que fue usado para ejecutar el script. Nota: Esta variable no está disponible si register_argc_argv está deshabilitado. 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 sería 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 también getopt() - Obtiene las opciones de la lista de argumentos de la línea de comandos Excepciones predefinidas Tabla de contenidos Exception ErrorException Ver también las Excepciones SPL Exception (PHP 5 >= 5.1.0) Introducción Exception es la clase base para todas las excepciones. Sinopsis de la Clase Exception { /* Propiedades */ protected string $message ; protected int $code ; protected string $file ; protected int $line ; /* Métodos */ public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] ) final public string getMessage ( void ) final public Exception getPrevious ( void ) final public mixed getCode ( void ) final public string getFile ( void ) final public int getLine ( void ) final public array getTrace ( void ) final public string getTraceAsString ( void ) public string __toString ( void ) final private void __clone ( void ) } Propiedades message El mensaje de la excepción code El código de la excepción file El nombre del fichero donde se originó la excepción line La línea donde se originó la excepción Tabla de contenidos ErrorException (PHP 5 >= 5.1.0) Introducción Una excepción de error. Exception::__construct — Constructor de la excepción Exception::getMessage — Obtiene el mensaje de Excepción Exception::getPrevious — Devuelve la excepción anterior Exception::getCode — Obtiene el código de Excepción Exception::getFile — Obtiene el fichero en el que ocurrió la excepción Exception::getLine — Obtiene la línea en donde ocurrió la excepción Exception::getTrace — Obtiene el seguimiento de la pila Exception::getTraceAsString — Obtiene el stack trace como cadena Exception::__toString — Representación de la excepción en formato cadena Exception::__clone — Clona la excepción Sinopsis de la Clase ErrorException extends Exception { /* Propiedades */ protected int $severity ; /* Métodos */ public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [,Exception $previous = NULL ]]]]]] ) final public int getSeverity ( void ) /* Métodos heredados */ final public string Exception::getMessage ( void ) final public Exception Exception::getPrevious ( void ) final public mixed Exception::getCode ( void ) final public string Exception::getFile ( void ) final public int Exception::getLine ( void ) final public array Exception::getTrace ( void ) final public string Exception::getTraceAsString ( void ) public string Exception::__toString ( void ) final private void Exception::__clone ( void ) } Propiedades severity La gravedad de la excepción Ejemplos Ejemplo #1 Use set_error_handler() para convertir mensajes de error en 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 excepción */ strpos(); ?> El resultado del ejemplo sería algo similar a: Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8 Stack trace: #0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array) #1 /home/bjori/php/cleandocs/test.php(8): strpos() #2 {main} thrown in /home/bjori/tmp/ex.php on line 8 Tabla de contenidos ErrorException::__construct — Constructor de la Excepción ErrorException::getSeverity — Obtiene la severidad de la excepción Interfaces predefinidas La interfaz Traversable (No hay información de versión disponible, podría estar únicamente en SVN) Introducción Interfaz para detectar si una clase 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 construcción foreach y no necesitan implementar IteratorAggregate 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, asegúrese de enumerara IteratorAggregate o Iterator antes de su nombre en la cláusula de implementación. Sinopsis de la Interfaz Traversable { } Esta interfaz no tiene métodos; su único propósito es servir de interfaz base para todas las clases que se pueden recorrer. La interfaz Iterator (PHP 5 >= 5.0.0) Introducción Interfaz para iteradores externos u objetos que pueden ser iterados internamente por sí mismos. Sinopsis de la Interfaz Iterator extends Traversable { /* Métodos */ abstract public mixed current ( void ) abstract public scalar key ( void ) abstract public void next ( void ) abstract public void rewind ( void ) abstract public boolean valid ( void ) } Iteradores Predefinidos PHP ya ofrece un número de iteradores para muchas de las tareas del día a día. Véase la lista de iteradores SPL. Ejemplos Ejemplo #1 Uso básico Este ejemplo muestra el orden en el que se llaman a los métodos cuando se emplea un foreach con un iterator. <?php class myIterator implements Iterator { private $position = 0; private $array = array( "firstelement", "secondelement", "lastelement", ); public function __construct() { $this->position = 0; } function rewind() { var_dump(__METHOD__); $this->position = 0; } function current() { var_dump(__METHOD__); return $this->array[$this->position]; } function key() { var_dump(__METHOD__); return $this->position; } function next() { var_dump(__METHOD__); ++$this->position; } function valid() { var_dump(__METHOD__); return isset($this->array[$this->position]); } } $it = new myIterator; foreach($it as $key => $value) { var_dump($key, $value); echo "\n"; } ?> El resultado del ejemplo sería algo similar a: string(18) string(17) string(19) string(15) int(0) string(12) "myIterator::rewind" "myIterator::valid" "myIterator::current" "myIterator::key" string(16) string(17) string(19) string(15) int(1) string(13) "myIterator::next" "myIterator::valid" "myIterator::current" "myIterator::key" string(16) string(17) string(19) string(15) int(2) string(11) "myIterator::next" "myIterator::valid" "myIterator::current" "myIterator::key" "firstelement" "secondelement" "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 posición actual es válido La interfaz IteratorAggregate (PHP 5 >= 5.0.0) Introducción Para crear una interfaz externa Iterator. Sinopsis de la Interfaz IteratorAggregate extends Traversable { /* Métodos */ abstract public Traversable getIterator ( void ) } Ejemplo #1 Uso básico <?php class myData implements public $property1 = public $property2 = public $property3 = IteratorAggregate { "Public property one"; "Public property two"; "Public property three"; public function __construct() { $this->property4 = "last property"; } public function getIterator() { return new ArrayIterator($this); } } $obj = new myData; foreach($obj as $key => $value) { var_dump($key, $value); echo "\n"; } ?> El resultado del ejemplo sería algo similar a: string(9) "property1" string(19) "Public property one" string(9) "property2" string(19) "Public property two" string(9) "property3" string(21) "Public property three" string(9) "property4" string(13) "last property" Tabla de contenidos IteratorAggregate::getIterator — Recuperar un Iterator externo La interfaz ArrayAccess (PHP 5 >= 5.0.0) Introducción Interfaz para proporcionar acceso a objetos como arrays. Sinopsis de la Interfaz ArrayAccess { /* Métodos */ abstract public boolean offsetExists ( mixed $offset ) abstract public mixed offsetGet ( mixed $offset ) abstract public void offsetSet ( mixed $offset , mixed $value ) abstract public void offsetUnset ( mixed $offset ) } Ejemplo #1 Uso básico <?php class obj implements arrayaccess { private $container = array(); public function __construct() { $this->container = array( "one" => 1, "two" => 2, "three" => 3, ); } public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetUnset($offset) { unset($this->container[$offset]); } public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } } $obj = new obj; var_dump(isset($obj["two"])); var_dump($obj["two"]); unset($obj["two"]); var_dump(isset($obj["two"])); $obj["two"] = "A value"; var_dump($obj["two"]); $obj[] = 'Append 1'; $obj[] = 'Append 2'; $obj[] = 'Append 3'; print_r($obj); ?> El resultado del ejemplo sería algo similar a: bool(true) int(2) bool(false) string(7) "A value" obj Object ( [container:obj:private] => Array ( [one] => 1 [three] => 3 [two] => A value [0] => Append 1 [1] => Append 2 [2] => Append 3 ) ) 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 La interfaz Serializable (PHP 5 >= 5.1.0) Introducción Interfaz para personalizar la serialización. Las clases que implementan esta interfaz no soportan __sleep() ni __wakeup(). El método serialize se llama cuando una instancia requiere ser serializada. Esto no invoca __destruct() ni tiene ningún efecto adicional a menos que se programe dentro del método. Cuando los datos son deserializados, la clase es conocida y el correspondiente método unserialize() es llamado como constructor en lugar de llamar al método __construct(). Se puede ejecutar el constructor estándar en el método si fuera necesario. Sinopsis de la Interfaz Serializable { /* Métodos */ abstract public string serialize ( void ) abstract public void unserialize ( string $serialized ) } Ejemplo #1 Uso básico <?php class obj implements Serializable { private $data; public function __construct() { $this->data = "Mis datos privados"; } public function serialize() { return serialize($this->data); } public function unserialize($data) { $this->data = unserialize($data); } public function getData() { return $this->data; } } $obj = new obj; $ser = serialize($obj); var_dump($ser); $newobj = unserialize($ser); var_dump($newobj->getData()); ?> El resultado del ejemplo sería algo similar a: string(38) "C:3:"obj":23:{s:15:"Mis datos privados";}" string(15) "Mis datos privados" Tabla de contenidos Serializable::serialize — Representación en formato cadena de un objeto Serializable::unserialize — Construye el objeto La clase Closure (PHP 5 >= 5.3.0) Introducción Clase usada para representar funciones anónimas. Las funciones anónimas, implementadas en PHP 5.3, producían objetos de este tipo. Este hecho solía ser considerado como un detalle de implementación, pero ahora puede confiarse en él. Desde PHP 5.4, esta clase tiene métodos que permiten más control de las funciones anónimas después de que hayan sido creadas. Además de los métodos listados aquí, esta clase también posse un método __invoke. Esto es por consistencia con otras clases que implementan la llamada mágica, ya que este método no se usa para llamar a la función. Sinopsis de la Clase Closure { /* Métodos */ __construct ( void ) public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] ) public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] ) } Tabla de contenidos Closure::__construct — Constructor que anula la instanciación Closure::bind — Duplicar un cierre con un objeto vinculado y ámbito de clase especificados Closure::bindTo — Duplicar el cierre con un objeto vinculado y ámbito de clase nuevos Opciones de contexto y parámetros PHP ofrece varias opciones y parámetros de contexto que pueden ser usados con todas las envolturas del sistema de archivos y las secuencias. El contexto es creado con stream_context_create(). Las opciones son definidas con stream_context_set_option() y los parámetros con stream_context_set_params(). Opciones de contexto de sockets Opciones de contexto de sockets — Listado de opciones de contexto de sockets Report a bug Descripción Las opciones de contexto de sockets están disponibles para todas las envolturas que trabajan sobre sockets, como tcp, http y ftp. Report a bug Opciones bindto Usada para especificar la dirección IP (ya sea IPv4 o IPv6) y/o el número de puerto que PHP usará para acceder a la red. La sintaxis esip:puerto. Definir el número IP o de puerto como 0 producirá que el sistema lo elija por usted. Nota: Dado que FTP crea dos conexiones de socket durante la operación normal, no es posible especificar el número de puerto con esta opción. backlog Usado para limitar el número de conexiones pendientes en la cola de escucha del socket. Nota: Solamente se aplica a stream_socket_server(). Report a bug Historial de cambios Versión Descripción 5.1.0 Se agregó bindto. 5.3.3 Se agregó backlog. Report a bug Ejemplos Ejemplo #1 Ejemplo de uso básico de bindto <?php // conectarse a internet usando la IP '192.168.0.100' $opciones = array( 'socket' => array( 'bindto' => '192.168.0.100:0', ), ); // conectarse a internet usando la IP '192.168.0.100' y el puerto '7000' $opciones = array( 'socket' => array( 'bindto' => '192.168.0.100:7000', ), ); // conectarse a internet usando el puerto '7000' $opciones = array( 'socket' => array( 'bindto' => '0:7000', ), ); // crear el contexto... $contexto = stream_context_create($opciones); // ...y usarlo para recuperar los datos echo file_get_contents('http://www.example.com', false, $contexto); ?> Opciones de contexto de HTTP Opciones de contexto de HTTP — Lista de opciones de contexto de HTTP Report a bug Descripción Opciones de contexto para los transports http:// y https://. Report a bug Opciones method string GET, POST, o cualquier otro método HTTP que soporte el servidor remoto. Por omisión, GET. header string Cabeceras adicionales que se envían en la petición. Los valores sobrescribirán los existentes (como por ejemplo User-agent:, Host:, oAuthentication:). user_agent string Valor de la cabecera User-Agent:. Sólo se utilizará si el user-agent no se ha especificado en la opción de contexto header vista arriba. por omisión se utiliza el valor del ajuste user_agent en php.ini. content string Datos adicionales a enviar tras las cabeceras. Típicamente se utiliza con peticiones POST o PUT. proxy string URI que define la dirección de un servidor proxy (p.ej. tcp://proxy.example.com:5100). request_fulluri boolean Si vale TRUE, se utilizará toda la URI para construir la petición. (es decir, GET http://www.example.com/path/to/file.html HTTP/1.0). A pesar de que es un formato de petición no estándar, algunos servidores proxy requieren que sea así. Por omisión FALSE. follow_location integer Seguir las redirecciones de las cabeceras Location. Establecer a 0 para deshabilitarlo. Por omisión 1. max_redirects integer Número máximo de redirecciones a seguir. Un valor igual o menor a 1 indica que no se siga ninguna redirección. Por omisión 20. protocol_version float Versión del protocolo HTTP. Por omisión 1.0. Nota: Las versiónes de PHP anteriores a la 5.3.0 no implementa decodificación de transferencias fragmentadas. Si este valor es 1.1, es responsabilidad del programador cumplir con la Versión 5.3.4 5.3.0 Descripción Añadido follow_location. La opción protocol_version soporta decodificación de transferencias fragmentadas en caso de valer 1.1. 5.2.10 Añadido ignore_errors. 5.2.10 El parámetro header puede ahora ser un array de índices numéricos. 5.2.1 Añadido timeout. 5.1.0 Añadido soporte para HTTPS mediante proxies HTTP. 5.1.0 Añadido max_redirects. 5.1.0 Añadido protocol_version. versión 1.1. timeout float Tiempo de espera de lectura en segundos, especificado por un float (p.ej. 10.5). Por omisión se utiliza el valor del ajuste default_socket_timeout de php.ini. ignore_errors boolean Captura el contenido incluso con códigos de estado de error. Por omisión FALSE. Report a bug Historial de cambios Report a bug Ejemplos Ejemplo #1 Captura una página y envía datos POST <?php $postdata = http_build_query( array( 'var1' => 'contenido', 'var2' => 'doh' ) ); $opts = array('http' array( 'method' => 'header' => 'content' => ) ); => 'POST', 'Content-type: application/x-www-form-urlencoded', $postdata $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context); ?> Ejemplo #2 Ignora las redirecciones per captura las cabeceras y el contenido <?php $url = "http://www.example.org/header.php"; $opts = array('http' => array( 'method' => 'GET', 'max_redirects' => '0', 'ignore_errors' => '1' ) ); $context = stream_context_create($opts); $stream = fopen($url, 'r', false, $context); // información de cabeceras y meta datos // sobre el flujo var_dump(stream_get_meta_data($stream)); // datos reales en $url var_dump(stream_get_contents($stream)); fclose($stream); ?> 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: Línea de estado HTTP Cuando esta envultura sigue una redirección, el wrapper_data devuelto por stream_get_meta_data() no contiene necesariamente la línea de estado HTTP que realmente se aplica al contenido del índice 0. array ( 'wrapper_data' => array ( 0 => 'HTTP/1.0 301 Moved Permantenly', 1 => 'Cache-Control: no-cache', 2 => 'Connection: close', 3 => 'Location: http://example.com/foo.jpg', 4 => 'HTTP/1.1 200 OK', ... La primera petición devolvió un 301 (redirección permanente), de manera que la envoltura automáticamente sigue la redirección para obtener una respuesta con código 200 (índice = 4). Report a bug Ver también 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 Descripción 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 sólo al modo de escritura (subida). Defaults to FALSE. resume_pos integer Desplazamiento de archivo en donde iniciar la transferencia. Se aplica sólo al modo de lectura (descarga). Por defecto es 0 (inicio del archivo). proxy string Petición FTP al proxy por medio de un servidor proxy http. Se aplica sólo a operaciones de lectura de archivos. Ejemplo:tcp://squid.example.com:8000. Report a bug Historial de cambios Versión Descripción 5.1.0 Se añadió proxy. 5.0.0 Se Versión Descripción añadió 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 también 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 Descripción Opciones de contexto para transportes ssl:// y tls:// Report a bug Opciones verify_peer boolean Requiere verificación del certificado SSL utilizado. Por defecto es FALSE. allow_self_signed boolean Permite certificados auto-firmados. Requiere verify_peer. Por defecto es FALSE cafile string Ubicación del archivo de la entidad emisora de certificados en el sistema de archivos local, la cual debe ser utilizada con la opción de contextoverify_peer para autenticar la identidad del par remoto. capath string Si no se específica cafile o si no se encuentra el certificado, el directorio al que apunta capath sera explorado en busca de un certificado apropiado. capath debe ser un directorio con el hash correcto. local_cert string Ruta hacia el archivo del certificado local en el sistema de archivos. Debe ser un archivo codificado con PEM el cual contenga el certificado y la llave privada. Puede, opcionalmente, contener la cadena de los emisores del certificado. passphrase string La frase de contraseña con la cual el archivo local_cert fue codificado. CN_match string El nombre común que se está esperando. PHP realizará comparaciones limitadas de comodines. Si el nombre común no coincide con esto, el intento de conexión fallará. verify_depth integer Abortar si la cadena de certificados es demasiado profunda. Por defecto es no verificarlo. ciphers string Establece la lista de sistemas de cifrado disponibles. El formato de la cadena se describe en » ciphers(1). Por defecto es DEFAULT. capture_peer_cert boolean Si se establece en TRUE, una opción de contexto peer_certificate será creada, conteniendo el certificado par. capture_peer_cert_chain boolean Si se establece en TRUE, una opción de contexto peer_certificate_chain será creada, conteniendo la cadena del certificado. SNI_enabled boolean Si se establece en TRUE, la indicación del nombre del servidor se activará. Activando SNI se permiten múltiples certificados en la misma dirección IP. SNI_server_name string Si se establece, entonces este valor se utilizará como nombre del servidor para la indicación de nombre de servidor. Si este valor no está establecido, entonces el nombre del servidor se supone basado en el nombre de host utilizado cuando se abre el flujo. Historial de cambios Versión 5.3.2 5.0.0 Descripción Se agregó SNI_enabled y SNI_server_name. Se agregó capture_peer_cert, capture_peer_chain and ciphers. Notas Nota: Debido a que ssl:// el es transporte subyacente para las envolturas https:// y ftps://, cualquier opción de contexto que aplique parassl:// también aplica para https:// y ftps://. Nota: Para que SNI (Server Name Indication) esté disponible, entonces PHP se debe compilar con OpenSSL 0.9.8j o superior. Se utilizaOPENSSL_TLSEXT_SERVER_NAME para determinar si SNI está soportado. Opciones de contexto para CURL Opciones de contexto para CURL — Listado de opciones de contexto para CURL Report a bug Descripción Las opciones de contexto para CURL están disponibles cuando la extensión CURL fue compilada usando la opción de configuración --with-curlwrappers . Report a bug Opciones method string GET, POST, o cualquier otro método HTTP soportado por el servidor remoto. Por defecto es GET. header string Cabeceras adicionales a ser enviadas durante la petición. Los valores de esta opción sobrescribirán otros valores (como por ejemplo User-agent:, Host:, y Authentication:). user_agent string Valor a ser enviado con la cabecera User-Agent:. Por defecto se usa la configuración user_agent de php.ini. content string Datos adicionales para ser enviados después de las cabeceras. Esta opción no se utiliza para peticiones GET o HEAD. proxy string URI que especifica la dirección del servidor proxy. (Por ejemplo tcp://proxy.example.com:5100). max_redirects integer El número máximo de redirecciones a seguir. Un valor de 1 o menos significa que no se siguen la redirecciones. Por defecto es 20. curl_verify_ssl_host boolean Verifica el host. Por defecto es FALSE Nota: Esta opción está disponible tanto para envolturas del protocolo http como del ftp. curl_verify_ssl_peer boolean Requiere verificación del certificado SSL utilizado. Por defecto es FALSE Nota: Esta opción está disponible tanto para envolturas del protocolo http como del ftp. Report a bug Ejemplos Ejemplo #1 Obtener una página y enviar datos POST <?php $postdata = http_build_query( array( 'var1' => 'some content', 'var2' => 'doh' ) ); $opts = array('http' array( 'method' => 'header' => 'content' => ) ); => 'POST', 'Content-type: application/x-www-form-urlencoded', $postdata $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context); ?> Opciones de contexto Phar Opciones de contexto Phar — Listado de opciones de contexto Phar Report a bug Descripción Opciones de contexto para phar:// envoltura. Report a bug Opciones comprimir int Uno de Constantes de compresión Phar. metadata mixed Metadatos Phar. Ver Phar::setMetadata(). Contexto parámetros Contexto parámetros — Contexto lista de parámetros Report a bug Descripción Estos parametros se puede establecer en un contexto usando el la función stream_context_set_params(). Report a bug Parámetros notification callable Una callable que se llamará cuando se produce un evento en una secuencia. Véase stream_notification_callback() para más detalles.