【问题标题】:How do I tell why a php script has failed?如何判断一个 php 脚本失败的原因?
【发布时间】:2013-09-09 22:16:39
【问题描述】:

我正在运行一个 Wordpress 网站,我正在将帖子从非 WP 网站迁移到一个 Wordpress 网站。我要迁移的网站有大约 5000 个帖子,所以我创建了一个工具,我使用 wp_schedule_single_event() 从管理区域启动。该事件触发并开始正常,并且在获取帖子或插入帖子时没有问题。

但是,在大约 12 分钟左右后,该过程会失败并且不会报告任何致命错误。有人可以告诉我如何调试该进程,因为它在 wp-cron 下运行?我已将以下内容添加到我的脚本中,但它不会报告警告或错误:

set_time_limit(0); // no time limit
error_reporting(-1); // log everything
ini_set('log_errors', true);
ini_set('memory_limit', -1); // no memory limit
ignore_user_abort(true);

我知道其他人也问过类似的问题,但他们的解决方案对我没有帮助。

【问题讨论】:

  • 流程是什么?工具是什么?上面的代码中没有任何东西可以帮助您。
  • 进程是一个 php 脚本,通过 wp_schedule_single_event 调用向 Wordpress 注册。我添加了上面的代码,这样您就不会指出像超时和内存使用这样的明显问题,因为我已经解决了这些问题。如果没有发布我的所有代码,这个问题仍然有效——某些事情正在终止一个长期运行的 WP 计划作业;如何调试呢?
  • 您是否考虑过您的流程可能有问题?请张贴代码。

标签: php wordpress scheduled-tasks


【解决方案1】:

这可能是相当多的问题,超时,数据库异常等等。您可以使用 try/catch 块。 try 块将保存您的代码,而 catch 块将用于在引发异常时处理异常。

以下示例:

try {
    // your code goes here
} catch (Exception $e) {
    // log/print error
    print $e->getMessage();
}

指定为 catch 参数的 Exception 类是基类,因此它将捕获每个异常,这可能是您在您的情况下想要的。

更多关于异常:http://php.net/manual/en/language.exceptions.php

【讨论】:

  • 感谢 Rijndael -- 我正在使用 try/catch 块,但没有捕获到异常。出于好奇,您上面列出的任何内容不会触发 php 日志中的某些内容吗?
  • 记录了致命错误,并不总是记录异常。如果您确实想记录它们,请使用 error_log()。由于您使用的是 WP,因此很可能 WP 设置了一些全局标志,这会阻止生成日志。快速搜索发现 define('WP_DEBUG', true);并定义('SCRIPT_DEBUG', true); - 我在这里找到它们:codex.wordpress.org/Editing_wp-config.php - 我不知道这些标志的范围,但对于生产来说,向用户显示错误消息是一个非常糟糕的主意,所以要小心。有关更多信息,请参阅此 URI:
  • 谢谢 Rijndael -- 我会试试的。
  • 我添加了,但日志中没有弹出任何内容。由于这是一项计划任务,因此它们实际上并没有做太多事情,因为它们只是在您在页面上时显示错误。不过,感谢您调查它。也许我会创建一个新线程并发布我的代码。
  • 如果您正在运行计划,则使用 error_log($e->getMessage(), 0);在 try/catch 块的 catch 部分。这会将任何异常记录到默认日志中,通常是 apache 日志。
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多