Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Fopen a readfile
Forum PHP.pl > Forum > PHP
tabbi
Witam,

jak jest zasadnicza różnica pomiędzy tymi dwoma kodami:

  1. $fp = fopen($fileLink, 'r') or die ("404");
  2. header("Pragma: no-cache");
  3. header("Content-Type: application/x-unknown");
  4. header("Expires: 0");
  5. header("Content-Length: ".$file['size']);
  6. header("Content-Transfer-Encoding: binary");
  7. @header('Content-Disposition: attachment; filename="'.$file['filename'].'"');
  8. if(!fp) exit; // if $fp is not a valid stream resource, exit
  9. fseek($fp,$byte_from);
  10. while(!feof($fp)){
  11. //reset time limit for big files
  12. print(fread($fp,1024*8));
  13. flush();
  14. }
  15. fpassthru($fp);
  16. fclose($fp);


a

  1. header("Pragma: no-cache");
  2. header("Content-Type: application/x-unknown");
  3. header("Expires: 0");
  4. header("Content-Length: ".$file['size']);
  5. header("Content-Transfer-Encoding: binary");
  6. flush();
  7. readfile($fileLink);


Interesuje mnie ściąganie dużych plików na serwer i wydajność w obciążeniu ? Byłbym wdzięczny na nakreślenie kilku uwag
nospor
set_time_limit(0); nie daje się w petli.

Co do roznicy: to sobie zmierz czasy oraz zajętość pamięci przy duzym pliku a się dowiesz smile.gif
tabbi
Czytałem na jednym forum ze fopen nie nadaje sie do duzych plików ?
Crozin
Zacznijmy od tego, że pierwszy kod jest niepoprawny (włącz wyświetlanie wszystkich błędów).

Cytat
Czytałem na jednym forum ze fopen nie nadaje sie do duzych plików ?
Głupot się oczytałeś. winksmiley.jpg
tabbi
Okej skonstruowałem coś takiego do zapisu pliku na serwer.

  1. $fh = fopen($nazwa, 'w');
  2. flush();
  3. $ch = curl_init($fileLink);
  4. curl_setopt($ch, CURLOPT_FILE, $fh);
  5. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  6. curl_exec($ch);
  7.  
  8. curl_close($ch);
  9. fclose($fh);


Pytanie czy da sie to czymś zastąpić ulepszyćquestionmark.gif (np. użycie exec() i wget ? nie jest lepszym rozwiązaniem ?)
erix
Cytat
(np. użycie exec() i wget ? nie jest lepszym rozwiązaniem ?)

W jakim celu?
tabbi
Wydajnościowym, zmniejszenie obciążenia serwisu ?
erix
No tak, ale pobierasz wtedy dwa razy.

A przecież możesz otworzyć dwa strumienie - jeden do odczytu, drugi do zapisu (przez fopen; jeśli dobrze poczytasz, to zobaczysz, że ma naprawdę potężne możliwości) i kopiować dane z jednego na drugi.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.