PHP - 写入文件 - 一个脚本的权限被拒绝,但在同一目录中没有另一个脚本

时间:2011-09-08 13:00:23

标签: php permissions fopen

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

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个文件如何以不同方式工作。

我可能做错了什么?

非常感谢

1 个答案:

答案 0 :(得分:1)

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

另请注意“无法打开流:权限被拒绝”是警告(不是致命错误),当您运行标准代码时,此警告不会停止执行。但PHPUnit会将警告转换为异常,当您在PHPUnit下运行代码时,此警告将停止执行。