如何解决“PHP 致命错误:未知:需要打开失败”

Dal*_*yen 6 php wordpress .htaccess ubuntu-server ubuntu-16.04

我在 LAMP 堆栈上有两个站点。其中一个(Site1)使用 WordPress 和 Wordfence,并且运行得非常好。第二个网站(Site2)只运行一个简单的index.php文件:

<?php
echo "Testing";
?>
Run Code Online (Sandbox Code Playgroud)

但是,它显示 HTTP ERROR 500,错误日志如下。

[Thu Dec 22 16:23:44.774993 2016] [:error] [pid 56607] [client xxx:27253] PHP Warning:  Unknown: failed to open stream: No such file or directory in Unknown on line 0
[Thu Dec 22 16:23:44.775042 2016] [:error] [pid 56607] [client xxx:27253] PHP Fatal error:  Unknown: Failed opening required '/var/www/site1/public_html/public/wordfence-waf.php' (include_path='.:/usr/share/php') in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

Site1和Site2彼此无关,它们位于不同的文件夹中。我不确定发生了什么事。请指教。

Site1 上的.htaccess文件

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Wordfence WAF
<IfModule mod_php7.c>
        php_value auto_prepend_file '/var/www/site1/public_html/public/wordfence-waf.php'
</IfModule>
<Files ".user.ini">
<IfModule mod_authz_core.c>
        Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
</IfModule>
</Files>

# END Wordfence WAF
Run Code Online (Sandbox Code Playgroud)

Dal*_*yen 1

感谢@EdCottrell。我终于找到了答案。

首先,我通过在工作站点上创建 info.php进行调试以查找php.ini 的位置。

<? php phpinfo(); ?>
Run Code Online (Sandbox Code Playgroud)

然后,我查找 a ​​uto_prepend_file =是否有任何值。如果是,请将其删除。

然后我打开site1.conf文件并添加auto_prepend_file行而不是 .htaccess 中的行

<Directory "/path/to/folder">
    php_value auto_prepend_file /absolute/path/to/apache-prepend.php
</Directory>
Run Code Online (Sandbox Code Playgroud)

重新启动Apache服务器后,一切又恢复正常了!

sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)