- Настройка параметров PHP
- Настройка опций в файле .htaccess
- apc.cache_by_default
- default_charset
- display_errors
- log_errors
- magic_quotes_gpc
- mail.add_x_header
- max_input_vars
- mbstring.func_overload и mbstring.internal_encoding
- opcache.revalidate_freq
- pcre.recursion_limit
- post_max_size
- register_globals
- request_order
- upload_max_filesize
- Настройка опций в файле php.ini
- allow_url_fopen
- apc.cache_by_default
- default_charset
- display_errors
- magic_quotes_gpc
- mail.add_x_header
- max_input_vars
- mbstring.func_overload и mbstring.internal_encoding
- opcache.revalidate_freq
- pcre.recursion_limit
- post_max_size
- register_globals
- request_order
- upload_max_filesize
- Опции, которые не могут быть изменены
- Просмотр параметров php
- Installed as CGI binary
Настройка параметров PHP
PHP в рамках виртуального хостинга может работать в двух режимах — mod_php и mod_cgi :
- В первом случае PHP функционирует как модуль веб-сервера Apache, поэтому настройки PHP необходимо указывать в файле .htaccess .
- Во втором случае настройки PHP необходимо указывать в файле php.ini , который располагается в директории cgi-bin вашего сайта.
По умолчанию на новых серверах PHP работает в режиме mod_php, но при желании вы можете подключить режим mod_cgi, воспользовавшись нашей инструкцией .
Настройка опций в файле .htaccess
Директивы необходимо добавлять в самый конец или в самое начало файла, вне блоков кода
apc.cache_by_default
APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.
Управление APC осуществляется директивами:
php_flag apc.cache_by_default on
php_flag apc.cache_by_default off
default_charset
Директива указывает кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц.
AddDefaultCharset cp1251
php_value default_charset cp1251
display_errors
Директива указывает, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Включение и выключение осуществляются следующим образом:
php_value display_errors 0
php_value display_errors 1
log_errors
Опция позволяет включить логирование ошибок php с их записью в произвольный файл (в примере errors.log). При указании пути к файлу замените u и user на первую букву вашего логина и сам логин.
php_value log_errors on
php_value error_log /home/u/user/путь_к_файлу/errors.log
magic_quotes_gpc
Волшебные кавычки (Magic Quotes) — это процесс автоматического экранирования входящих данных PHP-скрипта. Если опция включена, то одинарные (‘) и двойные («) кавычки и обратный слэш (\)экранируются обратным слэшем автоматически.
Включение и выключение magic_quotes осуществляется директивами:
php_flag magic_quotes_gpc on
php_flag magic_quotes_gpc off
mail.add_x_header
Опция позволяет включить логирование отправки почты из скриптов сайта. Логи будут содержать полный путь до скрипта, адрес получателя и заголовки. При указании пути к файлу, в который будут записываться логи ( mail.log ), замените u и user на первую букву вашего логина и сам логин.
php_value mail.add_x_header 1
php_value mail.log /home/u/user/public_html/mail.log
max_input_vars
Директива указывает, сколько входных переменных может быть принято в одном запросе. Например:
php_value max_input_vars 11000
mbstring.func_overload и mbstring.internal_encoding
Для корректной работы сайтов на старых версиях CMS Битрикс (до v20.100.0) требуются следующие параметры:
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8
opcache.revalidate_freq
Отключение OpCache (настройка требуется для CMS Битрикс):
php_value opcache.revalidate_freq 0
pcre.recursion_limit
Устанавливает лимит на рекурсию.
php_value pcre.recursion_limit 14000
post_max_size
Опция устанавливает максимально допустимый размер данных, отправляемых методом POST. Также это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize .
php_value post_max_size 40M
register_globals
Директивы для включения/выключения глобальных переменных:
php_flag register_globals on
php_flag register_globals off
request_order
Директива регулирует порядок, в котором PHP добавляет переменные GET , POST и Cookie в массив _REQUEST .
php_value request_order GPC
upload_max_filesize
Устанавливает максимальный размер закачиваемого файла.
php_value upload_max_filesize 30M
Настройка опций в файле php.ini
allow_url_fopen
Опция включает поддержку оберток URL (URL wrappers), которые позволяют работать с объектами URL по протоколам ftp или http как с обычными файлами.
Включение опции (для отключения значение = 0):
apc.cache_by_default
APC — акселератор PHP, использование которого увеличивает производительность интерпретатора за счет кэширования. В отдельных случаях, однако, может потребоваться его отключение — например, если скрипты не выполняются корректно из-за переполнения кэша.
Отключение APC (для включения значение = 1):
default_charset
Указание кодировки по умолчанию:
display_errors
Включение вывода ошибок (для выключения значение = off).
magic_quotes_gpc
Отключение Magic Quotes (для включения значение = 1):
mail.add_x_header
Включение логирования отправки почты из скриптов сайта. В директиве mail.log указывается путь к файлу, в который будут сохраняться логи (замените u и user на первую букву вашего логина и сам логин).
mail.add_x_header = on
mail.log = /home/u/user/public_html/mail.log
max_input_vars
Изменение количества вводимых переменных:
mbstring.func_overload и mbstring.internal_encoding
Настройки для старых версий CMS Битрикс:
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
opcache.revalidate_freq
Отключение OpCache (настройка для CMS Битрикс):
opcache.revalidate_freq = 0
pcre.recursion_limit
pcre.recursion_limit = 14000
post_max_size
Максимальный размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов — для загрузки больших файлов оно должно быть больше значения директивы upload_max_filesize .
register_globals
Отключение Register Globals (для включения значение = 1):
request_order
Регулирует порядок, в котором PHP добавляет переменные GET , POST и Cookie в массив _REQUEST .
upload_max_filesize
Устанавливает максимальный размер закачиваемого файла.
Опции, которые не могут быть изменены
К настройкам PHP, изменение которых невозможно в рамках виртуального хостинга, относятся:
- memory_limit
- apc.num_files_hint
- apc.shm_size
- apc.ttl
- apc.user_entries_hint
Просмотр параметров php
- Просмотреть значения параметров php, установленных для сервера , можно на странице phpinfo: https://server.timeweb.ru/phpinfo.php , где server — имя сервера, на котором расположен ваш аккаунт.
- Для того, чтобы просмотреть значения параметров php, установленных для конкретного сайта , создайте в его директории файл info.php со следующим содержимым:
Installed as CGI binary
There was a serious vulnerability in certain CGI-based PHP setups that has gone unnoticed for at least 8 years.
For PHP this means that a request containing ?-s may dump the PHP source code for the page.
Make sure to update to current versions and/or use an .htaccess patch, both available here:
Better yet, use binfmt_misc: (linux only)
echo :php3:E::php3::/usr/bin/php: > /proc/sys/fs/binfmt_misc/register
Eliminates the need for the #! at the top of the file.
If you want to use suexec and reference your php interpreter via #!/usr/local/bin/php, be shure to compile php WITHOUT —enable-force-cgi-redirect.
This might seems obvious, but I spent 2 days on this 🙁
If you care about security, you are better of setting
register_globals = off
enable_track_vars = on (Always on from PHP4.0.3)
Default setting for variable order is
EGPCS
(ENV VARS/GET VARS/POST VARS/COOKIE VARS/SESSION VARS)
Imagine if you are rely on ENV VAR but it was orver written with GET/POST/COOKIE vars?
To use php-cgi with suexec it will be nice that each virtual host has ist’s own php.ini. This goes with :
SetEnv PHPRC /var/www/server/www.test.com/conf
But suexec will kill this enviromet cause It don’t know that it is «save» so you must edit the suexec.c for compiling .
If you are using php per cgi and have additionally mod_gzip enabled you have to disable mod_gzip for the php cgi binary to use —enable-cgi-redirect. mod_gzip sets the REDIRECT_STATUS always to 200 which makes it impossible for the php binary to know when it was called directly or when it was called by a redirect.
One of the most common reasons why you get ‘No input file specified’ (AKA ‘the second most useful error message in the world’) is that you have set ‘doc_root’ (in php.ini) to a value which is to the ‘DocumentRoot’ defined in the apache configuration.
This is the same for other webservers. For example, on lighttpd, make sure the ‘server.document-root’ value is the same as what is defined as ‘doc_root’ in php.ini.
I have setup a guide to installing PHP with SuEXEC in such a way that shebangs (!#/usr/bin/php4) are not needed. Hope this is of some help to you.
In response to grange at club-internet dot fr:
There are a couple of errors in the mod_rewrite directives given. I found that the following works:
RewriteEngine on
RewriteCond % !200
RewriteRule ^cgi-bin/php.cgi — [F]
I removed the = from the RewriteCond and took out the leading / from the RewriteRule.
NOTE: Running PHP as a CGI program will change the value of $_SERVER[‘SCRIPT_NAME’]. When running via the (normal) mod_PHP mechanism, it will be set to the name of (actually, path to) the PHP script that’s running. When running via CGI, it will instead point to the path of the CGI binary.
suEXEC require CGI mode, and slow down the scripts. I did them like this:
1. Install php as DSO mode. (for max speed and low secure)
2. Make a seperate CGI install with —enable-force-cgi-redirect, place php to cgi-bin
3 For more secure with suEXEC, choose one of the following method:
3-1: Place a .htaccess file containing this to override main config:
AddType application/x-httpd-wphp php
Action application/x-httpd-wphp /cgi-bin/php
All php files in subdirectory will be protected.
3-2: add following in httpd.conf:
AddType application/x-httpd-wphp sphp
Action application/x-httpd-wphp /cgi-bin/php
then each sensitive php file should be renamed to .sphp
Add «php_value doc_root /home/user/html_docs» to each virtual host directive in httpd.conf
a replacement for suexec is suphp (http://www.suphp.org).
«suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter.» (from the website)
Just a tip for you so do not do the same mistake as I did:
I just found out that PHP first seem to look in the php-directory for php.ini, and if that file does not exist, it looks in the Windows directory.
I renamed the file php.ini-dist to php.ini and copied it to my Windows directory, and then I modified the infamous «cgi.force_redirect = 0» in the php.ini file located in the Windows directory, to make it work. But it did not because it reads from the «original» php.ini — So when I deleted this php.ini things started working again
PHP works with Apache and suEXEC like this:
(Assuming that suEXEC ist allready installed and working)
Install PHP as CGI binary (e.g. in /usr/local/bin/php)
(compile with —enable-force-cgi-redirect)
Create a Link inside cgi-bin directory to make php-cgi accessable:
cd /usr/local/apache/cgi-bin
ln /usr/local/bin/php php
Edit your httpd.conf file:
AddHandler php4-script .php
Action php4-script /cgi-bin/php
PHP-scripts are now called under the user-id of exampleuser and group-id of examplegroup.
PHP CGI with VirtualHosts.
This is what I found out while trying to get php to work as CGI with Apache VirtualHosts.
By enabling ‘force-cgiredirects’, you *must*:
1) set ‘cgi.fix_pathinfo=1’ in php.ini
2) leave doc_root commented out (php.ini also)
If you miss item 1, the apache logs will show ‘unexpected T_STRING’ in the php binary.
If you miss item 2, you’ll only see ‘No input file specified.’, instead of the expected output.
You can then turn on the php support for a particular vhost by defining:
Action php-script /cgi-bin/php
inside the corresponding directive.
I have noticed that some people have noted that running PHP as a CGI program can run slowly compared with a compiled in module. Some have noted that they want to use FastCGI but are hesitant. I found that using the Apache 2’s CGID module was a great way to speed up performance almost to the same level as an «so»-installed PHP module but you get the added benefit of running each virtual host under it’s own user and group.
In my testing I got 44 pages per second using PHP as a module and I got roughly the same performance (within 5%) running PHP as a CGI program through CGID.
CGID is also really easy to set up. Just add —enable-cgid to your Apache configure command and you’re good to go. Just set up PHP as a CGI normally.
I’m sure that there’s extra RAM used for this method but RAM is as cheap as borscht anyways so it shouldn’t be a major factor when trying to speed up PHP CGI.
- Security
- Introduction
- General considerations
- Installed as CGI binary
- Installed as an Apache module
- Session Security
- Filesystem Security
- Database Security
- Error Reporting
- User Submitted Data
- Hiding PHP
- Keeping Current