In this article we mainly share with you how to install php on Linux. This article is shared with you in the form of pictures and texts, hoping to help you.
1. Download the corresponding version from the php official website
Because the php download page only has the latest few version, the downloaded older version can no longer be found on the download page. You can only download it manually through the following URL,
http://cn.php.net/distributions/ php-5.3.9.tar.bz2, some old versions will be listed on this page. The 5.3 version is used here, and the download is in gz format
2. Install php
Unzip the tar package and enter the unzipped package directory - execute the command: ./configure --prefix=/opt/local/ php, "/opt/local/php" is the installation path, you can change it to the installation path you want.
(1) There may be a prompt here that some necessary plug-ins are missing. In this case, use the yum command to install it. For example, the most likely error is: configure error xml2-config not found. please Check your libxml2 installation, then execute the command: yum -y install libxml2 libxml2-devel, install the corresponding plug-in, and so on
After all plug-ins are installed, execute again
<span style="font-size: 14px;">./configure --prefix=/opt/local/php<br/></span>
(2) If you want to install the php-fpm function here, you need to install more plug-ins with yum, for example:
<span style="font-size: 14px;">yum -y install openssl openssl-devel bzip2 bzip2-devel curl curl-devel readline-devel fcgi php-mcrypt libmcrypt libmcrypt-devel<br/></span>
In which installphp-mcrypt
When libmcrypt libmcrypt-devel, you may be prompted that the package cannot be found. In this case, you need to update the source to solve the problem. The specific command is as follows:
<span style="font-size: 14px;">yum -y install epel-release<br/>yum update<br/></span>
Among them, update was executed twice before it was successful, and then configure was executed again
./configure --prefix=/opt/local/php5.3.29 --with-config-file-path=/etc --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --enable-zip --with-bz2 --with-readline --without-sqlite3 --without-pdo-sqlite --with-pear
通过后执行make
此时可能会出现以下提示
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
此处可暂进忽略,等之后再行安装,再次在php目录执行make all install
如果安装了php-fpm,则还需要执行以下命令,将php/etc目录下的配置文件拷贝一份
cp etc/php-fpm.conf.default etc/php-fpm.conf
将php/lib/php.ini拷贝到/etc/下
3.初装phar
这时可以执行
<span style="font-size: 14px;">wget http://pear.php.net/go-pear.phar<br/></span>
之后再执行
/opt/local/php/bin/php /opt/local/go-pear.phar
在出现的提示后,选1,选择phar安装目录,然后一路回车进行安装即可
最后制作php软链,让php全局可用
<span style="font-size: 14px;">ln -s /opt/local/php/bin/php /usr/bin/php<br/></span>
4.验证
执行php -v和sbin/php-fpm -v查看php版本以验证php是否已安装
5.启动php-fpm
php/sbin/php-fpm
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
示例:
php-fpm 关闭:
kill -INT `cat /opt/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /opt/local/php/var/run/php-fpm.pid`
如果找不到php-fpm.pid文件,可通过查找php-fpm进程号进行重启和关闭
例如
<span style="font-size: 14px;">[root@SH-DEV local]# ps -aux|grep php-fpm<br/>root 141735 0.0 0.0 201840 3892 ? <br/> Ss 16:27 0:00 php-fpm: master process (/opt/local/php5.3.29/etc/php-fpm.conf)<br/><br/>kill -USR2 141735<br/></span>
6.修改php-fpm配置
(1)如果在nginx.conf中使用了fastcgi_pass unix:/tmp/php-cgi.sock,则需要修改php-fpm.conf,找到如下码段:
<span style="font-size: 14px;">; The address on which to accept FastCGI requests.<br/>; Valid syntaxes are:<br/>; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on<br/>; a specific port;<br/>; 'port' - to listen on a TCP socket to all addresses on a<br/>; specific port;<br/>; '/path/to/unix/socket' - to listen on a unix socket.<br/>; Note: This value is mandatory.<br/>;listen = 127.0.0.1:9000<br/>listen = /tmp/php-cgi.sock<br/><br/>; Set listen(2) backlog. A value of '-1' means unlimited.<br/>; Default Value: 128 (-1 on FreeBSD and OpenBSD)<br/>;listen.backlog = -1<br/><br/>; Set permissions for unix socket, if one is used. In Linux, read/write<br/>; permissions must be set in order to allow connections from a web server. Many<br/>; BSD-derived systems allow connections regardless of permissions.<br/>; Default Values: user and group are set as the running user<br/>; mode is set to 0660<br/>listen.owner = nobody<br/>listen.group = nobody<br/>listen.mode = 0660<br/></span>
将原listen和listen.owner,listen.group段做如上修改,其中listen.owner,listen.group为nginx启动用户名,如此处不修改,会提示
nginx error connect to php-fpm.sock failed (13: Permission denied)
当然此处如果将sock放在内存中/dev/shm/php-fpm.sock会更快
(2)修改php-fpm线程数
<span style="font-size: 14px;">; Per pool prefix<br/>; It only applies on the following directives:<br/>; - 'slowlog'<br/>; - 'listen' (unixsocket)<br/>; - 'chroot'<br/>; - 'chdir'<br/>; - 'php_values'<br/>; - 'php_admin_values'<br/>; dynamic - the number of child processes are set dynamically based on the<br/>; following directives. With this process management, there will be<br/>; always at least 1 children.<br/>; pm.max_children - the maximum number of children that can<br/>; be alive at the same time.<br/>; pm.start_servers - the number of children created on startup.<br/>; pm.min_spare_servers - the minimum number of children in 'idle'<br/>; state (waiting to process). If the number<br/>; of 'idle' processes is less than this<br/>; number then some children will be created.<br/>; pm.max_spare_servers - the maximum number of children in 'idle'<br/>; state (waiting to process). If the number<br/>; of 'idle' processes is greater than this<br/>; number then some children will be killed.<br/>; ondemand - no children are created at startup. Children will be forked when<br/>; new requests will connect. The following parameter are used:<br/>; pm.max_children - the maximum number of children that<br/>; can be alive at the same time.<br/>; pm.process_idle_timeout - The number of seconds after which<br/>; an idle process will be killed.<br/>; Note: This value is mandatory.<br/>pm = dynamic<br/>#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下面的参数决定<br/><br/>; The number of child processes to be created when pm is set to 'static' and the<br/>; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.<br/>; This value sets the limit on the number of simultaneous requests that will be<br/>; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.<br/>; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP<br/>; CGI. The below defaults are based on a server without much resources. Don't<br/>; forget to tweak pm.* to fit your needs.<br/>; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'<br/>; Note: This value is mandatory.<br/>pm.max_children = 8<br/>#子进程最大数<br/><br/>; The number of child processes created on startup.<br/>; Note: Used only when pm is set to 'dynamic'<br/>; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2<br/>pm.start_servers = 8<br/>#启动时的进程数<br/><br/><br/>; The desired minimum number of idle server processes.<br/>; Note: Used only when pm is set to 'dynamic'<br/>; Note: Mandatory when pm is set to 'dynamic'<br/>pm.min_spare_servers = 1<br/>#保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程<br/><br/>; The desired maximum number of idle server processes.<br/>; Note: Used only when pm is set to 'dynamic'<br/>; Note: Mandatory when pm is set to 'dynamic'<br/>pm.max_spare_servers = 8<br/>#保证空闲进程数最大值,如果空闲进程大于此值,此进行清理<br/></span>
相关推荐:
The above is the detailed content of How to install php on linux. For more information, please follow other related articles on the PHP Chinese website!

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.

In PHP, use the clone keyword to create a copy of the object and customize the cloning behavior through the \_\_clone magic method. 1. Use the clone keyword to make a shallow copy, cloning the object's properties but not the object's properties. 2. The \_\_clone method can deeply copy nested objects to avoid shallow copying problems. 3. Pay attention to avoid circular references and performance problems in cloning, and optimize cloning operations to improve efficiency.

PHP is suitable for web development and content management systems, and Python is suitable for data science, machine learning and automation scripts. 1.PHP performs well in building fast and scalable websites and applications and is commonly used in CMS such as WordPress. 2. Python has performed outstandingly in the fields of data science and machine learning, with rich libraries such as NumPy and TensorFlow.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.