使用PHP执行具有较长超时期限的系统命令?

时间:2012-02-27 23:55:41

标签: php zip system archive tar

我们需要在我们没有SSH访问权限的服务器上解压缩/解压缩一个非常大的存档文件。我们的另一种选择是通过PHP执行系统命令来解压缩文件。

问题是解压缩/解压缩文件需要相当长的时间。 PHP最终会在完成之前超时。

有没有办法让untar命令完全执行,无论PHP脚本是否超时?像异步执行一样?

或者,您如何暂时将PHP超时时间设置为极高,以便有足够的时间来完成解压缩文件?

3 个答案:

答案 0 :(得分:1)

来自manual

  

set_time_limit()函数和配置指令   max_execution_time仅影响脚本的执行时间   本身。花在执行之外的活动上的任何时间   使用system(),流操作等系统调用的脚本   确定最大值时不包括数据库查询等   脚本运行的时间。在Windows上不是这样   测量时间是真实的。

可能发生的事情是您的客户端(浏览器)超时。这种断开可能导致脚本中止。为了防止这种情况,你可以这样做:

ignore_user_abort(true);

然后,您需要第二个脚本,以便检查进度。一个想法是将tar的输出写入一个文件,您的第二个脚本可以检查结束,看看是否已完成。另一种方法是调用一个shell脚本,该脚本依次运行tar。该shell脚本可以检查返回代码并触摸带有结果的文件,也可以在工作时创建一个基本的锁文件。

答案 1 :(得分:0)

如果您的服务器配置无法阻止您修改这些值,则应该这样做:

set_time_limit( 0);
ini_set( 'max_execution_time', 0);

请参阅set_time_limitmax_execution_time

答案 2 :(得分:0)

如果服务器在* nix系统上运行,则nohup命令可能可用。即

nohup tar ... >outfile.txt

然后,您可以让PHP脚本扫描outfile.txt,直到操作结束