2014-01-07 63 views
2

我在使用fopen()創建文本文檔以便稍後用作Cookie文件時遇到問題。PHP - 在Ubuntu中創建.txt文檔

我已閱讀the documentation這個功能,但無濟於事。

注:

  • Ubuntu的
  • 讀/寫( 「W +」)
  • 我嘗試了好幾種存儲位置包括:
    • /家庭/插孔/桌面/餅乾
    • /var/www/cookie
    • /home/jack/Documents/cookie

PHP

echo "debug"; 
echo "\r\n"; 

$cookie = fopen("/home/jack/Documents/cookie", "w+"); 
fclose($cookie); 

if(!file_exists($cookie) || !is_writable($cookie)) 
{ 
    if(!file_exists($cookie)) 
    { 
     echo 'Cookie file does not exist.'; 
    } 
    if(!is_writable($cookie)) 
    { 
     echo 'Cookie file is not writable.'; 
    } 

    exit; 
} 

結果

  • 文件不被創建
  • 輸出到瀏覽器:debug Cookie file does not exist.Cookie file is not writable.

其他有趣的事實

  • 我一直在使用fopen(realpath("/home/jack/Documents/cookie"), "w+")
  • echo "\r\n"試圖給出一個空間。爲什麼不換一個換行符?

我相信問題必須與我的權限來創建文件,但我沒有任何問題「右鍵單擊」在桌面上創建文本文檔。

這適用這適用這適用這適用這適用這適用這適用

echo "debug"; 
echo "\n"; 

$jack = "jack"; 
$cookie = "/home/jack/Documents/cookie"; 
touch($cookie); 
chmod($cookie, 0760); 

if(!file_exists($cookie) || !is_writable($cookie)) 
{ 
    if(!file_exists($cookie)) 
    { 
     echo 'Cookie file does not exist.'; 
    } 
    if(!is_writable($cookie)) 
    { 
     echo 'Cookie file is not writable.'; 
    } 

    exit; 
} 

fclose($cookie); 

這適用這適用這適用這適用這工作 THIS作品這個作品

而不是fopen() ..

  • touch()創建
  • chmod()的權限

我還添加用戶名插孔www數據組。

  • chmod($path, 0760)組讀/寫

參考

  • chmod()八進制值here
+5

第一步:[打開錯誤報告](http://stackoverflow.com/a/6575502/1438393)。 –

+1

您的網絡服務器是否以您登錄的用戶身份運行,就像您右鍵單擊一樣? (如果是這樣,你可能做了一些可怕的錯誤)。 – geoffspear

+0

1)在Unix機器上使用'\ n'換行符; 2)文件有什麼權限/所有者? –

回答

1

Web服務器不作爲您的用戶執行。 touch /home/jack/Documents/cookie && chmod 777 /home/jack/Documents/cookie以允許Web服務器用戶訪問該文件。

注意在生產環境中這是不好的。

3

再次查看file_exists的文檔。它不需要文件句柄作爲參數,它需要一個字符串文件名。 is_writable也是如此。即使這樣做,你打開文件句柄,然後立即關閉它,所以我不知道爲什麼你要關閉後試圖使用文件指針。

您可能是正確的,因爲您設置了不正確的權限,但我會先從這裏開始。

另外,如果你只是想創建文件,你可以考慮使用touch方法,而不是:

if(touch($filename)) { 
    // It worked! 
} else { 
    // It didn't work... 
} 
1

它看起來像一個權限問題。 PHP運行的用戶是什麼?它很可能以www數據或類似的方式運行。您應確保您嘗試寫入的文件夾可由PHP運行的用戶或組寫入。如果您在登錄插孔時創建了這些文件夾,則它們可能屬於jack:jack並且無法通過www-data:www-data進行訪問。

您還可以將插孔添加到www-data組中,以使開發更容易。

+0

哦..是的。上面的答案也是很好的一點。 –