我怎样才能停止 PHP 只读取所有文件?

我怎样才能停止 PHP 只读取所有文件?

我正在设置一个新的 Centos 7 服务器,以通过带有 Nginx 的 PHP-FPM 在 PHP 5.6.40 上运行一些旧版网站。

但是,我遇到了一个问题,即所有文件似乎都是只读的。

PHP 在 nginx 用户下运行,站点目录归 nginx 所有,并且我已通过 chown 尝试了各种文件权限,包括“777”。

我创建了一个简单的程序来说明:

<?php
$fileList = glob('*');

//Loop through the array that glob returned.
foreach($fileList as $filename){
   //Simply print them out onto the screen.
   echo $filename;
   if (is_writable($filename))
      echo ' - Yes!';
   else
      echo ' - No.';
   echo '<br>';
}

这将输出站点目录中的文件,每个文件名旁边都有“否”。

如果我能提供任何关于导致这种情况的原因或如何调试的提示,我将不胜感激。

答案1

SELinux 不允许 nginx 或 php-fpm 写入随机目录。您需要通过设置其默认上下文,httpd_sys_rw_content_t然后设置任何现有文件的上下文,来告诉 SELinux 哪些目录应该可写。例如:

semanage fcontext -a -t httpd_sys_rw_content_t "/srv/www/my/uploads(/.*)?"
restorecon -rv /srv/www/my/uploads

相关内容