我尝试通过执行
制作一个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/
我仍然得到同样的例外。关于可能出错的任何想法?
--- --- EDIT
FFS这让我感到疯狂
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脚本中编写文件
答案 0 :(得分:24)
应该工作...所以也许尝试将您的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)。
答案 1 :(得分:6)
看起来您可能启用了SELinux,这会强制执行它自己的安全策略,对于Web应用程序来说可能是一个真正的痛苦,并且当它最终导致这样的错误时非常烦人。每当你遇到时髦的权限问题时,最好检查一下你是否设置了它:
/usr/sbin/getenforce
(或类似的,取决于您所使用的系统)。
请参阅:http://www.crypt.gen.nz/selinux/disable_selinux.html以获得良好的概述以及如何将其关闭(同样,细节可能因操作系统/内核版本而异)。如果它是一个无法公开访问的测试机器,您可以非常安全地将其关闭,否则,您应该阅读上面的网站以了解它的作用。大多数Linux软件包管理器都可以安装文件来帮助您管理特定应用程序的策略。在RH / CentOS上,您也可以使用/usr/bin/system-config-securitylevel-tui
打开/关闭它。
答案 2 :(得分:5)
您为chmod
命令输入了错误的语法。试试这个:
sudo chmod -R 777 ./var/www/*
在提示时输入密码。
重要提示:
命令行末尾的星号非常重要。它表示当前目录中的所有文件。
答案 3 :(得分:1)
你必须使用这样的semanage配置,允许php-fpm写入目录访问
# semanage fcontext -a -t httpd_sys_rw_content_t 'YOUR_PATH_HERE'
# restorecon -v 'YOUR_PATH_HERE'
答案 4 :(得分:1)
当我在我的服务器上检查它时,'runtime'文件夹丢失了,所以我只是将它上传到服务器上并且它可以工作。以下是'runtime'文件夹yoursite \ protected \ runtime -
的路径答案 5 :(得分:0)
尝试上传'运行时'您的服务器上的文件夹,这对我有用。
答案 6 :(得分:-1)
更改运行时文件夹的访问权限。在我的情况下,在plesk并行面板中更改rwx rwx rwx以便运行时文件夹工作。
答案 7 :(得分:-1)
使用以下命令
更改了对网站整个文件夹的访问权限sudo chmod -R 777 'name of your website folder'
这将解决问题。
答案 8 :(得分:-1)
如果您确定文件夹的文件权限设置正确并且仍然收到错误,那么如果您使用CentOS,则禁用SElinux或为SElinux添加例外。
编辑/etc/selinux/config file
以禁用SElinux或运行此命令以添加例外
sudo chcon -t httpd_sys_rw_content_t /path/to/ur/annoying/folder -R