在 PHP 中调用 fopen 时,我仅收到来自 Apache 的权限被拒绝错误

在 PHP 中调用 fopen 时,我仅收到来自 Apache 的权限被拒绝错误

我在通话时收到权限被拒绝的提示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_logsapache:apache但这并没有完全解决问题,因为保存 PHP 日志文件的目录/var/log/httpd/shib_session_logs本身位于只有访问权限的目录中/var/log/httpdroot因此,我仍然被拒绝权限。当我放宽对该目录的读取权限时,一切都开始正常工作。

我将与这里的一些人讨论这个问题,最终,我们可能会将 PHP 日志目录移动到其他位置(之外),/var/log/httpd并将权限重置/var/log/httpd为 700。

无论如何,它有效!

相关内容