2011-04-21 52 views
2

我運行標準上OSX 10.5.8安裝PHP和Apache的,並且該文件夾的文件模式設置,我試圖打開(訂單)爲777,組是_WWW。在PHP在OSX 10.5的fopen =權限被拒絕

$filename = 'orders/54c9942b.txt'; 

if (!$handle = fopen($filename, 'w')) { 
    return(false); 
} 

我得到如下:

Warning: fopen(orders/54c9942b.txt) [function.fopen]: failed to open stream: Permission denied in /Users/New/Sites/thisisnothere/order-save.php on line 36 

* 編輯:我測試了我的網絡服務器(一個我支付,而不是一個我的設置)和它的作品如我所料。這導致我相信這是配置我的服務器的問題,也許是Apache中的訪問問題?或PHP?我完全不熟悉Apache的配置。

回答

1

嘗試使用在你的fopen()函數命令的完整文件系統路徑,看看是否可行。嘗試它在其他地方你也知道會工作(也許/tmp)。

+0

它在我嘗試寫入/ tmp時起作用,這感覺就像是進步。然而,完整的路徑不起作用。 – 2011-04-21 22:56:04

+0

我仔細檢查過,而我試圖寫入的文件夾CHMOD畢竟不是777。 D'哦。感謝檢查寫入/ tmp的提示,它讓我知道錯誤不在PHP中! – 2011-04-21 23:03:18

0

的事項的權限,該文件,而不是它在目錄中的。我敢肯定,這就是你的問題。 「

+0

雖然文件還不存在 - 我試圖用fopen創建它。這不是我應該如何創建一個新文件? – 2011-04-21 22:21:18

0

」如果您試圖讓該程序運行並且出現錯誤,則可能需要檢查是否已授予您的PHP文件訪問權限,以便將信息寫入硬盤驅動器中「取自tizag.com因此聽起來像是您應該如泰勒所言,設置php文件本身的權限。

+0

正在撥打電話的PHP文件是CHMOD 777,是否不允許?所有者是相同的(我的計算機名稱),並且該組在PHP文件上是_WWW。 (與我正在嘗試寫入的文件夾相同)。 – 2011-04-21 22:37:16

0

我有你的解決方案,但我不是一個安全專家,所以只能在本地主機,如果使用此解決方案你的數據不是如信用卡號碼,醫療信息等,也許其他一些專家在這裏發表評論,敏感那。

它是否有差別,如果你直接調用PHP的自己一個控制檯上,或者如果您通過您的本地Web服務器調用相同的PHP文件。我發現我的mac(獅子)以用戶「localaccounts」的身份通過web服務器運行php。

然後,我已經解決了的問題如下:

步驟1:更改組的當前目錄,並且您需要通過Web服務器名爲「localaccounts」集團要修改的文件。例如。在終端輸入以下命令將其應用於當前目錄,子目錄「user images」和文件foo.sqlite。

chgrp -R localaccounts . foo.sqlite user\ images/ 

步驟2:授予組成員使用commad

chmod g+w -R . foo.sqlite user\ images/ 

注意,圓點表示當前目錄寫權限。

我想對我的託管商同樣的事情,但他們不允許這種方式。相反,他們建議我使用PHP CGI。 PHP會像我的FTP用戶訪問那樣執行。我想這更安全,但我還沒有嘗試過。