Еще в 2014м годе, Zend провел голосование и по результатам голосов, новая версия ПО получила название — PHP7. На данный момент (2019 год), самая последняя версия ПО — это PHP-7.4.
Установка PHP 7(php-fpm) с Nginx в Centos/RedHat/Fedora
Подключаем необходимые репозитории, — стоит подключить EPEL и REMI. Документация тут:
Выполним поиск пакета:
$ yum --enablerepo=remi search php74
Чтобы поставить, выполняем:
$ yum --enablerepo=remi install php74 php74-php-fpm -y
PS: Версии можно менять, например php71, php72, php73.
Если необходимо, можно поставить модули, например:
$ yum --enablerepo=remi-php74 install -y \
php74-php-bcmath \
php74-php-gd \
php74-php-gmp \
php74-php-imap \
php74-php-intl \
php74-php-json \
php74-php-ldap \
php74-php-mbstring \
php74-php-mysql \
php74-php-odbc \
php74-php-pdo \
php74-php-snmp \
php74-php-soap \
php74-php-tidy \
php74-php-xml \
php74-php-xmlrpc \
php74-php-cli \
php74-php-devel \
php74-php-lz4 \
php74-php-opcache \
php74-php-pecl-apcu \
php74-php-pecl-crypto \
php74-php-pecl-json-post \
php74-php-pecl-memcache \
php74-php-pecl-memcached \
php74-php-pecl-rrd \
php74-unit-php
Чтобы постоянно не подключать репозиторий, можно его включить следующим образом:
# yum-config-manager --enable remi-php74
Чтобы проверить версию, выполним:
$ php74 -v
PHP 7.4.0RC4 (cli) (built: Oct 15 2019 11:28:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v7.4.0RC4, Copyright (c), by Zend Technologies
Если есть необходимость внести какие-то настройки в сам php, то открываем:
# vim /etc/opt/remi/php74/php.ini
Если нужно внести изменения в php-fpm, открываем:
# vim /etc/opt/remi/php74/php-fpm.d/www.conf
У меня он выглядит:
; Start a new pool named 'www'.
[www]
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
user = www
group = www
;user = nginx
;group = nginx
listen = 127.0.0.1:9001
;listen = /tmp/php74-fpm.sock ;/var/run/php74-fpm/php74-fpm.sock
;listen.allowed_clients = 127.0.0.1:/php_admin_value
; Set listen(2) backlog. A value of '-1' means unlimited.
; Default Value: -1
;listen.backlog = -1
; List of ipv4 addresses of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any
listen.allowed_clients = 127.0.0.1
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0666
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache Choosed to be able to access some dir as httpd
;user = apache
; RPM: Keep a group allowed to write in log dir.
;group = apache
; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives:
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is greater than this
; number then some children will be killed.
; Note: This value is mandatory.
pm = dynamic
; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes to be created when pm is set to 'dynamic'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI.
; Note: Used when pm is set to either 'static' or 'dynamic'
; Note: This value is mandatory.
pm.max_children = 110
;50
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 30
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 30
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 45
; The number of seconds after which an idle process will be killed.
; Note: Used only when pm is set to 'ondemand'
; Default Value: 10s
pm.process_idle_timeout = 30s
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
pm.max_requests = 500000000
; The URI to view the FPM status page. If this value is not set, no URI will be
; recognized as a status page. By default, the status page shows the following
; information:
; accepted conn - the number of request accepted by the pool;
; pool - the name of the pool;
; process manager - static or dynamic;
; idle processes - the number of idle processes;
; active processes - the number of active processes;
; total processes - the number of idle + active processes.
; The values of 'idle processes', 'active processes' and 'total processes' are
; updated each second. The value of 'accepted conn' is updated in real time.
; Example output:
; accepted conn: 12073
; pool: www
; process manager: static
; idle processes: 35
; active processes: 65
; total processes: 100
; By default the status page output is formatted as text/plain. Passing either
; 'html' or 'json' as a query string will return the corresponding output
; syntax. Example:
; http://www.foo.bar/status
; http://www.foo.bar/status?json
; http://www.foo.bar/status?html
; Note: The value must start with a leading slash (/). The value can be
; anything, but it may not be a good idea to use the .php extension or it
; may conflict with a real PHP file.
; The ping URI to call the monitoring page of FPM. If this value is not set, no
; URI will be recognized as a ping page. This could be used to test from outside
; that FPM is alive and responding, or to
; - create a graph of FPM availability (rrd or such);
; - remove a server from a group if it is not responding (load balancing);
; - trigger alerts for the operating team (24/7).
; Note: The value must start with a leading slash (/). The value can be
; anything, but it may not be a good idea to use the .php extension or it
; may conflict with a real PHP file.
; Default Value: not set
;ping.path = /ping
pm.status_path = /status
; This directive may be used to customize the response of a ping request. The
; response is formatted as text/plain with a 200 response code.
; Default Value: pong
;ping.response = pong
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 600s
; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_slowlog_timeout = 0
; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
slowlog = /var/log/php-fpm/www-slow.log
; Set open file descriptor rlimit.
; Default Value: system defined value
rlimit_files = 65535
; Set max core size rlimit.
; Possible Values: 'unlimited' or an integer greater or equal to 0
; Default Value: system defined value
;rlimit_core = 0
; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: chrooting is a great security feature and should be used whenever
; possible. However, all PHP paths will be relative to the chroot
; (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =
; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /
; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
;catch_workers_output = yes
; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
; FPM to .php extensions to prevent malicious users to use other extensions to
; exectute php code.
; Note: set an empty value to allow all extensions.
; Default Value: .php
security.limit_extensions = .php .php3 .php4 .php5
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
; Additional php.ini defines, specific to this pool of workers. These settings
; overwrite the values previously defined in the php.ini. The directives are the
; same as the PHP SAPI:
; php_value/php_flag - you can set classic ini defines which can
; be overwritten from PHP call 'ini_set'.
; php_admin_value/php_admin_flag - these directives won't be overwritten by
; PHP call 'ini_set'
; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
; Defining 'extension' will load the corresponding shared extension from
; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
; overwrite previously defined php.ini values, but will append the new value
; instead.
; Default Value: nothing is defined by default except the values in php.ini and
; specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = off
php_admin_value[error_reporting] = 0
php_admin_value[error_log] = /var/log/php-fpm/php74-fpm.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
php_admin_flag[log_errors] = on
php_admin_flag[display_errors] = on
; Set session path to a directory owned by process user
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
Чтобы запустить php-fpm, выполните:
# systemctl start php74-php-fpm.service
Чтобы проверить статус, выполните:
# systemctl status php74-php-fpm.service
Можно сервис добавить в автозагрузку ОС:
# systemctl enable php74-php-fpm.service
Как-то так.
Установка PHP 7(php-fpm) с Nginx 1.9 в Debian 8
Недавно, вышла новая версия PHP7. В данной статье «Установка PHP 7 в Debian 8» я хотел бы уделить внимание установки PHP 7 в Debian 8.
И так начнем…
Установка nginx 1.9 в Debian 8.
Для начала, добавляем ключ:
#apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
Добавляем репозиторий:
# echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list
И выполняем установку:
# apt-get update && apt-get install -y ca-certificates nginx
Я ленивый иногда, по этому для этой задачи, я написал bash скрипт. Вы можете его тоже использовать:
# cd /usr/local/src && wget https://raw.githubusercontent.com/SebastianUA/Nginx-1.9-PHP-7-PHP7-FPM/master/Install-nginx1.9.x.sh && bash Install-nginx1.9.x.sh
Установка PHP 7 в Debian 8 с использованием репозитория Dotdeb.
Чтобы установить PHP 7 на Debian 8, но для начала добавляем репозиторий:
# echo "deb http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list && echo "deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list
После этого, загружаем и запускаем ключ GnuPG:
# cd /usr/local/src && wget https://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg
Обновляем репозиторий:
# apt-get update
Запускаем установку PHP как fpm:
# apt-get install -y php7.0-fpm
Чтобы запустить PHP 7, используйте:
Запуск:
# service php7.0-fpm start
Останавливаем:
# service php7.0-fpm stop
Перезапуск:
# service php7.0-fpm restart
Чтобы проверить, правильно ли сконфигурирован конфиг php-fpm, используйте:
# php7.0-fpm -t
Ну это простой вариант и взят в качестве примера (что можно использовать данный репозиторий), а дальше, я опишу нормальное решение.
Установка PHP 7 в Debian 8 с исходного кода.
Для начала выполняем установку всех необходимых компонентов и все зависимости для PHP 7:
# apt-get install -y wget curl git vim make checkinstall build-essential libtool gettext libpcre3 libpcre3-dev libldap2-dev libpq-dev libxslt-dev libxpm-dev libmysqlclient-dev libgmp3-dev libpng12-dev libpng-dev libfreetype6-dev autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config openssl libpng-dev libpspell-dev librecode-dev libreadline-dev libjpeg-dev libxml2 libxml2-dev libbz2-dev libmcrypt-dev libicu-dev libltdl-dev libcurl3
Я указал все нужные зависимости для моей сборки, вы можете дополнить их (в зависимости от своих нужд). Если не сделать это, то вы получите ошибку в процессе выполнения команды ./configure.
Переходим в директорию, скачиваем и распаковываем архив с php7, для этого выполните команду:
# cd /usr/src && wget http://be2.php.net/get/php-7.0.2.tar.gz/from/this/mirror -O php-7.0.2.tar.gz && tar -xzf php-*.tar.gz
Вы можете использовать другую ссылку (если вышла пхп свежей версии) с официального сайта.
Переходим в папку:
# cd php-*
Добавляем нужные модули в свою сборку и указываем параметры:
./buildconf --force CONFIGURE_STRING=" --prefix=/usr/local/php7 \ --with-config-file-path=/usr/local/etc \
--with-config-file-scan-dir=/usr/local/php7/etc/conf.d \
--enable-mbstring \
--with-curl \
--with-openssl \
--with-xmlrpc \
--enable-soap \
--enable-zip \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-pgsql \
--enable-embedded-mysqli \
--with-freetype-dir \
--enable-intl \
--with-xsl \
--with-mysqli \
--with-pdo-mysql \
--enable-pdo=shared \
--with-pdo-mysql=shared \
--with-pdo-sqlite=shared \
--with-pdo-pgsql=shared \
--disable-short-tags \
--enable-phpdbg \
--with-readline \
--with-gettext \
--enable-opcache \
--enable-xdebug \
--enable-intl \
--enable-mbstring \
--enable-pcntl \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
-enable-ftp \
--enable-fpm \
--enable-shmop \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--bindir=/usr/local/bin \
--sbindir=/usr/local/sbin \
--libdir=/usr/local/php7/lib \
--includedir=/usr/local/php7/include \
--mandir=/usr/local/php7"
При необходимости, можно просмотреть весь список доступных модулей:
# ./configure --help
А сейчас, приступаем к компиляции и собственно к самой установки PHP 7:
# ./configure $CONFIGURE_STRING
# make && make install
Идем далее, копируем конфигурационный файл с php.ini в папку установки PHP:
# cp /usr/src/php-7.0.2/php.ini-production /usr/local/etc/php.ini
Подключаем модуль Zend OPcache: /usr/local/php7/etc/conf.d
# vim /usr/local/etc/modules.ini
Прописываем в него:
# Zend OPcache zend_extension=opcache.so
И так, настроим сейчас PHP-FPM, для этого открываем файл:
# vim /usr/local/php7/etc/php-fpm.d/www.conf
И прописываем в него:
[global]
pid = /var/run/php7-fpm.pid
error_log = /var/log/php7-fpm.log
include=/usr/local/php7/etc/php-fpm.d/*.conf
Затем создайте файл: nano /usr/local/php7/etc/php-fpm.d/www.conf И добавьте в него параметры:
[www]
user = www-data
group = www-data
listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
И для этого, создаем init.d скрипт:
# cd /etc/init.d && wget http://linux-notes.org/wp-content/uploads/files/php7-fpm
Назначаем нужные права (исполнение) и добавляем скрипт в автозагрузку своей ОС:
# chmod +x /etc/init.d/php7-fpm # update-rc.d php7-fpm defaults
Чтобы запустить (в данном случае перезапусить) php7-fpm выполняем:
# service php7-fpm restart
Если используете PHP-FPM с Nginx, то нужно добавьте в блок server виртуального хоста следующий текст:
location ~ .php$ {
ry_files $uri = 404;
fastcgi_pass unix:/var/run/php7-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
PS: Для всего этого, я написал bash скрипт, вы можете его использовать для своих нужд:
# cd /usr/local/src && wget https://raw.githubusercontent.com/SebastianUA/Nginx-1.9-PHP-7-PHP7-FPM/master/Install-PHP7.sh && bash Install-PHP7.sh
Осталось только перезапустить все службы:
# service nginx restart && service php7-fpm restart
Вот и все!
Чтобы проверить, правильно ли сконфигурирован конфиг php-fpm, используйте:
# php7-fpm -t
Установка PHP 7(php-fpm) с Nginx в MacOS
Для начала устанавливаем homebrew, ссылку можно найти тут:
После чего, можно выполнить поиск и посмотреть какие версии актуальны на данный момент:
$ brew search php7
==> Formulae
php@7.1 php@7.2 php@7.3
Чтобы уствновить, используем:
$ brew install php@7.3
Проверить версию, можно так:
$ php -v
Установка PHP 7(php-fpm) с Nginx на другие Unix/Linux ОС
Для других Unix/Linux ОС, не приходилось ставить еще. Но можно заюзать — Docker, как пример!
Обновление PHP (php-fpm) с Nginx в CentOS/Fedora/Redhat
Будет скоро…
А на этом у меня все, статья «Установка PHP 7(php-fpm) с nginx в Unix/Linux» завершена.