首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >第三方API - PHP致命错误与http_request_failed / cURL错误28

第三方API - PHP致命错误与http_request_failed / cURL错误28
EN

WordPress Development用户
提问于 2020-02-17 20:35:27
回答 1查看 334关注 0票数 0

我们已经将第三方提供的一系列API集成到了Divi的子主题中。在该子主题的functions.php中,我们创建了一系列函数,用于生成短代码,以便在模板的各个区域从API返回数据的某些部分。

这些职能的代码是在2019年第三季度编写的。没有对源代码进行任何更改,但截至1月中旬,我们经常(每天几次)出现PHP致命错误,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PHP Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /nas/content/live/client/wp-content/themes/theme/functions.php:292
Stack trace:
#0 /nas/content/live/client/wp-includes/shortcodes.php(325): 
get_one_job_title('', '', 'get_one_j...')
#1 [internal function]: do_shortcode_tag(Array)
#2 /nas/content/live/client/wp-includes/shortcodes.php(199): preg_replace_callback('/\\\\[(\\\\[?)(get_on...', 'do_shortcode_ta...', '[get_one_...')
#3 /nas/content/live/client/wp-content/themes/theme/functions.php(716): do_shortcode('[get_one_...')
#4 /nas/content/live/client/wp-includes/class-wp-hook.php(290): client_shortcode_titles('[get_one_...')
#5 /nas/content/live/client/wp-includes/plugin.php(206): WP_Hook->apply_filters('[get_one_...', Array)
#6 /nas/content/live/client/wp-includes/general-template.php(1345): apply_filters('single_post_tit...', '[get_one_...', Object(WP_Post))
#7 /nas/content/live/client/wp-content/themes/divi/epanel/custom_functions.php(1094): single_pos in /nas/content/live/client/wp-content/themes/theme/functions.php on line 292

为了进一步了解正在发生的事情,我们使用了is_wp_error和get_error_messages检查(如果触发的话)。其结果如下:

代码语言:javascript
代码运行次数:0
运行
复制

为了提供代码上下文,下面是包装第292行的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function get_one_job_title() {
    global $ApiUrl;
    global $ApiAuth;

    $position_id = get_query_var( 'position_id' );
    $get_url     = $ApiUrl . '/reqs/' . $position_id;

    if ( preg_match( '/^c-(.*)$/i', $position_id, $matches ) ) {
        $position_id = htmlspecialchars_decode( $matches[1] );
        $get_url     = $ApiUrl . '/reqs/custom/' . $position_id;
    }

    $headers['API-Realm']     = 'CCAPI';
    $headers['Authorization'] = $ApiAuth;
    $request                  = new WP_Http();
    $response                 = $request->request( $get_url, array(
        'method'  => 'GET',
        'headers' => $headers
    ) );

    $return = "";
    if(is_wp_error($response)) {
        print "";
    }
    if ( $response['response']['code'] == 200 ) { 
        $data = json_decode( $response['body'] );
        $return .= $data->JobTitle;
    } else {
        //$return .= "Error: ".__LINE__;
        $return .= "No Matching Jobs";
    }
    return $return;
}

下面是包装#716行的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_filter( 'the_title', 'client_shortcode_titles' );
function client_shortcode_titles( $title ){
    return do_shortcode( $title );
}
add_filter( 'single_post_title', 'client_shortcode_titles' );

主机已经声明,他们不认为这是他们的服务器的问题,并相信问题属于第三方API。空气污染指数公司已证实以下情况:

  • 没有与错误日志匹配的中断。
  • 自我们部署以来,它们的API没有任何更改。
  • 对成功的API调用没有速率限制

我们还应该找什么?这是API问题吗?

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2020-02-17 21:57:12

很多可能的原因显而易见-- DNS,路由,防火墙,他们的服务器或应用程序的问题,或者你的服务器或应用程序的问题。

如果他们对api主机名使用循环DNS查询,那么可能会有一个api端点被破坏,当请求到达那个端点时,您的请求就会失败。这个问题并不少见,而且相当容易识别。对于较小的服务,它们可能只对所有请求使用一个IP,这不太可能是一个问题。

你能在WP/PHP之外重现失败吗?创建一个简单的、非PHP的命令行脚本,该脚本记录api服务器主机名的DNS查询的输出和总时间,以及通过curl (linux cli curl -而不是PHP curl)或wget对api的简单GET请求的输出和总时间。跑几次-有用吗?经常从cron运行它-它也偶尔失败吗?这些失败与wordpress的请求也失败的时间一致吗?

此外,记录PHP的详细输出可能会有所帮助。也许可以尝试复制函数WP_Http_Curl::request https://developer.wordpress.org/reference/classes/wp_http_卷曲/请求/

以functions.php作为request_debug()。在该函数中,启用CURLOPT_VERBOSE并使用CURLOPT_STDERR捕获输出,如下所述:https://stackoverflow.com/questions/3757071/php-debugging-curl

在插件中使用request_debug(),看看它捕获了什么。

HTH

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/358883

复制
相关文章
php调用第三方api接口_php不显示错误
大家好,又见面了,我是你们的朋友全栈君。 这是我在尝试创建新内容时不断得到的响应
全栈程序员站长
2022/09/27
9670
PHP与500错误
PHP开发过程中经常会遇到返回500错误的情况,而且body体中也没有任何调试(可用)内容。这个时候你就需要慢慢调试了(打断点,开调试模式等),但如果是现网,这个错误就比较让人抓狂了,既不好打断点也不能开调试模式。但既然是错误,总是会有处理方法,下面就一步步分析500的成因及处理方案。
yaxin
2019/03/07
7.7K0
PHP与500错误
PHP错误与异常
图片 这篇文章基于PHP7 从PHP7起,PHP对异常做了较大改变,引入了Error,调整了继承结构Stringable这是个interface,只要能转字符串的类都应该实现这个接口Throwable能被throw抛出的最基本的接口,但是PHP不允许直接实现这个接口Exception所有用户级异常的基类,想要自定义异常就可以继承这个LogicException代码逻辑错误,就是代码写的不对BadFunctionCallException如果回调函数未定义或缺少参数的时候,抛出这个异常BadMethodCal
码一
2022/06/07
2.3K0
PHP错误与异常
禁用WordPress致命错误(WSOD)处理
WordPress 5.2内置了一个新功能,当检测到插件或主题发生错误时,自动发送邮件通知网站管理员,即使在后端完全无法访问的情况下(例如发生所谓的“白屏死机”),管理员仍然有机会登录并对此问题采取措施。
可定
2020/04/20
6060
WordPress站点健康问题
WordPress站点健康两个小问题 使用php8.1,安装插件经常崩溃,WordPress上插件安装,很多插件未更新,多年前老版本,觉得PHP7.4更稳定些。网站健康检测有2个小问题,搜索网上一些方法,综合网站的问题做了修改,方法简单做了札记。
zairun
2022/10/25
8180
WordPress站点健康问题
为什么PHP爬虫抓取失败?解析cURL常见错误原因
豆瓣电影评分作为中国电影市场的重要参考指标,凭借其广泛覆盖的观众反馈和真实评分,成为电影市场推广和策略优化的核心依据之一。通过精准获取这些评分数据,电影制作方和发行方可以更好地理解观众需求,优化宣传策略,并作出科学决策。
jackcode
2024/11/26
1410
为什么PHP爬虫抓取失败?解析cURL常见错误原因
tp5.0 致命错误: Class ‘\think\cache\driver\Test‘ not found
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 ---- tp5.0的config文件中. 把type类型改为File.就行了 'cache' => [ // 驱动方式 'type' => 'File', // 缓存保存目录 'path' => CACHE_PATH, // 缓存前缀 'prefix' => '
贵哥的编程之路
2022/09/23
5410
PHP错误日志
lukachen
2023/10/22
1640
【说站】php curl返回错误码60的解决办法
今天有用户调用一个curl方法时,遇到如下的错误,查找了一些资料终于解决了。解决方法记录一下,留着自己以后自已查阅用。
很酷的站长
2022/11/24
9730
接口与API设计--21:OC错误模型
只有在极其罕见的情况下才会抛出异常,异常抛出之后,无需考虑恢复问题,而且应用程序此时也应该退出
xy_ss
2023/11/22
1600
【php】关闭PHP错误提示方法,防止错误信息泄露
我们都知道,php代码有时候可能因为我们的一些操作失误,导致报错,然后会暴露错误信息。 为了防止错误信息泄露,需要关闭php的错误提示。
吃猫的鱼Code
2023/02/02
2.2K0
实战记录—PHP使用curl出错时输出错误信息
踩过的坑,实在不想再踩了,记录记录。 CURL错误列表 curl_exec($ch);//执行curl if (curl_errno($ch)) { echo 'Curl error: ' . curl_error($ch);//出错输出错误 } curl_close($ch);//关闭curl 同理,像正则,Json,数据库这些出错时基本都会有提供有帮助的错误信息 CURL状态码列表 状态码 状态原因 解释 0 正常访问 1 错误的协议 未支持的协议。此版cURL 不支持这一协议。 2 初始
房东的狗丶
2023/02/17
6.1K0
拜占庭错误 与 非拜占庭错误
一般地,把出现故障( crash 或 fail-stop,即不响应)但不会伪造信息的情况称为“非拜占庭错误”( non-byzantine fault)或“故障错误”( Crash Fault);
西湖醋鱼
2020/12/30
3.6K0
go新手容易犯的三个致命错误
最近因为以前一些重要且古老的go项目基本没有人专职维护了,所以被安排去熟悉这些项目的代码,所以看了大量go的代码。历史原因,这些代码中或多或少有一些刚刚从PHPer转过来的Gopher去设计和开发的,自然有不少是在php(fpm模式下)码代码思路下埋藏的一些坑。今天我就来和大家一起分享一下最近发现的出现比率比较高的三个致命错误。
用户1093396
2020/10/29
5750
go新手容易犯的三个致命错误
JVM致命错误日志(hs_err_pid.log)分析
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数指定生成路径(JDK6中引入):
九州暮云
2019/08/21
9.7K0
学习Java时应避免的10个致命错误
要编码还是不编码?看来您已经选择了第一个选项。编程是专业发展的绝佳领域,它使您有机会参与有趣的项目并在任何需要的地方工作。
可大可小
2020/04/07
5460
JVM致命错误日志(hs_err_pid.log)分析
致命错误出现的时候,JVM 生成了 hs_err_pid<pid>.log 这样的文件,其中往往包含了虚拟机崩溃原因的重要信息。因为经常遇到,在这篇文章里,我挑选了一个,并且逐段分析它包含的内容(文件可以在文章最后下载)。默认情况下文件是创建在工作目录下的(如果没权限创建的话 JVM 会尝试把文件写到/tmp 这样的临时目录下面去),当然,文件格式和路径也可以通过参数指定,比如:
业余草
2019/01/21
1.7K0
JVM致命错误日志(hs_err_pid.log)分析
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数指定生成路径(JDK6中引入): -XX:ErrorFile=./hs_err_pid<pid>.log 该文件包含如下几类关键信息: 日志头文件 导致crash的线程信息 所有线程信息 安全点和锁信息 堆信息 本地代码缓存 编译事件 g
用户1263954
2018/01/30
8.2K0
致命错误: zlib.h:没有那个文件或目录
下面这个错误是因为zlib包没有安装,安装后问题即可解决。但有一点请注意安装命令是:sudo apt-get install zlib1g-dev,而非sudo apt-get install zlib
一见
2018/08/07
3K0
JVM 致命错误日志(hs_err_pid.log)解读
致命错误出现的时候,JVM 生成了 hs_err_pid<pid>.log 这样的文件,其中往往包含了虚拟机崩溃原因的重要信息。因为经常遇到,在这篇文章里,我挑选了一个,并且逐段分析它包含的内容(文件可以在文章最后下载)。默认情况下文件是创建在工作目录下的(如果没权限创建的话 JVM 会尝试把文件写到/tmp 这样的临时目录下面去),当然,文件格式和路径也可以通过参数指定,比如:
四火
2022/07/15
2.1K0
JVM 致命错误日志(hs_err_pid.log)解读

相似问题

Fetch_Feed cURL错误28

10

PHP致命错误

10

wp_remote_get - cURL错误28 -仅在同一域中

10

PHP致命错误:内存不足

10

子主题function.php导致致命错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文