Autor Zpráva
niCe
Profil
Ahoj,
potřeboval bych zjistit hlavičky vzdáleného souboru. Zkoušel jsem get_headers ale píše to call to undefined function, takže na hostingu zřejmě není php 5. Šlo by to i jinak? Někde jsem se dočetl o fsockopen, ale bohužel jsem tomu blíže neporozuměl :)

Nebo mi vlastně stačí jen content-size, ale protože filesize() nejde tak stejně asi musim získat hlavičky (nechci načítat celej soubor).

Předem díky za každou radu :)

niCe
koudi
Profil
potřeboval bych zjistit hlavičky vzdáleného souboru
Technicky vzato je podle mě tohle blbost. Můžeš tak maximálně získat hlavičky z http odpovědi serveru. Ale to je jen drobná technikcá poznámka :).

Jestli máš k dispozici CURL, tak ho použij. Na tohle existuje krásná http metoda HEAD, která říká, že server má vrátit pouze hlavičky bez obsahu. Pokud curl nemáš k dispozici, budeš muset použít sockety (jestli budeš mít alespoň ty). To ovšem znamená trochu se zabývat protokolem http a jeho zpracováním...
dracek
Profil
Otevřít soubor, skočit na konec, zjistit pozici. Tralalaá, máme velikost.....
djlj
Profil
dracek
nechci načítat celej soubor

niCe
Neporozuměl?
dracek
Profil
djlj
A proč ho načítat celý? Alespoň pokud vím, existuje funkce fseek....
tiso
Profil
dracek - fseek funguje na otvorené súbory, čiže sa musia celé načítať...
DoubleThink
Profil *
niCe
Vtipné glosy, pokud se jich nedokážeš vystříhat, si schovej do těla příspěvku - ne do předmětu.
niCe
Profil
djlj
Asi jen tomu prvnímu - fsockopen($file);
A pak jako co?
fputs ($file, "HEAD / HTTP/1.1"); ?
Asi to je trapas, ale ja sem nad tim stravil celej večer a nic mě nenakoplo :)

DoubleThink
A ty si svoji trapnost schovej úplně.
djlj
Profil
niCe
Koukni na příklad 1328. Místo „GET /“ jen napiš „HEAD /adresasouboru“. A samozřejmě www.example.com si přepiš na vlastní adresu.
niCe
Profil
Ještě mi napadlo, kdyby to bylo takhle:

fsockopen($file);
fgets ($file, xxxx);

Kolik musim dát aby to přečetlo bytů abych dostal všechny hlavičky?
niCe
Profil
djlj
Dobře, díky. Ale jak uvedu název souboru? Mějme třeba www.images.com/images/photo.jpg

fputs ($fp, "HEAD /images/phot.jpg HTTP/1.0 Host: www.images.com ");

Rozdělí se tam pak takhle ta url?
djlj
Profil
niCe
Je to dobře. A nezapomeň změnit adresu domény i u fsockopen.
niCe
Profil
djlj
Dík :)

Už asi tuším o co tam go, ale... asi to tluče jen ten samotnej fsockopen.

Protože když tam necham to ", 80, $errno, $errstr, 30", napíše to tuhle chybu:
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known

Bez těch parametrů, tzn. jen fsockopen ("www.example.com"); to chybu nepíše.

Znamená to, že na hostingu není fsockopen povolena?
niCe
Profil
Ještě změna:
Warning: fsockopen() [function.fsockopen]: unable to connect to http://example.com:80

Tluče to tam ten port. Jak je to možné? Bez portu to chybu nepíše, ale zároveň to nic neotevírá :))
djlj
Profil
Co to děláš? Přece:
$fp = fsockopen ("www.images.com", 80, $errno, $errstr, 30);
niCe
Profil
Tak díky fšem, hlavně Lukášovi.
Už sem si dal facku :) Žádný http:// v fsockopen :)

niCe

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: