Php 在Zend框架中使用fopen和fwrite?

Php 在Zend框架中使用fopen和fwrite?,php,zend-framework,fopen,Php,Zend Framework,Fopen,我试图用Zend Framework检查文件是否存在,如果文件不存在,就创建它。下面是正在使用的代码: $filename = "/assessmentsFile/rubrics/$rubricID.php"; $somecontent = "test"; if (!$handle = fopen($filename, 'w+')) { echo "Cannot open file ($filename)"; exit; } // Write $somecontent to

我试图用Zend Framework检查文件是否存在,如果文件不存在,就创建它。下面是正在使用的代码:

$filename = "/assessmentsFile/rubrics/$rubricID.php";
$somecontent = "test";

if (!$handle = fopen($filename, 'w+')) {
    echo "Cannot open file ($filename)";
    exit;
}

// Write $somecontent to our opened file.
if (fwrite($handle, $somecontent) === false) {
   echo "Cannot write to file ($filename)";
   exit;
}
然而,我假设由于Zend处理文件结构的方式,如果一个文件不存在,它只会吐出:

警告:fopen(/assessmentsFile/rubrics/1.php)[function.fopen]:无法打开流:没有这样的文件或目录

由于fopen函数不起作用,fwrite无法写入文件


还有其他方法吗?

有一个函数
file\u exists
告诉您该文件是否存在,使用
Is\u file
您可以检查它是一个文件(例如,不是目录)

(另一种方法是通过在函数调用之前放置@来抑制警告(例如,
$handle=@fopen(…)
,但最好检查文件是否存在)

试试这个:

if(is_file($filename)){ // exists
  $handle=fopen($filename,"w+");
}else{
  $handle=fopen($filename,"w"); // create it
}
// ...

最有可能的问题是
$filename
的路径

你有

$filename = "/assessmentsFile/rubrics/$rubricID.php";
它尝试在名为
assessmentsFile
的目录中的服务器根目录中创建一个文件

您很可能需要使用:

$filename = $_SERVER['DOCUMENT_ROOT'] . "/assessmentsFile/rubrics/$rubricID.php";
$\u服务器['DOCUMENT\u ROOT']
如果
assessmentsFile
文件夹位于您的web根目录中,则应该执行此操作。否则,您可以使用其他变量来获取完全限定的路径,或者您可以简单地对路径进行硬编码:

$filename = "/home/yoursite/public_html/assessmentsFile/rubrics/$rubricID.php";

问题是,由于fopen不起作用,fwrite函数也不起作用。如果文件不存在,请使用模式“w”(不是“w+”)打开它,但要注意,如果它已经存在,它会被截断。请检查我编辑的答案…感谢您的回复。即使只有w,我仍然会收到错误
无法打开文件(/assessmentsFile/rubrics/1.php)
,但未创建任何文件。请在打开文件之前尝试触摸该文件:
touch($filename)
。另一件事是:应该创建文件,但目录没有。是否/assessmentsFile/rubrics/存在?很有趣。通过触摸,我看到了这个错误:
无法创建文件/assessmentsFile/rubrics/1.php,因为(myController.php)中没有这样的文件或目录
。控制器是否可能阻止它到达控制器外部?编辑:刚刚意识到它也在为fopen抛出此错误…我不明白为什么它会在控制器文件中查找该文件?所有PHP中都包含了I到Zend?没错。文档根是问题所在。谢谢,drew010!我知道了如果绝对路径是预期的…只要该文件夹存在(当然是在系统根目录中,而不是在文档根目录中),并且它是可写的,它也应该可以使用它。