【发布时间】:2020-01-05 09:42:56
【问题描述】:
我正在编写的 WordPress 插件遇到了最奇怪的问题。我已经在插件上工作了几个星期,才出现这个问题。
在对执行顺序进行故障排除时,我决定注释掉一些代码。但是,当我激活插件时,我收到一个致命错误,表明 Apache 仍在尝试执行代码。
这是来自includes/WPSCAPLogger/WPSCAPLogger.php的相关函数:
function logMessage($logType, $message) {
try {
global $tablePrefix;
global $wpdb;
$tablePrefix = $wpdb->prefix;
$tableName = $tablePrefix . 'wpscap_log_category';
$result = $wpdb->get_row( "SELECT id FROM {$tableName} WHERE log_category LIKE '{$logType}'", OBJECT );
$logTypeID = $result->id;
$tableName = $tablePrefix . 'wpscap_log';
$data = array('log_category_id' => $logTypeID, 'log_entry' => $message);
$wpdb->insert($tableName, $data);
} catch (Exception $e) {
die('Critical error with logger.');
// TO DO: Handle this better -- or default to PHP error log?
}
}
我注释了 try 块中的所有内容,即第 4 行到第 17 行。然后我在应用程序中收到以下错误:
[表 'bsd_dev.wp_wpscap_log_category' 不存在] SELECT id FROM wp_wpscap_log_category WHERE log_category LIKE 'Error'
注意:试图获取非对象的属性“id” C:\xampp\htdocs\battlestardigital\wp-content\plugins\stripe-connect-auto-provision\includes\WPSCAPLogger\WPSCAPLogger.php 第 12 行 WordPress 数据库错误:[Table 'bsd_dev.wp_wpscap_log' 不存在] 显示来自
wp_wpscap_log的完整列WordPress 数据库错误:[Table 'bsd_dev.wp_wpscap_log_category' 不存在] SELECT id FROM wp_wpscap_log_category WHERE log_category LIKE '错误'
注意:试图获取非对象的属性“id” C:\xampp\htdocs\battlestardigital\wp-content\plugins\stripe-connect-auto-provision\includes\WPSCAPLogger\WPSCAPLogger.php 第 12 行 WordPress 数据库错误:[Table 'bsd_dev.wp_wpscap_log' 不存在] 显示来自
wp_wpscap_log的完整列
我觉得这很奇怪,所以我删除了插件,确保将这些行注释掉,重新启动 XAMPP,然后重新安装。同样的错误。然后我重新启动了我的机器,仍然出现同样的错误。
最后,我在 WordPress 内部打开了文件并删除了这些行,同时修复了 die 行。整个函数现在看起来像这样:
function logMessage($logType, $message) {
try {
} catch (Exception $e) {
error_log($e, 0);
}
}
我还在代码编辑器中打开了 WordPress,并在整个代码库中搜索“wpscap_log_category”。正如预期的那样,我在 debug.log 和创建表的类中找到了它。
然后,我再次尝试激活插件。该插件实际上确实创建了表,但我仍然收到相同的错误。
进行故障排除似乎是一件很奇怪的事情!有什么建议吗?
编辑我还清除了 Chrome 中的缓存,但这并没有帮助。我在 Edge 中尝试过;同样的结果。
EDIT #2 我一直无法解决这个问题。我在 XAMPP 中安装了一个新的测试站点并上传了插件,它工作得很好。尽管已多次清除缓存,但显然存在缓存问题。奇怪。
【问题讨论】: