2011-09-08 58 views
0

我的一個PHP腳本將數據寫入文件。它正在執行沒有問題。但是這就要求以同樣的方式和(對於試圖清理這個問題的目的)位於同一目錄中相同的方式,我的測試代碼報告的是:PHP - 寫入文件 - 權限被拒絕的一個腳本,但不是在同一目錄中的另一個

failed to open stream: Permission denied 

錯誤。

我正確地執行腳本是:

try { 
    $printer = new PDFPrinter(); 
    $FDFData = $printer->assembleFDFData(5); 
    $fdf_file = $printer->writeFDFFile($FDFData); 
    $printer->downloadForm($fdf_file); 
}catch(Exception $e) { 
    echo $e->getMessage(); 
} 

和我的測試代碼:

function setUp() { 
     $this->printer = new PDFPrinter(); 
     $this->FDFData = $this->printer->assembleFDFData(5); 
    } 

    function testWrite() { 
     try { 
      $this->printer->writeFDFFile($this->FDFData); 
      $this-assertTrue(true); 
     } catch(Exception $e) { 
      $this->assertTrue(false); 
     } 
    } 

我知道testWrite測試代碼是壞的,但我只想得到它停止拋首先是例外。

腳本在執行writeFDFFile($this->FDFData);方法時會拋出異常,因爲它會嘗試打開要寫入的文件。這是失敗的代碼:

$fp=fopen($fdf_file,'w') 

我不明白兩個文件具有相同的權限相同的目錄如何執行相同的代碼時,可以不同的方式工作。

我會做什麼錯?

非常感謝

+1

'$ fp = fopen($ fdf_file,'w')'與上面的代碼有什麼關係? –

+0

嗨。對不起,如果這不清楚,我已編輯我的帖子,以顯示fopen代碼是writePDFFile()方法的一部分。 – Joe

回答

1

你如何運行標準和測試代碼?也許你通過apache運行標準代碼(在瀏覽器中打開),但是直接通過php測試代碼(從IDE運行)。也許Apache有權限,但PHP不是。也許工作目錄是不同的($ fdf_file包含絕對路徑?)。

另請注意,「未能打開流:權限被拒絕」是警告(非致命錯誤),當您運行標準代碼時,此警告不會停止執行。但PHPUnit將警告轉換爲異常,並且在PHPUnit下運行代碼時,此警告將停止執行。

相關問題