Forum und email

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. További információkért a használható protokollokkal kapcsolatban nézz el ide: List of Supported Protocols/Wrappers.

Note: PHP 4.0.3 és régebbi verziókban az ilyen URL-ek értelmezéséhez szükséges a --enable-url-fopen-wrapper beállítás bekapcsolása.

Note: A Windows-os, 4.3 előtti változatok PHP nem támogatják a távoli állományelérést a következő függvények esetén: include(), include_once(), require() és require_once(), valamint az imagecreatefromXXX függvények esetén. Ezekről többet: Grafika

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.

Example#1 Egy távoli weboldal címsorának megállapítása

<?php
$file 
fopen"https://www.example.com/""r" );
if (!
$file) {
    echo 
"<p>Nem lehet megnyitni a külső file-t!\n";
    exit;
}
while (!
feof ($file)) {
  
$line fgets$file1024 );
  
/* 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:[email protected]/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.)

Example#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 */
fwrite$file"$_SERVER['HTTP_USER_AGENT']\n" );
fclose$file );
?>

Note: 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.