File_get_contents 当文件不存在时不评估为 false
File_get_contents not evaluating to false when file does not exist
我正在尝试测试代码中的异常。
public function testGetFileThrowsException(){
$this->expectException(FileNotFoundException::class);
$file = "db.json";
$this->review->getData($file);
}
"db.json" 文件不存在。我的目标是让 getData() 文件抛出 FileNotFoundException。这是 getData() 代码:
public function getData($path){
if(file_get_contents($path) === false){
throw new FileNotFoundException;
}
return $file;
}
问题是,file_get_contents 函数 returns:
不是评估为 False 并抛出异常
1) CompanyReviewTest::testGetFileThrowsException
file_get_contents(db.json): failed to open stream: No such file or directory
所以测试没有 运行 成功。关于为什么会发生这种情况的任何想法?
您有 2 种解决方案,最糟糕的一种是像那样隐藏错误
public function getData($path){
if(@file_get_contents($path) === false){
throw new FileNotFoundException;
}
return $file;
}
或者检查文件是否存在(我猜是更好的解决方案)
public function getData($path){
if(file_exists($path) === false){
throw new FileNotFoundException;
}
return $file;
}
file_get_contents()
生成一个 E_WARNING 级别的错误(无法打开流),这是您要抑制的错误,因为您已经在处理它时出现异常 class。
您可以通过在file_get_contents()
前面添加PHP's error control operator @
来抑制此警告,示例:
<?php
$path = 'test.php';
if (@file_get_contents($path) === false) {
echo 'false';
die();
}
echo 'true';
?>
以上回显错误,没有 @
运算符它 returns E_WARNING 和回显错误。警告错误可能会干扰您的 throw 函数,但没有看到代码很难说。
我正在尝试测试代码中的异常。
public function testGetFileThrowsException(){
$this->expectException(FileNotFoundException::class);
$file = "db.json";
$this->review->getData($file);
}
"db.json" 文件不存在。我的目标是让 getData() 文件抛出 FileNotFoundException。这是 getData() 代码:
public function getData($path){
if(file_get_contents($path) === false){
throw new FileNotFoundException;
}
return $file;
}
问题是,file_get_contents 函数 returns:
不是评估为 False 并抛出异常1) CompanyReviewTest::testGetFileThrowsException
file_get_contents(db.json): failed to open stream: No such file or directory
所以测试没有 运行 成功。关于为什么会发生这种情况的任何想法?
您有 2 种解决方案,最糟糕的一种是像那样隐藏错误
public function getData($path){
if(@file_get_contents($path) === false){
throw new FileNotFoundException;
}
return $file;
}
或者检查文件是否存在(我猜是更好的解决方案)
public function getData($path){
if(file_exists($path) === false){
throw new FileNotFoundException;
}
return $file;
}
file_get_contents()
生成一个 E_WARNING 级别的错误(无法打开流),这是您要抑制的错误,因为您已经在处理它时出现异常 class。
您可以通过在file_get_contents()
前面添加PHP's error control operator @
来抑制此警告,示例:
<?php
$path = 'test.php';
if (@file_get_contents($path) === false) {
echo 'false';
die();
}
echo 'true';
?>
以上回显错误,没有 @
运算符它 returns E_WARNING 和回显错误。警告错误可能会干扰您的 throw 函数,但没有看到代码很难说。