同时运行 mod_php 和 suPHP

同时运行 mod_php 和 suPHP

我最近从 Debian Lenny 5.2.x 转而使用 mod_php 来处理不在 /home/ 中的任何 php 文件,并且能够使用 suPHP 来处理位于 /home/ 的所有 php 文件。

我这样做是因为我需要一个默认的 php.ini(为我在 /var/www/ 中的网站提供 php 的所有功能),并且我不想从 root 更改所有 .php 文件的所有者。我还为所有 /home/ php 文件提供了一个不包含危险功能的默认 php.ini。

这是我的设置:

    <IfModule mod_suphp.c>
        <Directory /home/>
                AddType application/x-httpd-php .php .php3 .php4 .php5
                suPHP_AddHandler application/x-httpd-php
                suPHP_Engine on

                suPHP_ConfigPath /home/shared/
        </Directory>
    </IfModule>

这本来是完美的,但最近我从 dotdeb 升级到了 PHP 5.3.5(Lenny 没有官方的 php 5.3)。这在 lenny 上出现了一些奇怪的问题,例如无法正确显示错误和一些小问题。所以我决定从 lenny 升级到 squeeze。卸载了 php(随之而来的是 suphp)并使用新源重新安装。我现在有 5.3.3-7 和 Debian Squeeze,但我无法再让 mod_php 和 suPHP 同时运行。mod_php 始终可以工作,apache2 或 suphp 日志中没有错误。如果我禁用 mod_php,那么 suPHP 就可以工作。

我做错什么了吗?

答案1

我能够通过将 放在php_admin_flag engine Off顶部来实现我想要的效果mod_suphp.c。此外,我还必须确保suPHP_Engine off默认使用。

最终结果:

    <IfModule mod_suphp.c>
        <Directory /home/>
                php_admin_flag engine Off
                AddType application/x-httpd-php .php .php3 .php4 .php5
                suPHP_AddHandler application/x-httpd-php
                suPHP_Engine on

                suPHP_ConfigPath /home/shared/
        </Directory>
    </IfModule>

对于那些想知道的人来说,这就是我所拥有的,除非我在虚拟主机中指定不同,否则/home/shared/php.ini他们将是每个/home用户:php.ini

allow_url_fopen = Off 
display_errors = On 
display_startup_errors = On 
log_errors = On 
error_reporting = E_ALL 
error_log = "/var/log/apache2/php_user_errors.log"
expose_php = Off 
magic_quotes_sybase = Off 
register_globals = Off
open_basedir = "/home:/tmp"
short_open_tag = On
session.save_path = "/tmp"
disable_functions = "phpinfo, apache_child_terminate,apache_get_modules,apache_get_version,apache_getenv,apache_note,apache_setenv,curl_exec,curl_multi_exec,dir,disk_free_space,diskfreespace,dl,eval,exec,fsockopen,highlight_file,ini_alter,ini_restore,ini_set,openlog,parse_ini_file,passthru,pclose,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,readfile,set_time_limit,shell_exec,show_source,stream_socket_server,symlink,system,virtual"

答案2

我需要一个默认的 php.ini(为我提供 php 的所有功能)用于 /var/www/ 中的网站,并且我不想从 root 更改所有 .php 文件的所有者。我还为所有 /home/ php 文件提供了一个不包含危险功能的默认 php.ini。

覆盖 httpd.conf 配置中的相关 ini 设置(然后允许 override none 以防止它们在 .htaccess 中被更改)不是更简单吗?就像……

<Directory /home/*/public_html>
   AllowOverride FileInfo AuthConfig Limit
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   php_admin_flag safe_mode On
   <Limit GET POST OPTIONS>
    Order allow,deny
    Allow from all
   </Limit>
   <LimitExcept GET POST OPTIONS>
    Order deny,allow
    Deny from all
   </LimitExcept>
</Directory>

相关内容