PHP 有没有什么办法能兜住异常别抛 404?

2017-03-01 15:08:29 +08:00
 abcbuzhiming
php 的 try catch 很多异常和错误根本兜不住,网上很少有说 php 如何优雅的处理各种异常 error 的方法,请有经验的前辈指点一下
5179 次点击
所在节点    PHP
42 条回复
jarlyyn
2017-03-01 17:42:38 +08:00
404 是异常或则错误么?

难道不是个 header ?
wdlth
2017-03-01 21:18:13 +08:00
你说的是框架找不到路由时抛出的 404 ?
HarveyDent
2017-03-01 22:11:09 +08:00
搭车问一个问题,使用某个库,这个库出错了以后返回错误码,并且 echo 了一串错误信息。这个能捕获到吗,我不想把这个东西 echo 出去啊。
Jakesoft
2017-03-01 22:43:12 +08:00
@HarveyDent php.ini 中有个 display_errors 指令,设置为 off 就可以不显示错误了,线上环境一般都会这样设置吧。
mingyun
2017-03-01 23:21:11 +08:00
404 再跳转首页
macroideal
2017-03-01 23:29:43 +08:00
if 单入口, 在 Php 里设置异常处理的勾子
else 修改 php.ini
R18
2017-03-01 23:37:11 +08:00
404 不是 php 扔出去的吧,是 web 服务器
SummerWQM
2017-03-01 23:54:10 +08:00
自己设置 http 协议响应头就可以了呀, 想根据 业务 跑出具体的响应头 一般会在 php 层做的。
shiny
2017-03-02 00:03:35 +08:00
有时候 php-fpm 进程会崩掉,出现过两次这种情况了。
leeg810312
2017-03-02 01:03:57 +08:00
程序出错不是 5 开头吗? 4 也算?是我学错了么
daryl
2017-03-02 07:23:33 +08:00
等一下……一直懵逼 404 不是 webserver 抛出的么…
dawniii
2017-03-02 07:47:21 +08:00
就算 php 是抛出的也是 500 啊,老实说你是不是用的 thinkphp3.* 他家的框架全局抛出异常直接给 404 状态码。。。之前坑我一次。
wwolf
2017-03-02 08:31:25 +08:00
可以自定义异常类, response 之前直接捕获进行处理
wizardoz
2017-03-02 09:31:23 +08:00
何不考虑把 404 页面做得漂亮一点?
narcotics
2017-03-02 10:03:21 +08:00
@abcbuzhiming 我没写过 php ,但不管 C# Java Golang Nodejs 不管任何写 Web 的语言, 404 就是 404 not found ,你可以做个漂亮的 404 页面,你可以 404 之后再做跳转,但是绝不是把它“兜住”隐藏起来

况且什么样的“异常”会导致 404 我也是很好奇
zencoding
2017-03-02 11:12:42 +08:00
catch Error
abcbuzhiming
2017-03-02 11:39:02 +08:00
@dawniii 你说对了,就是 TP3.x
abcbuzhiming
2017-03-02 11:40:38 +08:00
@surfire91 我跪了,太奇怪了,我本来就是 PHP7.0.10 ,无论是 catch error 还是 set_error_handler 我都试过了,这个 php_reader 读取错误 xls 格式引发的错误,还是抓不住,这难道既不是 expection ,也不是 error 吗,这到底是什么东西啊
surfire91
2017-03-02 12:00:57 +08:00
@abcbuzhiming 有示例吗
abcbuzhiming
2017-03-02 14:19:32 +08:00
@surfire91 谢谢各位为了回答了这么多,今天研究了半天,终于发现自己其实是被框架坑了,并不是抓不住异常,而是在这个框架里,所有的类都必须基于命名空间所对应的路径来调用, PHP 的 Exception 是基类,所以必须写成
catch (\Exception $e);写成 catch (Exception $e),这个框架就认为不存在这个类,但是它不报错,直接把异常甩到上层去了。。。我在这卡了两天。直到刚才左想右想不对于是用原生代码来试才发现这个坑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344089

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX