Как запретить использование персональных значений для параметра PHP
Для некоторых параметров PHP есть возможность указать персональное значение вместо выбора из списка предопределенных значений. Вы можете запретить использование персональных значений для параметра PHP, добавив в файл panel.ini строку по следующему образцу:
где
- – группа, которой принадлежит выбранный параметр PHP. Чтобы узнать больше о группах параметров PHP, смотрите раздел “Параметры и группы параметров PHP” ниже.
- – имя выбранного параметра PHP. Используйте такой же синтаксис, как в php.ini.
После того как вы запретите использование персональных значений параметра PHP, пользователи смогут только выбирать значения из списка предопределенных значений.
Например, чтобы запретить использование персональных значений для параметра , добавьте в файл следующие строки:
PHP Configuration: What and Why of php.ini
Like most software including WordPress, PHP provides some options. It also has extention or “plugins” which themselves have options. Most of those will live in “configuration files” which end in . Wikipedia tells us that the prefix came from a shortened version of “initialization”. In any case, that convention pervades PHP.
These files are all pretty similar. They’ll have a number of values set in lines that are going to look pretty familiar to any programmer, like:
What sets a good INI file apart from a bad one is how useful and clear the comments are. A rolled out with default values is pretty solid in that regard. Rather than looking quite like the above, you’ll see lots of comments as preamble before a value is set. So rather than simply declaring the as it did above, you’ll see explanations before values, like:
As you may have guessed, in a anything after a semicolon (;) isn’t parsed, and is simply treated as a comment. You’ll also see declarations, similar to the line, commented out. When a value isn’t provided, either because it is deleted or commented out, PHP uses a default value.
Пользователь PHP и идентификатор группы
mod_fastcgi — это cgi-модуль для веб-сервера Apache. Он может подключаться к внешнему серверу FASTCGI. Вам необходимо убедиться, что php запускается как пользователь без полномочий root. Если PHP выполняется как root или UID ниже 100, он может обращаться к системным файлам и / или манипулировать ими. Вы должны выполнять PHP CGI от имени непривилегированного пользователя, используя suEXEC или mod_suPHP Apache . Функция suEXEC предоставляет пользователям Apache возможность запускать программы CGI под идентификаторами пользователя, отличными от идентификатора пользователя вызывающего веб-сервера. В этом примере мой php-cgi работает как пользователь phpcgi, а apache — как пользователь apache:
# ps aux | grep php-cgi
Примеры вывода результатов:
phpcgi 6012 0,0 0,4 225036 60140? С 22 ноября 0:12 /usr/bin/php-cgi phpcgi 6054 0,0 0,5 229928 62820? С 22 ноября, 0:11 /usr/bin/php-cgi phpcgi 6055 0,1 0,4 224944 53260? С 22 ноября 0:18 /usr/bin/php-cgi phpcgi 6085 0,0 0,4 224680 56948? С 22 ноября, 0:11 /usr/bin/php-cgi phpcgi 6103 0,0 0,4 224564 57956? С 22 ноября, 0:11 /usr/bin/php-cgi phpcgi 6815 0,4 0,5 228556 61220? S 00:52 0:19 /usr/bin/php-cgi phpcgi 6821 0,3 0,5 228008 61252? S 00:55 0:12 /usr/bin/php-cgi phpcgi 6823 0,3 0,4 225536 58536? S 00:57 0:13 /usr/bin/php-cgi
Вы можете использовать такой инструмент, как spawn-fcgi, для создания удаленных и локальных процессов FastCGI от имени пользователя phpcgi (сначала добавьте пользователя phpcgi в систему ):
# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi
теперь вы можете настроить веб-сервер Apache , Lighttpd и Nginx для использования внешнего php FastCGI, работающего на порт 9000 с IP-адресом 127.0.0.1.
PHP cron-скрипты
Когда PHP используется для разработки скрипта, который будет выполняться по крону, следует избегать использования глобальных переменных. Частый пример, это просто использование общего массива:
<? while ( true ) { $rss = file_get_contents('http://somesite.com/rss'); $has_something = preg_match('/title>(.+?)<\/title/', $rss); if ( $has_something ) $updates[] = time(); $rss = file_get_contents('http://othersource.com/rss'); $has_something = preg_match('/title>(.+?)<\/title/', $rss); if ( $has_something ) $updates[] = time(); }
Теперь переменная будет расти до максимального предела. Когда будет достигнут лимит по памяти, скрипт будет остановлен. Уследить за всеми переменными довольно тяжело, поэтому лучше использовать функции. Все переменные, созданные внутри функции будут удаляться после ее завершения:
<? while ( true ) process(); function process() { $rss = file_get_contents('http://somesite.com/rss'); $has_something = preg_match('/title>(.+?)<\/title/', $rss); if ( $has_something ) $updates[] = time(); $rss = file_get_contents('http://othersource.com/rss'); $has_something = preg_match('/title>(.+?)<\/title/', $rss); if ( $has_something ) $updates[] = time(); }
Включите безопасный режим SQL.
Отредактируйте /etc/php.d/security.ini и установите следующую директиву:
sql.safe_mode = On
Если включено , mysql_connect () и mysql_pconnect () игнорируют любые переданные им аргументы. Обратите внимание, что вам может потребоваться внести некоторые изменения в свой код. Сторонние приложения и приложения с открытым исходным кодом, такие как WordPress и другие, могут вообще не работать, если включен sql.safe_mode. Я также рекомендую вам отключить magic_quotes_gpc для всех установок php 5.3.x, так как его фильтрация неэффективна и не очень надежна. mysql_escape_string () и пользовательские функции фильтрации служат лучше:
magic_quotes_gpc = Off
Как увеличить память для PHP скриптов
Для этого в файле php.ini найдите и отредактируйте директиву:
max_execution_time = 30
Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, парсер завершает работу скрипта. Этот механизм помогает предотвратить зависание сервера из-за плохо написанного скрипта. По умолчанию на загрузку даётся 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.
На максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п.
При работе в безопасном режиме эту настройку нельзя изменить функцией ini_set(). Если значение все же нужно изменить, надо либо выключить безопасный режим, либо изменить значение прямо в php.ini.
Веб-серверы обычно имеют свои настройки тайм-аута, по истечении которого сами завершают выполнение скрипта PHP. В Apache есть директива Timeout, в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к веб-серверу.
Ограничьте утечку информации PHP
Чтобы ограничить утечку информации PHP, отключите expose_php. Отредактируйте /etc/php.d/cuity.ini и установите следующую директиву:
expose_php=Off
Когда включено, expose_php сообщает миру, что на сервере установлено php, и какой версии в заголовке HTTP (например, X-Powered-By: PHP / 5.3.3). Также отображаются идентификаторы логотипа PHP поэтому добавление их к URL-адресу сайта с поддержкой PHP приведет к отображению соответствующего логотипа. Когда expose_php включен, вы можете увидеть версию php, используя следующую команду:
$ curl -I https://itfb.com.ua/index.php
Примеры вывода результатов:
HTTP / 1.1 200 OK X-Powered-By: PHP / 5.3.3 Тип содержимого: текст / html; charset = UTF-8 Варьируется: кодировка принятия, cookie X-Vary-Options: Accept-Encoding; list-contains = gzip, Cookie; string-contains = wikiToken; string-contains = wikiLoggedOut; string-contains = wiki_session Последнее изменение: Вт, 3 ноября 2011 г., 22:32:55 GMT ...
Я также рекомендую вам настроить директивы ServerTokens и ServerSignature в httpd.conf, чтобы скрыть версию Apache и скрыть версию PHP 5/7 при использовании Nginx.
Установка eAccelerator:
#apt-get install php5-dev
Загрузите архив с исходными кодами eAccelerator:
#wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2
Распаковка архива:
#tar jxvf eaccelerator-0.9.5.tar.bz2 #cd eaccelerator-0.9.5
Далее необходимо запустить phpize для создания config-файлов, необходимых для сборки:
#phpize #./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config #make #make install cp modules/eaccelerator.so path-to-php/lib/php/extensions/no-debug-non-zts-xxxxxxxx/
Акселератор установлен.
Теперь необходимо отредактировать файл path-to-php.ini/php.ini для пользователей php и добавить в него следующие параметры для подключения расширения:
#vi path-to-php/php.ini extension=”eaccelerator.so” eaccelerator.shm_size=”16″ eaccelerator.cache_dir=”/tmp/eaccelerator” eaccelerator.enable=”1″ eaccelerator.optimizer=”1″ eaccelerator.check_mtime=”1″ eaccelerator.debug=”0″ eaccelerator.filter=”” eaccelerator.shm_max=”0″ eaccelerator.shm_ttl=”0″ eaccelerator.shm_prune_period=”0″ eaccelerator.shm_only=”0″ eaccelerator.compress=”1″ eaccelerator.compress_level=”9″
Максимальный размер кэша в мегабайтах:
eaccelerator.shm_size="512"
Корневой каталог для хранения кэша:
eaccelerator.cache_dir="/var/cache/eaccelerator"
Включение акселератора:
eaccelerator.enable="1"
Подключить или отключить встроенный оптимайзер, которые увеличивает скорость выполнения кода:
eaccelerator.optimizer="1"
Включает проверку модификации PHP файлов:
eaccelerator.check_mtime="1"
Режим отладки. Если поставить 1 или вообще забыть упомянуть этот параметр, при большой посещаемости загадит логи Apache за считанные часы:
eaccelerator.debug="0"
Здесь можно определить можно определить, какие файлы должны быть кэшированы. По-умолчанию, если здесь ничего не указано, то кэшируются все файлы:
eaccelerator.filter=""
Максимально допустимое значение которое может быть отправлено в разделяемую память. По-умолчанию, «ноль» — без ограничений. Размер указывается в байтах, но можно указать приставки, например: 10240, 10K, 1M:
eaccelerator.shm_max="0"
Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить файлы, которые не были запрошены в течении последних «shm_ttl» секунд. По-умолчанию, это значение равно «0» — не удалять ничего:
eaccelerator.shm_ttl="0"
Когда акселератору потребуется отправить в разделяемую память какой-то объект и при этом в памяти для этого не окажется места, он попытается удалить старые скрипты, если предыдущие такие попытки были не больше, чем «shm_prune_period» секунд назад.По-умолчанию, это значение равно «0» — не удалять ничего:
eaccelerator.shm_prune_period="0"
Включить или отключить кэширование скомпилированных скриптов _только_ на диск. Этот параметр не влияет на данные сессий и кэширование контента. По-умолчанию, значение 0, означает, что данные будут кэшироваться и в памяти и на диске:
eaccelerator.shm_only="0"
Включить или отключить сжатие закэшированного контента. По-умолчанию, «1» — сжимать:
eaccelerator.compress="0"
Уровень сжатия. По-умолчанию, «9» — максимум:
eaccelerator.compress_level="3"
Создание cache-директории. Последний важный шаг в настройке акселератора — это создание директории для кэша, имя которой мы задавали в конфигурационном файле. Значение по умолчанию — /tmp/eaccelerator, потому что права на запись в папку /tmp обычно есть у всех пользователей
Не очень хорошим решением будет оставлять права на запись для всех пользователей. Более безопасным будет сменить владельца директории eaccelerator на пользователя, от имени которого запущен PHP (в большинстве случаев это web-сервер. Например apache или lighttpd) и установить на нее права 0644
#mkdir /tmp/eaccelerator #chown nobody:nobody /tmp/eaccelerator (либо указать пользователя PHP вместо nobody) #chmod 0644 /tmp/eaccelerator
Для вступления настроек в силу необходимо перезагрузить web-сервер.
#/etc/init.d/apache2 restart
На этом настройка eAccelerator закончена
Если при доступе к созданному файлу с кодом:
<?php phpinfo(); ?>
видно информацию о eAccelerator, то все установлено корректно.
Изменяем лимит «max_execution_time» в PHP конфигурации на Open Server.
Данная ошибка означает, что выполнение определенной операции, привело к превышению временного лимита, указанного в конфигурации PHP. Вы можете изменить значение этого параметра, который указывается в секундах. По умолчанию в Open Server выставлен лимит в 60 секунд, для параметра «max_execution_time» в настройках PHP. Зачастую, выполнение скрипта не превышает 30 сек и данного лимита в 60 секунд, должно вполне хватать.
Если у вас возникает ошибка «Fatal error: Maximum execution time of 60 seconds exceeded» при работе с Open Server, необходимо изменить время для выполнения скрипта в конфигурации PHP. Рассмотрим два способа, как это сделать.
Способ 1.
Увеличить лимит времени «max_execution_time», через интерфейс Open Server.
Открываем системный трей (1.) и щелкаем правой кнопкой мыши по флажку (2.) Open Server. Переходим по пути:
Обратите внимание, что у вас, может отличатся версия PHP, в зависимости от того, какую версию вы выбрали. В моем примере, это PHP 7.3
В открывшемся окне
Чтобы найти быстро нужный параметр, можно воспользоваться поиском. Выберите «Поиск» -> «Найти»:
В открывшемся поле поиска (1.), вставляем «max_execution_time» (без кавычек) и получаем результат (2.):
Теперь, меняем лимит «60», на «6000» к примеру. Или, на любой другой показатель. В своем примере, изменю лимит «max_execution_time» на «6000»:
Сохраняем изменения. Для этого, нажимаем: «Файл » -> «Сохранить » .
Закрываем окно и перезапускаем сервер Open Server. Для этого, открываем системный трей (1.) и щелкаем по флажку (2.) правой кнопкой мыши, выбираем «Перезапустить» (3.):
После этого, все должно работать.
Способ 2.
Увеличить лимит времени «max_execution_time», через сторонний редактор кода в Open Server.
В папке config, необходимо найти файл « PHP_ваша_версия_php.ini ».
В моем примере, выберу файл « PHP_7.3_php.ini » :
Чтобы открыть файл и раскомментировать « ionCube » в конфигурации PHP, используйте Notepad++ или любой другой редактор.
Открываем файл « PHP_ваша_версия_php.ini » и ищем
В своем примере, воспользуюсь редактором Visual Studio Code и открою в нем файл « PHP_7.3_php.ini » :
Теперь, чтобы быстро найти расширение « max_execution_time », открываем « Правка » -> « Найти » :
Сохраняем изменения. Для этого, нажимаем: «Файл » -> «Сохранить » .
Увеличиваем максимальный размер файла загрузки (Maximum File Upload Size) и др.параметры
Как-то раз при установке премиум шаблона WordPress начал выдавать странную ошибку «The link you followed has expired» (типа ваша ссылка устарела). Только в ходе гугления удалось понять, что система просто не способна «обработать» архив большого размера. Подобная ситуация часто приводит к ошибке HTTP при загрузке картинок и файлов в медиабиблиотеку, но и с плагинами/темами, как видите, также может появиться проблема. Сегодня в посте разберем как разрешить загрузку файлов больших размеров в Вордпресс.
Максимальный размер загружаемого файла задается в настройках вашего хостинга. За это отвечает параметр upload_max_filesize в PHP. Изменить данное значение можно несколькими способами, в статье приведу их все, а вы уж выбирайте какой из них вам больше всего нравится.
Итак, при слишком большом размере файла ошибка загрузки может возникнуть как для шаблонов, так и в медиабилиотеке. Собственно в последней вы сможете посмотреть текущее установленное ограничение:
Как же его изменить?
1. Настройки хостинга
Самый простой метод – воспользоваться админ-панелью хостинга, где расположен сайт. Допустим, у вас cPanel. Находите в ней пункт “Выбор версии PHP” и после перехода на соответствующую страницу кликаете по кнопке “PHP параметры”:
Здесь вам могут пригодиться такие параметры:
- upload_max_filesize – max размер файла, разрешенный для загрузки;
- post_max_size – размер POST-запроса, должен быть больше/равен upload_max_filesize;
- max_execution_time – максимальное время выполнения скрипта;
- max_input_vars – количество переменных, принимаемых в рамках одно запроса;
- memory_limit – максимум памяти, выделяемой для работы скрипта/сайта.
Первое и второе значения как раз нам сегодня и нужно будет менять. Они используется при любых загрузках файлов. Третье и четвертое пригодится при импорте Демо наполнения шаблонов. Про увеличения Memory Limit я уже когда-то рассказывал, чем больше там значение, тем комфортнее будет работать в админке и тем шустрее загружается сайт.
Какие значения устанавливать?
После выбора того или иного значения в cPanel, оно будет применено автоматически. Сохранять ничего не требуется. Вы лишь переходите обратно в WordPress админку и проверяете изменился ли лимит загрузки файла.
Если у вас что-то не получается, всегда есть вариант написать в тех.поддержку хостера, и там помогут решить вопрос. Они даже могут установить все требуемые значения вместо вас.
2. Файл функций
Дальше идут менее объемные методы, но уже с элементами правки кодов. Тут вам надо зайти в файл functions.php и добавляете там следующие строки:
@ini_set( ‘upload_max_size’ , ’32M’ ); @ini_set( ‘post_max_size’, ’32M’); @ini_set( ‘max_execution_time’, ‘300’ );
3. Через htaccess
С этим файлом вы уже могли сталкиваться раньше – там, например, записываются permalinks формат ссылок для URL’ов сайта. Расположен .htaccess в корневой директории на FTP, в названии в начале стоит точка, а расширения нету.
В него нужно добавить строки:
php_value upload_max_filesize 32M php_value post_max_size 32M php_value max_execution_time 300 php_value max_input_time 300
4. Через файл php.ini
Я как-то уже писал про редактирование и настройку php.ini в другом блоге, но по сути, тут нет ничего необычного. Как и в предыдущем варианте вам надо будет загрузить на FTP в корневую директорию обновленный php.ini. В большинстве случаев его нет на хостинге – тогда вы просто создаете новый пустой файл в Notepad++, Блокноте или другом текстовом редакторе.
Затем вводите туда строки:
upload_max_filesize = 32M post_max_size = 32M max_execution_time = 300
После сохранения заливаете php.ini на хостинг в корень сайта.
Если на FTP уже есть подобный файл, то скачиваете его для редактирования и находите там соответствующие параметры
Внимание! Иногда бывает так, что заданные значения не срабатывают, т.к. слишком большие, — попробуйте тогда числа поменьше
Итого. Как по мне, самый простой для рядового пользователя способ задания максимального размера файла при ошибке загрузки картинок/макетов – через панель хостинга. Также параметр Maximum File Upload Size и другие легко задаются через файлы functions.php, htaccess, php.ini, но тут, как минимум, надо уметь работать с FTP.
Важно! Если вы используете самый простой (shared) хостинг, то методы могут не сработать. В таком случае пишите в тех.поддержку хостера с соответствующим запросом
Запуск службы для каждой системы или экземпляра виртуальной машины.
Для больших установок рекомендуется запускать базу данных, статический и динамический контент с разных серверов.
/////////////// / ISP/Router / ////////////// \ | Firewall \ | +------------+ | LB01 | +------------+ +--------------------------+ | | static.lan.itfb.com.ua | +-----------------+--------------------------+ | phpcgi1.lan.itfb.com.ua| +--------------------------+ | phpcgi2.lan.itfb.com.ua| +--------------------------+ | mysql1.lan.itfb.com.ua | +--------------------------+ | mcache1.lan.itfb.com.ua| +--------------------------+
Запускайте разные сетевые службы на отдельных серверах или экземплярах виртуальных машин. Это ограничивает количество других сервисов, которые могут быть скомпрометированы. Например, если злоумышленник сможет успешно использовать программное обеспечение, такое как поток Apache, он / она получит доступ ко всему серверу, включая другие службы, работающие на том же сервере (например, MySQL, сервер электронной почты и т. д.). Но в приведенном выше примере контент обслуживается следующим образом:
- static.lan.itfb.com.ua — используйте сервер lighttpd или nginx для статических ресурсов, таких как js / css / images.
- phpcgi1.lan.itfb.com.ua и phpcgi2.lan.itfb.com.ua — веб-сервер Apache с php, используемый для генерации динамического контента.
- mysql1.lan.itfb.com.ua — сервер базы данных MySQL.
- mcache1.lan.itfb.com.ua — Сервер Memcached — это очень быстрая система кеширования для MySQL. Он использует libevent или epoll (среда выполнения Linux) для масштабирования до любого количества открытых подключений и использует неблокирующий сетевой ввод-вывод.
- LB01 — веб-сервер nginx и обратный прокси-сервер перед веб-серверами Apache. Все соединения, поступающие из Интернета и адресованные одному из веб-серверов, маршрутизируются через прокси-сервер nginx, который может либо обрабатывать сам запрос, либо передавать его полностью или частично на основные веб-серверы. LB01 обеспечивает простую балансировку нагрузки.
Параметры и группы параметров PHP
Вот список групп параметров PHP и входящих в них параметров:
Группа параметров PHP | Имя параметра PHP |
---|---|
performance | memory_limit |
max_execution_time | |
max_input_time | |
post_max_size | |
upload_max_filesize | |
opcache.enable | |
wincache.ocenabled | |
apc.enabled | |
xcache.cacher | |
disable_functions | |
general | safe_mode |
safe_mode_include_dir | |
safe_mode_exec_dir | |
include_path | |
session.save_path | |
mail.force_extra_parameters | |
register_globals | |
open_basedir | |
error_reporting | |
display_errors | |
log_errors | |
allow_url_fopen | |
file_uploads | |
short_open_tag | |
magic_quotes_gpc | |
fpm (только в Linux) | pm.max_children |
pm.max_requests | |
pm | |
pm.start_servers | |
pm.min_spare_servers | |
pm.max_spare_servers | |
fastCgi (только в Windows) | maxInstances |
activityTimeout | |
requestTimeout | |
instanceMaxRequests | |
queueLength | |
rapidFailsPerMinute |
Опции
Опции, влияющие на загрузку файлов:
upload_max_filesize — Максимальный размер загружаемого файла
Измеряется в секундах. Дефолтное значение: «2M»
max_file_uploads — Максимальное количество одновременных загрузок
Измеряется в штуках. Дефолтное значение: «20»
post_max_size — Максимальный размер отправляемого через POST-запрос файла (Должен быть больше upload_max_filesize).
Измеряется в секундах. Дефолтное значение: «8M»
max_execution_time — Время в течении которого скрипт должен полностью завершить своё исполнение. Для отмены ограничений можно присвоить 0.
Измеряется в секундах. Дефолтное значение: «30»
max_input_time — Время в течении которого скрипт, должен получить и обработать все данные из POST и GET запросов.
Измеряется в секундах.
memory_limit — Ограничение на выделяемую для исполнения одного скрипта память. Для отмены ограничений, поставьте -1. Должен быть больше post_max_size.
Измеряется в Мегабайтах. Дефолтное значение: «128M»