【问题标题】:PHP Fatal Error - Cannot unset string offsetsPHP 致命错误 - 无法取消设置字符串偏移量
【发布时间】:2017-08-07 12:11:52
【问题描述】:

我正在尝试修复在 Google App Engine 上运行的 WP Plugin Contact Form 7 的问题。

补丁代码是:

<?php 
/*
Plugin Name: Fix Contact Form 7
*/    
add_filter('wp_mail', 'fix_wp_mail_filter', 11);
function fix_wp_mail_filter($args) {
    unset($args['headers']['X-WPCF7-Content-Type']);    
    $new_wp_mail = array(
        'to'          => $args['to'],
        'subject'     => $args['subject'],
        'message'     => $args['message'],
        'headers'     => $args['headers'],
        'attachments' => $args['attachments'],
    );      
    return $new_wp_mail;
}

现在,当我测试联系表单时,我在浏览器中收到 500 错误并检查 App Engine 请求日志,显示此错误:

PHP 致命错误:

无法在第 8 行的 /base/data/home/apps/s~aura-www/20170807t210800.403218500896707567/wordpress/wp-content/plugins/cf7_fix_plugin.php 中取消设置字符串偏移量

PHP代码有问题吗?

【问题讨论】:

  • 在尝试unset 之前,var_dump($args) 会给你什么?
  • 我不确定如何在 App Engine 上使用我的 wordpress 设置来测试它。我可以在这个 php 插件文件中添加一行来输出这个吗?
  • 我不确定您的其余代码以及调用此函数的方式和时间,但也许添加var_dump($args); die(); 并向使用此插件的页面发出请求会给您一些东西。或者如果有更好的方法来做到这一点,比如将 $args 转储到日志文件,或者使用您可能拥有的其他调试功能。但如果没有其他选项,请尝试 var_dump 并死掉,让我们知道输出。我猜$args['headers'] 可能是一个简单的字符串而不是一个数组。
  • 我应该用这个函数替换未设置的函数,还是放在下面?
  • 把它放在它之前,在function fix_wp_...unset(...)之间的新行中

标签: php wordpress google-app-engine


【解决方案1】:

发生这种情况是因为$args['headers'] 是一个字符串,而不是一个数组,因此unset($args['headers']['X-WPCF7-Content-Type']); 行会引发此错误。如果要更改它,请使用字符串操作函数,例如str_replace

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 2015-12-02
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多