我有一个 WordPress 插件,可以处理所有帖子,所以需要很长时间。
为了防止超时,我在防止 PHP 中大请求期间超时
中使用了 set_time_limit(0)但这不起作用,过了一段时间,我仍然收到以下错误:
504 Gateway Time-out
nginx/1.25.3
我们的服务器配置是 Apache + Nginx + Cloudflare
谢谢
更新
根据 volkerschulz 的建议,我计划使用 CLI 或 WP_CLI 来执行我的脚本。
目前我的脚本是这样调用的:
https://www.sample.com/blogs/wp-admin/admin-post.php?action=dnip_myplugins&nocache=123
所以对于我的情况,我应该使用如下所示的 CLI:
PHP /path/to/script/admin-post.php?action=dnip_myplugins&nocache=123
或使用 WP-CLI:
I cannot find a command that can execute a script. The only one related is wp plugin, but it can only install/activate/deactive plugins
如上所述,(长时间运行的)维护脚本不应通过 Web 服务器执行,而应直接通过 shell 执行。最简单的方法可能是创建一个新的 PHP 文件(最好在 Web 根目录之上),其中包含以下内容:
<?php
define('WP_USE_THEMES', false);
require_once '/path/to/wp-load.php';
//Call whatever function from WP core or plugin to do the maintenance task
myCustomPluginClass::amazingMaintenanceStuff();
然后通过 CLI 调用 that_script.php (
php that_script.php
)。通过这种方式,您还可以轻松地仅为该脚本配置超时和内存限制。
更好(但稍微复杂一点)是创建自定义 WP-CLI 命令或添加一个 WP cron 作业,该作业不能由用户执行,只能由 WP-CLI 通过系统的 crontab 执行。