PHP语言中有很多功能(最真实的),当他们不喜欢他们的输入时,会发现所有烦恼并发出警告和通知 - 而不是仅仅返回FALSE
(尽管他们这样做)太)。
这一点非常普遍,在GD和字符串函数中。他们非常关注他们的论点,用户输入很容易达不到他们的标准。
例如,用户上传损坏的图像(有意或无意)。导致GD库发出警告。
到目前为止,我发现只有三种方法可以让PHP在这个问题上保持沉默:
@
符号来抑制错误。$errorlevel=error_reporting();
error_reporting($errorlevel & ~E_NOTICE);
//...code that generates notices
error_reporting($errorlevel);
当然,后两个选择只会让我生病。这让我使用1)并淡化PHP错误设置。但是,我希望PHP处于严格模式,这样当我工作时,我可以捕获逻辑错误和可能蔓延到我的代码中的错误形式。但是,当PHP不喜欢某些东西时,我不想抛出随机错误。
那么有没有办法将错误的参数(错误输入)的错误与错误编程的错误分开?例如:
答案 0 :(得分:3)
还有另一种选择 - 使用set_error_handler()
,您甚至可以在GD函数调用之前调用它,并使用restore_error_handler()
返回默认值。
在问题try and catch a warning中有一个很好的评论,它提供了有关如何实现这一目标的更多细节。
答案 1 :(得分:2)
这是一个从PHP开始的错误设计。一个现代的PHP库会在出错时引发异常。可能会遇到异常。但当时GD写的PHP还没有支持例外。
因此,我认为在这种情况下 合法使用@
运算符。
答案 2 :(得分:1)
在调用函数之前清理输入。这可以节省您的错误。
答案 3 :(得分:1)
除了编辑违规库并更改抛出异常的方式之外,所有库都没有通用方法。 Honeslty,很多PHP开发人员真的不关心被抛出的异常,但现在越来越多的人开始使用E_STRICT旅行车了。当生成GD库时,心态可能是抛出无法捕获的错误并不是一件大事。
至于GD的验证图像。您唯一能做的就是使用不同的库或函数来验证图像。您可以try using magic byte functions检查图像是否有正确的标题(尽管这并不意味着文件的其余部分结构正确)。至少使用魔术字节函数可以处理显而易见的事情,比如有人上传文本文件而不是JPEG。
答案 4 :(得分:0)
答案 5 :(得分:0)
但是,我不想随意 PHP不喜欢时抛出的错误 东西。
为什么不呢? PHP试图通过警告和通知告诉您一些值得注意的事情。在GD示例中,您将要在用户上载损坏的文件时进行记录 - 尤其是在攻击中使用它时。 Turn of the display of error messages and log everything。