PHP致命错误:未知:将其添加为auto_prepend_file后无法打开所需的'/home/user/pathto/header.php'

Posted

技术标签:

【中文标题】PHP致命错误:未知:将其添加为auto_prepend_file后无法打开所需的\'/home/user/pathto/header.php\'【英文标题】:PHP Fatal error: Unknown: Failed opening required '/home/user/pathto/header.php' after adding it as auto_prepend_filePHP致命错误:未知:将其添加为auto_prepend_file后无法打开所需的'/home/user/pathto/header.php' 【发布时间】:2018-07-06 18:12:04 【问题描述】:

我的目标是在 Kubuntu 16.04 中为本地开发网站配置 php 分析。

根据文档安装 tideways 并检查它是否正确安装:

php --ri tideways_xhprof

创建header.php,内容如下

<?php 

tideways_xhprof_enable();

添加了对 php.ini

的引用
auto_prepend_file = "/home/user/pathto/header.php"

重启apache2

并在 apache 错误日志中得到以下错误:

[2018 年 1 月 27 日星期六 17:54:24.233604] [:error] [pid 15976] [client 127.0.0.1:42054] PHP 警告:未知:无法打开流:第 0 行的未知中的权限被拒绝 [Sat Jan 27 17:54:24.233653 2018] [:error] [pid 15976] [client 127.0.0.1:42054] PHP 致命错误: 未知:打开失败需要'/home/user/pathto/header.php' (include_path='.:/usr/share/php') 在第 0 行的 Unknown

尝试添加指令

php_value auto_prepend_file /home/user/pathto/header.php 

apache2.conf 中网站的 Directory 块,但弹出相同的错误。

怎么了?哪些权限有问题? 问候。

【问题讨论】:

您要包含的文件究竟在哪里?您似乎正在尝试同时使用 /home/user/pathto/header.php 和 /home/rok/dev/phpWorkspace/cc/header.php? “无法打开流:权限被拒绝”——我猜运行 Apache 的用户无法访问该文件。尝试将文件移到您的主文件夹之外。 www-data 是 apache 用户。该用户是否有权访问 rok 主目录中的文件……可能没有。把你的文件放在 /var/www/html 的某个地方。 运行命令ls -l /home/user/pathto/header.phpls -l /home/user/pathto会得到什么 @Brian Gottier 谢谢。你是对的。将 header.php 放到 /var/www/html 之后。错误消失了 【参考方案1】:

Linux 使用一种权限模型,该模型包含可以属于组的用户,以及可以分配给这些用户和组的文件和目录。默认情况下,当您在 Ubuntu 上安装 Apache 和 PHP 时,您最终会得到一个名为“www-data”的 Apache 新用户。每当 Apache 运行并需要访问文件系统时,它与任何其他用户没有什么不同,并且操作系统需要与任何其他用户相同的权限。

所以从技术上讲,如果您希望 PHP 脚本位于用户的主目录中,您必须以某种方式授予 Apache 的 www-data 用户访问那里文件的权限。

当我设置一个新服务器时,我通常会将自己添加到 www-data 组:

# add user brian to the www-data group
sudo usermod -a -G www-data brian

这让我更容易管理文件(一旦我完成了接下来的步骤),因为我不需要使用 sudo 来更改文件。

我会让 www-data 拥有 /var/www 下的所有内容

# Change all files at /var/www recursively to be owned by www-data
sudo chown -R www-data:www-data /var/www

让在 /var/www 下创建的新文件最终归 www-data 所有:

#set the gid on any new dir inside /var/www
sudo chmod 2755 /var/www/html

然后将自己设置为所有者,而不是 www-data:

# Be the owner of all www
sudo chown -R brian:www-data /var/www

请注意,我从来没有授予/var/www 之外的权限,但这使得管理/var/www 中的文件和目录更容易,因此您不需要将PHP 文件放在主目录中。

【讨论】:

以上是关于PHP致命错误:未知:将其添加为auto_prepend_file后无法打开所需的'/home/user/pathto/header.php'的主要内容,如果未能解决你的问题,请参考以下文章

PHP 致命错误:未捕获的错误:调用字符串中的成员函数 diff()

Composer 要求内存不足。 PHP致命错误:允许的内存大小为1610612736字节已用尽

颤振医生致命,未知修订或路径不在工作树错误中

致命错误:未知:Laravel 5.2 Auth 中需要打开失败错误

致命异常:未知错误(代码 14)无法打开数据库

PHP文件不在Windows机器中执行