Скопируйте большие файлы (более 2 ГБ) в PHP

Мне нужно скопировать большой файл (6 ГБ) через PHP. Как я могу это сделать? Функция Copy() не может этого сделать.

Я использую PHP 5.3 в Windows 32/64.

Solutions Collecting From Web of "Скопируйте большие файлы (более 2 ГБ) в PHP"

Это должно сделать это.

 function chunked_copy($from, $to) { # 1 meg at a time, you can adjust this. $buffer_size = 1048576; $ret = 0; $fin = fopen($from, "rb"); $fout = fopen($to, "w"); while(!feof($fin)) { $ret += fwrite($fout, fread($fin, $buffer_size)); } fclose($fin); fclose($fout); return $ret; # return number of bytes written } 

Если copy не работает, вы можете попробовать

  • stream_copy_to_stream – копирует данные из одного потока в другой

пример

 stream_copy_to_stream( fopen('/path/to/input/file.txt', 'r'), fopen('/path/to/output/file.txt', 'w+') ); 

Вы можете использовать exec() если это Linux-машина.

 $srcFile = escapeshellarg($pathToSrcFile); $trgFile = escapeshellarg($pathToTrgFile); exec("cp $srcFile $trgFile"); 

Я бы скопировал его X байт на X байт (несколько мегаграмм на каждую итерацию).
X будет самым оптимизированным размером, который зависит от вашей машины.
И я бы сделал это не через веб-сервер, а как автономный скрипт, запустив cron или один раз на него (cli).

Если вы хотите скопировать файлы с одного сервера на другой, и у вас есть доступ к ftp на обоих из них, вы можете просто использовать команду ftp 'put' в исходной системе и легко отправить большой файл в другую систему.