Недавно я перешел с 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>