为什么我在以普通用户而不是root用户身份运行脚本时会看到PHP通知和错误?

为什么我在以普通用户而不是root用户身份运行脚本时会看到PHP通知和错误?,php,Php,据我所知,用户之间的错误报告或消息重定向没有区别。它们都使用相同的PHPINI 然而,当我以普通用户的身份运行脚本时,会收到大量的通知,而以root用户的身份运行脚本时,则不会收到任何通知。当作为普通用户启动PHP交互模式时,我收到两条PHP警告:“memcache”和“xmlwriter”已经加载;当以root用户身份启动时,我没有收到任何警告 我知道我应该修正警告,而不是“让警告消失”,这是在罚单上。问题是,为什么用户受到不同的对待?为什么普通用户会收到通知和警告,而root用户却不会,即使

据我所知,用户之间的错误报告或消息重定向没有区别。它们都使用相同的PHPINI

然而,当我以普通用户的身份运行脚本时,会收到大量的通知,而以root用户的身份运行脚本时,则不会收到任何通知。当作为普通用户启动PHP交互模式时,我收到两条PHP警告:“memcache”和“xmlwriter”已经加载;当以root用户身份启动时,我没有收到任何警告


我知道我应该修正警告,而不是“让警告消失”,这是在罚单上。问题是,为什么用户受到不同的对待?为什么普通用户会收到通知和警告,而root用户却不会,即使他们的错误报告是相同的?

由于
$PATH
的不同,您正在执行的实际PHP二进制文件可能不同。您可以在使用memcache共享模块的
/usr/bin
中安装一个PHP副本,在
/usr/local/bin
中安装另一个PHP副本,并将其静态链接

两个可执行文件的配置都可以引用
/etc/php.ini
。如果配置文件告诉PHP尝试加载共享模块,那么静态链接该模块的副本将生成您得到的错误


以普通用户和root用户的身份尝试命令
which php
,它应该报告php可执行文件的位置。您还可以对每个用户说
echo$PATH
,以查看其正在搜索的目录。您可能需要从
$PATH
中添加/删除目录,您应该能够在
~/.profile
文件中执行此操作。

环境中有些不同

如果你试着这样调查会怎么样:

$ php -i > mortal
$ su php -i > root
$ diff mortal root

这两个用户的环境完全相同吗?环境完全相同:$php Script.php$su-#php Script.php我第一次收到错误消息,但在将用户切换到root之后没有错误消息。谢谢,我检查了这一点,看起来他们使用的是相同的二进制文件,~/.profile中没有任何差异。谢谢你的努力;在这一点上,我只想假设“PHP就是这样做的”,PHP会抑制对root用户的警告,从而使普通用户能够通过。我可以通过更改error_reporting变量中的位标志来复制效果。