Forum und email
Použití vzdálených souborů

Kapitola 39. Použití vzdálených souborů

Pokud při konfiguraci PHP aktivujete podporu "URL fopen wrapper" (standardně je zapnutá, ledaže pro configure explicitně zadáte --disable-url-fopen-wrapper příznak (verze do 4.0.3), nebo (u novějších verzí) nastavíte allow_url_fopen v php.ini na off), můžete ve voláních většiny funkcí, které očekávají jako argument název souboru (včetně require() a include()) uvést HTTP nebo FTP URL.

Poznámka: Na Windows nelze používat vzdálené soubory v include() a require() výrazech.

Můžete například otevřít soubor na vzdáleném web serveru, vyseparovat z výstupu data, která potřebujete, a tato data potom použít v dotazu na databázi, nebo je prostě začlenit do výstupu stylem odpovídajícím zbytku vaší web site.

Příklad 39-1. Získání názvu vzdálené stránky

<?php
$file
= fopen ("https://www.php.net/", "r");
if (!
$file) {
    echo
"<p>Nelze otevřít vzdálený soubor.\n";
    exit;
}
while (!
feof ($file)) {
    
$line = fgets ($file, 1024);
    
/* Toto bude fungovat pouze pokud jsou tagy a název na jedné řádce */
    
if (eregi ("<title>(.*)</title>", $line, $out)) {
        
$title = $out[1];
        break;
    }
}
fclose($file);
?>

Pokud se připojíte jako uživatel s dostatečnými právy, a daný soubor už neexistuje, můžete data také ukládat po FTP. Pokud se chcete připojit jako jiný uživatel než 'anonymous', musíte v URL udat uživatelské jméno (a pravděpodobně i heslo), např. 'ftp://uzivatel:[email protected]/path/to/file'. (Pro přístup k souborům přes HTTP, které vyžadují Basic authentication, můžete použít stejnou syntaxi.)

Příklad 39-2. Uložení dat na vzdáleném serveru

<?php
$file
= fopen ("ftp://ftp.php.net/incoming/outputfile", "w");
if (!
$file) {
    echo
"<p>Nelze otevřít vzdálený soubor pro zápis.\n";
    exit;
}
/* Zapíšeme data. */
fputs ($file, "$HTTP_USER_AGENT\n");
fclose ($file);
?>

Poznámka: Z výše uvedeného příkladu by vás mohlo napadnout využít tuto techniku k zápisu do vzdáleného logu, ale jak už bylo zmíněno výše, pomocí URL fopen() wrapperu můžete zapisovat pouze do nového souboru. Pokud máte zájem o distribuované logování, podívejte se na syslog().