Yii PHP框架 "Application runtime path is not valid." 异常。

13

我尝试通过执行命令来创建一个yii项目进行测试

/var/www/html/yii/framework/yiic webapp demo

当我访问localhost/demo时,会出现错误:

Application runtime path "/var/www/html/demo/protected/runtime" is not valid. 
Please make sure it is a directory writable by the Web server process.

起初,我认为它确实是不可写的,因此我执行了以下操作:

chmod 777 /var/www/html/demo/protected/runtime

之前的方法都没有生效,最后一个想法是我执行了:

chmod 777 -R /var/www/html/demo/

我仍然遇到相同的异常。有什么想法可能出了问题吗?

---编辑---

这真让我抓狂。

drwxrwxrwx. 4 apache apache 4096 Jun  5 00:06 commands
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 components
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 config
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 controllers
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 data
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 extensions
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 messages
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 migrations
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 models
drwxrwxrwx. 3 apache apache 4096 Jun  5 00:06 runtime
drwxrwxrwx. 7 apache apache 4096 Jun  5 00:06 tests
drwxrwxrwx. 5 apache apache 4096 Jun  5 00:06 views
-rwxrwxrwx. 1 apache apache   71 Jun  5 00:02 yiic
-rwxrwxrwx. 1 apache apache  380 Jun  5 00:02 yiic.bat
-rwxrwxrwx. 1 apache apache  178 Jun  5 00:02 yiic.php

我仍然无法在 PHP 脚本中编写文件

9个回答

25

应该 能行... 所以也许尝试将您的Apache用户(通常是“www-data”)设置为 /runtime 的所有者?类似于:

 chown -R www-data:www-data /var/www/html/demo/protected/runtime

可能是 Apache 的 umask 问题。可以查看 Yii 论坛,那里有像这篇帖子一样有用的帖子:http://www.yiiframework.com/forum/index.php?/topic/19400-question-about-directoryfile-permissions/

您不应该将整个项目设置为 777,这非常不安全。我认为只有 /assets/protected/runtime 目录需要写入权限 (775)。


7
看起来您可能已经开启了SELinux,它执行自己的安全策略并且对Web应用程序可能会造成很大的麻烦,当它导致像这样的错误时非常恼人。每当您遇到权限问题时,检查是否开启SELinux是个好主意: /usr/sbin/getenforce(或类似命令,取决于您所使用的系统)。
请参阅:http://www.crypt.gen.nz/selinux/disable_selinux.html 以获取一个良好的概述以及如何关闭SELinux的方法(具体细节可能因操作系统/内核版本而异)。如果它是一个不公开访问的测试机器,您可以放心地关闭它;否则,您应该阅读上述网站以了解它的功能。大多数Linux包管理器都可以安装文件来帮助您管理特定应用程序的策略。在RH/CentOS上,您还可以使用 /usr/bin/system-config-securitylevel-tui 来开启/关闭它。

5
您输入了错误的chmod命令语法。请尝试以下命令:
sudo chmod -R 777 ./var/www/*

当你被提示时,请输入密码。

重要提示:

命令行末尾的星号非常重要。它表示当前目录中的所有文件。


1
当我在我的服务器上检查时,发现“runtime”文件夹丢失了,所以我只是将其上传到服务器上,然后它就可以工作了。这是“runtime”文件夹的路径:yoursite\protected\runtime。

1

您必须像这样使用semanage进行配置,以允许php-fpm对目录进行写入访问。

# semanage fcontext -a -t httpd_sys_rw_content_t 'YOUR_PATH_HERE'
# restorecon -v 'YOUR_PATH_HERE'

0

尝试再次将“runtime”文件夹上传到您的服务器上,这对我有用。


你能更明确地说明解决问题的步骤吗? - falsarella
当我在我的服务器上检查时,发现“runtime”文件夹丢失了,所以我只是将其上传到服务器上,然后它就可以工作了。 这是“runtime”文件夹的路径yoursite\protected\runtime - Abdur Rahman Warriach

-1

更改运行时文件夹的访问权限。在我的情况下,通过在 Plesk 平行面板中将运行时文件夹的 rwx rwx rwx 更改为可行。


1
@Hubert_J已经写道,在runtime文件夹上执行chmod 777没有起作用。 - Paweł Tomkiel

-1
如果您确定文件夹的权限设置正确,但仍然出现错误,请在使用CentOS时禁用SElinux或添加SElinux异常。编辑/etc/selinux/config文件以禁用SElinux,或运行此命令以添加异常:sudo chcon -t httpd_sys_rw_content_t /path/to/ur/annoying/folder -R

-1

使用以下命令更改整个站点文件夹的访问权限

sudo chmod -R 777 'name of your website folder'

这将解决问题。


这是一个非常糟糕的做法。 - Mariano Argañaraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接