2012-07-26 81 views
0

我需要編寫的文本文件,我嘗試使用此代碼入門的fopen/fwrite來寫不同的目錄

public function ResultsTrackingLogs($event, $message) { 
$logsDir = dirname(__FILE__) . "/logs/Results Tracking/$event/"; 
$fh = fopen($logsDir . "$event.txt", 'x') or die("can't open file"); 
fwrite($fh, $message); 
fclose($fh); 
} 

的​​轉化爲E:\Dropbox\htdocs\Scrapers\this超出了\$event\使得它如此每個事件都有自己的子文件夾。

反正我調整.. IE /logs/Results Tracking/ ..或\logs\Results Tracking\..

仍然給我一個錯誤fopen(E:\Dropbox\htdocs\Scrapers\this\logs/Results Tracking/event1/event1.txt): failed to open stream: No such file or directory.

目錄是存在的,我已經在這裏創建的.txt文件也沒有找到它。問題顯然在於我如何描述我的目錄結構。我該如何解決?我不想以前創建目錄結構,我需要它來創建文件夾,因爲它需要。

+0

你給這個文件有什麼權限?您的腳本必須具有寫入權限才能訪問它。 – Lix 2012-07-26 22:46:08

+0

錯誤消息是否實際上在其中說'$ incomingvalue'?因爲如果是這樣,你的變量不會被內插,並且你在文件名中有文字串'$ incomingvalue'。在這種情況下,您可能使用單引號字符串而不是雙引號字符串來聲明文件名。 – DaveRandom 2012-07-26 22:49:03

+0

我不明白如何在Windows中授予文件權限。當我使用'$ logDir = dirname(__FILE__)之類的東西。 「\\日誌/」; $ fileName = $ logDir。 $事件。 「 - 」。日期(「F j,Y - g_i_s A」)。 「熱媒」; $ fh = fopen($ fileName,'x')或死(「無法打開文件」); fwrite($ fh,$ message); fclose($ fh); '它的工作原理,但不是創建動態目錄。 – KiloJKilo 2012-07-26 22:50:19

回答

1

檢查目標目錄是否存在,如果不存在則創建它。

if(! is_dir($logsDir)) { mkdir($logsDir, 0777, true); } 

如果要描述路徑,則可以使用DIRECTORY_SEPARATOR

+0

我在窗戶上,0777部分仍然工作? – KiloJKilo 2012-07-26 22:53:36

+3

沒有斜槓/反斜槓問題。正斜線在任何地方都可以工作。只是他們不工作的唯一地方是cmd.exe - 他們甚至可以在explorer.exe和運行框的地址欄中工作。 – DaveRandom 2012-07-26 22:53:39

+0

@KiloJKilo權限參數在Windows上被有效忽略,因爲它在那裏沒有任何意義,Windows權限不能以這種方式工作。你可以傳遞任何價值,重要的是要真實地回答第三個問題。 – DaveRandom 2012-07-26 22:54:41