我想在centos(/usr/bin/php file.php
)中运行一个php脚本,它需要很长时间才能执行,并且在执行过程中,它停止运行,并且没有给我任何错误。而且我确信我的php代码中绝对没有错误(我以多种方式测试了它),我认为这是执行时间的问题。
我的问题是:
- 我的服务器是否有可能出现超时错误,导致脚本无法执行?
- 如果是,如何设置服务器在更长的时间内给出超时错误?
谢谢。
答案1
从命令行或 shell 脚本、cron 作业等执行的任何 PHP 脚本都没有超时。
当您从 CLI 调用 PHP 时,您甚至无法故意设置最大执行时间。你可以打电话set_time_limit(n)
,但这没有效果。
例如,如果 max_execution_time 影响 CLI,则以下脚本不应打印“done”,但它会打印:
<?php
set_time_limit(5);
print ini_get('max_execution_time') . "\n";
sleep(10);
print "done.\n";
您可能遇到了未报告的错误。确保启用完整的错误报告:
error_reporting(E_ALL);
答案2
如果您确定脚本中没有错误并且正在从命令行运行它,则您可以执行以下操作:
- 测试您关于超时的理论:编写一个虚拟脚本,该脚本在很长一段时间内不执行任何操作(如嵌套循环),它会在完成之前停止吗?
- 分析代码的内存要求:https://github.com/arnaud-lb/php-memory-profiler。
- 尝试运行相同的脚本:虽然不太可能,但环境可能存在问题。
如果没有错误并且所需的资源可用,那么您没有理由不能运行脚本。