CakePHP:权限被拒绝 (13)

Jho*_* G. 1 php permissions file-permissions cakephp

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

警告:session_start() [function.session-start: open(/tmp/sess_c885be0c60e567d6c6c7571c61601f71, O_RDWR) failed: Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php line 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
Run Code Online (Sandbox Code Playgroud)

Old*_*ool 5

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

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

这些是一些可能的解决方案:

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

  2. 在您的 中app/Config/core.php,设置不同的方式来存储 Cake 会话。有几个选项可用,所有选项都在文件本身中进行了解释(就在此处)。使用cake,cachedatabase选项应确保您的会话始终可以正确访问。

  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)
    • session.save_path将 php.ini 文件中的编辑到此文件夹中,因此您将有一行显示:session.save_path = "/var/lib/php/session"
    • 重新启动您的网络服务器,您应该一切顺利!