设为首页 收藏本站
查看: 689|回复: 0

[经验分享] Linux网站架构系列之PHP

[复制链接]

尚未签到

发表于 2018-12-21 08:02:24 | 显示全部楼层 |阅读模式
  PHP(Hypertext Preprocessor),中文译为超文本预处理器是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。并且其入门门槛较低,易于学习,因此得到了广泛的使用。当今,php主要适用于Web开发领域。它与mysql,apache,nginx形成独特的lamp和lnmp网站架构是极其典型架构类型,广受中小型互联网企业推崇。
  本文将分别以php在lamp和lnmp两个环境下的部署为例,为大家讲解php在生产环境中的部署应用。
lamp中的php

  

  
  
环境
CentOS6.4 x86_64位 采用最小化安装,系统经过了基本优化
selinux为关闭状态,iptables为无限制模式
apache版本:apache-2.4.6    mysql版本:mysql-5.1.70     php版本:php-5.3.27
源码包存放位置:/server/tools
源码包编译安装位置:/etc/local/软件名称
数据库存放位置:/mydata  一、准备工作

  1、检查apache和mysql安装情况
  由于php作为一种编程语言,因此我们往往不会去裸装php。上文也提到,lamp和lnmp架构中的p指的就是php。因此,我们这里要在安装php之前,先检查一下apache和mysql服务是否开启。这样,我们在后面安装完PHP之后,我们就可以检查apache是否成功支持它,以及是否和mysql数据库连接正常了。
  检查方法一共有三种:
  第一种、检查路径
  检查我们apache和mysql软件包的安装路径,根据我们的习惯,我们都是讲软件编译安装/usr/local目录下,然后以软件名称命名的,因此我们就ll跟上软件名,看是否有其目录存在即可。
  第二种、检查端口

  在部署PHP的是否,一般都是我们apache和mysql已经部署好了,并且服务也是开启状态的。因此我们可以通过查看其端口来判断是否安装。
  注意:apache常用的端口为80,mysql的则为3306。这两个端口我们一定要记牢。
[root@c64-lamp ~]# netstat -lnt|egrep "3306|80"
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN  第三种、查看版本

  这一种方法是最实在的方法,我们可以查看apache和mysql的版本来确定是否安装了此服务。查看方法如下:
  
  
[root@c64-lamp ~]# /usr/local/apache/bin/apachectl -v
[root@c64-lamp ~]# mysql -uroot -p -e "select version();"
[root@c64-lamp ~]# mysql -uroot -p -e "select version();"
Enter password:
+-----------+
| version() |
+-----------+
| 5.1.70    |
+-----------+  2、环境检查

  1、常用lib库安装
  由于PHP的安装需要调用很多lib库,因此我们需要预先查看这些lib是否存在才行。缺少的话,要及时安装,不然下面的操作就会报错。
  我们可以用rpm -qa后跟软件名的方式来查看软件是否安装。
[root@c64-lamp ~]# rpm -qa zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel  检测完之后,我们可以用yun来安装缺少的包,这里为了方便,我就全给列出来了。
[root@c64-lamp ~]# yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel libxslt-devel -y  2、字符库安装
  安装libiconv库
  
[root@c64-lamp ~]# cd /tools
[root@c64-lamp tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@c64-lamp tools]# tar zxf libiconv-1.14.tar.gz
[root@c64-lamp tools]# cd libiconv-1.14
[root@c64-lamp libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@c64-lamp libiconv-1.14]# make && make install
[root@c64-lamp libiconv-1.14]# cd ../  3、libmcrypte库(加密相关库)

  
[root@c64-lamp tools]# wget http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
[root@c64-lamp tools]# tar zxf libmcrypt-2.5.8.tar.gz
[root@c64-lamp tools]# cd libmcrypt-2.5.8
[root@c64-lamp libmcrypt-2.5.8]# ./configure
[root@c64-lamp libmcrypt-2.5.8]# make&&make install
[root@c64-lamp libmcrypt-2.5.8]# /sbin/ldconfig
[root@c64-lamp libmcrypt-2.5.8]# cd libltdl/
[root@c64-lamp libltdl]# ./configure --enable-ltdl-install
[root@c64-lamp libltdl]# make&&make install
[root@c64-lamp libltdl]# cd ../../  4、安装mhash加密扩展库

  mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建效验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(密码)等。
  Mhash为php提供了多种哈希算法,如MD5,SHA1,GOST等。你可以通过MHASH_hashname()来查看支持的算吗有哪些。
  注意问题:
  1、该扩展不能提供最新的哈希算法
  2、该扩展结果原则上运算不可逆
  
[root@c64-lamp tools]# wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz/download
[root@c64-lamp tools]# tar zxf mhash-0.9.9.9.tar.gz
[root@c64-lamp tools]# cd mhash-0.9.9.9
[root@c64-lamp -0.9.9.9]# ./configure
[root@c64-lamp -0.9.9.9]# make && make install
[root@c64-lamp -0.9.9.9]# cd ../
[root@c64-lamp -0.9.9.9]#  这里注意,下面的命令,我直接复制了粘贴到这执行的,方便你们输入,你们搞时,注意看下没错,就全部复制执行。一条一条太费劲了。
rm -f /usr/lib64/libmcrypt.*
rm -f /usr/lib64/libmhash*
ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la
ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so
ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a
ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la
ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so
ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2
ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
cp -frp /usr/lib64/libldap* /usr/lib/     #这最后一个是由于下面编译时跟了ldap参数,因此这里就执行下这个防止后面安装报错,大家不要奇怪哈
[root@c64-lamp ~]# cd ../  注意:这里如果我们用的是32位系统,那么我们就需要把lib64替换成lib。另外,其实64位用lib也是能用的,不过用lib64的更好一点。

  4、安装mcrypt加密扩展库
  PHP程序员在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的代码的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密库Mcrypt和Mhash。
  其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
  mcrypt是php里面重要的加密支持扩展库,该库在默认情况下不开启。
  编辑本段支持的算法和加密模式
  Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示。
[root@c64-lamp tools]# wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download
[root@c64-lamp tools]# tar zxf mcrypt-2.6.8.tar.gz
[root@c64-lamp tools]# cd mcrypt-2.6.8
[root@c64-lamp mcrypt-2.6.8]# /sbin/ldconfig
[root@c64-lamp mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
[root@c64-lamp mcrypt-2.6.8]# ./configure
[root@c64-lamp mcrypt-2.6.8]# make&&make install
[root@c64-lamp mcrypt-2.6.8]# cd ../  5、PHP源码包下载
[root@c64-lamp tools]# wget http://cn2.php.net/distributions/php-5.3.27.tar.gz  二、安装PHP
  上面的各种步骤准备完毕之后,下面就可以开始安装PHP了。
  
  
[root@c64-lamp tools]# tar zxf php-5.3.27.tar.gz
[root@c64-lamp tools]# cd php-5.3.27
[root@c64-lamp php-5.3.27]# ./configure --prefix=/usr/local/php5.3.27 --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-xmlrpc --with-openssl --with-zlib --with-freetype-dir --with-gd --with-jpeg-dir --with-png-dir --with-iconv=/usr/local/libiconv --enable-short-tags --enable-sockets --enable-zend-multibyte --enable-soap --enable-mbstring --enable-static --enable-gd-native-ttf --with-curl --with-xsl --enable-ftp --with-lixml-dir --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --with-mcrypt --with-mhash --enable-pcntl  --with-ldap --with-ldap-sasl --enable-zip --with-libevent-dir
[root@c64-lamp php-5.3.27]# make && make install  安装完毕之后,记住为php配置简化的路径
  
  
[root@c64-lamp php-5.3.27]# ln -s /usr/local/php-5.3.27 /usr/local/php  

  三、配置PHP

  
  1、获取主配置文件
  php的配置文件默认有2个。第一个是开发环境下的,第二个是生产环境下的。
  
[root@c64-lamp php-5.3.27]# cd ../
[root@c64-lamp tools]# ls /server/tools/php-5.3.27/php.ini-*
/server/tools/php-5.3.27/php.ini-development
/server/tools/php-5.3.27/php.ini-production  开发版和产品版最大区别在于,开发错的错误日志和调试信息都打开了,方便调试。

  
[root@c64-lamp tools]# cp /server/tools/php-5.3.27/php.ini-production /usr/local/php/lib/php.ini  2、配置apache支持
  每次对主配置文件操作之前,都需要进行备份操作,这样不仅可以防止误操作,而且可以做修改对比。
  
[root@c64-lamp tools]# cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak  我们通过编译apache的主配置文件,ServerName下面添加ServerName 127.0.0.1:80

  在369 #AddType application/x-gzip .tgz行的下一行加两行:
  
  
  
[root@c64-lamp tools]# vim /usr/local/apache/conf/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps  然后我们要在在DirectoryIndex index.html这一行进行修改
  
DirectoryIndex  index.php  index.html  配置完成之后,对apache服务进行重启之后,编写一个下面的php后缀文件,

  
  
[root@c64-lamp tools]# vim /www/sunsky/index.php
  然后访问它,如果出现下面的图画,则说明apache已经支持了php功能。

  

  3、配置mysql支持
  这个无需配置什么,默认成功安装之后,即可。
  我们同样需要创建一个php后缀的文件,内容如下


[root@c64-lamp tools]# vim /www/sunsky/mysql.php
如果出现下面的信息,则表示php和mysql数据库连接正常。








lnmp中的php

  
环境
CentOS6.4 x86_64位 采用最小化安装,系统经过了基本优化
selinux为关闭状态,iptables为无限制模式
nginx版本:nginx-1.2.9   mysql版本:mysql-5.1.70     php版本:php-5.3.27
源码包存放位置:/server/tools
源码包编译安装位置:/etc/local/软件名称
数据库存放位置:/mydata
日志目录:/app/logs  在lnmp中php的部署和lamp中php的部署相同,唯一的几点区别就在于,编译的参数不同,调用的程序不同。apache调用的mod_php之类的模块来调用php。而在nginx上则是调用fpm来执行的。并且fpm程序可以不依附于nginx独立存在。而mod_php模块则必须依附于apahce而存在。
  一、编译参数
  PHP-5.3.27在lnmp架构下的编译配置参数:
  
[root@c64-lnmp php-5.3.27]#  ./configure --prefix=/usr/local/php5.3.27 --with-mysql=/usr/local/mysql --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --with-fpm-user=nginx --with-fpm-group=nginx --with-libevent-dir --enable-ftp
[root@c64-lnmp php-5.3.27]# make && make install  二、配置PHP
  0、增加php的主配置文件
[root@c64-lnmp tools]# cp /server/tools/php-5.3.27/php.ini-production /usr/local/php/lib/php.ini
[root@c64-lnmp tools]# ln -s /usr/local/php/lib/php.ini /etc/php.ini  1、配置php-fpm配置文件
  php-fpm(fastcgi进程管理),它是一个可以独立运行不依赖与nginx的程序,通过他可以调用fastcgi来对php进行解析。
  
  
  
[root@c64-lnmp tools]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf  #本文件我修改过,所以大家可以下载附件我修改过的用
[root@c64-lnmp tools]# /usr/local/php/sbin/php-fpm -t
[10-Nov-2013 19:36:02] NOTICE: configuration file /usr/local/php5.3.27/etc/php-fpm.conf test is successful
[root@c64-lnmp tools]# /usr/local/php/sbin/php-fpm
[root@c64-lnmp tools]# lsof -i :9000  #查看fpm的进程
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 20129  root    7u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20130 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20131 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20132 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20133 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20134 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20135 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20136 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20137 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20138 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20139 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20140 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20141 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20142 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20143 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20144 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)
php-fpm 20145 nginx    0u  IPv4 372214      0t0  TCP lhh:cslistener (LISTEN)  2、配置nginx配置文件
  我们通过在server{}标签内,加上如下的话来实现php-fpm和nginx的相互支持。此段话,可以在我们备份的nginx主配置文件里面找到,默认是注释掉的。

location ~ \.(php|php5)?$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}  添加完毕之后,我们就可以开始测试了,测试方式和apache的一样。这里就不再重述了。
  

  到此为止,我们已经讲了apache,mysql,php和nginx的部署等方面的知识。后面,我会再系统的出一个部署lamp和lnmp架构的部署博文,并且也会有如何架设论坛,博客之类的博文。希望能多多帮助到大家的学习和工作。


附件:http://down.运维网.com/data/2363742


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653792-1-1.html 上篇帖子: 编译PHP时候报错:configure: error: Cannot find libmysqlclient under /usr 解决 下篇帖子: Asterisk PHP AGI 学习笔记(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表