PHP mkdir() 异常处理
mkdir() 工作正常这个问题更多的是关于捕获错误。我不想在目录存在时打印此内容,而是想让它在自定义日志中写入一条消息给我。我如何创建这个异常。
警告:mkdir() [function.mkdir]:文件存在
mkdir() is working correctly this question is more about catching an error. Instead of printing this when the directory exists I would just like to have it write to a message to me in a custom log. How do I create this exception.
Warning: mkdir() [function.mkdir]: File exists
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
解决办法很简单。 PHP 已经为您提供了一切:
或者 php.ini 或 .htaccess 中的相同设置
我认为这比手动编写每个可能的错误更好
如果您不希望记录此错误(因为它可能不是错误而是应用程序逻辑的一部分),您可以先检查文件夹是否存在
the solution is very easy. PHP already have everything for you:
or same settings in the php.ini or .htaccess
I think it would be better than write each possible error manually
If you don't want this error to be logged (as it may be not error but part of application logic), you can check folder existence first
您可以通过使用
display_errors
设置,或者根据具体情况在函数调用前添加@
字符。 (例如@mkdir('...')
)。然后,您可以使用
error_get_last
当mkdir
返回false
时。对于错误日志记录,适用全局规则。您可以使用
error_log
手动记录错误。如需进一步阅读,请参阅有关错误处理的手册部分。
编辑:
正如评论中所建议的,自定义错误处理程序也是一种可能的、可以说更强大的(取决于您的实现)但肯定更优雅的解决方案。
这样,错误消息将不会显示,除非您明确回显它。但请注意,使用自定义错误处理程序时
error_get_last
将返回NULL
。You can stop the error message from displaying either by suppressing error messages globally (in config or runtime) with the
display_errors
setting, or case by case by prefixing the function call with an@
-character. (E.g.@mkdir('...')
).You can then check with
error_get_last
whenmkdir
returnsfalse
.For error logging global rules apply. You can log errors manually with
error_log
.For further reading, see the manual section on Error handling.
Edit:
As suggested in the comments, a custom error handler is also a possible, arguably more robust (depending on your implementation) but certainly more elegant, solution.
This way, the error message will not display, unless you explicitly echo it. Note, though, when using a custom error handler
error_get_last
will returnNULL
.您可以使用如下类重写任何系统调用函数:
file: system.php
然后就可以调用该方法并拦截异常:
file:index.php
现在您可以正常使用
try {...} catch(...) {...} finally {...}
处理所有系统错误。You can rewrite any system call function with a class like this:
file: system.php
Then you can call the method and intercept the exception:
file: index.php
Now you can treat all the system errors with the
try {...} catch(...) {...} finally {...}
normally.