PHP fopen在一个脚本中成功,但在另一个脚本中没有成功

PHP fopen在一个脚本中成功,但在另一个脚本中没有成功,php,permissions,fopen,Php,Permissions,Fopen,我的以下方法使用数据数组$fdata创建FDF文件: public function writeFDFFile($FDFData) { $fdf_file = time().'.fdf'; $fdf = $this->createFDF(PDF_FORM, $FDFData); // write the file out if($fp=fopen($fdf_file,'w')) { fwrit

我的以下方法使用数据数组
$fdata
创建FDF文件:

    public function writeFDFFile($FDFData) {
        $fdf_file = time().'.fdf';
        $fdf = $this->createFDF(PDF_FORM, $FDFData);

        // write the file out
        if($fp=fopen($fdf_file,'w')) {
            fwrite($fp,$fdf,strlen($fdf));
        } else {
            throw new Exception('Unable to create file: '.$fdf_file);
        }

        fclose($fp);
        return $fdf_file;
    }
我的一个脚本运行得非常好:

require_once('PDFPrinter.php');
try {
    $printer = new PDFPrinter();
    $FDFData = $printer->assembleFDFData(9);
    $fdf_file = $printer->writeFDFFile($FDFData);
    $printer->downloadFile($fdf_file);
}catch(Exception $e) {
    echo $e->getMessage();
}
但是我无法运行我的测试代码,因为我得到了:

Unexpected PHP error [fopen(1315558352.fdf) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied]
这两个脚本都在具有正确权限的目录中运行。我也通过浏览器运行我的测试脚本,所以这不是因为我有一个不同的环境

我被困在如何着手真正找到问题的问题上

我的目录结构:

HOME - PDFPrinter.php
  |
  -----tests - PDFPrinterTest.php
         |
         ------simpletest - autorun.php
关于我如何发现这个问题,有什么建议吗

非常感谢

更新

我已尝试更改我的测试类,以便其中唯一的测试函数是:

function testWrite() {
    try {
        $name = "testing.txt";
        if($fp=fopen($name, 'w')) {
            fwrite($fp, "Blah");
        } else {
            throw new Exception("Nope.");
        }
    $this->pass("All good");
    } catch(Exception $e) {
        $this->fail("Not good");
    }

}
但是异常仍然会抛出警告

但是,从同一目录运行一个非常简单的脚本就可以了:

$name = "Test.txt";
if($fp=fopen($name, 'w')) {
    fwrite($fp, "Working");
} else {
    throw new Exception("Nope.");
}
fclose($fp);
这将实际创建并写入文件。

在测试中

fwrite("Blah");
应该是

fwrite($fp, "Blah");
但是我不确定原始代码中的问题是什么。

在您的测试中

fwrite("Blah");
应该是

fwrite($fp, "Blah");
但我不确定原始代码中的问题是什么

无法打开流:权限被拒绝

每个开发人员都应该掌握一项重要的程序员技能。
这是:

相信你的眼睛 如果您的PHP告诉您权限被拒绝,那么事实就是这样。多布尔检查一下。这没什么大不了的,但没人能帮你

无法打开流:权限被拒绝

每个开发人员都应该掌握一项重要的程序员技能。
这是:

相信你的眼睛
如果您的PHP告诉您权限被拒绝,那么事实就是这样。多布尔检查一下。这没什么大不了的,但没人能帮你

最终找到了解决方案,即出于某种原因,文件名必须是完整的绝对地址,才能在两个脚本中工作。这是我在下面引用的建议:

使用fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+')

因此,对于我的代码,我使用了:

if($fp=fopen($_SERVER['DOCUMENT_ROOT'].$name, 'w')) {
    fwrite($fp, "Working");
}

最终找到了解决方案,即出于某种原因,文件名必须是完整的绝对地址,才能在两个脚本中工作。这是我在下面引用的建议:

使用fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+')

因此,对于我的代码,我使用了:

if($fp=fopen($_SERVER['DOCUMENT_ROOT'].$name, 'w')) {
    fwrite($fp, "Working");
}

如何设置安全模式?它通常会出现错误,因为出于安全原因,它只能上载到自己创建的文件夹。Hi-SAFE_模式对于本地值为
off
,对于主值为“开”。当你说“它只能上传到它自己创建的文件夹”时,你指的是什么?此外,我尝试将测试代码移动到与工作代码相同的文件夹中,但仍然收到相同的错误。嗨!对于目录权限,我看不出测试失败的原因。您在什么操作系统上运行脚本?你试过从测试目录运行你的工作吗?嗨,谢谢你的回复。是的,我试着从tests目录运行工作脚本,它运行得很好。我不确定操作系统。令人恼火的是,我只能通过ftp访问服务器,因此无法使用命令行进行探索。安全模式是如何设置的?它通常会出现错误,因为出于安全原因,它只能上载到自己创建的文件夹。Hi-SAFE_模式对于本地值为
off
,对于主值为“开”。当你说“它只能上传到它自己创建的文件夹”时,你指的是什么?此外,我尝试将测试代码移动到与工作代码相同的文件夹中,但仍然收到相同的错误。嗨!对于目录权限,我看不出测试失败的原因。您在什么操作系统上运行脚本?你试过从测试目录运行你的工作吗?嗨,谢谢你的回复。是的,我试着从tests目录运行工作脚本,它运行得很好。我不确定操作系统。令人恼火的是,我只能通过ftp访问服务器,因此无法使用命令行进行探索。这是真的,谢谢,但在这之前,它在这一行中失败了,并且原始代码是正确的。我会更新这篇文章的。这是真的,谢谢,但是在那之前,它的代码是错误的,原始代码是正确的。我会更新帖子的,我不怀疑。但我找不到原因,我不怀疑。但我找不到原因。