我正在测试我是否正在运行PHP
。suPHP
当我发出phpinfo()
我得到了超过 600 行数据。suPHP
这里只提到了
<tr><td class="e">Loaded Modules </td><td class="v">core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_setenvif mod_status mod_suphp </td></tr>
我继续阅读另一个网站服务器 API 应该CGI
不是 Apache
为了运行suPHP
我尝试发布完整的输出,但它超过 30,000 个字符。如果您认为它很重要,我可以尝试放一半。
编辑看来 suPHP 部分工作正常。如果我加载脚本并发出getuserid()
或 ,get_current_user()
它会返回我的用户信息,而不是www-data
。但是,如果我尝试读取/写入没有权限供所有人读取/写入的文件,它会显示failed to open stream: Permission denied
。有什么想法可能导致这种情况吗?
答案1
该输出显示您已启用 DSO PHP 模块以及 SuPHP 模块,因此哪个解析器正在运行您的脚本取决于您的 Apache 配置。具体来说,这是由指令定义的AddHandler
。您可以检查您的 phpinfo() 以查找定义Server API
,如果它显示,CGI
则根据您提供的信息,您默认使用 SuPHP。
答案2
我终于弄清楚了问题出在哪里。我没有按照说明禁用正常的 php5 模块这里。我所要做的就是发出命令
a2dismod php5
/etc/init.d/apache2 restart
如果其他人遇到类似的问题,除了以下网站外,这里还有一些其他网站官方网站(完全没用)
最后,以下是您需要更改的文件以及应应用的更改
将以下内容添加到您的/etc/suphp/suphp.conf
文件中。请注意,您的文件可能存储在其他地方,建议查看其他网站/etc/suphp.conf
(还请注意,最后可能存在一些冗余,我还没有时间修复这个问题)。
[handlers]
;Handler for php-scripts
application/x-httpd-suphp="php:/usr/bin/php-cgi"
application/x-httpd-php="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"
x-httpd-suphp="php:/usr/bin/php-cgi"
/etc/apache2/apache2.conf
最后,将以下内容添加到文件末尾
suPHP_Engine on
suPHP_AddHandler application/x-httpd-php .php
suPHP_ConfigPath /etc/php5/cgi/