我的一个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下运行代码时,这个警告将停止执行。