Kapitola 19. 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 19-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 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 19-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 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( ) .