Достаточно ли php file_get_contents () для загрузки фильмов? - PullRequest
0 голосов
/ 08 января 2010

достаточно ли file_get_contents () для загрузки удаленных файлов фильмов, расположенных на сервере?

я просто думаю, что хранение больших файлов фильмов в строку вредно? в соответствии с документами php.

ИЛИ мне нужно использовать cURL? Я не знаю, CURL.

ОБНОВЛЕНИЕ: это большие файлы фильмов. около 200 МБ каждый.

Ответы [ 4 ]

3 голосов
/ 08 января 2010

file_get_contents() - проблема, потому что он собирается загрузить весь файл в память за один раз. Если у вас достаточно памяти для поддержки операции (принимая во внимание, что если это веб-сервер, у вас может быть несколько обращений, которые генерируют такое поведение одновременно, и, следовательно, каждому требуется столько памяти), то file_get_contents() должно подойти. Однако это не правильный способ сделать это - вы должны использовать библиотеку, специально предназначенную для такого рода операций. Как уже упоминалось, cURL сделает свое дело, или wget. Вам также может повезти, если вы используете fopen('http://someurl', 'r') и читаете блоки из файла, а затем выгружаете их прямо в локальный файл, открытый для привилегий записи.

2 голосов
/ 08 января 2010

Как предположил @mopoke, это может зависеть от размера файла. Для небольшого фильма этого может быть достаточно. В целом, я думаю, что cURL лучше подойдет. У вас гораздо больше гибкости, чем с file_get_contents ().

1 голос
/ 08 января 2010

Для лучшей производительности вы можете найти смысл использовать стандартную утилиту Unix, такую ​​как WGET. Вы должны быть в состоянии вызвать его с помощью system ("wget ​​...") или exec () http://www.php.net/manual/en/function.system.php

0 голосов
/ 08 января 2010

Вы можете прочитать несколько байтов за раз, используя fread ().

$src="http://somewhere/test.avi";
$dst="test.avi";
$f = fopen($src, 'rb');
$o = fopen($dst, 'wb');
while (!feof($f)) {
     if (fwrite($o, fread($f, 2048)) === FALSE) {
        return 1;
     }
}
fclose($f);
fclose($o);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...