|
Помогите плз с PHP, какой то траб с размерам файла: | ☑ | ||
---|---|---|---|---|
0
megabax
12.10.12
✎
09:47
|
Добрый день. Написал прогу, которая создате временные ссылки на скачивания файлов, ссылка типа такой:
http://www.easyprog.ru/shop/download.php?uid=всякие шифры и буквы если файл маленький, она его скачивает нормально. А вот на файлах больших (пробовал 90 мб, 50 мб, 25 мб, 10 мб) скачивает только первые 1011, естетсвенно, запортив сам файл Вот фрагмент кода скачивания файла: $ctype = 'application/octet-stream'; $filename="имя файла"; $handle = @fopen($filename, 'rb'); $fsize = filesize($filename); $ftime = date( 'D, d M Y H:i:s T', filemtime($filename ) ); $range = 0; header( 'Content-Type: '.$ctype ); header( 'Content-Disposition: attachment; filename="'.$filename.'"' ); header( 'Last-Modified: '.$ftime ); header( 'Content-Length: '.($fsize-$range) ); header( 'Accept-Ranges: bytes' ); header( 'Content-Range: bytes '.$range.'-'.($fsize - 1).'/'.$fsize ); readfile($filename); fclose($handle); Подскажите плз, что я неправильно сделал? |
|||
1
BigHarry
12.10.12
✎
13:09
|
Я бы еще добавил:
header('Content-Transfer-Encoding: binary') И проверил бы правильность величин, которые идут в заголовках header( 'Content-Length: '.($fsize-$range) header( 'Content-Range: bytes '.$range.'-'.($fsize - 1).'/'.$fsize ) |
|||
2
ДайтеДайте Сказать
12.10.12
✎
13:14
|
(0) readfile($filename);
|
|||
3
megabax
12.10.12
✎
15:05
|
1, сделал временно вот так:
$ctype = 'application/octet-stream'; $filename="имя файла"; //$filename="1.pdf"; $handle = @fopen($filename, 'rb'); $fsize = filesize($filename); $ftime = date( 'D, d M Y H:i:s T', filemtime($filename ) ); $range = 0; echo( 'Content-Length: '.($fsize-$range)."<br>" ); echo( 'Content-Range: bytes '.$range.'-'.($fsize - 1).'/'.$fsize ); /*header( 'Content-Type: '.$ctype ); //header( 'Content-Transfer-Encoding: binary') header( 'Content-Disposition: attachment; filename="'.$filename.'"' ); header( 'Last-Modified: '.$ftime ); header( 'Content-Length: '.($fsize-$range) ); header( 'Accept-Ranges: bytes' ); header( 'Content-Range: bytes '.$range.'-'.($fsize - 1).'/'.$fsize ); readfile($filename); fclose($handle);*/ выдало: "Warning: filesize() [function.filesize]: stat failed for ... ... Content-Length: 0 Content-Range: bytes 0--1/" что то видимо filesize глючит на больших файлах, не подскажите альтернатитву ??? |
|||
4
BigHarry
12.10.12
✎
15:26
|
Может дело во времени жизни скрипта, он прерывается по max_execution_time и не успевает большой файл отдать?
|
|||
5
megabax
12.10.12
✎
15:30
|
4, вообще то скрипт сразу начинает качать файл и сразу же заканчивает
но ежели и так, тогда почему filesize() возырвщает нуль и интерпертатор варинингутеся на эту функцию? |
|||
6
BigHarry
12.10.12
✎
15:39
|
filesize использует кэш, если у вас имена временных файлов совпадают - может быть трабл. Попробуй еще filesize вызвать до открытия файла.
|
|||
7
megabax
12.10.12
✎
15:53
|
6, попробовал, не помогло.
И еще интересный момент. У меня файл назывался Quik и Metatrader 1_2.part01.rar, и функция filesize на него материлась (warning). Поменял имя файла сделал его StockBots1Video.rar, длина 90 метров. Теперь функция filesize возвращает нормально, но файл все равно не читается нормально, в диалоге открытия показывает, что его длина всего 203 байт. |
|||
8
megabax
12.10.12
✎
15:56
|
Вот еще интересно. Сделал файл 1.rar весом 10 метров (Quik и Metatrader 1_2.part01.rar переименовал в 1.rar), он его нормлаьно прожевал). Как то старнно получается....
|
|||
9
BigHarry
12.10.12
✎
16:14
|
На юниксо-линуксовых ФС регистр букв в названии файла играет роль, может поэтому функции ругаюццо...
|
|||
10
megabax
12.10.12
✎
16:27
|
9, дык я вроде как имя файла копировал вставил, не ручками набирал...
Может, дело в точке в имени файла? Кстати, я попробовал сделать файл весом 50 метров, прожевало, а вот 90 метров уже почему то не хочет |
|||
11
BigHarry
12.10.12
✎
16:28
|
Может что-то в логах php или вэб-сервера имеется?
|
|||
12
megabax
12.10.12
✎
16:37
|
ХЗ, попробую уточнить в техподдрежке. Хотя, проблему кажется решил другим путем: разбил файл на два раром, по 50 скиптр вроде прожевывает, если вместо Quik и Metatrader 1_2.part01.rar поставить какое то нормальное имя, например 1.rar. Буде значит две ссылки на скачивание
|
|||
13
raykom
12.10.12
✎
21:25
|
(0)В панели управления хостингом в настройках модуля ПХП
upload_max_filesize увелич до необходимого значения. Или попроси хостера. |
|||
14
megabax
12.10.12
✎
21:51
|
13, спасибо, попробую
|
|||
15
BigHarry
12.10.12
✎
22:06
|
upload_max_filesize это для передачи данных в сторону сервера, на отдачу не влияет.
|
|||
16
Asmody
12.10.12
✎
22:13
|
(10) пробелы и прочую фигню в именах файлов экранировать надо
|
|||
17
Asmody
12.10.12
✎
22:14
|
нафиг вообще статику пэхэпой отдавать — вот что мне не понятно
|
|||
18
BigHarry
12.10.12
✎
22:19
|
(17) У него не статика, а "временные ссылки для скачивания" :)
|
|||
19
Asmody
12.10.12
✎
23:25
|
||||
20
BigHarry
13.10.12
✎
00:14
|
(19) На простом хостинге такие фокусы, к сожалению, не прокатят...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |