【问题标题】:Using fopen and fwrite with Zend Framework?在 Zend 框架中使用 fopen 和 fwrite?
【发布时间】:2012-08-12 23:26:40
【问题描述】:

我正在尝试使用 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无法写入文件。

还有其他方法吗?

【问题讨论】:

  • 我通过 Zend 被包含在所有 PHP 中了吗?

标签: php zend-framework fopen


【解决方案1】:

很可能问题出在$filename 的路径上。

你有

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

它会尝试在服务器根目录中名为assessmentsFile 的目录中创建一个文件。

您很可能需要使用:

$filename = $_SERVER['DOCUMENT_ROOT'] . "/assessmentsFile/rubrics/$rubricID.php";

$_SERVER['DOCUMENT_ROOT'] 如果assessmentsFile 文件夹位于您的 Web 根目录中,则应该可以解决问题。否则,您可以使用其他变量来获得完全限定的路径,或者您可以简单地对路径进行硬编码:

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

【讨论】:

  • 正确。文档根是问题所在。谢谢,draw010!
  • 我认为绝对路径是有意的......只要该文件夹存在(当然在系统根目录中而不是在文档根目录中)并且它是可写的,它也应该可以使用它。
【解决方案2】:

有一个函数file_exists 可以告诉您文件是否存在,使用is_file 您可以检查它是一个文件(而不是一个目录)。

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

试试这个:

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

【讨论】:

  • 问题是,由于 fopen 不工作,fwrite 函数也不工作。
  • 如果文件不存在,使用模式“w”(不是“w+”)打开它,但要注意如果它已经存在,它会被截断。检查我编辑的答案...
  • 感谢您的回复。即使只有 w,我仍然收到错误 Cannot open file (/assessmentsFile/rubrics/1.php),并且没有创建文件。
  • 在打开文件之前尝试触摸文件:touch($filename)。另一件事是:应该创建文件,但没有创建目录。 /assessmentsFile/rubrics/ 是否存在?
  • 有趣。通过触摸,我看到了这个错误:Unable to create file /assessmentsFile/rubrics/1.php because No such file or directory in (myController.php)。控制器是否有可能阻止它到达控制器外部?编辑:刚刚意识到它也在为 fopen 吐出这个错误......我不明白为什么它会在控制器文件中寻找文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多