繁体   English   中英

CakePHP:权限被拒绝(13)

[英]CakePHP: Permission denied (13)

我想知道为什么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

首先,将所有内容都压缩到777是一个非常糟糕的主意 这意味着向服务器上的每个用户授予对所有内容的完全访问权限,这意味着有权访问您的Web服务器的任何人都可以编辑甚至删除您的文件。 将它与现实生活中的问题进行比较,就好像车门上的锁存在问题,您只是决定不再锁门。 这是在避免问题,而不是解决问题,如果有一天您的收音机不见了,您也不会感到惊讶。

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

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

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

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

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

    • 为会话创建一个文件夹,公用路径为/var/lib/php/session
    • 使您的Web服务器用户(通常是apachewww-data )成为该文件夹的所有者(例如chown apache.apache /var/lib/php/session
    • 为文件夹设置适当的chmod级别,因为只有Web服务器的用户/组才需要完全访问权限,所以640的chmod才需要( chmod 640 /var/lib/php/session
    • 将您的php.ini文件中的session.save_path编辑到此文件夹,这样您将在一行中显示: session.save_path = "/var/lib/php/session"
    • 重新启动您的网络服务器,您应该一切顺利!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM