我喜欢这样做:
if (file_exists( "path/a/b/c/file.txt" )) {
fopen("path/a/b/c/file.txt"); ----------> ERROR
do_this_if_file_exists();
}
else {
do_this_if_not_exists();
}
不幸的是,我收到以下错误:
fopen(path/a/b/c/file.txt) [function.fopen]: failed to open stream: No such file or directory
我在使用file_exists做错了什么?
此外,当我调用文件存在时,路径如:file_exists( "file.txt" )
,效果很好。我认为问题是路径(路径/ a / b / c /),但如何在不首先创建路径的情况下验证。
感谢。
答案 0 :(得分:1)
用@隐藏错误不是一种正确的方法。应正确处理所有错误。在其他情况下,调试将是一个痛苦。
此外,对于将来,您可以使用is_readable()函数来确保文件是否不仅存在而且是可读的,例如你有足够的权限。
答案 1 :(得分:1)
您需要在fopen
中包含错误检查:
if (file_exists( "path/a/b/c/file.txt" ))
{
$fh=fopen("path/a/b/c/file.txt","r"); #or whatever mode you want...
if($fh!==false)
{
do_this_if_file_exists_and_can_be_opened();
}
else
{
die("Couldn't open the file. Sorry!\n");
}
}
else {
do_this_if_not_exists();
}
答案 2 :(得分:1)
检查给定文件是否存在以及它是否真的是文件:
if (file_exists( "path/a/b/c/file.txt" ) && is_file("path/a/b/c/file.txt")) {
$file_handler = @fopen("path/a/b/c/file.txt", MODE_IS_NOT_OPTIONAL)
if($file_handler !== false){
do_things_with_file_handler();
} else {
throw_some_error();
}
}
else {
do_this_if_not_exists();
}
函数file_exists()
也可以检查给定的目录是否存在,并且该shluod可以帮助你。
mode
函数中的 fopen
参数不是可选的。您必须使用其中一种模式可能的值full list。
答案 3 :(得分:0)
答案 4 :(得分:-3)
您可以通过在php页面顶部添加此行来关闭错误报告
的error_reporting(0);