Kapitola 20. 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 20-1. Zφskßnφ nßzvu vzdßlenΘ strßnky

<?php
$file = fopen ("http://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:heslo@ftp.example.com/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 20-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().