Failed to open stream i file_get_contents(url)
Pokušali ste da, u vašoj PHP skripti, pročitate neki fajl sa interneta, i nailazite na problem da je fajl nedostupan. bez obzira na uzrok, da li je to neispravna putanja, ili fajl jednostavno ne postoji.PHP vam izbacuje sledeću grešku:
Warning: file_get_contents(http://www.example.com/neka/putanja/fajl.php?id=33) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 File Not Found
Sa ovim problemom sam se skoro susreo na jednom serveru, a što je bilo još čudnije, ispis greške nije mogao da se preskoči ni stavljanjem @ ispred file_get_contents, ni ubacivanjem error_reporting(0) pre poziva funkcije za čitanje fajla. Mada bi, po svoj logici, barem error_reporting(0) trebao da spreči ispis svih grešaka i upozorenja.
Pretraživanjem interneta sam naišao na gomilu strana na kojima programeri pitaju za rešenje ovog problema, ali barem u prvih 30 linkova nisam našao rešenje, pa sam odustao od daljeg traženja. Problem, u ovim tekstovima koje sam čitao, bio taj da otvaranje URL-ova nije dozvoljeno, ili link koji se želi otvoriti nije bio ispravan. U mom slučaju problem je bio u tome što se link sa koga se čita fajl, formira dinamički, a podaci za kreiranje tog linka se uzimaju iz baze za koju nisam odgovoran.
Za proveru postojanja nekog fajla postoji funkcija file_exists, i posle malo čitanja po PHP uputstvu i traženja po netu, sam pronašao da funkcija file_exists, radi i sa fajlovima koji se nalaze negde na netu, a ne samo sa lokalnim fajlovima, mada je PHP sajt slabo dokumentovan po tom pitanju. Od verzije PHP 5.0.0, file_exists prihvata i URL do fajla, a ne samo putanju ka fajlu koji se nalaza na serveru ili lokalnoj mrži. Naravno da bi vam ovo radilo treba da vam je na serveru dozvoljen pristup fajlovima preko URLa. Pristup udaljenim lokacijama preko URL se podešava u php.ini (parametar allow_url_fopen) i nije ga moguće podesiti u vreme rada skripte, iz bezbednosnih razloga.
Na kraju posle svega ovoga pomenutog, evo kako bi trebalo da izgleda vaše čitanje udaljenog fajla:
$file = 'http://www.example.com/neka/putanja/fajl.php?id=33'; $data = ''; if (file_exists($file)) $data = file_get_contents($file);






