Назад | Перейти на главную страницу

Запуск mod_php и suPHP одновременно

Недавно я перешел с Debian Lenny с 5.2.x и смог использовать mod_php для любых файлов php, которые не были расположены в / home /, и suPHP для всех файлов php, которые были расположены в / home /.

Я сделал это, потому что мне нужен php.ini по умолчанию (с учетом всех функций php) для моих веб-сайтов в / var / www /, и я не хотел менять владельца всех файлов .php от root. У меня также был php.ini по умолчанию для всех файлов / home / php без опасных функций.

У меня была настройка:

    <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>

Это работало отлично, но недавно я обновился до PHP до 5.3.5 с dotdeb (у Ленни нет официального php 5.3). У lenny были странные проблемы, такие как некорректное отображение ошибок и мелких деталей. Вот и решил обновиться с lenny до squeeze. Удалил php (вместе с ним пришел suphp) и переустановил с новым исходным кодом. Теперь у меня 5.3.3-7 с Debian Squeeze, но я больше не могу заставить работать mod_php и suPHP одновременно. mod_php всегда будет работать, и в журналах apache2 или suphp ошибок нет. Если я отключил mod_php, suPHP будет работать.

Что-то я делаю не так?

Я смог добиться того, чего хотел, поставив 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 если я не укажу иначе в vhosts:

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"

Мне нужен был php.ini по умолчанию (со всеми функциями php) для моих веб-сайтов в / var / www /, и я не хотел менять владельца всех файлов .php от root. У меня также был php.ini по умолчанию для всех файлов / home / php без опасных функций.

Разве не было бы проще переопределить соответствующие настройки ini в конфигурациях httpd.conf (а затем разрешить переопределение 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>