Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wysyłanie pliku na żądanie skryptem, dlaczego możliwa tylko 1 na raz ??
Black-Berry
post
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam, mam skrypt do wysyłania plików z serwera do użytkownika. Niestety okazało się że mozliwe jest wysyłanie tylko 1 pliku na raz. Nie mam pojęcia dlaczego. Co ciekawe mam w switchu 2 komputery i na obu mozna sciągać ten sam plik jednocześnie. Nie można tylko ściągać (nawet 2 różnych plików) jednocześnie na jednej maszynie. Czy ktoś mógłby coś doradzić ?

  1. <?php
  2. class Sender
  3. {
  4. /***
  5.   * This function takes a path to a file to output ($file), the filename that
  6.   * the browser will see ($name) and the MIME type of the file ($mimeType, optional).
  7.   *
  8.   * If you want to do something on download abort/finish,
  9.   * register_shutdown_function('function_name');
  10.   */
  11. public static function OutputFile($file, $name='', $mimeType='')
  12. {
  13. if (!is_readable($file)) die('File not found or inaccessible!');
  14.  
  15. $size = filesize($file);
  16. if (!$name) $name = basename($file);
  17. $name = rawurldecode($name);
  18.  
  19. // Figure out the MIME type (if not specified)...
  20. $known_mime_types = array(
  21. "pdf" => "application/pdf",
  22. "txt" => "text/plain",
  23. "html" => "text/html",
  24. "htm" => "text/html",
  25. "exe" => "application/octet-stream",
  26. "zip" => "application/zip",
  27. "doc" => "application/msword",
  28. "xls" => "application/vnd.ms-excel",
  29. "ppt" => "application/vnd.ms-powerpoint",
  30. "gif" => "image/gif",
  31. "png" => "image/png",
  32. "jpeg" => "image/jpg",
  33. "jpg" => "image/jpg",
  34. "php" => "text/plain"
  35. );
  36.  
  37. if ($mimeType == '') {
  38. $file_extension = strtolower(substr(strrchr($file, "."), 1));
  39. if (array_key_exists($file_extension, $known_mime_types)) {
  40. $mimeType = $known_mime_types[$file_extension];
  41. } else {
  42. $mimeType = "application/force-download";
  43. };
  44. };
  45.  
  46. @ob_end_clean(); //turn off output buffering to decrease cpu usage...
  47.  
  48. // required for IE, otherwise Content-Disposition may be ignored...
  49. if (ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
  50.  
  51. header('Content-Type: ' . $mimeType);
  52. header('Content-Disposition: attachment; filename="'.$name.'"');
  53. header("Content-Transfer-Encoding: binary");
  54. header('Accept-Ranges: bytes');
  55.  
  56. // The three lines below basically make the download non-cacheable...
  57. //header("Cache-control: private");
  58. //header('Pragma: private');
  59. //header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  60.  
  61. // multipart-download and download resuming support
  62. if (isset($_SERVER['HTTP_RANGE'])) {
  63. list($a, $range) = explode("=", $_SERVER['HTTP_RANGE'], 2);
  64. list($range) = explode(",", $range, 2);
  65. list($range, $range_end) = explode("-", $range);
  66. $range = intval($range);
  67. if (!$range_end) {
  68. $range_end=$size-1;
  69. } else {
  70. $range_end=intval($range_end);
  71. }
  72. $new_length = $range_end-$range+1;
  73. header("HTTP/1.1 206 Partial Content");
  74. header("Content-Length: $new_length");
  75. header("Content-Range: bytes $range-$range_end/$size");
  76. } else {
  77. $new_length = $size;
  78. header("Content-Length: " . $size);
  79. }
  80.  
  81. /* output the file itself */
  82. $chunksize = 1 * (1024 * 1024); //you may want to change this
  83. $bytes_send = 0;
  84. if ($file = fopen($file, 'r')) {
  85. if (isset($_SERVER['HTTP_RANGE'])) fseek($file, $range);
  86. while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length)) {
  87. $buffer = fread($file, $chunksize);
  88. echo ($buffer);
  89. flush();
  90. $bytes_send += strlen($buffer);
  91. }
  92. fclose($file);
  93. } else {
  94. die('Error - can not open file.');
  95. }
  96. //end PHP script...
  97. die();
  98. }
  99. }
  100. ?>


przykładowe linki
http://62.75.147.61/bar_application/Reques...php?storageId=2
http://62.75.147.61/bar_application/Reques...php?storageId=6
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
fander
post
Post #2





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


U mnie mogę ściągać 2 pliki na raz z tym że po ściągnięciu zajmują po 0 bajtów, ten kod coś nie działa (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Black-Berry
post
Post #3





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(fander @ 25.09.2010, 12:00:38 ) *
U mnie mogę ściągać 2 pliki na raz z tym że po ściągnięciu zajmują po 0 bajtów, ten kod coś nie działa (IMG:style_emoticons/default/tongue.gif)


Temu że robiłem testy... musisz mi uwierzyć na słowo; linki przestały wskazywac ten skrypt ale jeśli on wysyła plik do usera to ten user nie może ściągać drugiego. Nie może on również wejść na żadną stronę na tym serwerze. Poprostu blokuje się dostęp do czegokolwiek innego co korzysta z php. Najdziwniejsze że wejścia z innego komputera działają. Wygląda na to że nie rozumiem jak działa PHP (IMG:style_emoticons/default/sad.gif) Myślałem że poszczególne wywołania skryptów są od siebie niezależne. Okazuje się że nie (IMG:style_emoticons/default/sad.gif) Może to wina apacha ?

@EDIT
OK, poprawiłem linki. Okazuje się że przeglądarka jakoś dziwnie to interpetuje. Na tej samej maszynie różne przeglądarki mogą sciągać ten sam plik. Jednak jedna przeglądarka nie może?? Dlaczego?? Coś nei tak z nagłówkami (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował Black-Berry 25.09.2010, 11:33:22
Go to the top of the page
+Quote Post
fander
post
Post #4





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


Zrób tak aby link do pliku który chcesz ściągnąć wyglądał następująco

Kod
http://62.75.147.61/bar_application/Reques/SendFile/StorageId/<id pliku>


i zobacz czy będzie ściągało poprawnie, może przeglądarka uważa że link.php?cos=cos jest tyma samym co link.php?cos=cos2

Ten post edytował fander 25.09.2010, 11:49:19
Go to the top of the page
+Quote Post
kiler129
post
Post #5





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Ja bym bardziej opiewał na zabezpieczenia serwera bo badź co bądź php wtedy wisi i jeśli zabezpieczenia są restrykcyjne to user nie może otwierać kolejnych phpków zanim tamtego nie skończy otwierać.
Go to the top of the page
+Quote Post
Black-Berry
post
Post #6





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(kiler129 @ 25.09.2010, 14:50:50 ) *
Ja bym bardziej opiewał na zabezpieczenia serwera bo badź co bądź php wtedy wisi i jeśli zabezpieczenia są restrykcyjne to user nie może otwierać kolejnych phpków zanim tamtego nie skończy otwierać.

Co masz na myśli? Jak takie ustawienia można zmienić lub sprawdzić ? Gdzie mam szukać ?

Cytat(fander @ 25.09.2010, 12:48:00 ) *
Zrób tak aby link do pliku który chcesz ściągnąć wyglądał następująco

Kod
http://62.75.147.61/bar_application/Reques/SendFile/StorageId/<id pliku>


i zobacz czy będzie ściągało poprawnie, może przeglądarka uważa że link.php?cos=cos jest tyma samym co link.php?cos=cos2


Nie bo jeśli sciągam plik to nie odpowiadają też inne subfoldery, nawet index.php ani żaden inny skrypt.
Go to the top of the page
+Quote Post
kiler129
post
Post #7





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

Ostrzeżenie: (0%)
-----


Zapewne masz Apache (którego nie znam). Musisz poszukać w google coś o cgi execute limit lub coś podobnego.
Myk polega na tym że cgi potrafi wykonywać tylko 1 żądanie na raz i często stosuje się zabezpieczenie aby jeden user nie mógł zapchać całego serwera.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 01:45