Autor Zpráva
imploder
Profil
Vyzkoušel jsem tento návod na stáhnutí souboru v PHP. Ale nefungovalo to, funkce readfile() mi soubor nestáhla (zkoušel jsem to v Opeře). Tak jsem se vrátil ke svojemu původnímu postupu, který mi předtím fungoval - načítání funkcí fread() po 8KB kouscích (nebo do konce paketu) a průběžné posílání prohlížeči. Jenže teď mi v Opeře nefunguje ani to. Nabídne to sice soubor ke stažení, ale ať kliknu na Otevřít nebo na Uložit, tak se vůbec neukážou přenosy ani se to nezobrazí. Opera se tváří, že to stáhla (i když v přenosech to není), ale v místě, kam se to mělo uložit, se to neobjeví.

Zkoušel jsem smazat cache, ale nepomohlo to. Ve FF mi to stahuje i otevírá, stejně jako v Opeře před tím, než jsem vyzkoušel ten super postup odsud z fóra. Ve FF jsem ho nezkoušel a radši ani nebudu, aby se to taky nepodělalo. Nevím, co to s Operou provedlo, a potřebuju to spravit.

Toto mi předtím fungovalo:
Header('Content-Type: application/octet-stream');
Header('Content-Disposition: attachment; filename="image.jpg"');
$f = fopen("http://img170.imageshack.us/img170/9331/82ag9.jpg", "r");
while (!feof($f)) { echo fread($f, 8192); }
fclose($f);


readfile("http://img170.imageshack.us/img170/9331/82ag9.jpg"); jsem zkusil a rozbilo to Operu
Taky jsem zkusil i se svojím původním postupem posílat
Header("Content-Length: ".filesize("http://img170.imageshack.us/img170/9331/82ag9.jpg"));

ale velikost souboru se stejně neukázala ani ve FF.

Udělal jsem nějakou zásadní chybu? Teoreticky by nemělo být možné prohlížeč pokazit posláním nějakých vadných dat. Tím spíš, že funkce readfile() by měla normálně fungovat (a nothremovi zřejmě fungovala hodně dobře).
imploder
Profil
Dokonce i IE to zvládá bez problémů. Jen Opera je pořád úplně dutá. A jak už jsem říkal, nebývala.
Zdeněk Košťál
Profil
Tak už nic.
imploder
Profil
Tak už nic.
?? Jako že se to už nedá spravit?
imploder
Profil
Je to divné, tady to radí dělat taky tak: http://cz2.php.net/manual/en/function.header.php#83384
Nikomu z vás tahle funkce neblbne?
Zdeněk Košťál
Profil
imploder
Ne, pardon za mystifikaci - uvedl jsem link na diskusi, ale ten jsi měl už v úvodním příspěvku. K tématu jsem neměl už co říct, tak jsem to editoval a napsal "Tak už nic." :-). Nechám to na někom, kdo tomu rozumí...
Joker
Profil
imploder
Nikomu z vás tahle funkce neblbne?
Neblbne, následující kód mi v Opeře chodí bez problému:

      header("Content-Type: application/x-force-download");
      header("Content-Length: " . filesize($cesta));
      header('Content-Disposition: attachment; filename='.$soubor);
      readfile($cesta);
      exit();
imploder
Profil
"Pro všechny funkce PHP pro práci se soubory platí omezení. Nemůžete pracovat se soubory cizích webů (třeba i jednoho hostingu) a už vůbec nelze těmito funkcemi zasahovat do počítačů návštěvníků stránek. "
- http://cs.wikibooks.org/wiki/PHP_prakticky/Další_operace_se_soubory#Zj ištění_atributů
^ zase tohle fórum svévolně cpe mezery do odkazů

Toto tvrzení Wikiknihy sice není správné, ale pro filesize() zřejmě platí. Tak proto tam nemá žádný efekt Content-Length.
imploder
Profil
Joker
Tak to mně teda nechodí, a to ani ve FF. Zkouším to pořád s tím samým souborem. Úplně to kašle na filename a jako .php soubor se to otevírá v PSPadu :(. Chová se to celkově hodně divně.

Zkoušel jsi to se souborem z jiného serveru?
imploder
Profil
Hlavičky
Header('Content-Type: application/octet-stream');
Header('Content-Disposition: attachment; filename="settings.awk"');

bere Opera spolehlivě. Už dlouho mám kód
Header('Content-Type: application/octet-stream');
Header('Content-Disposition: attachment; filename="settings.awk"');
$scn = $_POST['scn']; $scc = $_POST['scc'];
$scrlim = scrlim($scn);
for($n=0; $n<$scrlim; $n++) echo $scn[$n].":".$scc[$n]."\n";
echo "r:".$_POST['pattern']."\n";
echo "n:".$_POST['numw']."\n";
if($_POST['nle']) echo "nle\n";

na ukládání nastavení generátoru slov a teď jsem to zkoušel i v Opeře a jde to.
imploder
Profil
Přeinstaloval jsem Operu (zachovala si původní nastavení, poštu, atd.). Pořád se to chová velice divně. Je možné ji donutit, aby obrázek zobrazila (vybráním Opera Internet Browser ze seznamu a Otevřít), ale když to má stáhnout, tak dělá, jako by to stáhla, ale na disku se to neobjeví. <<EDIT: Pak jsem to zkoušel s původním skriptem z localhostu i z wz.cz a stáhlo se to. Pak jsem to zkoušel znovu a zjistil jsem, že se to někdy stáhne a někdy ne. Taky to někdy upozorní, že se soubor stáhl, a někdy ne. >> Když dám Otevřít ve výchozím programu (Prohlížeč obrázků), tak to taky jako že soubor stáhne, ale nestane se nic. Okýnko vyvolané skriptem vypadá takto:

- nezobrazují se tam správně české znaky.

Když to pak zkusím otevřít z Přenosů, tak se to neotevře. Tuším, že tyhle všechny problémy jsou problémy s Operou, ne se samotným skriptem. Ve FF oba postupy fungují, obrázek se stáhne, případně otevře (když si to vyberu). Jenom velikost souboru je pořád neznámá, přestože nothrem tvrdil, že readfile() pošle tuto informaci automaticky. Možná je to i tady tím, že je to vzdálený soubor (nothrem zřejmě stahoval lokální soubor).

Můžete si zkusit oba testovací skriptíky:

1. původní postup - to mi myslím fungovalo bez problémů i v Opeře, než jsem vyzkoušel ten druhý
<?php
Header('Content-Type: application/octet-stream');
Header('Content-Disposition: attachment; filename="image.jpg"');
//Header("Content-Length: ".filesize("http://img170.imageshack.us/img170/9331/82ag9.jpg"));
$f = fopen("http://img170.imageshack.us/img170/9331/82ag9.jpg", "r");
while (!feof($f)) { echo fread($f, 8192); }
fclose($f);
?>


2. funkcí readfile() - kdo se nebojí, ať to prosím vyzkouší v Opeře
<?php
$cesta = "http://img170.imageshack.us/img170/9331/82ag9.jpg";
Header('Content-Type: application/octet-stream');
Header('Content-Disposition: attachment; filename="image.jpg"');
readfile($cesta);
?>


Napište, jestli vám něco z toho funguje nebo ne a jak se to chová.
imploder
Profil
Taky mi v Opeře nefunguje automatické zahájení stahování na Stahuj.cz. V nastavení jsem ale nic zvláštního nenašel. Vůbec netuším, co s tím je.
imploder
Profil
Skripty už mi v Opeře stahují oba. Asi jsem jen málo čekal. Server na localhostu reaguje dost pomalu. Zvláštní chování přenosů (otevírání tabu, zmodrání a upozornění při dokončení) možná pramení z neznámé velikosti souboru. Hlavní je, že to stahuje.

Vaše odpověď

Mohlo by se hodit

Nezapomeňte na odkaz na živou ukázku problému.

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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