2014-02-22 177 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"
    • 重新启动您的网络服务器,你应该很好去!