Capítulo 20. Usando archivos remotos

Siempre que el soporte para la "envoltura URL fopen" esté habilitado cuando se configura PHP (lo cual ocurre a menos que se pasa explícitamente la opción --disable-url-fopen-wrapper a configure), se pueden usar URLs HTTP y FTP con la mayoría de las funciones que toman un archivo como parámetro, incluyendo las sentencias require() e include().

Nota: No se pueden usar archivos remotos en las sentencias include() y require() en Windows.

Por ejemplo, se puede usar este para abrir un archivo en un servidor web remoto, analizar en la salida la información que se quiera, y entonces, usar la información en una consulta a base de datos, o simplemente para sacarls en un estilo que coincida con el resto de su sitio web.

Ejemplo 20-1. Obtener el título de una página remota


<?php
  $archivo = fopen("http://www.php.net/", "r");
  if (!$archivo) {
    echo "<p>No se pudo abrir el archivo remoto.\n";
    exit;
  }
  while (!feof($archivo)) {
    $linea = fgets($archivo, 1024);
    /* Esto sólo funciona si el título y sus etiquetas
       están en una línea. */
    if (eregi("<title>(.*)</title>", $linea, $salida)) {
      $title = $salida[1];
      break;
    }
  }
  fclose($file);
?>
    

También se puede escribir a archivos en un FTP siempre que se conecte como un usuario con los correctos derechos de acceso, y el archivo no exista ya.Para conectar como un usuario distinto de 'anonymous', se necesita especificar el nombre de usuario (y posiblemente contraseña) dentro de la URL, tales como 'ftp://usuario:clave@ftp.ejemplo.com/camino/a/archivo'. (Se puede usar la misma clase de sintaxis para acceder a archivos via HTTP cuando se requería una autenticació de same sort of syntax to access files via HTTP when they require Basic authentication.)

Ejemplo 20-2. Storing data on a remote server


<?php
  $file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
  if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
  }
  /* Write the data here. */
  fputs($file, "$HTTP_USER_AGENT\n");
  fclose($file);
?>
    

Nota: You might get the idea from the example above to use this technique to write to a remote log, but as mentioned above, you can only write to a new file using the URL fopen() wrappers. To do distributed logging like that, you should take a look at syslog().