Uzak dosyaların kullanımı

php.ini içinde allow_url_fopen seçeneği etkin olduğu sürece, dosya adını değiştirge olarak alan birçok işlevde HTTP ve FTP URL'lerini kullanabilirsiniz. Ek olarak, URL'ler include, include_once, require ve require_once deyimleri ile kullanılabilir (PHP 5.2.0'dan beri bunun için allow_url_include seçeneğini etkinleştirmek gerekmektedir). PHP tarafından desteklenen protokoller hakkında daha fazla bilgi için bakınız: Desteklenen Protokoller ve Sarmalayıcılar

Örneğin, bunu uzak web sunucusunda bir dosya açmak, istediğiniz veri için çıktıyı çözümlemek ve bu veriyi bir veritabanı sorgusunda kullanmak veya sadece çıktılamak için kullanabilirsiniz.

Örnek 1 - Uzak sayfanın başlığını elde etmek

<?php
$dosya 
fopen ("http://www.ornek_bir_site.com/""r");
if (!
$dosya) {
    echo 
"<p>Uzak dosya açılamıyor.\n";
    exit;
}
while (!
feof ($dosya)) {
    
$satir fgets ($dosya1024);
    
/* Bu sadece başlığın title etiketleri aynı satır üzerindeyse çalışır */
    
if (preg_match ("@\<title\>(.*)\</title\>@i"$satir$cikti)) {
        
$baslik $cikti[1];
        break;
    }
}
fclose($dosya);
?>

Aynı zamanda bir FTP sunucusundaki dosyalara da yazabilirsiniz (doğru erişim haklarına sahip bir kullanıcı olarak bağlandığınızda). Bu yöntemi kullanarak sadece yeni dosyalar oluşturabilirsiniz; eğer varolan bir dosyanın üzerine yazmayı denerseniz, fopen() çağrısı başarısız olur.

'anonymous' haricinde bir kullanıcı olarak bağlanmak için, 'ftp://kullanici:[email protected]_bir_site.com/ornek/bir/dosya' örneğindeki gibi kullanıcı adı (ve parola) URL içinde belirtilmelidir. (Basit kimlik doğrulaması gerektiren HTTP dosya erişimleri içinde aynı söz dizimini kullanabilirsiniz.)

Örnek 2 - Veriyi uzak sunucuda saklamak

<?php
$dosya 
fopen ("ftp://ftp.ornek_bir_site.com/gelen/yazilan_dosya""w");
if (!
$dosya) {
    echo 
"<p>Uzak dosya yazmak için açılamıyor.\n";
    exit;
}
/* Veriyi burada yaz. */
fwrite ($dosya$_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($dosya);
?>

Bilginize:

Yukarıdaki örnek, bu tekniğin uzak günlük dosyası yazmak için kullanılabileceği fikrini vermiş olabilir. Ne yazık ki bu çalışmaz çünkü eğer uzak dosya zaten varsa fopen() çağrısı başarısız olur. Böyle bir dağıtık günlüklerle için syslog() işlevine göz atmalısınız.