PHP fwrite()块到一个大文件/ 504网关超时

时间:2014-03-05 13:44:24

标签: php file-upload

我正在使用上传工具将大文件(1GB - 4GB)上传到FTP服务器。我使用HTML5将上传的文件切成1MB块,然后将每个块上传到临时文件夹。一旦上传了每个块,PHP脚本就会从这些块中创建文件:

if (($fp = fopen(UPLOAD_DIR.$fileName, 'w')) !== false) {
    for ($i = 1; $i <= $totalFiles; $i++) {
        fwrite($fp, file_get_contents($tempDir.'/'.$fileName.'.part'.$i));               
    }
    fclose($fp);        
}

一切适用于较小的文件大小(使用1GB左右的文件进行测试 - 1.5GB),但只要我上传非常大的文件(例如3GB),我的PHP脚本就会以504网关超时停止。我的php.ini中的'max_execution_time'设置为90.在这种情况下有没有办法避免504超时或者是一种加速创建文件的脚本的方法?我可以尝试更改'max_execution_time',但这似乎不是完美的解决方案。有什么建议吗?

编辑:脚本在Linux系统上运行

1 个答案:

答案 0 :(得分:1)

我不知道您的服务器正在运行什么操作系统,但如果它是linux,您可以直接从命令行使用例如exec进行尝试。

类似的东西:

exec('cat ' . $tempDir . '/' . $fileName . '.part* > ' . UPLOAD_DIR . $fileName);

如果您不控制变量,则可能需要对变量使用escapeshellcmd()

如果.part*没有为您提供正确的订单,您还可以在循环中生成部分文件名列表。