ConFoo 2025

Empleo de ficheros remotos

Siempre que allow_url_fopen esté habilitado en php.ini, se pueden usar los URL de HTTP y FTP con la mayoría de las funciones que toman un nombre de fichero como parámetro. Además, los URL se pueden emplear con las sentencias include, include_once, require y require_once (desde PHP 5.2.0, allow_url_include debe estar habilitado para ello). Véanse Protocolos y Envolturas soportados para más información sobre los protocolos admitidos por PHP.

Por ejemplo, se puede emplear para abrir un fichero en un servidor web remoto, analizar la salida de los datos deseados, y usar dichos datos en una consulta a una base de datos, o simplemente para mostrarlos en un estilo que haga juego con el del sitio web.

Ejemplo #1 Obtener el título de una página remota

<?php
$fichero
= fopen ("http://www.example.com/", "r");
if (!
$fichero) {
echo
"<p>Imposible abrir el fichero remoto.\n";
exit;
}
while (!
feof ($fichero)) {
$línea = fgets ($fichero, 1024);
/* Esto solo funciona si el título y sus etiquetas están en una línea */
if (preg_match ("@\<title\>(.*)\</title\>@i", $línea, $salida)) {
$título = $salida[1];
break;
}
}
fclose($fichero);
?>

También se puede escribir en ficheros de un servidor FTP (siempre que se esté conectado como un usuario con los permisos de acceso correctos). Con este método solamente se pueden crear ficheros nuevos. Si se intenta sobreescribir un fichero que ya existe, la llamada a la función fopen() fallará.

Para conectarse como un usuario distinto a 'anonymous', es necesario especificar el nombre de usuario (y posiblemente la contraseña) dentro del URL, tal como 'ftp://usuario:contraseña@ftp.example.com/ruta/al/fichero'. (Se puede utilizar la misma sintaxis para acceder a ficheros mediante HTTP cuando se requiera autenticación básica).

Ejemplo #2 Almacenar datos en un servidor remoto

<?php
$fichero
= fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!
$fichero) {
echo
"<p>Imposible abrir el fichero remoto para escritura.\n";
exit;
}
/* Escribir los datos aqui. */
fwrite ($fichero, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($fichero);
?>

Nota:

Con el ejemplo anterior, se podría tener la idea de que se puede emplear esta técnica para escribir un fichero de registro remoto. Desafortunadamente esto no funcionaría porque la llamada a la función fopen() fallará si el fichero remoto ya existe. Para realizar registros distribuidos como ese, debería echar un vistazo a syslog().

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top