Копировать большие файлы (более 2 ГБ) в PHP - PullRequest
14 голосов
/ 03 июля 2011

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

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

Ответы [ 6 ]

20 голосов
/ 03 июля 2011

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

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
}
3 голосов
/ 04 июля 2011

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

Пример

stream_copy_to_stream(
    fopen('/path/to/input/file.txt', 'r'),
    fopen('/path/to/output/file.txt', 'w+')
);
2 голосов
/ 05 ноября 2018

Последние версии PHP копируют файлы с порциями, поэтому сегодня вы можете безопасно использовать функцию php copy()

1 голос
/ 03 июля 2011

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

1 голос
/ 03 июля 2011

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

$srcFile = escapeshellarg($pathToSrcFile);
$trgFile = escapeshellarg($pathToTrgFile);

exec("cp $srcFile $trgFile");
0 голосов
/ 16 марта 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...