WordPress集成社交登录在PHP 7环境下报错求助
我来帮你搞定这个PHP版本升级后出现的Twitter登录警告问题!
问题原因
PHP 7.x对变量类型的校验比PHP 5.6严格很多。这个警告是因为插件里的OAuth1Client.php第263行代码,直接把一个字符串类型的响应头变量当成数组来访问'cache_control'偏移量——PHP 5.6会默认忽略这种不规范操作,但PHP 7.1会抛出明确的警告。
修复步骤
- 找到你的WordPress站点插件目录下的文件:
wp-content/plugins/wordpress-social-login/hybridauth/Hybrid/thirdparty/OAuth/OAuth1Client.php - 定位到第263行,找到这段代码:
if ( isset( $response_headers['cache_control'] ) && strpos( $response_headers['cache_control'], 'no-cache' ) !== false ) - 修改为下面的代码,先确保
$response_headers是数组类型再进行判断:
如果你只想快速规避警告,也可以用更简化的版本:// 先将响应头字符串解析为数组(如果它原本是字符串的话) if (!is_array($response_headers)) { $parsed_headers = []; foreach (explode("\n", $response_headers) as $header_line) { $header_parts = explode(':', $header_line, 2); if (count($header_parts) === 2) { $key = strtolower(trim($header_parts[0])); $parsed_headers[$key] = trim($header_parts[1]); } } $response_headers = $parsed_headers; } // 原判断逻辑保留 if ( isset( $response_headers['cache_control'] ) && strpos( $response_headers['cache_control'], 'no-cache' ) !== false )if ( is_array($response_headers) && isset( $response_headers['cache_control'] ) && strpos( $response_headers['cache_control'], 'no-cache' ) !== false )
额外建议
如果这个插件很久没更新了,后续PHP版本升级可能还会遇到其他兼容性问题。你可以留意插件的官方更新,或者考虑替换为更活跃维护的社交登录插件,但当前这个修改应该能快速解决Twitter登录的警告问题。
内容的提问来源于stack exchange,提问作者Akhilesh
相关产品推荐
相关产品推荐

