19. Fejezet. Távoli állományok kezelése

Amennyiben az allow_url_fopen be van kapcsolva a php.ini-ben, HTTP és FTP URL-eket lehet paraméterként átadni majdnem minden olyan függvénynek, amelyek fájlnevet kér paraméterül, beleértve az include(), include_once(), require() és require_once() utasításokat is.

Megjegyzés: PHP 4.0.3 és régebbi verziókban az URL , you were required to configure PHP using the configure option --enable-url-fopen-wrapper.

Megjegyzés: A jelenlegi Windows-os verzió PHP nem támogatja a távoli állományelérést a következő függvények esetén: include(), include_once(), require() és require_once().

Ezt a lehetőséget lehet használni például egy távoli webszerveren lévő fájlt megnyitására, majd a kívánt adatok kigyűjtésére, vagy arra, hogy csak egyszerűen a saját oldalad kinézetével, stílusával tálald.

Példa 19-1. Egy távoli weboldal címsorának megállapítása

<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
    echo "<p>Nem lehet megnyitni a külső file-t!\n";
    exit;
}
while (!feof ($file)) {
  $line = fgets ($file, 1024);
  /* Ez csak akkor jó, ha a cím és a körbezáró tag-ek egy sorban vannak */
  if (eregi ("<title>(.*)</title>", $line, $out)) {
      $title = $out[1];
      break;
  }
}
fclose($file);
?>

Lehetőség van egy FTP szerveren tárolt fájlba írásra is, feltéve, hogy megfelelő jogokkal rendelkező user-ként lépsz be. Ezzel a módszerrel csak új fájlok hozhatók létre, ha már létezik a megadott nevű állomány akkor a fopen() hívása sikertelen lesz. Ha nem 'anonymous' felhasználóként szeretnél belépni, a felhasználói nevet és jelszót az URL részeként kell megadni a alábbi formában: 'ftp://felhasznalo:jelszo@ftp.pelda.hu/eleresi/ut/alma.txt'. (Ugyanezt a módszert használható akkor is, ha olyan állományokat kell elérni HTTP-n keresztül, amelyek a Basic azonosítást igénylik.)

Példa 19-2. Adat tárolása távoli gépen

<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Nem lehet megnyitni a külső file-t írásra.\n";
    exit;
}
/* Itt írunk a file-ba */
fputs ($file, "$_SERVER['HTTP_USER_AGENT']\n");
fclose ($file);
?>

Megjegyzés: A fenti példa alapján talán azt hihetnénk, hogy ilyen technikát kell használni például távoli naplózáshoz. Sajnálatos módon azonban ez nem működik, mert a fopen() hívása sikertelen lesz, ha a távoli állomány már létezik. Az ehhez hasonló elosztott, távoli naplózáshoz a syslog() függvény szolgáltatásait kell igénybe venni.