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

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

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

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

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

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

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

© 2021 V2EX