Nginx увеличить память php
I am trying to increase the memory limit on my nginx php-fpm server for wordpress. Specifically the Wordpress plugin WooCommerce needs more available memory.
I've set the following in wp-config.php.
php.ini has the following.
The fpm server is also set to change this.
Yet WooCommerce's system status still claims it only has 40MB, how can this be?
I believe it might be suhosin but I am unsure how to change this on an OpenBSD server. I've tried changing it in the settings for the php-fpm server pool.
If someone can tell me how to change the limit on an OpenBSD server that would be very good.
Проверка использование ресурсов
Функция getrusage получает информацию об использовании текущего ресурса.
Возвращаемые значения: возвращает ассоциативный массив, содержащий данные возвращённые из системного вызова. Имена элементов соответствуют документированным именам полей.
Пример использования getrusage():
Add client_max_body_size
Now that you are editing the file you need to add the line into the server block, like so;
And also update the upload_max_filesize in your php.ini file so that you can upload files of the same size.
Увеличение глубины вложенности входных переменных
Директива в файле php.ini
задаёт максимальную глубину вложенности входных переменных (то есть $_GET, $_POST.). По умолчанию данная директива закомментирована.
Максимально допустимый размер данных, отправляемых методом POST
Методом пост могут отправляться как текстовые данные (например, при отправке комментария на сайт), так и файлы. Если вы увеличили значение upload_max_filesize чтобы иметь возможность загружать файлы большего размера на сайт, то также нужно увеличить и значение директивы:
которая устанавливает максимально допустимый размер данных, отправляемых методом POST. Это значение также влияет на загрузку файлов. Для загрузки больших файлов это значение должно быть больше значения директивы upload_max_filesize. В сущности, memory_limit должна быть больше чем post_max_size. Если используется integer, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана выше. Если размер POST-данных больше чем post_max_size, суперглобальные переменные $_POST и $_FILES будут пустыми. Это можно отследить различными способами, например передав $_GET переменную в скрипт, обрабатывающий данные, т.е. , а затем проверить, установлена ли переменная $_GET[‘processed’].
Замечание: PHP разрешает сокращения значений байт, включая K (кило), M (мега) и G (гига). PHP автоматически преобразует все эти сокращения. Будьте осторожны с превышением диапазона 32-битных целых значений (если вы используете 32-битную версию), так как это приведёт к ошибке вашего скрипта.
Для полного снятия лимитов значение можно установить на 0.
Значение этой настройки игнорируется, если чтение данных POST отключено с помощью enable_post_data_reading.
Увеличение времени парсинга данных из запроса.
Директива в файле php.ini
задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться. Значение по умолчанию -1, что означает, что будет использоваться max_execution_time. Если установить равным 0, то ограничений по времени не будет.
При запуске в командной строке значение директивы установлено на -1 (неограниченно).
4 Answers 4
2 Answers 2
One can not re-define a constant (in PHP / WordPress). So, you must have put the line.
at the end of your wp-config.php file. If you are not already aware, the last default line in this file ( require_once(ABSPATH . 'wp-settings.php'); ) setup all the variables and constants.
In order to solve your issue, you must define 'WP_MEMORY_LIMIT' before WordPress sets its constants. So, the contents (or tail wp-config.php ) of your site's wp-config.php file should read like this.
Basically, there is nothing wrong with Nginx or php-fpm. The issue is in where you define a constant for WordPress.
As far as I can remember, Wordpress doesn't list available/maximum RAM but allowed upload file size.
You can change that through the upload_max_filesize and post_max_size settings in php.ini or per-pool in your php-fpm.d/*.conf files.
Concerning nginx, remember to set client_max_body_size 128m; to allow for bigger POST data to be sent to/through the webserver.
This has nothing to do with upload size. The Wordpress plugin WooCommerce lists available memory on it's system status page. I need to increase the max memory.
What happens if you go crazy and set memory_limit to 512M or something like that? Make sure there isn't a per-directory php.ini file in effect, overriding the main config. Try momentarily disabling APC as it can show you stale/cached PHP output.
Настройки потребления ресурсов в PHP скриптах можно установить в главном конфигурационном файле php.ini, а также в самих скриптах.
В файле php.ini за это отвечают директивы из раздела Resource Limits (ограничение потребления ресурсов).
Увеличение разрешённого размера файлов для загрузки на сервер
Кроме описанных ограничений на потребление непосредственных ресурсов веб-сервера, также имеются ограничения, которые оказывают косвенное воздействие на ресурсы: например, загрузка слишком большого файла на сервер может потребовать большого количества ресурсов для его обработки, либо привести к переполнению дискового хранилища сервера. Поэтому существуют дополнительные лимиты, включённые в другие разделы конфигурационного файла помимо Resource Limits.
В частности, директива
устанавливает максимальный размер закачиваемого файла.
Если используется целое число, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана чуть выше.
Как увеличить память для PHP скриптов
Для этого в файле php.ini найдите и отредактируйте директиву:
Эта директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, парсер завершает работу скрипта. Этот механизм помогает предотвратить зависание сервера из-за плохо написанного скрипта. По умолчанию на загрузку даётся 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.
На максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п.
При работе в безопасном режиме эту настройку нельзя изменить функцией ini_set(). Если значение все же нужно изменить, надо либо выключить безопасный режим, либо изменить значение прямо в php.ini.
Веб-серверы обычно имеют свои настройки тайм-аута, по истечении которого сами завершают выполнение скрипта PHP. В Apache есть директива Timeout, в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к веб-серверу.
Saving in Vi
Once you are done you need to save, this can be done in vi with pressing esc key and typing :wq and returning.
8 Answers 8
Run: From command line: sudo service nginx restart
Try to do a command like this:
It will show you which ini files are loaded by php.
I got in contact with the guys who made the AMI and found out there are additional configuration files that override the php.ini
There are 2 files which hold settings
Obviously the locations may differ on different configurations, but hopefully this will help give someone an idea of what else to look for.
I encountered the same problem and edited the /etc/php5/fpm/php.ini file by increasing upload_max_filesize = 10M . I then had to sudo service php5-fpm restart & sudo service nginx restart for it to finally work (this was on Ubuntu 12.04 though).
Doing sudo service php5-fpm restart and sudo service nginx restart worked for me where sudo /etc/init.d/php5-fpm restart and sudo /etc/init.d/nginx restart didn't!
If you explicitly set those values in your php.ini file and they are not the same when you run your PHP script, then something has overridden them. You know your php.ini settings are correct because the CLI version of PHP info shows the new settings.
I have also run php -i | grep ".ini" to check which files are loaded, and there are no unnecessary loaded configs. I even went through each loaded file individually to check they didn't have the settings inside.
This is great, but it's telling you what .ini files have been loaded from the PHP CLI---not your application.
You need to check the Additional .ini files parsed section of your phpinfo() output to see exactly what files are being loaded from your web server. One of those files is overriding your settings.
Finally, if none of those files turn out to be the culprit, you should do a global find on ini_set() in your project to make sure some rogue script isn't setting those values for you (trying to be helpful).
I'm running php5-fpm under Nginx on Ubuntu 14.04. I want to increase the max upload size.
I have edited my /etc/php5/fpm/php.ini to have the following lines defined as below:
upload_max_filesize = 20M post_max_size = 25M
and I restarted php5-fpm and nginx but phpinfo() is still showing the limits to be 8M and 2M for post and upload respectively.
Is there anything I have missed here?
6 Answers 6
And restart or reload php fpm.
Instead of changing php.ini file, I add all information in the nginx sites-available files. I see you got your answer long time ago, but this is the way I do it:
In my virtualhost under server <> block, I added:
Then in the location ~ .php$ <> block I added:
fastcgi_param PHP_VALUE "upload_max_filesize=128M \n post_max_size=128M";
I had a problem with restarting so I just killed the process and started it manually.
The issue was with the restarting of php5-fpm. It seems there is a bug where sometimes some child processes are not terminated upon restart. I had to manually kill the processes with kill having identified them with ps -ef .
I was then able to fully restart php5-fpm which enacted my config changes.
I know this is an old question that's already been answered. But I wanted to comment here for @harryg and others that come after me.
Your issue was with restarting php5-fpm being buggy. As of this writing, the issue seems to have been fixed, and restarting php5-fpm on ubuntu is as simple as running the following command:
NOTE: I'm currently running this version of php5-fpm: PHP 5.5.9-1ubuntu4.9 (fpm-fcgi) (built: Apr 17 2015 11:44:58)
Hope someone finds this helpful.
It sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. Here’s an example of increasing the limit to 50MB in /etc/nginx/nginx.conf file.
Set in server block, which affects a particular site/app
Set in location block, which affects a particular directory (uploads) under a site/app.
Save the file and restart Nginx web server to apply the recent changes using following command.
Увеличение выделенной памяти для PHP скриптов
Директива в файле php.ini
задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать ограничения, установите значение этой директивы в -1.
В версиях до PHP 5.2.1 для использования этой директивы, она должна была быть указана на этапе компиляции. Так, ваша строка конфигурации должна была включать: --enable-memory-limit. Эта опция компиляции была также необходима для использования функций memory_get_usage() и memory_get_peak_usage() до версии 5.2.1.
Если используется целое число, то значение измеряется байтами. Вы также можете использовать сокращённую запись.
Доступные опции: K (для килобайт), M (для мегабайт) и G (для гигабайт; доступна начиная с PHP 5.1.0); они регистронезависимы. Все остальное считается байтами. 1M равно одному мегабайту или 1048576 байтам. 1K равно одному килобайту или 1024 байтам. Эти сокращения вы можете использовать в php.ini и в функции ini_set(). Обратите внимание, что числовое значение приводится к типу integer; например, 0.5M интерпретируется как 0.
Ограничение на количество входных переменных
Директива в файле php.ini
определяет, входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение E_WARNING, а все последующие переменные в запросе игнорируются. По умолчанию данная директива закомментирована.
Внимание: после внесения изменений в файл php.ini необходимо перезагрузить веб-сервер, чтобы изменения вступили в силу.
Увеличение количества файлов, выгружаемых на сайт за один раз
устанавливает максимально разрешённое количество одновременно закачиваемых файлов. Начиная с PHP 5.3.4, пустые поля загрузки не рассматриваются этим ограничением.
Имеются ввиду не общее количество одновременно закачиваемых файлов, которые могут выполнять различные пользователи, а именно количество файлов за один запрос.
I want to increase the maximum file size that can be uploaded.
After doing some research online, I found that you have to edit the file 'nginx.conf'.
The only way I can currently access this file is by going through Putty and typing in the command:
This will open the file but I have 2 questions now:
- How do I edit this file?
- I found online that you have to add the following line of code:
Where would I put this line of code in nginx.conf ?
Функция для увеличения и ограничения времени выполнения PHP
Функция set_time_limit ограничивает время выполнения скрипта.
Она задает время в секундах, в течение которого скрипт должен завершить работу. Если скрипт не успевает, вызывается фатальная ошибка. По умолчанию дается 30 секунд, либо время, записанное в настройке max_execution_time в php.ini (если такая настройка установлена).
При вызове set_time_limit() перезапускает счетчик с нуля. Другими словами, если тайм-аут изначально был 30 секунд, и через 25 секунд после запуска скрипта будет вызвана функция set_time_limit(20), то скрипт будет работать максимум 45 секунд.
- СЕКУНДЫ (максимальное время выполнения в секундах. Если задан ноль, время выполнения неограничено)
Возвращаемые значения: возвращает TRUE в случае успеха, иначе FALSE.
Внимание: эта функция не работает, если PHP работает в безопасном режиме. Обойти это ограничение можно только выключив безопасный режим или изменив значение настройки в php.ini.
Замечание: функция set_time_limit() и директива max_execution_time влияют на время выполнения только самого скрипта. Время, затраченное на различные действия вне скрипта, такие как системные вызовы функции system(), потоковые операции, запросы к базам данных и т.п. не включаются в расчет времени выполнения скрипта. Это не относится к системам Windows, где расчитывается абсолютное время выполнения.
Обе set_time_limit(…) и ini_set('max_execution_time',…); не учитывают время, потраченное функциями sleep, file_get_contents, shell_exec, mysql_query и некоторыми другими.
Restarting Nginx and PHP
Now you need to restart nginx and php to reload the configs. This can be done using the following commands;
Or whatever your php service is called.
Yes I forgot to mention that I am using Laravel Homestead. So I opened '/etc/php5/fpm/php.ini' and found the line of code 'upload_max_filesize = 2M', so I want to change it so that '2M' becomes '8M'. Once I make this edit, do I just hit 'Ctrl Z' to exit out of the file and then run 'sudo service nging restart'?
Come out of the editor, prepend the vi command with sudo. Like so; sudo vi /etc/nginx/nginx.conf or sudo vi /etc/php5/fpm/php.ini
In case if one is using nginx proxy as a docker container (e.g. jwilder/nginx-proxy), there is the following way to configure client_max_body_size (or other properties):
- Create a custom config file e.g. /etc/nginx/proxy.conf with a right value for this property
- When running a container, add it as a volume e.g. -v /etc/nginx/proxy.conf:/etc/nginx/conf.d/my_proxy.conf:ro
Personally found this way rather convenient as there's no need to build a custom container to change configs. I'm not affiliated with jwilder/nginx-proxy , was just using it in my project, and the way described above helped me. Hope it helps someone else, too.
Bear in mind, I am no sysadmin, I am just a developer. I cannot find anyone with the exact problem as me, just similar, and none of their "fixes" seem to work.
I am currently running an Amazon EC2 instance running.
I have set my php.ini (/etc/php.ini) settings to the following
After reloading the config, using php -i via ssh, these settings seemed to be loaded. Showing upload_max_filesize=10M , etc.
When using phpinfo() or ini_get , both options are returned as 4M
phpinfo() indicates that the file I am editing is the one loaded ( /etc/php.ini ).
I have also run php -i | grep "\.ini" to check which files are loaded, and there are no unnecessary loaded configs. I even went through each loaded file individually to check they didn't have the settings inside.
ini_set() does not work either.
I'm at a bit of a loss.
It's just a basic image upload script, for avatars, but the default upload amount it too low. The server is running fpm-fcgi. I did try .htaccess file, but for obvious reasons, it did nothing.
@sivann I am not sure, as it was using a preconfigured AMI from the amazon community section when creating a new instance. Checking its version just returns the php version, 5.3.16 . Is there a way to check?
Читайте также: