2012-08-12 75 views
1

我試圖檢查文件存在與Zend框架,如果該文件不存在,讓它被創建。這裏的正在使用的代碼:在Zend Framework中使用fopen和fwrite?

$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的方式,如果文件不存在,它只是吐出:

Warning: fopen(/assessmentsFile/rubrics/1.php) [function.fopen]: failed to open stream: No such file or directory

因爲fopen函數ISN不工作,fwrite無法寫入文件。

是否有另一種方法呢?

+0

我通過Zend被包含在所有PHP中? – 2012-08-12 23:47:27

回答

2

最有可能的問題與路徑$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"; 
+0

對。文檔根是問題。謝謝,drew010! – 2012-08-12 23:47:58

+0

您打賭,感謝您發佈好的細節和代碼示例。 – drew010 2012-08-12 23:49:30

+0

我認爲絕對路徑是......只要該文件夾存在(當然是在系統根目錄中,而不是在文檔根目錄中)並且它是可寫的,它也可以使用它。 – 2012-08-12 23:54:04

1

有一個功能file_exists告訴你,如果該文件存在,並與is_file你可以檢查它是一個文件(而不是一個目錄,例如)。

(另一種方式是通過將一個@的函數調用之前(例如,[email protected](...)禁止警告,但它是更好地檢查文件的存在)

試試這個:

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

問題是,由於fopen沒有工作,fwrite函數也沒有。 – 2012-08-12 23:31:35

+0

如果文件不存在,請使用模式「w」(而不是「w +」)打開它,但要注意,如果它已經存在,它將被截斷。檢查我編輯的答案... – 2012-08-12 23:34:09

+0

感謝您的回覆。即使只是w,我仍然得到錯誤'無法打開文件(/assessmentsFile/rubrics/1.php)',並且沒有文件被創建。 – 2012-08-12 23:36:02