Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Неверное отображение размера файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: при скачке при использовании временных сылок
spaceair
Отправлено: 06 Января, 2012 - 21:16:23
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Добрый день.
Не могу разобраться. НА денвере все работает, а на хосте не хочет.
у меня есть два вида файлов до 50мб(mp3). и от 500мб(mpg)
файлы размером до 50мб загружаются, без проблем.
файл свыше 500мб определяет неверный размер файла 213байт(214байт). И скачивает сами понимаете не известно что.
Проверял отключая вывод хедов размер определяется(ф-цией filesize) для больших фалов Верно.
В чем может быть причина?
настройки хоста
http://test-ul9-apache-aux2[dot]1gb[dot]ua/phpinfo.php

сам скрипт
PHP:
скопировать код в буфер обмена
  1.  
  2. function download() {
  3.  
  4.   // если не передан уникальный ID файла - значит пользователь попал сюда по ошибке
  5.   if( !isset( $_GET['id'] ) ) {
  6.     header( 'Location: '.$_SERVER['PHP_SELF'].'?action=fileslist' );
  7.     die();
  8.   }
  9.   $id = (int)$_GET['id'];
  10.  
  11.   if( !isset( $_GET['code'] ) )  {
  12.     header( 'Location: '.$_SERVER['PHP_SELF'].'?action=fileslist' );
  13.     die();
  14.   }
  15.  
  16.   if( !preg_match( '#[a-f0-9]{32}#', $_GET['code'] ) )  {
  17.    header ( 'HTTP/1.1 404 Not Found' );
  18.     die();
  19.   }
  20.  
  21.   $query = "SELECT 1 FROM files_down WHERE file_id=".$id."
  22.            AND uniq_id='".$_GET['code']."' AND puttime > (NOW() - INTERVAL 12 HOUR)";
  23.   $res = mysql_query( $query );
  24.   if( mysql_num_rows( $res ) == 0 ) {
  25.   header ( 'HTTP/1.1 404 Not Found' );
  26.     die();  
  27.   }
  28.  
  29.   $query = 'SELECT filename, mimetype FROM `files` WHERE id='.$id;
  30.   $res = mysql_query( $query );
  31.   if( mysql_num_rows( $res ) == 0 ) {
  32.    header ( 'HTTP/1.1 404 Not Found' );
  33.     die();  
  34.   }
  35.   list( $filename, $mimetype ) = mysql_fetch_row( $res );
  36.  
  37.   // если файла нет
  38.   if( !file_exists( './files/'.$filename ) ) {
  39.   header ( 'HTTP/1.1 404 Not Found' );
  40.     die();
  41.   }
  42.  
  43.   // получаем размер файла
  44.   $fsize = filesize( './files/'.$filename );


тут я прирываю выполнение скрипа и вывожу
echo $fsize; //РАЗМЕР СОВПАДАЕТ С ДЕЙСТВИТЕЛЬНОСТЬЮ.

PHP:
скопировать код в буфер обмена
  1. header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
  2.   header( 'Last-Modified: '.$ftime );
  3.    header( 'Content-Length: '.($fsize-$range) );
  4.   header( 'Accept-Ranges: bytes' );  
  5.    header( 'Content-Range: bytes '.$range.'-'.($fsize - 1).'/'.$fsize );
  6.  
  7.   switch( $mimetype ) {
  8.     case 'pdf' : $ctype = 'application/pdf'; break;
  9.     case 'zip' : $ctype = 'application/zip'; break;
  10.     case 'doc' : $ctype = 'application/msword'; break;
  11.     case 'xls' : $ctype = 'application/vnd.ms-excel'; break;
  12.     case 'gif' : $ctype = 'image/gif'; break;
  13.     case 'png' : $ctype = 'image/png'; break;
  14.     case 'jpeg': $ctype = 'image/jpg'; break;
  15.     case 'jpg' : $ctype = 'image/jpg'; break;
  16.     case 'mp3' : $ctype = 'audio/mpeg'; break;
  17.     case 'wav' : $ctype = 'audio/x-wav'; break;
  18.     case 'mpeg': $ctype = 'video/mpeg'; break;
  19.     case 'mpg' : $ctype = 'video/mpeg'; break; 
  20.     case 'mpe' : $ctype = 'video/mpeg'; break;
  21.     case 'mov' : $ctype = 'video/quicktime'; break;
  22.     case 'avi' : $ctype = 'video/x-msvideo'; break;
  23.     default    : $ctype = 'application/octet-stream';
  24.   }
  25.   header( 'Content-Type: '.$ctype );
  26.   readfile( './files/'.$filename );
  27.  
  28.  
  29.  
  30.   fclose( $handle );
  31.  
  32. }


Заранее благодарен.
 
 Top
PATCH
Отправлено: 06 Января, 2012 - 21:20:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




ограничение в заливке файлов (ограничение в весе файла если точнее) на хостинге. или же меньшее время на выполнения php скрипта стоит (поумолчанию 30сек вроде)

(Отредактировано автором: 06 Января, 2012 - 21:23:33)

 
 Top
spaceair
Отправлено: 06 Января, 2012 - 22:22:16
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




или же меньшее время на выполнения php скрипта
это значение устанавливает время исполнения скрипта max_execution_time?


<br />
<b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1448771585 bytes) in <b>/home/virtwww/w_flexyshape-com_ed79128e/http/cabinet/download.php</b> on line <b>200</b><br />

немного пшуршав, что возможно проблема и в memory_limit у меня 128мб на хосте и на денвере НО БЛИН ДА ДЕНВЕРЕ РАБОТАЕТ

У меня фаил максимальный 1500мб хостер против такого увеличения memory_limit-а

В ЧЕМ еще может быть проблема
Улыбка

Но я в наглую увеличил, и заметил что сначала ФАЙЛ загружается на сервере непосредственно автономно а потом получаем 504 Gateway Time-out
чем это вызвано 100% настроки php.ini но Что именно может кто знает?!?!

(Отредактировано автором: 06 Января, 2012 - 22:25:24)

 
 Top
DeepVarvar Супермодератор
Отправлено: 06 Января, 2012 - 22:31:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




set_time_limit(0);
И кстати в 32-битной системе апач/пхп не может отдавать/принимать файлы больше какой-то величины (толи 1024м толи 2048м).
Соответственно у вас может дома 2 яйца, а на хостинге как пить дать одно. )))
 
 Top
spaceair
Отправлено: 06 Января, 2012 - 23:18:10
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




ну следующее что я понял это при попытке исполнения функции на сервере readfile( './files/'.$filename );

мы имеем ошибку
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1448771585 bytes) in /home/virtwww/w_flexyshape-com_e d79128e/http/cabinet/download.ph p on line 173
(Добавление)


Ну у кого какие идеи сделать временные ссылки на файлы больших размеров! Улыбка

(Отредактировано автором: 07 Января, 2012 - 00:03:02)

 
 Top
PATCH
Отправлено: 07 Января, 2012 - 00:14:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




файл для скачки передаеш? поболуйся с Header и mime-type
 
 Top
evgenijj
Отправлено: 07 Января, 2012 - 00:24:49
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Думаю, настройки хостинга
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1448771585 bytes) in /home/virtwww/w_flexyshape-com_e d79128e/http/cabinet/download.ph p on line 173
Фатальная ошибка: доступный размер памяти 268435456 (была попытка доступа к памяти объемом 1448771585) в скрипте ... в строке ...
Скорее всего, проблема в функции readfile() -- она пытается читать слишком большой объем за раз -- попробуй написать аналог, который будет читать и отдавать файл по небольшими кусочкам, не нарушая ограничения хостинга.

(Отредактировано автором: 07 Января, 2012 - 00:42:08)

 
 Top
spaceair
Отправлено: 07 Января, 2012 - 00:44:01
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




evgenijj пишет:
Думаю, настройки хостинга
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1448771585 bytes) in /home/virtwww/w_flexyshape-com_e d79128e/http/cabinet/download.ph p on line 173
Фатальная ошибка: доступный размер памяти 268435456 (была попытка доступа к памяти объемом 1448771585) в скрипте ... в строке ...
Скорее всего, проблема в функции readfile() -- она пытается читать слишком большой объем за раз -- попробуй написать аналог, который будет читать и отдавать файл по небольшими кусочкам, не нарушая ограничения хостинга.


а примеры такой передачи есть в наличии? заранее спасибо.
(Добавление)
В этом случае
ini_set('memory_limit', '1449M');
ini_set('max_execution_time', '0');
set_time_limit(0);
сервер ужасно тормозит, закачка очень медленная. Так каши не сваришь. Но работает. Сайт правда полностью лежит. Я представляю когда хотябы 5ть пользователей начнут качать таким способом что произойдет)))) Улыбка
 
 Top
evgenijj
Отправлено: 07 Января, 2012 - 00:59:45
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




http://blog[dot]webmasterschool[dot]ru/php/247/
PHP:
скопировать код в буфер обмена
  1. // скорость скачивания - 128КБ в сек.
  2. $speed = 1024*128;
  3. // имя файла
  4. $filename = 'doc.pdf';
  5. // открываем файл на чтение
  6. $f = fopen($filename, 'rb');
  7. while( !feof($f) ) {
  8.   echo fread($f, $speed);
  9.   flush();
  10.   sleep(1); // засыпаем
  11. }
  12. // закрываем файл
  13. fclose($f);

(Отредактировано автором: 07 Января, 2012 - 01:00:40)

 
 Top
spaceair
Отправлено: 07 Января, 2012 - 01:01:39
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




evgenijj пишет:
http://blog[dot]webmasterschool[dot]ru/php/247/
PHP:
скопировать код в буфер обмена
  1. // скорость скачивания - 128КБ в сек.
  2. $speed = 1024*128;
  3. // имя файла
  4. $filename = 'doc.pdf';
  5. // открываем файл на чтение
  6. $f = fopen($filename, 'rb');
  7. while( !feof($f) ) {
  8.   echo fread($f, $speed);
  9.   flush();
  10.   sleep(1); // засыпаем
  11. }
  12. // закрываем файл
  13. fclose($f);


спасибо завтра опробую!!!
 
 Top
spaceair
Отправлено: 06 Февраля, 2012 - 21:41:15
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Ха-ха спасибо все работает!!!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB