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访问服务器,因此无法使用命令行进行探索。这是真的,谢谢,但在这之前,它在这一行中失败了,并且原始代码是正确的。我会更新这篇文章的。这是真的,谢谢,但是在那之前,它的代码是错误的,原始代码是正确的。我会更新帖子的,我不怀疑。但我找不到原因,我不怀疑。但我找不到原因。