Копирование больших файлов (более 2 ГБ) в PHP

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

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

5 ответов


это должно помочь.

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(
    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 " в исходной системе и отправить большой файл в другую систему легко.