PHP-记录file_get_contents函数引发的调试现场

sentry报警提示
问题源自会议上的一个sentry报错案例(类似上图,代码略有不同,主要是file_get_contents请求一个图片URL404导致的问题)。
PS:除非特殊说明,后续默认PHP7.2版本,Laravel5.6版本。

调试后,觉得还不错,值得记录一下。


之前生产曾经有一个需求是用file_get_contents根据URL获取图片,然而由于图片可能不存在,当时是PHP5.6版本,导致了语句长时间堵塞。改用CURL,结合CURLOPT_TIMEOUT超时配置项和curl_getinfo($ch,CURLINFO_HTTP_CODE)是否等于200来先判断图片有消息。

因为这事儿对file_get_contents依稀还有点印象,记得会抛出一个错误,而不是异常,无法被catch(\Exception $e)捕捉。而TP5.0框架,会捕捉error转成exception并throw,Laravel内部处理估摸着也差不多,能够解释页面上的ErrorException。

这是初始的一个假设,后续进行一波验证。
新建一个空白项目下的index.php
运行代码:
在这里插入图片描述
部分输出:

PHP Warning:  file_get_contents(http://localhost/1.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

运行代码:
在这里插入图片描述
部分输出:

PHP Warning:  file_get_contents(http://localhost/1.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

确实存在一个Warning级别的error,try、catch失效;再在公司的一个Laravel项目里运行代码,运行环境基于docker镜像与生产环境相同。

在这里插入图片描述
输出:

exception:file_get_contents(http://localhost/1.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

结果catch成功执行输出结果。

本地PHP XAMPP环境运行新建的Laravel(运行原项目,会有配置问题所以单独开了一个)
在这里插入图片描述
报错如下:
在这里插入图片描述
出错非常符合逻辑。


此时,PHP版本一致,一个基于docker,另一个基于XAMPP;Lara

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值