Autor Zpráva
Anonym
Profil *
Ahoj, zkouším načíst soubor pomocí funkce file_get_contents, ale naskočí mi warning [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in

if(file_get_contents("http://example.com/files/".$jmeno_souboru)) {
     echo "Soubor existuje";
} 
else {
     echo "Soubor neexistuje";
}


Jak je to možné? Soubor na dané URL existuje.
MCKAY
Profil
Možná je zakázána funkce file_get_contents. Pokud vím, tak třeba php5.cz ji zakázanou má.
Anonym
Profil *
Zvláštní. Takhle to funguje:
if (file_get_contents("./files/$jmeno_souboru"))
Anonym
Profil *
teda takhle:
if(file_get_contents("./files/".$jmeno_souboru))
Shulík
Profil
Spíš bych to tipl na zakázanou konfigurační direktivu url_fopen.
Původní funkce vysílala HTTP požadavek na server example.com, zatímco ta druhá žádný HTTP požadavek neotevírá.
Anonym
Profil *
Tak vypadá to, že to funguje, ale i přesto se mi zobrazují warningy...

if(file_get_contents("./files/".$jmeno_souboru)) {
     echo "Soubor existuje";
} 

To funguje bez warningů.


else {
     echo "Soubor neexistuje";
}


Taky se hláška vypíše, ale už s warningy:
file_get_contents() [function.file-get-contents]: Unable to access ./files/dokument.txt in...
a
failed to open stream: No such file or directory in...
nightfish
Profil
Anonym:
HTTP request failed! HTTP/1.1 403 Forbidden in
z téhle hlavičky jasně plyne, že HTTP server vrací chybovou hlavičku 403 - tedy že z nějakého důvodu nemáte k požadovanému souboru přístup

Shulík:
Spíš bych to tipl na zakázanou konfigurační direktivu url_fopen.
to by chybová hláška byla URL file-access is disabled in the server configuration in
Anonym
Profil *
Jak tedy ošetřit existenci souboru na serveru, když file_get_contents nefunguje? Zkoušel jsem i jiný server a problém je stejný...
Anonym
Profil *
Jde mi o to, aby uživatel neuploadoval 2x stejný soubor nebo soubor se stejným jménem.
PetrM
Profil *
Možná by nebylo špatné ty soubory při uploadu přejmenovávat a tím zamezit duplicitě , pokud není vyžadováno mít původní názvy.
Třeba
$nove_jmeno = base64_encode( md5_file($puvodni_nazev) . mktime() );
Anonym
Profil *
PetrM:
Mohl by jsi ten kod trošku popsat? base64_encode chápu - zakóduje název (v podstatě přejmenuje), ale na co tam pak je md5_file a mktime()?
PetrM
Profil *
Kdyby tam zaslali dva soubory se stejným názvem tak výsledek base64_encode by byl stejný a bylo by to kničemu. Takže nejdříve vytvoříme hash ze souboru pomocí md5_file a přidáme ktomu aktuální unix timestamp a celé zakodujem pres base64_encode , což by mělo zamezit duplicitě.
Anonym
Profil *
Stejný problém...
md5_file() [function.md5-file]: Unable to access dokument.doc in...
md5_file(dokument.doc) [function.md5-file]: failed to open stream: No such file or directory in ...
Ale soubor se přejmenuje i uploaduje...jen naskočí ty warningy
Anonym
Profil *
Proč naskakují když to jinak funguje dobře?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: