2014-02-22 147 views
1

我想知道爲什麼CakePHP是給這個錯誤。我改變了這一切文件爲777權限,但沒有工作:(CakePHP的:權限被拒絕(13)

警告:在session_start()函數.session啓動:開(/ TMP/sess_c885be0c60e567d6c6c7571c61601f71,O_RDWR)失敗:權限被拒絕(13)[CORE /蛋糕/型號/數據源/ CakeSession.php線618]

session_start - [internal], line 
CakeSession::_startSession() - CORE/Cake/Model/Datasource/CakeSession.php, line 618 
CakeSession::start() - CORE/Cake/Model/Datasource/CakeSession.php, line 190 
CakeSession::check() - CORE/Cake/Model/Datasource/CakeSession.php, line 216 
SessionHelper::flash() - CORE/Cake/View/Helper/SessionHelper.php, line 123 
include - APP/View/Layouts/default.ctp, line 53 
View::_evaluate() - CORE/Cake/View/View.php, line 945 
View::_render() - CORE/Cake/View/View.php, line 907 
View::renderLayout() - CORE/Cake/View/View.php, line 535 
View::render() - CORE/Cake/View/View.php, line 479 
Controller::render() - CORE/Cake/Controller/Controller.php, line 948 
ScriptsController::javascript() - APP/Controller/ScriptsController.php, line 31 
ReflectionMethod::invokeArgs() - [internal], line ?? 
Controller::invokeAction() - CORE/Cake/Controller/Controller.php, line 486 
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 187 
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 162 
[main] - APP/webroot/index.php, line 111 

回答

3

首先,chmodding一切爲777 這意味着給服務器上的每個用戶完全訪問所有內容,這意味着任何有權訪問您的Web服務器的人都可以編輯,甚至可以編輯刪除你的文件。將它與現實生活中的問題相比較,就好像您的車門鎖有問題,而您決定再也不會鎖門。它避免了問題而不是修復它,如果有一天你的收音機不見了,你不應該感到驚訝。

這就是說,你的問題的核心是你的Cake應用程序(或實際上它調用的內部PHP函數session_start)沒有權限編寫文件/tmp/sess_c885be0c60e567d6c6c7571c61601f71,這是PHP會話文件。默認情況下,大多數PHP安裝會嘗試將其會話寫入服務器上的/ tmp文件夾。在這種情況下,這似乎不起作用。

這是幾個了可能的解決方案:

  1. 如果應用程序是,如果你有一個支付託管計劃,只是不是自己(如管理的服務器上運行FTP訪問您自己的域名文件夾),請聯繫管理服務器的人員/用戶並要求他們將/ tmp目錄設置爲可寫。他們應該能夠妥善解決這個問題。

  2. 在你的app/Config/core.php中,設置一個不同的方式來存儲Cake會話。有幾個選項可用,全部在文件中解釋(右圖here)。使用cake,cachedatabase選項應確保您的會話始終可以正確訪問。

  3. 如果您自己管理Web服務器,您可以爲PHP會話提供適當的訪問權限的自己的文件夾。該步驟包括幾個任務:

    • 爲會話創建一個文件夾,一個共同的路徑是/var/lib/php/session
    • 讓您的Web服務器用戶(通常apachewww-data)是該文件夾的所有者(例如chown apache.apache /var/lib/php/session
    • 設置正確的CHMOD級別的文件夾,因爲只有web服務器的用戶/組需要完全訪問權限,770在chmod會做(chmod 770 /var/lib/php/session
    • 編輯session.save_path在php.ini文件到這個文件夾,所以你會有一行說:session.save_path = "/var/lib/php/session"
    • 重新啓動您的網絡服務器,你應該很好去!