PHP -写入文件-拒绝同一目录下的一个脚本的权限,但不拒绝另一个脚本的权限


PHP - writing file - Permission denied for one script, but not another in the same directory

我的一个PHP脚本将数据写入文件。它的执行没有问题。但是,我的测试代码以相同的方式调用相同的方法,并且(为了试图清除这个问题的目的)位于同一目录中,报告:

failed to open stream: Permission denied

错误。

我正确执行的脚本很简单:

try {
    $printer = new PDFPrinter();
    $FDFData = $printer->assembleFDFData(5);
    $fdf_file = $printer->writeFDFFile($FDFData);
    $printer->downloadForm($fdf_file);
}catch(Exception $e) {
    echo $e->getMessage();
}

和我的测试代码是:

    function setUp() {
        $this->printer = new PDFPrinter();
        $this->FDFData = $this->printer->assembleFDFData(5);
    }
    function testWrite() {
        try {
            $this->printer->writeFDFFile($this->FDFData);
            $this-assertTrue(true);
        } catch(Exception $e) {
            $this->assertTrue(false);
        }
    }

我知道testWrite测试代码很糟糕,但我只是想让它先停止抛出那个异常。

脚本在执行writeFDFFile($this->FDFData);方法时抛出异常,因为它试图打开文件进行写入。下面是失败的代码:

$fp=fopen($fdf_file,'w')

我不明白在同一目录下具有相同权限的2个文件在执行相同的代码时如何工作不同。

我做错了什么?

多谢

如何运行标准和测试代码?也许您通过apache(在浏览器中打开)运行标准代码,但直接通过php(从IDE运行)测试代码。也许apache有权限,但php没有。也许工作目录是不同的($fdf_file包含绝对路径?)。

还要注意"failed to open stream: Permission denied"是警告(不是致命错误),当你运行标准代码时,这个警告不会停止执行。但是PHPUnit将警告转换为异常,当你在PHPUnit下运行代码时,这个警告将停止执行。