我在通话时被拒绝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>
需要帮助请叫我。
好的,我想通了。
主
httpd
日志目录/var/log/httpd
以及该目录中的所有日志都归root
. 但是,这些是它httpd
自己写的日志。apache
显然,PHP 读取/写入的文件是在用户和组的支持下进行的,如/etc/httpd/conf/httpd.conf
我
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。无论如何,它有效!