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

2017 年 3 月 1 日
 abcbuzhiming
php 的 try catch 很多异常和错误根本兜不住,网上很少有说 php 如何优雅的处理各种异常 error 的方法,请有经验的前辈指点一下
6061 次点击
所在节点    PHP
42 条回复
narcotics
2017 年 3 月 1 日
404 为啥要兜住。。。?不存在就是不存在啊。。。
Livid
2017 年 3 月 1 日
tmkook
2017 年 3 月 1 日
PHP7 有个新特性,只要 catch Exception 就能捕获所有异常
a136572301
2017 年 3 月 1 日
活捉,站长-。-
abcbuzhiming
2017 年 3 月 1 日
@narcotics 你要是用用过 java , C#这类语言就明白有异常处理在 IO 的时候能省多少事了
abcbuzhiming
2017 年 3 月 1 日
@tmkook 我靠,你这样一说,我突然发觉,我这可能不是异常,而是比异常更高级的东西,因为我用的就是 php7.0.14 ,我用了你说的 catch Exception 。反正就是读个 excel ,那个 excel 文件是有问题的。然后代码就完蛋了,根据日志的结果,到那行代码直接不往后执行了,就像那行代码变成了 die()一样
abcbuzhiming
2017 年 3 月 1 日
@Livid 我仔细看了一下这个 sentry ,它好像不能抓住错误现场并立即处理啊?
panlilu
2017 年 3 月 1 日
404 什么的不是可以在 nginx 那层解决么。。
jswh
2017 年 3 月 1 日
set_exception_handler
set_error_handler
register_shutdown_function
PigKnife
2017 年 3 月 1 日
大兄弟, catch Error 试试
surfire91
2017 年 3 月 1 日
"很多异常和错误根本兜不住"
比如那个异常或错误?
兜不住怎么理解?

“ PHP 有没有什么办法能兜住异常别抛 404 ”
404 是指 http code 404 吗? 这个一般都是 web server 抛的,还没到 php 处理。
abcbuzhiming
2017 年 3 月 1 日
@panlilu 我需要在出现错误后进行逻辑处理,在 nginx 那块处理 404 仅仅是对客户端友好,不能解决逻辑问题
Felldeadbird
2017 年 3 月 1 日
我个人见解是因为 PHP 的错误提示机制 和后面引入的异常 存在定位重复,所以 PHP 的异常机制一直比较不实用。参考#9 的做法,自定义一个全局的异常机制,可以比较优雅解决。
但是呢,有些错误必须手动 throw 。不像其他语言自动去抓取。
abcbuzhiming
2017 年 3 月 1 日
@PigKnife 请教如何 catch error
abcbuzhiming
2017 年 3 月 1 日
@surfire91 我描述不准确吧,应该是 php error 了, http server 就抛出 404 了,我是希望能把 php 的 error 都兜住,并且进行善后处理(避免下次到这继续 error ,因为有些 error 是用户故意上传某些文件造成的,要把这些垃圾删掉),别的语言很简单, try catch 就行了, php 就不行
ParallelMao
2017 年 3 月 1 日
LukeXuan
2017 年 3 月 1 日
404 不应该是找不到的时候抛出的么 就算你 error handling 不对也是 500 吧
surfire91
2017 年 3 月 1 日
php5 没法 catch error 只能通过 set_error_handler , php7 可以,见 http://php.net/manual/zh/language.errors.php7.php
learnshare
2017 年 3 月 1 日
404 有两种吧,一个是请求静态资源,那应该在 Nginx 处理;另一个是动态资源,那就 catch 到错误(或许应该算 500 )
lxm
2017 年 3 月 1 日
自己写 router ,匹配不到转向 404 处理页面

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

https://v2ex.xtra.eu.org/t/344089

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

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

© 2021 V2EX