2012-06-09 2 views
4

Хорошо, у меня есть проблема, что я надеюсь, что вы можете помочь мне исправить.PHP Загрузка огромного файла видео (500 МБ) с cURL

Я запускаю сервер, на котором хранятся видеофайлы, которые очень большие, до 650 МБ. Мне нужен пользователь, чтобы иметь возможность запросить эту страницу и загрузить файл на свою машину. Я пробовал все, но простой запрос readfile() зависает около 90 секунд перед тем, как уйти, и дает мне «код ошибки с ошибкой без данных», скриптовый скрипт readfile, который я нашел на нескольких сайтах, даже не запускает загрузку , FTP через PHP-решения не делали ничего, кроме как давать мне ошибки, когда я пытался получить файл, и единственные решения cURL, которые я нашел, просто создают другой файл на моем сервере. Это не то, что мне нужно.

Чтобы было ясно мне нужен пользователь, чтобы иметь возможность скачать файл, чтобы их компьютер и не на сервер.

Я не знаю, является ли этот код мусором или ему просто нужна настройка или две, но любая помощь приветствуется!

<?php 

$fn = $_GET["fn"]; 

echo $fn."<br/>"; 

$url = $fn; 
$path = "dl".$fn; 

$fp = fopen($path, 'w'); 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_FILE, $fp); 

$data = curl_exec($ch); 

curl_close($ch); 
fclose($fp); 

?> 
+0

ftp предназначен для передачи файлов http не так много –

+0

У вас есть решение, использующее ftp? Я тоже пробовал, но каждый раз, когда я пытался подключиться и загружать через ftp (используя PHP), страница ничего не делала, но давала мне ошибку. – David

+0

настройте ftp-сервер на своем сервере, введите учетные данные пользователя. no php required –

ответ

4

Я бы не рекомендовал подавать большие двоичные файлы с использованием PHP или любой другой технологии написания сценариев. Они никогда не разрабатывают для этого - вы можете использовать apache, nginx или любой стандартный HTTP-сервер, который у вас есть на задней панели. Если вам все еще нужно использовать PHP, то вам, вероятно, стоит проверить readfile_chunked.

http://php.net/readfile#48683 и вот отличный учебник. http://teddy.fr/blog/how-serve-big-files-through-php

удачи.

+1

Это некоторые воды, в которые я никогда раньше не вошел. У меня нет реальной * необходимости * для использования PHP, но до этого момента это был единственный способ, которым я знал, загружать файлы. Можете ли вы дать мне некоторое руководство о том, как загрузить файл через Apache? – David

+0

Я бы не рекомендовал Apache, его большой, но немного сложный для конфигурации, nginx - более eassier, heres пример, http://kbeezie.com/view/nginx-configuration-examples/ nginx или apache сидят у основания вашего Tech Pack вместе с вашим хранилищем данных, который может быть вашей файловой системой или mysql, все, что они делают, - это материал, в большинстве случаев данные поступают из php, используя либо FCGI (то есть динамический HTML), либо просто статические файлы (изображения, видеофайлы), большинство проектов определяют папку со всем их статическим контентом и говорят nginx, чтобы обслуживать ее, не переходя через PHP, использовать PHP для отслеживания имен и файлов файлов для общих ссылок. –

+0

Если вам все еще нужно использовать Apache, потому что у вас есть стек LAMP или WAMP, просто добавьте корень документа туда, где у вас есть все файлы ... DocumentRoot/srv/appname/web Запрет на передачу, разрешить Разрешить все

0

readfile() does not buffer. Однако сам php может буферизировать. Выключить буферизацию

while (ob_get_level()) 
    ob_end_clean(); 
readfile($file); 

Ваш веб-сервер может быть буферным. Выключите это тоже. Как вы это делаете, зависит от веб-сервера и почему его буферизация.

0

Я вижу две проблемы, которые могут произойти:

  • Первый: Ваш веб-сервер может быть закрыт соединение по тайм-ауту. вы должны посмотреть конфигурацию веб-сервера.
  • Второй: таймаут с завитом. Рекомендую посмотреть сообщение this.
Смежные вопросы