Скопируйте файл с URL на мой собственный сервер, оставьте файл на 0 Мб

Я сталкиваюсь с проблемой, и я не совсем уверен, что это правильный способ сделать это. Мне нужно скопировать файл с удаленного сервера на мой сервер с помощью php.
Я использую следующий скрипт:

public function download($file_source, $file_target) {
$rh = fopen($file_source, 'rb');
$wh = fopen($file_target, 'w+b');
if (!$rh || !$wh) {
return false;
}

while (!feof($rh)) {
if (fwrite($wh, fread($rh, 4096)) === FALSE) {
return false;
}
echo ' ';
flush();
}

fclose($rh);
fclose($wh);

return true;
}

но в итоге размер файла остается равным 0.

РЕДАКТИРОВАТЬ: Я обновляю свой вопрос, потому что есть еще некоторые вещи, которые я не понял:
Про фред я использовал 2048мб. Но это не сработало.
Я нашел скрипт выше, который использует 4096mb.

Мой вопрос: Как определить, какой объем памяти (?) Использовать, чтобы не загружать файл в любое время? Потому что этот работает на определенной машине (выделенной), но будет ли он на общем хосте, если я не смогу изменить php.ini?

еще раз спасибо

0

Решение

filesize() ожидает имя файла / путь. Вы передаете файловый дескриптор, что означает, что fileize будет FAIL и вернет логическое значение false.

Затем вы используете это ложное значение в качестве аргумента размера для своего фреда, который переводится в целое число 0. Поэтому, по сути, вы сидите и говорите php о чтении файла, 0 байт за раз.

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

while(!feof($handle)) {
$contents = fread($handle, 2048);
fwrite($f, $contents);
}

и если этот файл не слишком большой и / или ваш PHP может с этим справиться:

file_put_contents('local.mp4', file_get_contents('http://whatever/foo.mp4'));
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector