使用API将大文件上传到Google Drive时PHP执行超时


PHP execution timeout while uploading a large file to Google Drive with API

我想通过PHP将本地文件上传到Google Drive。如果我上传一个小文件(<5MB),一切都正常。如果我想上传一个更大的文件,我会收到一个"致命错误:超过了30秒的最长执行时间"。我可以在php.ini中将max_execution_time设置为一个非常高的值,但这似乎是一个糟糕的解决方案。如果我使用"set_time_limit(seconds);",我无法同时上传更多文件(我不知道为什么)。

因此,我的问题是如何上传一个大文件而不将php.ini更改为糟糕的执行时间。在PHP中该如何解决?我只想使用一个简单的CURL-cli命令,但它不适用于Google Drive,因为CURL不支持Oath。

set_time_limit设置max_execution_time是正确的解决方案。如果脚本上载文件的时间超过30秒,则将运行超过30秒。

set_time_limit(600); //File upload should not take longer than 10 minutes
do_your_file_upload();
set_time_limit(30); //Change it back to 30 seconds for further processing

我无法同时上传更多文件

你能具体说明你的意思吗?

如果在另一个运行时无法访问您的PHP脚本,通常是因为PHP会话管理。当您使用session_start PHP启动会话时(创建并)打开会话文件并将其锁定以进行写入。该文件将被锁定,直到脚本调用session_write_close或脚本执行结束。要同时处理两个或多个会话,必须调用session_write_close:

session_start();
//do stuff
session_write_close();
set_time_limit(600); //File upload schould not take longer than 10 minutes
do_your_file_upload();
set_time_limit(30); //Change it back to 30 seconds for further processing
session_start();
//do more stuff
session_write_close();

使用简单的PHP代码上传一个非常大的文件是个坏主意。

您应该使用Javascript上传大文件,因为它使用的是AJAX方法。此外,它还允许您显示进度条。

我做了一点调查。以下是使用jQuery的一些不错的脚本:http://designscrazed.org/html5-jquery-file-upload-scripts/

或者另一个不使用jQuery的脚本(如果它是一个好的脚本,我不这么认为):http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html

祝你好运!