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