Autor Zpráva
Chuchycek
Profil
Ahoj,
při zazipování, se mi vytvoří archiv zip bez problému, ale když už přidám hlavičku pro stažení, tak mi chrome začne házet chybu: Chyba 6(net::ERR_FILE_NOT_FOUND):, takže nevím jestli mám úplně špatně vyplněnou header nebo něco jiného, jediný prohlížeč ve kterém mi to jde stáhnout je opera.

            $fotky = explode(",", $objednavka['obj_online']);
            $file = tempnam(".", "zip");
            $zip = new ZipArchive();
            $zip->open($file, ZipArchive::OVERWRITE);
            foreach ($fotky as $value) {
                $cesta = SLOZKA . $objednavka['obj_album'] . "/" . $value;
                $zip->addFile($cesta, $value);
            }
            $zip->close();
            $filename = "objednavka-" . $objednavka['obj_id'] . ".zip";
            header('Content-Disposition: attachment; filename=' . $filename);
            readfile($file);
            unlink($file);
Jan Tvrdík
Profil
Chuchycek:
Jaké hlavičky dorazí ke klientovi?
Chuchycek
Profil
Původně jsem měl hlavičky, takové
            header("Pragma: public");
            header("Content-Description: File Transfer");
            header("Content-Type: application/download");
            header("Content-Disposition: attachment; filename=" . $filename);
            header("Content-Length: ".  filesize($file));
file));
ale teď ke klientovi nedorazí zřejmě nic, když mi to vyhodí rovnou chybu.
Jan Tvrdík
Profil
Chuchycek:
Zkus si přečíst tyhle dvě vlákna na Stack Overflow:
1) stackoverflow.com/questions/11015789/error-6-neterr-file-not-found-the-file-or-directory-could-not-be-found
2) stackoverflow.com/questions/8031301/php-readfile-not-working-for-me-and-i-dont-know-why
Chuchycek
Profil
To první jsem četl, ale to nikterak můj problém nevyřešilo, jelikož v chromu žádné rozšíření nemám.

Ale to druhé řešení se zdá být na dobré cestě, ale nejsem si jistý, zdali to dělám takhle dobře?

            $file = tempnam(".", "zip");
            $zip = new ZipArchive();
            $zip->open($file, ZipArchive::OVERWRITE);
            foreach ($fotky as $value) {
                $cesta = SLOZKA . $objednavka['obj_album'] . "/" . $value;
                $zip->addFile($cesta, $value);
            }
            $zip->close();
            $filename = "objednavka-" . $objednavka['obj_id'] . ".zip";
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Content-Description: File Transfer");
            header("Content-Type: application/force-download");
            header("Content-Type: application/octet-stream");
            header("Content-Type: application/download");
            header("Content-Disposition: attachment; filename=" . $filename);
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: " . filesize($file));
            flush();

            $handle = fopen($file, 'rb');
            $buffer = '';
            if ($handle === false) {
                die('fopen failed to open the file.');
            }
            while (!feof($handle)) {
                $buffer = fread($handle, filesize($file));
                echo $buffer;
                flush();
            }
            fclose($handle);
            unlink($file);
Jan Tvrdík
Profil
Chuchycek:
Ten kód na výpis nedává moc smysl. Buď to budeš číst postupně (jak je na odkázané stránce):

while (!feof($handle)) {
    echo fread($handle, 4096);
    flush();
}
fclose($handle);

Nebo to přečteš všechno najednou:

echo fread($handle, filesize($file));
flush();
fclose($handle);
Chuchycek
Profil
Tak to nakonec nevyřešilo můj problém, ten je pořád v hlavičkách, kdykoliv tam dám některou z nich tak mi to vyhodí stejnou chybu
            header("Content-Type: application/force-download");
            header("Content-Type: application/octet-stream");
            header("Content-Type: application/download");
            header("Content-Disposition: attachment; filename=" . $filename);
Jan Tvrdík
Profil
Chuchycek:
V tom případě by se hodila odpověď na [#2]. Chrome ani Firefox ve vývojových nástrojích nic nezobrazí?
Chuchycek
Profil
Dostávám toto.
Array ( [0] => HTTP/1.1 404 Not Found [1] => Date: Sun, 10 Mar 2013 21:38:00 GMT [2] => Server: Apache/2.2.22 (Debian) [3] => X-Powered-By: PHP/5.4.4-10 [4] => X-Pingback: http://fotkydoma.cz/xmlrpc.php [5] => Pragma: public [6] => Expires: 0 [7] => Cache-Control: must-revalidate, post-check=0, pre-check=0 [8] => Content-Description: File Transfer [9] => Content-Disposition: attachment; filename=objednavka-1000000000.zip [10] => Content-Transfer-Encoding: binary [11] => Set-Cookie: PHPSESSID=nbvqjrado8uh4m0fnsdla13hv2; path=/ [12] => Content-Length: 281980 [13] => Connection: close [14] => Content-Type: application/download )
Jan Tvrdík
Profil
Chuchycek:
Zjisti, kde se vzdalo „HTTP/1.1 404 Not Found“. Funkce http_response_code (PHP 5.4+) ti může být nápomocná.
Davex
Profil
Chuchycek:
HTTP/1.1 404 Not Found
Asi si Wordpress myslí, že na té adrese nemá nic být a vrací chybu, že stránka neexistuje. Musíš tam dostat stavový kód 200 OK.
Chuchycek
Profil
Takže by mělo stačit, když nastavím hlavičku na header("HTTP/1.0 200 OK");? Jestli to dobře chápu
aDAm
Profil
ne musíš přijít na to kde se ti tam cpe 404ka a vyřešit proč se ti tam cpe.
Chuchycek
Profil
Davex:
Máte pravdu. Už jsem na to přišel vkládal jsem tam nejspíše moc jádra z wp a tak mi to vracelo špatnou hlavičku, nyní vkládám pouze konfigurační soubor a databázovou třídu a vše je OK. Moc díky.

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:

0