如何在Raspbian Jessie上从源代码编译PHP7

本教程说明了如何从源代码编译PHP7并将其安装到Raspbian Jessie OS。 我使用的是低端的Pi 1 ModelB。从源代码编译软件时,Pi 1的处理能力不足。 完成大约7个小时的编译PHP7。 所以我建议您使用Pi 2或Pi3。 Pi 2具有双核CPU,Pi 3具有四核CPU。

从源代码编译PHP7

如果您没有安装程序,请先通过SSH进入Raspberry Pi。 然后从官方网站下载PHP7源代码。

wget http://php.net/distributions/php-7.0.4.tar.gz

提取压缩包。

tar xvf php-7.0.4.tar.gz

cd到新创建的目录。

cd php-7.0.4/

安装依赖项。

sudo apt-get install libkrb5-devlibc-client2007e libc-client2007e-dev libcurl4-openssl-dev libbz2-dev libjpeg-dev libmcrypt-dev libxslt1-dev libxslt1.1 libpq-dev build-essential git make

您可能已经知道,我们必须运行 配置 脚本来配置编译环境。 但是在此之前,我想指出在配置阶段遇到的两个错误以及如何解决它们。

错误1

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

解决方案:创建一个符号链接,然后重新运行配置脚本。

sudo mkdir /usr/c-client/
sudo ln -s /usr/lib/libc-client.a /usr/c-client/

错误2

error: Kerberos libraries not found.

Check the path given to --with-kerberos (if no path is given, searches in /usr/kerberos, /usr/local and /usr )

解决方案:创建一个符号链接,然后重新运行配置脚本。

sudo mkdir /usr/kerberos

sudo ln -s /usr/lib/arm-linux-gnueabihf/mit-krb5/* /usr/kerberos

如果您想亲自查看错误,则可以运行以下配置脚本。 如果您不喜欢看到错误,请创建上面的符号链接并运行下面的configure脚本。

这是配置脚本的常用参数。 复制以下代码并将其粘贴到Raspbian终端中,然后按Enter键开始配置。

./configure 
--prefix=/opt/php-7.0.4                      
--with-config-file-path=/opt/php-7.0.4/etc   
--with-zlib-dir                              
--with-freetype-dir                          
--enable-mbstring                            
--with-libxml-dir=/usr                       
--enable-soap                                
--enable-calendar                            
--with-curl                                  
--with-mcrypt                                
--with-zlib                                  
--with-gd                                    
--disable-rpath                              
--enable-inline-optimization                 
--with-bz2                                   
--with-zlib                                  
--enable-sockets                             
--enable-sysvsem                             
--enable-sysvshm                             
--enable-pcntl                               
--enable-mbregex                             
--enable-exif                                
--enable-bcmath                              
--with-mhash                                 
--enable-zip                                 
--with-pcre-regex                            
--with-pdo-mysql                             
--with-mysqli                                
--with-mysql-sock=/var/run/mysqld/mysqld.sock 
--with-jpeg-dir=/usr                         
--with-png-dir=/usr                          
--enable-gd-native-ttf                       
--with-openssl                               
--with-fpm-user=www-data                     
--with-fpm-group=www-data                    
--with-libdir=/usr/lib/arm-linux-gnueabihf          
--enable-ftp                                 
--with-imap                                  
--with-imap-ssl                              
--with-kerberos                              
--with-gettext                               
--with-xmlrpc                                
--with-xsl                                   
--enable-opcache                             
--enable-fpm

完成后,让我们使用make命令编译PHP7。 使用 -j4 如果您的Raspberry Pi具有四核处理器,则为可选。

make   or     make -j4

在我的低端单核Raspberry Pi上,此编译过程耗时约5个小时。 具有四核处理器的Pi 3所花的时间要少得多。

编译完成后,使用以下命令安装PHP7.0.4:

sudo make install

完成后,它会告诉您安装位置。 这是非常有用的信息。

如您所见,PHP-FPM二进制文件位于 /opt/php-7.0.4/sbin/ 而且我的PHP-FPM配置目录是 /opt/php-7.0.4/etc/。 因此,如果我使用以下命令启动php-fpm:

/opt/php-7.0.4/sbin/php-fpm

出现错误消息,告诉我找不到php-fpm.conf。

在Raspberry Pi上从源代码编译PHP7

我们需要重命名两个conf文件。

sudo mv /opt/php-7.0.4/etc/php-fpm.conf.default /opt/php-7.0.4/etc/php-fpm.conf

sudo mv /opt/php-7.0.4/etc/php-fpm.d/www.conf.default /opt/php-7.0.4/etc/php-fpm.d/www.conf

并将php.ini-production文件复制到php-fpm config文件夹。

sudo cp /home/pi/php-7.0.4/php.ini-production /opt/php-7.0.4/etc/

现在再次启动php-fpm。

sudo /opt/php-7.0.4/sbin/php-fpm

与Nginx集成

要查看如何在Raspbian Jessie上从源代码编译Nginx,请查看以下文章。 当然,您也可以通过以下方式从软件存储库在Raspbian Jessie上安装Nginx: sudo apt-get install nginx

如何从源代码编译Nginx并在Raspbian Jessie上安装

在您的Nginx服务器块中,添加以下行。

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

我的Raspbian Jessie上的文档根目录是 /usr/share/nginx/html。 您可能需要更改文档根目录。 保存并关闭文件。 重新加载Nginx。

sudo sysemctl reload nginx

然后在您的文档根目录中创建一个test.php文件。

sudo nano /usr/share/nginx/html/test.php

将以下PHP代码粘贴到文件中。

<?php

phpinfo();

?>

保存并关闭文件。 现在,在浏览器地址栏中,键入

ip-of-raspberrypi/test.php

用实际IP替换ip-of-raspberrypi。 您应该看到所有PHP安装信息。 如果您可以看到此页面,则意味着php-fpm在Nginx上运行愉快。

在Raspberry Pi上从源代码编译PHP7

微调

启用错误日志

编辑 php-fpm.conf 文件

sudo nano /opt/php-7.0.4/etc/php-fpm.conf

在此文件中找到以下行。

;error_log = log/php-fpm.log

并将其更改为此:

error_log = /var/log/php-fpm.log

所以现在我们可以检查php-fpm登录 /var/log/php-fpm.log 文件。

与Systemd集成

为php-fpm创建一个systemd服务文件。

sudo nano /etc/systemd/system/php-fpm.service

将以下文本复制并粘贴到文件中。

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/var/run/php-fpm.pid
ExecStart=/opt/php-7.0.4/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.4/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

保存并关闭文件。 现在,终止当前正在运行的php-fpm进程,并使用systemctl重新启动它。

sudo pkill php-fpm

sudo systemctl start php-fpm

检查状态

sudo systemctl status php-fpm

在Raspberry Pi上从源代码编译PHP7

启用php-fpm会在Raspberry Pi开机时自动启动。

sudo systemctl enable php-fpm

编辑www.conf文件

sudo nano /opt/php-7.0.4/etc/php-fpm.d/www.conf

找到以下两行

;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660

取消注释。 然后找到这行。

listen = 127.0.0.1:9000

更改为

listen = /var/run/php7-fpm.sock

保存文件。 现在编辑您的Nginx配置文件并更改 fastcgi_pass /var/run/php7-fpm.sock

location ~ .php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   unix:/var/run/php7-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

保存并关闭文件。 然后重新启动Nginx和php-fpm。

sudo systemctl restart nginx

sudo systemclt restart php-fpm

恭喜! 您已成功编译PHP7并将其安装在Raspbian Jessie上。 此外,我们还创建了一个php-fpm.service文件,并且可以使用Systemd轻松管理php-fpm。

Sidebar