我们需要在我们没有SSH访问权限的服务器上解压缩/解压缩一个非常大的存档文件。我们的另一种选择是通过PHP执行系统命令来解压缩文件。
问题是解压缩/解压缩文件需要相当长的时间。 PHP最终会在完成之前超时。
有没有办法让untar命令完全执行,无论PHP脚本是否超时?像异步执行一样?
或者,您如何暂时将PHP超时时间设置为极高,以便有足够的时间来完成解压缩文件?
答案 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);
答案 2 :(得分:0)
如果服务器在* nix系统上运行,则nohup命令可能可用。即
nohup tar ... >outfile.txt
然后,您可以让PHP脚本扫描outfile.txt,直到操作结束