php open basedir php ini
Для чего нужна и как использовать open_basedir
Директива open_basedir указывается в конфигурационном файле PHP (php.ini) и устанавливает директории, к которым может иметь доступ PHP. Под доступом понимаются любые действия с файлами: открытие (например, функции fopen() или gzopen()), записи и выполнения. Если директива open_basedir установлена и делается попытка запустить файл, который находится за пределами перечисленных директорий, то скрипт не запустится и выдаст ошибку:
Пример значения open_basedir:
В указанном примере разрешён запуск скриптов PHP, а также операции с файлами в директориях:
Директива open_basedir оказывает влияние на многие функции. Больше всего в ней смысла при использовании на уровне конфигурационных файлов веб-сервера на уровне директорий или виртуальных хостов.
По умолчанию, если значение open_basedir не установлено, разрешены файловые операции в любых директориях компьютера (на которые достаточно прав).
Специальное значение . (точка) обозначает, что рабочая директория скрипта будет использована в качестве базовой директории. Однако, это немного опасно, так как текущая директория скрипта может быть легко изменена с помощью chdir().
В httpd.conf, open_basedir может быть выключена (например, для некоторых виртуальных хостов) тем же способом, что и любая другая конфигурационная директива:
В Windows разделяйте директории символом ; (точкой с запятой). На всех остальных системах, разделяйте директории символом : (двоеточием). При работе в качестве модуля Apache, пути open_basedir автоматически наследуются от родительских директорий.
Open_basedir и cURL в php 5
CURLOPT_FOLLOWLOCATION в curl порой не работает из-за того что директива open_basedir в php.ini (и в httpd.conf на firstvds.ru) имеет значение, указывающее на директорию.
чтобы заставить curl работать, надо сделать так, чтобы значение директивы равнялось none.
Первым делом убедитесь в том, что в php.ini safe_mode = Off
Если безопасный режим выключен, необходимо отключить open_basedir.
На примере firstvds.ru:
Заходим от имени root на сервер по SSH.
Для этого можно использовать PuTTy
1 отключаем её в php.ini
chmod 774 /usr/local/etc/php.ini (чтобы можно было редактировать)
vim /usr/local/etc/php.ini (открываем в редакторе)
/ open_basedir (ищем по тексту)
зажимаем shift и жмём 2 раза Z – тем самым сохраняем файл и закрываем редактор
2 отключаем в httpd.conf
в виме открываем строку для ввода команд, путём нажатия Shift+6 (в англ. раскладке)
Там вводим:
%s/dir «/home/MY_SERVER/data:.»/dir none/g
вместо MY_SERVER указываем свою директорию, которая есть в конфиге
строка php_admin_value open_basedir “….”
заменяем кавычки и их содержимое на none
php_admin_value open_basedir none
зажимаем shift и жмём 2 раза Z – тем самым сохраняем файл и закрываем редактор
3 перезагружаем сервер в ISP Manager
Php open basedir php ini
Представленные здесь значения по умолчанию используются в случае, если не был подключён php.ini ; значения для боевого php.ini и для разработки могут различаться.
Языковые опции
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
short_open_tag | «1» | PHP_INI_PERDIR | |
precision | «14» | PHP_INI_ALL | |
serialize_precision | «-1» | PHP_INI_ALL | До версии PHP 7.1.0 значение по умолчанию было равно 17. |
disable_functions | «» | Только PHP_INI_SYSTEM | |
disable_classes | «» | Только php.ini | |
exit_on_timeout | «» | PHP_INI_ALL | |
expose_php | «1» | Только php.ini | |
hard_timeout | «2» | PHP_INI_SYSTEM | Доступна с версии PHP 7.1.0. |
zend.exception_ignore_args | «0» | PHP_INI_ALL | Доступна с версии PHP 7.4.0 |
zend.multibyte | «0» | PHP_INI_ALL | |
zend.script_encoding | NULL | PHP_INI_ALL | |
zend.detect_unicode | NULL | PHP_INI_ALL | |
zend.signal_check | «0» | PHP_INI_SYSTEM | |
zend.assertions | «1» | PHP_INI_ALL с ограничениями |
Краткое разъяснение конфигурационных директив.
Выдаёт факт присутствия PHP на сервере, включая передачу версии PHP в HTTP-заголовке (например, X-Powered-By: PHP/5.3.7).
Эта директива позволяет отключить некоторые функции. Она принимает список имён функций, разделённый запятыми.
Только внутренние функции могут быть отключены с помощью этой директивы. Пользовательские функции ей не подвержены.
Если процесс стартован в режиме релиза, zend.assertions не может быть изменён во время выполнения, так как код утверждений не генерируется.
Когда истечёт время ожидания, установленное в max_execution_time, среда выполнения PHP аккуратно отключит ресурсы. Если во время этого что-то застрянет, время ожидания будет установлено на указанное количество секунд. Когда истечёт жёсткое время ожидания, PHP завершит работу с ошибкой. Если установлено значение 0, жёсткое время ожидания никогда не активируется.
Когда PHP останавливается после жёсткого времени ожидания, это будет выглядеть примерно так:
Исключает аргументы из трассировки стека, сгенерированных из исключений.
Разрешает парсинг исходных файлов в многобайтных кодировках. Включение zend.multibyte требуется для использования кодировок символов подобных SJIS, BIG5 и т.д., содержащих специальные символы в многобайтных строковых данных. Совместимые с ISO-8859-1 кодировки, например UTF-8, EUC и т.д., не требуют эту опцию.
Модуль zend.multibyte требует установленного модуля «mbstring».
Данное значение будет использовано, только при отсутствии директивы declare(encoding=. ) в начале скрипта. При использовании кодировок несовместимых с ISO-8859-1, нужно использовать опции и zend.multibyte и zend.script_encoding.
Определяет, нужно ли проверять заменённые обработчики сигналов при завершении скрипта.
Эта директива только для Apache1 mod_php, которая заставляет потомка Apache завершиться, если произошёл тайм-аут исполнения скрипта PHP. Такой тайм-аут приводит к внутреннему вызову longjmp() в Apache1, который оставляет некоторые модули в несогласованном состоянии. По завершении процесса все неснятые блокировки или память будут очищены.
Ограничения ресурсов
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
memory_limit | «128M» | PHP_INI_ALL |
Краткое разъяснение конфигурационных директив.
Настройка производительности
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
realpath_cache_size | «4M» | PHP_INI_SYSTEM | До PHP 7.0.16 и 7.1.2, по умолчанию было «16K» |
realpath_cache_ttl | «120» | PHP_INI_SYSTEM |
Использование open_basedir отключит кеш realpath.
Краткое разъяснение конфигурационных директив.
Определяет размера кеша realpath, используемого в PHP. Это значение должно быть увеличено на системах, в которых PHP открывает большое количество файлов соответственно количеству выполняемых файловых операций.
Размер равный общему числу байт, хранящимся в строках путей, плюс размер данных связанных с кешируемым элементом. Это значит, что для хранения длинных путей в кеше, размер этого кеша должен быть больше. Это значение не определяет напрямую количество разных путей, которые могут быть закешированы.
Размер, необходимый для кеширования, зависит от системы.
Время (в секундах) в течение которого будет использован кеш realpath для указанного файла или директории. Для систем с редко меняющимися файлами это значение можно увеличить.
Обработка данных
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
arg_separator.output | «&» | PHP_INI_ALL | |
arg_separator.input | «&» | PHP_INI_PERDIR | |
variables_order | «EGPCS» | PHP_INI_PERDIR | |
request_order | «» | PHP_INI_PERDIR | |
auto_globals_jit | «1» | PHP_INI_PERDIR | |
register_argc_argv | «1» | PHP_INI_PERDIR | |
enable_post_data_reading | «1» | PHP_INI_PERDIR | |
post_max_size | «8M» | PHP_INI_PERDIR | |
auto_prepend_file | NULL | PHP_INI_PERDIR | |
auto_append_file | NULL | PHP_INI_PERDIR | |
default_mimetype | «text/html» | PHP_INI_ALL | |
default_charset | «UTF-8» | PHP_INI_ALL | |
input_encoding | «» | PHP_INI_ALL | |
output_encoding | «» | PHP_INI_ALL | |
internal_encoding | «» | PHP_INI_ALL |
Краткое разъяснение конфигурационных директив.
Этот разделитель используется в генерируемых PHP URL в качестве разделителя аргументов.
Список разделителей, используемых PHP для получения переменных из URL.
Каждый символ в этой директиве считается разделителем!
Эта директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST. Добавление производится слева направо, новые значения перезаписывают старые.
Когда включено, переменные SERVER, REQUEST и ENV создаются в тот момент, когда они впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти переменные в скрипте не используются, включение этой директивы приведёт к росту производительности.
Использование переменных SERVER, REQUEST и ENV проверяется на стадии компиляции, поэтому их использование с помощью, например, переменных переменных не запустит их инициализацию.
Php admin value open basedir
Параметр open_basedir создан для обеспечения безопасности, ограничивая доступ к открытию файлов указанием директории, выше которой этого сделать нельзя.
Но некоторые движки сайтов (к примеру, 1С-Битрикс) для увеличения скорости работы настоятельно рекомендуют отключение данного параметра для сайта. Чтобы отключить его, следует отредактировать конфигурационный файл веб-сервера Apache. Этот файл или его часть с настройками сайта располагается в разных местах в зависимости от ОС, дистрибутива и используемой версии ISPmanager.
Найти раздел и для конкретного сайта и заменить параметр
Также конфигурационный файл можно исправить под root через интерфейс ISPmanager — Домены — WWW-домены — выделить нужный веб домен — кнопка «Конфиг»
Если нужно вообще отключить open_basedir и для всех последующих веб доменов, то в конфигурационный файл ISPmanager (/usr/local/mgr5/etc/ispmgr.conf) нужно прописать
После правки конфигурационного файла перезапустить core
Соответственно, в конфиг каждого нового VirtualHost будет добавлено
Казалось бы вопрос загрузки файлов на сервер обсосан до косточек, но одно недавнее событие заставило меня в этом усомниться.
Некоторое время назад в целях повышения безопасности на наших серверах была включена настройка PHP open_basedir. После этого многие PHP-приложения перестали загружать файлы на сервер.
По ссылке много букв (которые всё-таки рекомендуется прочитать), здесь же напишу кратко:
Конечно же язык PHP разрабатывают неглупые люди, поэтому действие open_basedir не распространяется на функции is_uploaded_file и move_uploaded_file, которые, собственно, и предназначены для работы с загруженными файлами.
Так в чём же тогда проблема? А проблема вот в чём: многие (действительно многие!) обращаются к загруженным файлам именно напрямую, в обход стандартных функций.
Я настоятельно советую PHP-программистам (особенно начинающим), во-первых, не пренебрегать использованием стандартных функций. Если функцию написали, значит она для чего-то нужна. Во-вторых, хорошенько изучить настройки PHP и режимы его работы. Это поможет избежать таких вот ошибок.
P. S. Кто-то может сказать «нефиг так конфигурировать сервера, что скрипты перестают работать». Однако я считаю, что если настройка есть, то кто-нибудь её обязательно использует. И если ваша программа после этого перестанет работать, то камни полетят в вас. Оно вам (нам) надо?
Представленные здесь значения по умолчанию используются в случае, если не был подключен php.ini ; значения для боевого php.ini и для разработки могут различаться.
Языковые опции
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
short_open_tag | «1» | PHP_INI_PERDIR | |
asp_tags | «0» | PHP_INI_PERDIR | Удалена в PHP 7.0.0. |
precision | «14» | PHP_INI_ALL | |
serialize_precision | «-1» | PHP_INI_ALL | До версии PHP 5.3.5 значение по умолчанию было равно 100. До версии PHP 7.1.0 значение по умолчанию было равно 17. |
y2k_compliance | «1» | PHP_INI_ALL | Удалена в PHP 5.4.0. |
allow_call_time_pass_reference | «1» | PHP_INI_PERDIR | Удалена в PHP 5.4.0. |
disable_functions | «» | Только PHP_INI_SYSTEM | |
disable_classes | «» | Только php.ini | |
exit_on_timeout | «» | PHP_INI_ALL | Доступна с версии PHP 5.3.0. |
expose_php | «1» | Только php.ini | |
hard_timeout | «2» | PHP_INI_SYSTEM | Доступна с версии PHP 7.1.0. |
zend.multibyte | «0» | PHP_INI_ALL | Доступна с версии PHP 5.4.0 |
zend.script_encoding | NULL | PHP_INI_ALL | Доступна с версии PHP 5.4.0 |
zend.detect-unicode | NULL | PHP_INI_ALL | Доступна с версии PHP 5.4.0 |
zend.signal_check | «0» | PHP_INI_SYSTEM | Доступна с версии PHP 5.4.0 |
zend.assertions | «1» | PHP_INI_ALL с ограничениями | Доступна с версии PHP 7.0.0. |
zend.ze1_compatibility_mode | «0» | PHP_INI_ALL | Удалена в PHP 5.3.0 |
detect_unicode | «1» | PHP_INI_ALL | Доступна с версии PHP 5.1.0. Переименована на zend.detect-unicode с версии PHP 5.4.0. |
Краткое разъяснение конфигурационных директив.
Версия | Описание |
---|---|
7.0.0 | Удалена из PHP. |
precision integer Количество значащих цифр, отображаемых для чисел с плавающей точкой. -1 означает, что будет использован усовершенствованный алгоритм для округления таких чисел. serialize_precision integer Количество сохраняемых значащих цифр при сериализации чисел с плавающей точкой. -1 означает, что будет использован усовершенствованный алгоритм для округления таких чисел. y2k_compliance boolean Включение совместимости с 2000 годом (создаст проблемы с несовместимыми браузерами) allow_call_time_pass_reference boolean
Нужно ли выводить предупреждение, если аргументы передаются по ссылке при вызове функции. Рекомендуется указывать в объявлении функции передаваемые по ссылке аргументы. Попробуйте выключить эту опцию и убедиться, что ваши скрипты правильно работают без нее и что они будут работать с будущими версиями языка (вы будете получать предупреждение каждый раз, когда вы будете пользоваться этой возможностью).
Передача аргументов по ссылке во время вызова функции была объявлена устаревшей из соображений чистоты кода. Функция может менять свои аргументы недокументированным способом, если бы аргумент не объявлялся передаваемым по ссылке. Чтобы избежать побочных эффектов, лучше явно указывать, какие аргументы передаются по ссылке только при объявлении функции.
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
memory_limit | «128M» | PHP_INI_ALL | «8M» до PHP 5.2.0, «16M» в PHP 5.2.0 |
Краткое разъяснение конфигурационных директив.
Эта директива задает максимальный объем памяти в байтах, который разрешается использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать ограничения, установите значение этой директивы в -1.
Настройка производительности
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
realpath_cache_size | «4M» | PHP_INI_SYSTEM | Доступна с версии PHP 5.1.0. До PHP 7.0.16 и 7.1.2, по умолчанию было «16K» |
realpath_cache_ttl | «120» | PHP_INI_SYSTEM | Доступна с версии PHP 5.1.0. |
Использование open_basedir отключит кеш realpath.
Краткое разъяснение конфигурационных директив.
Определяет размера кэша realpath, используемого в PHP. Это значение должно быть увеличено на системах, в которых PHP открывает большое количество файлов соответственно количеству выполняемых файловых операций.
Размер равный общему числу байт, хранящимся в строках путей, плюс размер данных связанных с кешируемым элементом. Это значит, что для хранения длинных путей в кэше, размер этого кэша должен быть больше. Это значение не определяет напрямую количество разных путей, которые могут быть закэшированы.
Размер, необходимый для кэширования, зависит от системы.
Время (в секундах) в течение которого будет использован кэш realpath для указанного файла или директории. Для систем с редко меняющимися файлами это значение можно увеличить.
Обработка данных
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
arg_separator.output | «&» | PHP_INI_ALL | |
arg_separator.input | «&» | PHP_INI_PERDIR | |
variables_order | «EGPCS» | PHP_INI_PERDIR | PHP_INI_ALL в PHP = 5.6.0; пустая для PHP arg_separator.output string |
Этот разделитель используется в генерируемых PHP URL в качестве разделителя аргументов.
Список разделителей, используемых PHP для получения переменных из URL.
Каждый символ в этой директиве считается разделителем!
Эта директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST. Добавление производится слева направо, новые значения перезаписывают старые.
Когда включено, переменные SERVER, REQUEST и ENV создаются в тот момент, когда они впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти переменные в скрипте не используются, включение этой директивы приведет к росту производительности.
Директивы PHP register_globals, register_long_arrays и register_argc_argv должны быть выключены для правильной работы этой директивы. Начиная с версии PHP 5.1.3 стало необязательно выключать register_argc_argv.
Использование переменных SERVER, REQUEST и ENV проверяется на стадии компиляции, поэтому их использование с помощью, например, переменных переменных не запустит их инициализацию.
Регистрировать или нет переменные EGPCS (Environment, GET, POST, Cookie, Server) в качестве глобальных переменных.
Начиная с версии » PHP 4.2.0, значением по умолчанию для этой директивы является off.
Пожалуйста, ознакомтесь с главой о безопасности Использование глобальных переменных для получения дополнительной информации.
На поведение register_globals влияет директива variables_order.
Данная возможность была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.
Данная возможность была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.
PHP open_basedir
How to enabled PHP open_basedir in CWP
** Note this is only for PHP-CGI
We have two options
— global config, one config file in the include folder /usr/local/php/php.d/ and in PHP selector include folders
— per-user config, the securest option as it restricts the user to his /home/USERNAME folder and also disables users from using custom php.ini files.
Global Configuration
The securest method do this correctly and to prevent users from overriding this is to place the config into the include file. Please note that if you set this into /usr/local/php/php.ini then custom user php.ini will be able to disable it. Please note that global config allows full /home folder access while per user restricts users to /home/USERNAME folder which is much more secure.
One line command to create a file and config:
You can also do it by yourself by creating a file: /usr/local/php/php.d/open_basedir.ini with the following content:
To enable it for other php versions from the PHP selector you can create this config files with the same content:
PHP info file example phpinfo.php
** Don’t forget to replace the USERNAME.
Please note that this option will also disable all further custom users php.ini files per folder, for example: /home/USERNAME/public_html/php.ini will not be loaded.
You can also place it into public_html folder but then users will be able to run custom php.ini files per folder and they can disable open_basedir.
RECOMMENDATION
We recommend using the per-user configuration of open_basedir as it will provide much higher security and isolate each client.
NGINX + PHP-FPM
configuration files are:
/etc/nginx/conf.d/vhosts/DOMAIN.conf
/etc/nginx/conf.d/vhosts/DOMAIN.ssl.conf
under fastcgi_param add one more line and reload/restart nginx
** Note that manual editing of the webserver vhost files is not recommended as those files get rebuilt from the template on each change.
Try checking the instructions here for the custom template build.
APACHE + PHP-FPM
Configuration files are all user existing php-fpm configuration files, to get the list of files you can use this
** Note that editing any of those files requires to restart php-fpm version you edited.
** Note that manual editing of the webserver vhost files is not recommended as those files get rebuilt from the template on each change.
Try checking the instructions here for the custom template build.
- php oop для начинающих
- php open csv file