我在通话时收到权限被拒绝的提示fopen()
,但前提是从 Apache 执行 PHP 脚本。
- 我尝试检查并再次检查权限,甚至尝试在正在写入的文件和包含该文件的目录上设置 777。
- selinux 已‘禁用’。
遇到错误的行是:
$logfile = fopen('/var/log/httpd/shib_session_logs/'.$filename,'a+');
/var/log/httpd/error_log 中的错误是:
[Sun May 31 21:33:40.012053 2020] [php7:warn] [pid 30107:tid 140627505252096] [client 10.0.1.206:39032] PHP Warning: fopen(/var/log/httpd/shib_session_logs/session_log_202061.log): failed to open stream: Permission denied in /var/www/html/shib/logwritter.php on line 9, referer: https://aiqsso.awsapps.com/start
最后,如果我在命令行运行,没有 Apache 参与,它就可以正常工作。
这有效:
php index.php
帮助?
添加信息:
文件如下/etc/httpd/conf.d/php.conf
:
#
# The following lines prevent .user.ini files from being viewed by Web clients.
#
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
Satisfy All
</IfModule>
</Files>
#
# Allow php to handle Multiviews
#
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
# mod_php options
<IfModule mod_php7.c>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
<FilesMatch \.(php|phar)$>
SetHandler application/x-httpd-php
</FilesMatch>
#
# Uncomment the following lines to allow PHP to pretty-print .phps
# files as PHP source code:
#
#<FilesMatch \.phps$>
# SetHandler application/x-httpd-php-source
#</FilesMatch>
#
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
php_value soap.wsdl_cache_dir "/var/lib/php/wsdlcache"
#php_value opcache.file_cache "/var/lib/php/opcache"
</IfModule>
需要帮助请叫我。
答案1
好的,我明白了。
主httpd
日志目录/var/log/httpd
以及该目录中的所有日志均归 拥有root
。但那些是 本身写入的日志httpd
。
显然,PHP 读取/写入的文件是在apache
用户和组的监督下进行的,如/etc/httpd/conf/httpd.conf
User apache
Group apache
我chown
将日志文件和日志文件所在的目录 改为/var/log/httpd/shib_session_logs
。apache:apache
但这并没有完全解决问题,因为保存 PHP 日志文件的目录/var/log/httpd/shib_session_logs
本身位于只有访问权限的目录中/var/log/httpd
。root
因此,我仍然被拒绝权限。当我放宽对该目录的读取权限时,一切都开始正常工作。
我将与这里的一些人讨论这个问题,最终,我们可能会将 PHP 日志目录移动到其他位置(之外),/var/log/httpd
并将权限重置/var/log/httpd
为 700。
无论如何,它有效!