- How to set php ini settings in nginx config for just one host
- 2 Answers 2
- Как просто изменить настройки в php.ini на хостинге: phpinfo, putty?
- Как это начинается?
- Пошаговое руководство по настройке php.ini. Пример: Битрикс + GoDaddy сервер на Linux
- Подключение к SSH — тут посредством программы Putty
- Если хостинг поддерживает сохранение и использование файлов в корне сайта (public_html).
- Послесловие
- How to use custom php.ini files on shared hosting
- Step 1:- Create a php.ini file
- Step 2:- Create a .htaccess file
- Step 3:- Test your php.ini file
How to set php ini settings in nginx config for just one host
But if I do this in one server block, will it affect all the others as well? Should I change php settings in all server blocks simultaneously?
2 Answers 2
You can set PHP_VALUE per server and this will affect that server only. If you need equal PHP_VALUE for all your servers with PHP, use include files.
For example (debian), create /etc/nginx/conf.d/php_settings.cnf :
fastcgi_param PHP_VALUE "upload_max_filesize=5M;\n error_reporting=E_ALL;";
Then include this file into any server or location config you need:
Wrong, see my answer. php-fpm maintains pool of php worker processes, which aren’t restarted on each request. That’s the point of FastCGI.
If every host on your server runs in its own PHP-FPM pool, than adding fastcgi_param PHP_VALUE . to one nginx host will not affect the other ones.
If on the other hand all nginx hosts use one PHP-FPM pool, you should specify PHP_VALUE for every host you have ( error_reporting=E_ALL for one of them, empty value for others). Since fastcgi_param passes PHP_VALUE if specified, and doesn’t pass if not. In a while all workers will have PHP_VALUE=error_reporting=E_ALL , unless you explicitly set PHP_VALUE in other hosts.
Additionally, fastcgi_param PHP_VALUE . declarations override one another (the last one takes effect).
- apt install nginx php5-fpm
- /etc/nginx/sites-enabled/hosts.conf :
Как просто изменить настройки в php.ini на хостинге: phpinfo, putty?
Основная проблема, это то, что большинство хостингов не дают напрямую изменить настройки в php.ini на тарифах виртуального (shared) хостинга. Или просто не выкладывают его в доступное и видимое место на сервере, поэтому приходится плясать с бубном и обращаться в тех саппорт за этим.
Некоторые хостинги предлагают простой вариант: создаем .user.ini в корне, вносим нужны значения. Но потом начинает выясняться, что не все, к огромному сожалению, умеет .user.ini. Поэтому, закатав рукава, придется приступать к работе ручками.
Как это начинается?
Проблема начинается тогда, когда тех-саппорт ни «бе» ни «ме», отвечают односложными фразами о том, что сайт сами делали, вот сами и мучайтесь (как Сбербанк, прямо, со своей фразой «где карту оформляли, туда и идите»). Дело в том, что Битрикс при переносе и установке требует, чтобы настройка mbstring.func_overload на сервере была = 2. А поменять ее через .user.ini не получается. И это превращается в проблему. Т.к. залезть еще глубже на сервер без SSH уже нельзя зачастую (за редким исключением).
SSH, phpinfo, putty (программа), буквально, 15 минут времени и каплю терпения.
Описанное ниже НЕ является перманентным решением проблемы. Это лишь на время (до обновления хостинга) решит вашу проблему с установкой. Большинство хостингов вполне нормально воспринимает, например, php.ini или .htaccess в корне сайта и вписанные туда настройки. По крайней мере, до версии php 7.1 (выставляется на сервере) обычно это было всегда возможно. Всегда спрашивайте сначала поддержку, что она скажет!
Пошаговое руководство по настройке php.ini. Пример: Битрикс + GoDaddy сервер на Linux
На самом деле, это значения не имеет, что за провайдер, что за сайт, хоть самописный, проблемы с работой php могут возникнуть на ровном месте. Создаем phpinfo.php файл в корне сайта (к примеру в папке /public_html). Код внутри такой:
Идем и смотрим, что он нам показывает по адресу: site.ru/phpinfo.php (вместо site.ru — свой сайт).
Поиск с помощью CTRL+F выручит везде. Видим несчастную настройку mbstring.func_overload, которая никак не хочет становиться «2»:
Видим данные строчки, там где-то вначале. Это и есть путь до нашего файла:
Подключение к SSH — тут посредством программы Putty
Включаем SSH в панели управления на хостинге. Это обычно включается в панели любого хостинга. Сохраняем адрес, порт, логин, пароль.
Вносим их, выбирая по-умолчанию ssh везде:
Вписываем логин/пароль. Причем, при вводе пароля не появляются никакие символы и это норма, надо его ввести и нажать Enter:
В Putty пишем следующее и жмем Enter:
//это открывает в текстовом редакторе наш конфиг файл
Открывается наш файл конфиг сервера. Теперь мы легко можем вносить туда правки.
Жмем: CTRL+S, ищем mbstring.func_overload.
Находим, правим (исправлением текущей или добавлением mbstring.func_overload = 2), сохраняем (CTRL+O), выходим (CTRL+X). На этом все, по идее.
Если хостинг поддерживает сохранение и использование файлов в корне сайта (public_html).
После захода на сервер через ssh, вводим эту команду и жмем Enter:
cp /opt/alt/php72/etc/php.ini home/username/public_html
//Это копирует файл в папку public_html. Пути на другом хостинге будут другими
Это сохранит php.ini в корень сайта, где мы можем его править чем угодно, вносить нужные изменения. В этом файле находим любым редактором (VScode, Notepad++ и т.д.) нужную строчку «mbstring.func_overload», раскомментируем, если надо, и дописываем «2».
Можно также создать пустой *.ini файл в корне сайта (php.ini, user.ini и т.д. в зависимости от хостинга) и записывать настройки в него. Это также часто срабатывает на многих хостингах. Но для начала почитайте настройки своего хостинга в help, это бывает весьма полезно.
Послесловие
В мире встречаются разные хостинги. Одни разрешают правку php.ini и кладут ее куда-то в доступное из CPanel место. Другие просто выносят настройки непосредственно в панель управления хостингом (это редкость). Но большинство скроет от вас этот файл, для прямого доступа, и придется ковыряться самому. А тот же Битрикс, без одной этой настройки отказывается отрабатывать restore.php до конца и не восстановит правильно сайт в нужном вам хостинге. Выбирайте правильный хостинг в нашем рейтинге хостингов для сайта! С ними у вас никогда не возникнет таких проблем.
Команды типа ‘nano’ могут не сработать, зависит от того, встроен ли редактор Nano (в основном, это не проблема).
PS. Не надо бояться консоли! И не забывайте, что есть еще файл .htaccess, в котором обычно и записываются все нужные настройки виртуального сервера.
How to use custom php.ini files on shared hosting
The advantages of using php with apache web server are many. The wonderful file named .htaccess makes things easier by allowing the webmaster (thats you!) to play around with many settings which would otherwise need the php.ini to be edited. This is a boon for people having their websites hosted on a shared server. Such people can’t even dream of editing the php.ini file located on their web hosting provider’s server. Thus the concept of custom php.ini was born. Webmasters who have their website hosted on a server with support for custom php.ini can create a php.ini within their directory and provide all the necessary settings they require. But custom php.ini doesn’t work out-of-the-box. This article explains how to use custom php.ini on a shared hosting server.
Note:- First ask your web hosting provider whether they support custom php.ini. If they don’t there is no point in trying anything further.
Step 1:- Create a php.ini file
Create a file named php.ini inside your root directory. By root directory I mean the directory outside your document root. If you are confused here is the clear explanation, if you upload files inside /home/username/public_html then it is your document root, you should create the php.ini inside /home/username for your safety and security.
Step 2:- Create a .htaccess file
Even for custom php.ini feature to work the infamous .htaccess is required. Create a .htaccess file inside your root directory i.e. the directory outside your document root if you upload your website file at /home/username/htdocs then the htaccess file should be in /home/username
Add the following line to the .htaccess file
SetEnv PHPRC /home/username/php.ini
Wait its not over the php.ini file needs to be secured so along with the above line add the following
order allow,deny deny from all
This will return a 403 error whenever someone tries to view your php.ini files or any file with a .ini extension. You could argue that no one can access it via the url as it is located outside the document root, but even if you accidentally copy the file into the document root you’ll be in trouble. So better safe than sorry.
Step 3:- Test your php.ini file
Create a file named info.php into your document root and add the following code
Save the file and access it by typing in the url (http://example.com/info.php) check the value next to “Loaded Configuration File” it should point to the location of the new php.ini file.
Now you can edit the php.ini file as you wish. Here are some sample configurations
display_errors = On date.timezone = Europe/London upload_max_filesize = 30M
IMPORTANT Remove the file containing phpinfo immediately because it exposes many sensitive information about your web server