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.php
和ls -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字节已用尽