PHP max_execution_time是如何工作的?

16

我对php.ini中设置的最大执行时间有一些疑问。

假设max_execution_time为3分钟,考虑以下情况:

  1. 我有一个进程将在2分钟内结束。

    但它在一个循环中,并且应该工作5次。所以总共需要10分钟。

    脚本会正常运行而不显示超时错误吗?为什么?

  2. PHP函数只打印数据,并且只需要2分钟。

    但是查询执行需要5分钟。

    脚本会无错误地运行吗?为什么?

  3. 我的单个php进程需要5分钟。

    但我从命令行调用这个脚本。

    它会正常工作吗?为什么?

  4. 内存允许和执行时间有什么关系?

    如果脚本的执行时间非常长

    但返回的数据量很小

    它会影响内存吗?为什么?

我想了解内部发生了什么,这就是我提出这些问题的原因。

我不想只增加时间限制和内存限制。

1个回答

35

max_execution_time规则相对简单。

  • 执行时间从文件被解释时开始计算。请求准备,上传文件准备,Web服务器处理等操作之前所需的时间不计入执行时间。

  • 执行时间是脚本运行的总时间,包括数据库查询,无论它是否在循环中运行。因此,在第一种和第二种情况下,脚本将因max_execution_time定义的行为而终止超时错误。

  • 使用exec()等外部系统调用不会计入执行时间,但在Windows上除外。(来源)这意味着您可以运行需要比max_execution_time更长时间的外部程序。

  • 从命令行调用时,max_execution_time默认为0。(来源)因此,在第三种情况下,您的脚本应该可以无错误地运行。

  • 执行时间和内存使用量没有任何关系。脚本可以运行数小时而不达到内存限制。如果达到内存限制,则通常是由于循环中未取消设置变量或未正确释放以前预留的内存。


2
这部分关于数据库请求的说法是部分错误的,根据我的个人测试以及这个答案这个评论 - Laurent W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接