@eugene159

Какие ограничения в PHP существуют?

Я знаю только 6:
  1. max_execution_time - максимальное время выполнения скрипта.
  2. mysql.connect_timeout - максимальное время ожидания ответа от MySQL.
  3. post_max_size - максимальный размер всего POST запроса.
  4. upload_max_filesize - максимальный размер файла, передаваемого методом POST.
  5. memory_limit - максимальный размер используемой ОЗУ.
  6. default_socket_timeout - максимальное время ожидания ответа при работе через сокет.

1 и 2 нужно увеличить, если не хватает времени выполнения для долгого скрипта.
3 и 4 нужно увеличить, если на сервер отправляются слишком большие файлы.
5 нужно увеличить для тяжелых скриптов, требующих много ОЗУ.
6 нужно увеличить, если отваливается соединение через сокет.

Кроме того, в браузере тоже есть ограничение по времени ожидания ответа от сервера. Кажется, его настроить никак нельзя. Для очень долгих скриптов надо использовать AJAX-запросы. Ну либо выполнять их через CLI. Но меня интересует режим HTTP, а не CLI.

Можете сказать, какие еще есть? Да, все они написаны в мануале. Но там очень много чего написано, можно случайно упустить какую-либо директиву. И потом долго гадать, почему правильно написанный скрипт не работает.

Может, есть ограничения не только в php ini, но и в apache / nginx? Может, есть на уровне ОС? Если так, то напишите, пожалуйста, про них.
  • Вопрос задан
  • 804 просмотра
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
имя им легион
php -i | egrep 'limit|timeout|max'


hard_timeout => 2 => 2
log_errors_max_len => 1024 => 1024
max_execution_time => 0 => 0
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => -1
max_input_vars => 1000 => 1000
memory_limit => -1 => -1
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
zend.exception_string_param_max_len => 0 => 0
mbstring.regex_retry_limit => 1000000 => 1000000
mbstring.regex_stack_limit => 100000 => 100000
memcached.default_connect_timeout => 0 => 0
memcached.sess_connect_timeout => 0 => 0
memcached.sess_lock_max_wait => not set => not set
memcached.sess_lock_wait_max => 150 => 150
memcached.sess_server_failure_limit => 0 => 0
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
Read timeout => 86400
pcre.backtrack_limit => 1000000 => 1000000
pcre.recursion_limit => 100000 => 100000
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited
session.cache_limiter => nocache => nocache
session.gc_maxlifetime => 1440 => 1440
default_socket_timeout => 60 => 60
unserialize_max_depth => 4096 => 4096
xdebug.connect_timeout_ms => 200 => 200
xdebug.max_nesting_level => 256 => 256
xdebug.max_stack_frames => -1 => -1
xdebug.remote_timeout => (setting renamed in Xdebug 3) => (setting renamed in Xdebug 3)
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3
opcache.force_restart_timeout => 180 => 180
opcache.jit_bisect_limit => 0 => 0
opcache.jit_max_exit_counters => 8192 => 8192
opcache.jit_max_loop_unrolls => 8 => 8
opcache.jit_max_polymorphic_calls => 2 => 2
opcache.jit_max_recursive_calls => 2 => 2
opcache.jit_max_recursive_returns => 2 => 2
opcache.jit_max_root_traces => 1024 => 1024
opcache.jit_max_side_traces => 128 => 128
opcache.max_accelerated_files => 10000 => 10000
opcache.max_file_size => 0 => 0
opcache.max_wasted_percentage => 5 => 5


Вы явно пытаетесь что то не то.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
SagePtr
@SagePtr
Еда - это святое
Ещё есть ограничение на одновременную работу с сессиями. Нельзя одну и ту же сессию открыть дважды параллельно, не закрыв старый экземпляр, новый будет ждать освобождения блокировки.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
какая у тебя ошибка выдается, если отвалилось соединение с БД? а если не хватает ОЗУ? где эта ошибка выводится? В логах PHP? На самой странице, где выполняется код? У меня такие ошибки никогда не выводились. Я догадывался о них интуитивно. Как раз таки пробуя менять лимиты.
Все ошибки логируются, если специально не выключать логи. По этому чтобы знать что за ограничение у вас сработало, не надо тыкать пальцем в небо и молиться Линусу Торвальдсу, надо просто посмотреть что конкретно произошло и решать конкретную проблему.

Но такие ошибки не выводятся. Я подумал, может, дело в настройках apache / nginx. Но ты сказал PHP.
Хостер может запретить изменение настроек сервера через ini_set, так что это ни о чем не говорит. В логах в любом случае ошибка отразится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы