ďťż
Podstrony
|
telcocafeWitam.Chciałem zrobić na swojej stronie system downloadu wzorując się na skrypcie z KSE 5/2005. Problem polega na tym, że za jego pomocą (testuję na localhost) pliki *.exe ściągają się niepoprawnie - wyskakuje błąd "Program za duży do umieszczenia w pamięci". Wygląda na to, że z innymi rozszerzeniami tego problemu nie ma. Nie wiem co jest przyczyną takiego zachowania. Pomoże ktoś? fragment download.php: header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Type: $mtype"); header("Content-Disposition: attachment; filename=\"$fname\""); header("Content-Transfer-Encoding: binary"); header("Content-Length: " . $fsize); $file = fopen($file_path,"rb"); if ($file) { while(!feof($file)) { print(fread($file, 1024*8)); flush(); if (connection_status()!=0) { fclose($file); die(); } } fclose($file); } zmienne fname file file_path są ustawione poprawnie. EDIT: Testuję to na pliku instalatora, i co zauważyłem: Po ściągnięciu plik traci swoją ikonę, a do jego treści dodawane są na początku puste wiersze. Po wykasowaniu pustych wierszy ikona wraca, ale teraz zamiast komunikatu "Program za duży..." pojawia się "File is corrupted". Wygląda na to, że skrypt modyfikuje zawartość pliku, ale co jest tego powodem? Użytkownik karambolis8 edytował ten post 02 maj 2010, 14:17 Powyższy kod jest bardzo złym przykładem - bo do obsługi plików statycznych (tych do pobrania) używasz PHP, a powinien to obsługiwać wyłącznie serwer Apache. Poza tym jak już musisz używać takich "rozwiązań" to spróbuj np. print(file_get_contents(ŚCIEŻKA)); Mógłbyś rozwinąć pierwsze zdanie? Jak mam zatrudnić do tego Apache? Zastąpienie pętli przez proponowane przez Ciebie print(file_get... nic nie zmieniło. Ponieważ tylko wyświetlasz plik, to użyj funkcji readfile(). http://bytes.com/top...nts-vs-readfile http://www.raditha.c...file_vs_include Znalazłem błąd. Dokładnie rzecz biorąc do pliku były dodawane dwa puste wiersze na początku. Interpreter PHP w Apache tekst poza znacznikami <?php i ?> echuje do przeglądarki. Mój skrypt download.php miał przed <?php dwa puste wiersze i to one właśnie były echowane jako początek treści pliku. |
|||
Sitedesign by AltusUmbrae. |