Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP: оптимальная конфигурация 
:(
    Опции темы
Mal Hack
Дата 13.1.2007, 22:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Хочу предложить  вашему вниманию небольшой материал, касающийся тонкой настройки PHP. Мне давно хотелось собрать описание настроек PHP  в одном месте, с указанием что лучше, а что нет. Давая рекомендации, я придерживаюсь разделения оных на две части: первая – наиболее эффективна для отладки скриптов и тестирования на локальных машинах, вторая – для использования скриптов уже на сервере.

Итак, приступим. Я не буду останавливаться глубоко на тех директивах php.ini, которые не представляют ценности для повышения оптимальности или уровне отладки, т.к. общее описание директив всегда можно найти в официальной документации.

Основной раздел конфигурационного файла php.ini

short_open_tag– разрешает использование коротких тэгов (<? … ?>) для оформления PHP кода. Считаю это излишним, зачем давать возможность использовать что-то, если оно уже есть. 
Рекомендация: Off

asp_tags – аналогично предыдущему, но касается тэгов (<% … %>). По-хорошему, надо вообще задаться вопросом, зачем это нужно. В PHP6 эта опция и возможность, скорее всего, будет исключена вовсе.
Рекомендация: Off

y2k_compliance – решение «проблемы 2000», уже не актуально.
Рекомендация: Off

expose_php – скрипт, через веб-сервер посылает пользователю заголовок, содержащий версию PHP. Смысл в этом – никакой, лишь даем потенциальному злоумышленнику лишнюю информацию о себе.
Рекомендация: Off

output_buffering – включение/выключение буферизации вывода. Буферизация сама по себе штука хорошая, но и использовать ее надо с умом, а не для тупого решения проблемы «Cannot send headers, headers already sent by…». Она хорошо может помочь при использовании сжатия, искусственного кэширования, поэтому, кому надо могут ее использовать через функции ob_*(), а включать ее изначально – лишняя нагрузка, которая ни к чему.
Ряд последующих директив (output_handler, zlib.output_compression, zlib.output_compression_level, zlib.output_handler, implicit_flush) соответственно либо отключаются, либо комментируются
Рекомендация: Off

open_basedir – данный каталог будет считаться корневым для работы с файлами и директориями в PHP. Это актуально при работе сервера, когда PHP разграничен между каждым пользователем. В реальности, такое встречается не часто.
Рекомендация:  пустое значение или закомментировать

disable_functions, disable_classes – директивы представляют интерес только для админов серверов. По-хорошему, они могут запретить функции и классы, чтобы лишний раз не сломали сервер, ввиду его безграмотной настройки.
Рекомендация: оставлять пустыми.

Группа настроек Safe Mode

C PHP6 «safe mode» будет убран, скорее всего, из языка. Использование safe mode, лично для меня, ничего кроме непонятного урезания возможностей языка не представляет. Ни с БД поработать, ничего…
Ряд последующих директив (safe_mode_gid, safe_mode_include_dir, safe_mode_exec_dir, safe_mode_allowed_env_vars, safe_mode_protected_env_vars) соответственно либо отключаются, либо комментируются
Рекомендация: Off

Управление ресурсами

max_execution_time = 30 – устанавливает время скрипта по стечении которого, автоматически происходит его программное снятие (прекращается выполнение). В тех задачах, где надо больше времени на обработку информации (работа с графикой, например), эта директива может быть перманентно изменена в самом скрипте через ini_set. Для обычных же скриптов время выполнения, как правило, не превышает секунды, в зависимости от «тормознутости» сервера 2-3 секунд, поэтому нечего грузить  сервер, если что-то пошло не так (зацикливание и т.п.).
Рекомендация: - 10

max_input_time = 60 – время, которое скрипт будет ждать входную информацию, к примеру с HTML формы. Если загружаете большие файлы, то делаете это значение побольше, если нет, поменьше. Т.к. эпоха dial-ip’a все-таки прошла, стандартного значения (60) вполне хватает для нормальной работы. Для очень уж больших файлов вообще лучше использовать FTP протокол.

memory_limit = 16M – ограничивает предел максимального значения памяти, которое может занимать скрипт и его дискрипторы. К примеру, fopen грузит весь файл в память, imagecreateformpng аналогично, при загрузке файла, также загружаемый файл использует этот же выделенный объем памяти. Примеров – много. Суть такая. Если вам не надо работать с большими файлами, делаете эту директиву поменьше, если надо – побольше. Само собой, чем меньше, тем лучше, но при этом не забываете о достаточности для решения стоящих перед скриптами задач.

post_max_size = 8M – ограничивает максимальный объем данных, получаемых от пользователя методом POST
Рекомендация: в любом случае он должен быть меньше memory_limit причем в два раза (условно, конечно).

upload_max_filesize = 2М – устанавливает максимальный размер файла, который может быть получен методом POST.
Рекомендация: в любом случае он должен быть меньше post_max_size.

Обработка ошибок

error_reporting – устанавливает  уровень показа ошибок.
Рекомендация: на домашнем сервере для отладки включаем показ ВСЕХ ошибок: E_ALL & E_STRICT, на сервере, ошибки не показываем (значение - 0). Во-первых, не позоримся, ваши скрипты должны работать без ошибок, во-вторых, не даем потенциальным злоумышленникам видеть пути и файлы и какие ошибки.

display_errors, display_startup_errors – устанавливают возможность показывать и не показывать сообщения об ошибках.
Рекомендация: аналогично error_reporting

log_errors, log_errors_max_len
 – запись ошибок в файл и длина строки оных, в файл, путь к которому установлен в error_log. Если честно, не вижу смысла. На сервере вывод ошибок отключен, считаем, что ошибок в скрипте – нет, для тестирования достаточно вывода ошибок в браузер, и смысла грузить сервер лишними действиями по логированию – нет.
Рекомендация: для отладки – выключаем, на сервере, все-таки включить можно.

ignore_repeated_errors, ignore_repeated_source – игнорирование повторов.
Рекомендация: вылючать, т.к. ошибки надо видеть все.

track_errors – запись ПОСЛЕДНЕЙ ошибки в $php_errormsg. Смысла нет. При тестировании ошибки видны в браузере, на сервере уже считаем, что скрипт сам работает с ошибками.
Рекомендация: отключить

Работа скриптов

register_globals– практически «убивает» понятие области видимости. В PHP6, скорее всего будет удалена, в целях безопасности и грамотного программирования.
Рекомендация: Off

register_long_arrays – позволяет использовать массивы HTTP_GET_VARS, как суперглобальные. Смысла в этом нет, темпаче эти переменные выйдут из PHP.
Рекомендация: Off

magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase – автоматически экранируют получаемые от пользователя данные. В PHP6 этих настроек, скорее всего, не будет.
Рекомендация: вы сами должны управлять данными, получая их в исходном виде, следовательно, настройки ставятся в значение Off.

auto_prepend_file, auto_append_file – служат для указания файлов, которые будут автоматически выполняться до выполнения запрашиваемого файла. О выполнении этих файлов пользователь не узнает, если вы не сделаете какого-либо вывода. Можно использовать для запуска после выполнения запрашиваемого файла скрипта статистики.
Рекомендация: если действительно есть такая необходимость, значит, включайте, если можно обойтись, то не надо.

default_charset – установление кодировки. Иногда бывает необходимо ее прописать.
Рекомендация: прописывайте нужную вам кодировку.

allow_url_fopen – позволяет использовать URL’ы, в качестве параметров для функций файловой системы.
Рекомендация: Off, почему: 
Цитата

Наболевший вопрос, который задается на форумах с периодичностью раз в 3-4 дня.

Как мы знаем, fopen, file, file_get_contents могут принимать в качестве параметра URL удаленного файла. НО использование этих функций не правильно, и вот почему:

1. Эти функции работают с удаленными хостами только при включенной директиве allow_url_fopen в php.ini (установить эту директиву в .htaccess или скрипте нельзя). Как правило, хостеры ее отключают. По крайней мере умные.
2. fopen не имеет параметра тайм-аута, что самое важное, т.к. в случае если сайт не отвечает или тяжело отвечает, скрипт может легко "подвиснуть".
3. Если где-то используется fopen и случайно пропущена обработка возможности ошибочного входного параметра, то может быть XSS или переполнения буфера.
4. Нет возможности указать порт, по которому необходимо соединиться с сервером.
5. Лишние операции, т.к. тот же fopen вызывать будет сокеты. Зачем использовать сверх функции?


allow_url_include – аналогична предыдущей, но для include подобных функций. Смысла нет опять-таки. Введена в 5.2.0.
Рекомендация: Off

PM ICQ   Вверх
Voventus
Дата 1.2.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.12.2004
Где: г. Владивосток

Репутация: нет
Всего: нет



Цитата

short_open_tag– разрешает использование коротких тэгов (<? … ?>) для оформления PHP кода. Считаю это излишним, зачем давать возможность использовать что-то, если оно уже есть. 
Рекомендация: Off


А как же конструкции вида 
Код

<?=$variable?>

PM MAIL ICQ   Вверх
BobiKK
Дата 1.2.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Подобные конструкции идут лесом. Потому что не по стандартам это, плохо.
PM MAIL   Вверх
AztEK
Дата 7.2.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



почему плохо?


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
BobiKK
Дата 7.2.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Цитата(AztEK @ 7.2.2007,  12:25)
почему плохо?

Always use <?php ?> to delimit PHP code, not the <? ?> shorthand. This is required for PEAR compliance and is also the most portable way to include PHP code on differing operating systems and setups. © Pear Coding Standart
PM MAIL   Вверх
Aliance
Дата 9.2.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Mal Hack @  13.1.2007,  23:06 Найти цитируемый пост)

y2k_compliance – решение «проблемы 2000», уже не актуально.
Рекомендация: Off

Подскажи, это имеется ввиду проблема в "годе"? Если на сайте есть, скажем, скрипт календаря старого - эту директиву все равно отключать?

Данные настройки allow_url_fopen, expose_php, open_basedir, ignore_repeated_errors, ignore_repeated_source, track_errors, register_long_arrays изменяются ли через .htaccess?

auto_prepend_file, auto_append_file - можно ли использовать, скажем, для подлючения конфига?

allow_url_include - если пхп 4ый - не стоит ее пытаться отключить?

output_buffering - кинь пожалуйста ссылочку на тему, где объясняется, как правильно обходить проблему посланных заголовков, почему нельзя использовать буферизацию.

Спасибо за ответы!
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 9.2.2007, 01:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Aliance @  9.2.2007,  01:02 Найти цитируемый пост)
Подскажи, это имеется ввиду проблема в "годе"? Если на сайте есть, скажем, скрипт календаря старого - эту директиву все равно отключать?

На нее забить можно... Это все от "проблемы 2000" для совместимости с очень старыми браузерами.

Цитата(Aliance @  9.2.2007,  01:02 Найти цитируемый пост)
Данные настройки allow_url_fopen, expose_php, open_basedir, ignore_repeated_errors, ignore_repeated_source, track_errors, register_long_arrays изменяются ли через .htaccess?

http://ru.php.net/manual/ru/ini.php#ini.list

Цитата(Aliance @  9.2.2007,  01:02 Найти цитируемый пост)
auto_prepend_file, auto_append_file - можно ли использовать, скажем, для подлючения конфига?

Нет. Смысл этих директив в том, чтобы независимо от запрашиваемого файла выполнить какой-то скрипт до или после его выполнения.

Цитата(Aliance @  9.2.2007,  01:02 Найти цитируемый пост)
allow_url_include - если пхп 4ый - не стоит ее пытаться отключить?

Нет.

Цитата(Aliance @  9.2.2007,  01:02 Найти цитируемый пост)
output_buffering - кинь пожалуйста ссылочку на тему, где объясняется, как правильно обходить проблему посланных заголовков, почему нельзя использовать буферизацию.

http://vingrad.ru/PHP-ART-002859
PM ICQ   Вверх
morfus
Дата 30.6.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



(далее ИМХО)

Цитата

allow_url_fopen

Не согласен, наоборот в РНР-5.2.0 должна быть включена обязательно, опасность представляет удалённый include (который включать очень опасно) но на версии 5.2.0 где он отключается отдельно и в таком случае удалённый fopen может во много раз упростить (ускорить) написание скрипта а стало быть сэкономить время, деньги и нервы !!!

Цитата

short_open_tag

В корне не согласен, это мало того "по стандарту" это ещё и главная часть "native-шаблонизаторa" для РНР
PM MAIL WWW   Вверх
Fally
Дата 11.7.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Цитата(Mal Hack @  13.1.2007,  22:06 Найти цитируемый пост)
error_reporting – устанавливает  уровень показа ошибок.
Рекомендация: на домашнем сервере для отладки включаем показ ВСЕХ ошибок: E_ALL & E_STRICT, на сервере, ошибки не показываем (значение - 0). Во-первых, не позоримся, ваши скрипты должны работать без ошибок, во-вторых, не даем потенциальным злоумышленникам видеть пути и файлы и какие ошибки.

По этому пункту, позволю себе не согласиться, т.к. данная деректива _всегда_ должна быть E_ALL & E_NOTICE, почему она должна быть включена, читайте ниже. Фраза "не позоримся" убила вообще, если скрипт написан корректно и всё делается так, как должно, то даже E-NOTICE не появиться, о неопределённой переменной...
Цитата(Mal Hack @  13.1.2007,  22:06 Найти цитируемый пост)

log_errors, log_errors_max_len – запись ошибок в файл и длина строки оных, в файл, путь к которому установлен в error_log. Если честно, не вижу смысла. На сервере вывод ошибок отключен, считаем, что ошибок в скрипте – нет, для тестирования достаточно вывода ошибок в браузер, и смысла грузить сервер лишними действиями по логированию – нет.
Рекомендация: для отладки – выключаем, на сервере, все-таки включить можно

Если display_errors = Off на сервере, что вполне оправданно, то данная директива так же должна быть включена, потому что полагаться на то, что ошибок в скрите нет, мягко говоря глупо. Быть в этом уверенным можно только в одном случае: когда скрипта не существует. Объясняется это тем, что на этапе разработки от программиста какая-нибудь ошибка может ускользнуть, а при работе на хостинге она может появиться не в самый удачный момент. Конечно же показывать её пользователю не имеет смысла, а вот записать в лог, для дальнейшего анализа данного лога очень хорошая идея.

P.S. Программисты позоряться не появлением ошибок на экране, а своей халатностью к их исправлению и попыткам их скрыть. Рано или поздно они всплывут.

Это сообщение отредактировал(а) Fally - 16.7.2007, 10:00


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
morfus
Дата 8.8.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



Цитата

а вот записать в лог, для дальнейшего анализа данного лога очень хорошая идея

(ИМХО) Единственно правильная идея
PM MAIL WWW   Вверх
Mal Hack
Дата 8.8.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(morfus @  30.6.2007,  15:20 Найти цитируемый пост)
Не согласен, наоборот в РНР-5.2.0 должна быть включена обязательно, опасность представляет удалённый include (который включать очень опасно) но на версии 5.2.0 где он отключается отдельно и в таком случае удалённый fopen может во много раз упростить (ускорить) написание скрипта а стало быть сэкономить время, деньги и нервы !!!

fopen(http://....) не содержи тайм аута, почему о его применении говорить даже не стоит... Плюс, я уже писал выше, что фопен все равно вызывает сокеты, так зачем, спрашивается поливать помидоры, если идет ливень?

Цитата(morfus @  30.6.2007,  15:20 Найти цитируемый пост)
В корне не согласен, это мало того "по стандарту" это ещё и главная часть "native-шаблонизаторa" для РНР 

Никакая это не часть шаблонов, ни покакому стандарту это...


Цитата(Fally @  11.7.2007,  17:14 Найти цитируемый пост)
По этому пункту, позволю себе не согласиться, т.к. данная деректива _всегда_ должна быть E_ALL & E_NOTICE

Если мне не изменяет память, STRICT выше NOTICE, при крайней мере на момент написания было именно так.

Цитата(Fally @  11.7.2007,  17:14 Найти цитируемый пост)
Фраза "не позоримся" убила вообще

Я писал с некоторой харизматической иронией, которую вы не просекли smile


Цитата(Fally @  11.7.2007,  17:14 Найти цитируемый пост)
Конечно же показывать её пользователю не имеет смысла, а вот записать в лог, для дальнейшего анализа данного лога очень хорошая идея.

В принципе согласен с вами, но, если проект крупный и идет нагрузка на сервер, при условии что проект отлажен, нужды в этом - нет. И потом, как вы сказали: "если скрипт написан корректно и всё делается так, как должно, то даже E-NOTICE не появиться, о неопределённой переменной". Я бы тут исходил из конкретной ситуации, наверное.
PM ICQ   Вверх
nerezus
  Дата 30.11.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Никакая это не часть шаблонов, ни покакому стандарту это...
 А где живет стандарт PHP?

Цитата

allow_url_fopen
 Только 2 пункт логичен, остальное притянуто за... [вставить нужное слово]

С пунктами 1 и 5 вообще не согласен.
1. Это удобно. Да и умный хостер всегда послушается нормального клиента.
5. Оверхед на C предпочтительнее оверхеда на PHP.

Это сообщение отредактировал(а) nerezus - 30.11.2007, 10:47


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
patt
Дата 10.6.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.11.2004
Где: Николаев

Репутация: 1
Всего: 2



Цитата(Mal Hack @ 13.1.2007,  22:06)
short_open_tag– разрешает использование коротких тэгов (<? … ?>) для оформления PHP кода. Считаю это излишним, зачем давать возможность использовать что-то, если оно уже есть. 
Рекомендация: Off

Сколько не искал, почему не стоит  использовать short_open_tag - не нашел... В основном говорят о каких то неизвестных стандартах, о том, что эта опция может быть отключена (чего ни разу за свой 5-летний стаж не наблюдал), о несоответствии xml... при чём тут xml вообще не понятно...

вывод такой: минусы использовния short tag -  кто то может сказать, что это не круто...
плюсы: читабельный html код, экономия времени разработки...
PM MAIL ICQ Skype GTalk   Вверх
Fortop
Дата 10.6.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



patt
<?php ?>
будет работать везде

<? ?>
нет

Одного этого минуса достаточно.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Fally
Дата 10.6.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



patt, PEAR Coding Standart, Zend Framework Coding Standart.. я на них всегда ориентируюсь.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1179 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.