为什么PHP的stat会抛出RuntimeException?

时间:2014-08-13 21:09:09

标签: php cakephp phpunit php-vcr

是否有理由呼叫stat会抛出RuntimeException?这是在使用CakePHP和PHP-VCR进行phpunit测试期间。对stat的调用包括error control operator, @。所以它是:

错误发生在PHP-VCR代码中(StreamProcessor.php第291行)。

    try {
        $result = @stat($path);
    } catch (\RuntimeException $e) {
        error_log(print_r($e, true));
    }


'type' => (int) 2,
'message' => 'stat(): stat failed for /x/y/z/mycakephpprojet/app/tmp/cache/persistent/myapp_cake_core_cake_eng',
'file' => '/x/y/z/mycakephpprojet/app/Vendor/php-vcr/php-vcr/src/VCR/Util/StreamProcessor.php',
'line' => (int) 291

我所知道的是缺少引用的文件(它是稍后生成的缓存文件)。所以我希望stat返回false,而不是抛出异常。

注意:

  • 我想也许它是由作曲家包的一些自定义处理程序(如phpunit)引发的。但是,error_reporting()报告24575,由于@ error控制运算符,我预计它会为0。此外,我查看了所有set_error_handler次来电,甚至将调试电话放入其中,我确定它们不是来自他们。
  • 异常对象的堆栈跟踪具有最新的行

    '#0 [internal function]: VCR\Util\StreamProcessor->url_stat('/home/tylercoll...', 2)
    

    所以我不觉得我可以拦截另一个级别进行检查。

  • 奇怪的是,无法使用我自己的自定义set_exception_handler处理抛出的RuntimeException。但是如果我手动使用throw new \RuntimeException,我将使用自定义处理程序。
  • 一次异常类型为PHPUnit_Framework_Error_Warning。我99%肯定我立即再次运行它,从那时起它就是RuntimeException。但是,如果错误的类型报告为2(又名E_WARNING),则警告会有意义。
  • 我认为它与PHP有关的原因之一是因为如果我删除@ error控制操作符,我会得到很多警告(不是例外),说stat失败了。但是,我很确定这是来自CakePHP测试工具,因为经过许多测试后,我看到PHPUnit 3.7.37 by Sebastian Bergmann. Configuration read from phpunit.xml。然后失败就在那之后。
  • 我在Ubuntu 12.04上使用PHP 5.4.23。

0 个答案:

没有答案