CakePHP:权限被拒绝(13)

时间:2014-02-22 15:19:23

标签: php cakephp permissions file-permissions

我想知道为什么cakephp会出现这个错误..我将所有文件更改为777权限但不起作用:(

警告:session_start()[function.session-start:open(/ tmp / sess_c885be0c60e567d6c6c7571c61601f71,O_RDWR)失败:权限被拒绝(13)[CORE / Cake / Model / Datasource / 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

1 个答案:

答案 0 :(得分:4)

首先,将所有内容修改为777是非常糟糕的主意。这意味着为服务器上的每个用户提供对所有内容的完全访问权限,这意味着有权访问您的网络服务器的任何人都可以编辑甚至删除您将它与现实生活中的问题进行比较,就好像车门上的锁有问题而你决定永远不再锁门。这是避免问题而不是解决问题,如果有一天你的收音机不见了,你不应该感到惊讶。

话虽如此,问题的核心是你的Cake应用程序(或实际上它正在调用的内部PHP函数session_start)没有写入文件/tmp/sess_c885be0c60e567d6c6c7571c61601f71的权限,这是PHP会话文件。默认情况下,大多数PHP安装都会尝试将其会话写入服务器上的/ tmp文件夹。在这种情况下,这似乎不起作用。

以下是一些可行的解决方案:

  1. 如果应用程序在不是由您自己管理的服务器上运行(例如,如果您有付费托管计划并且只有FTP访问您自己的域文件夹),请联系管理服务器的人员/方请他们让/ tmp目录可写。他们应该能够妥善解决这个问题。

  2. app/Config/core.php中,设置另一种方式来存储Cake会话。有几个选项可用,所有选项都在文件中解释(右here)。使用cakecachedatabase选项可确保始终可以正确访问您的会话。

  3. 如果您自己管理Web服务器,则可以为PHP会话提供具有适当访问权限的自己的文件夹。此步骤包含一些任务:

    • 为会话创建一个文件夹,常用路径为/var/lib/php/session
    • 让您的网络服务器用户(通常为apachewww-data)成为此文件夹的所有者(例如chown apache.apache /var/lib/php/session
    • 将正确的chmod级别设置为该文件夹,因为只有网络服务器的用户/组需要完全访问权限,而640的chmod将执行(chmod 640 /var/lib/php/session
    • 将php.ini文件中的session.save_path编辑到此文件夹,这样您就会有一行说明:session.save_path = "/var/lib/php/session"
    • 重新启动您的网络服务器,您应该好好去!