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

[经验分享] linux安装php与memcache过程记录

[复制链接]

尚未签到

发表于 2015-11-18 09:42:53 | 显示全部楼层 |阅读模式
  安装环境是Ubuntu13.10版本i386,已经安装好nginx服务器和mysql服务器,现在的任务是需要安装php和memcache。直接干货,多余的不说。

1、php安装及错误排查
  由于php安装前需要安装很多库文件,因此需要耐心得按照一定的顺序来安装。我按照如下顺序安装:
  zlib -> freetype -> libxml2 -> libpng -> libgd2 -> libmcrypt

  其中的也有依赖关系的是,安装gd2需要用到zlib、freetype、libpng(libjpeg)等,因此需要先安装这些之后再安装gd2。这里的安装按照通用目录配置到/usr/local/xxx目录下,一般不会出现问题,可能在安装freetype时会出现问题:
  

注意,安装freetype时有可能提示如下错误:
either set the LIBPNG_CFLAGS and LIBPNG_LDFLAGS environment variables
这是提示找不到libpng的安装位置,所以需要将libpng的bin目录配置到环境变量中:
解决方法:
编辑:vi /etc/profile
LIB_PNG=/usr/local/libpng/bin
PATH=$LIB_PNG:$PATH  
export PATH
生效:.  /etc/profile
这里我想记录一下的是我安装GD2的时候没有报错,安装成功了。但是后来安装php的时候,在配置中配置好GD2的安装目录后,出现错误,而且configure是没问题,是在安装的时候出错的,要知道安装php的时候configure本来就要很久,然后没错,make的时候也要很久,这样等了很久很久之后突然说编译出错,真的是有点崩溃。错误如下:  
  

/usr/local/src/php-5.5.6/ext/gd/gd.c:57:22: error: X11/xpm.h: No such file or directory
make: *** [ext/gd/gd.lo] Error 1说明:这是提示没有安装libXpm库,是在安装gd2库的时候没有配置开启。  
  这样我去查之前配置安装gd2的时候提示,确实发现对libXpm库不支持,如下:
  

** Configuration summary for libgd 2.1.0:
Support for Zlib:                 yes
Support for PNG library:          yes
Support for JPEG library:         no
Support for VPX library:          no
Support for TIFF library:         no
Support for Freetype 2.x library: yes
Support for Fontconfig library:   no
Support for Xpm library:          no
Support for pthreads:             yes
  
  因此,解决办法就是去下载libXpm库安装:
  

sudo apt-get install libXpm-dev这样安装后本以为可以了,就去重新安装gd2库,在配置gd2的时候多加一条 --with-xpm=/usr/lib。  
  但是配置时会提示找不到xpm库,这里我上网找到了解决办法,在/usr/lib下面建立软连接文件到真实的xpm库文件,如下:


  

ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.a  /usr/lib/libXpm.a
ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so  /usr/lib/libXpm.so
ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so.4  /usr/lib/libXpm.so.4
ln -s /usr/lib/ (x86_64 or i386 ) /libXpm.so.4.11  /usr/lib/libXpm.so.4.11

  
  操作完成之后,就可以重新安装gd2库了,配置完成成功:
DSC0000.jpg



会发现 "Support for Xpm library : yes"这一项,说明配置成功,然后make && make install即可完成安装gd2库。  接着安装所有库文件完成后,可以配置php安装了,由于之前,配置成功,编译出错,因此这次配置的时候需要加入 --with-xpm-dir=/usr/lib/这一项才能编译成功。完整配置如下:
  

./configure \  
--prefix=/usr/local/php5.5 \   
--with-libxml-dir=/usr/local/libxml2/ \  
--with-png-dir=/usr/local/libpng/ \  
--with-freetype-dir=/usr/local/freetype/ \  
--with-gd=/usr/local/gd2/ \  
--with-zlib-dir=/usr/local/zlib/ \  
--with-mcrypt=/usr/local/libmcrypt/ \  
--with-xpm-dir=/usr/lib/ \  
--with-mysql \  
--with-mysqli \  
--enable-pdo \  
--with-pdo-mysql \   
--with-iconv \
--enable-soap \  
--enable-mbstring=all \  
--enable-sockets \
--enable-fpm这样configure和make、make install之后,就可以完成php的安装。然后使用  
  

sudo /usr/loca/php5.5/sbin/php-fpm开启php-fpm服务,可以将这条命令加入到/etc/rc.local文件中作为自启动服务。  
  在nginx的配置文件中添加对php的支持即可使用php开发了。

2、安装memcache及错误处理
  memcache分为服务器端和php扩展,服务器端使用memcached表示,完成所有数据的存储删除等各种管理,php扩展是php使用memcache的一个扩展库,用memcache表示,用于调用和访问系统的memcache服务,直接在php中使用new Memcache即可。
  (1)首先需要安装服务器,这个直接使用ubuntu的默认安装即可:
  

sudo apt-get install memcached
  
  安装完Memcache服务端以后,使用如下命令启动服务



memcached -d -m 128 -p 11111 -u rootmemcached服务的启动参数说明:

-p <num> TCP监听的端口,默认是11211
-l <addr> 连接的IP地址, 默认是本机
-d 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u <username>  运行身份 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M  内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-C 禁止使用CAS
-P <file> 设置PID保存的文件名,仅仅和 -d 选项一起调用
-f  <factor> 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-t <num> 使用的线程数目,默认是4
-b  设置备份日志队列的大小,默认是1024
-R  设置每个事件的最大请求数目,默认是20
-h 显示帮助
  
  可以从下图查看memcached服务器是否开启:
   DSC0001.jpg


  可以看到11211端口以处于LISTEN状态,说明memcached服务器已经开启。
  (2)安装memcache客户端
  这个安装其实就是在php已经安装完成的基础上,给php安装新的扩展,就类&#20284;为一个没有配置安装socket的php在不卸载php的前提下重新安装一个socket的扩展的原理类&#20284;。
  首先可以使用php自带的pecl安装程序:
  

/usr/local/php5.5/bin/pecl install memcache其次也可以用如下命令下载源码包后解压安装:  
  

wget http://pecl.php.net/get/memcache-2.2.6.tgz

但是我遇到的问题是,不论使用上述哪个方法,最终的结果都是要使用phpize工具为memcache生成配置文件,而这个需要autoconf这个库,从之前安装php的配置中可以看出,我并有安装autoconf库,因此我使用上述两种方法安装都会报同样的错:  
   DSC0002.jpg

同样,当我使用源码包安装的时候,进入到memcache源码包后,需要使用/usr/local/php5.5/bin/phpize工具来生成configure文件,会与上图报同样的错误。从此处也可以说明,上述两种安装方式都是殊途同归,原理都一样。

  为此,我需要去安装autoconf库,但是在安装这个库的时候,同样会报错:
   DSC0003.jpg


  这里可以明显看出,就是M4版本太低,需要更新。通过查阅资料知晓,autoconf使用M4宏处理器处理configure.in文件,从而可以生成configure文件用于安装配置。
  然后,就是去下载M4源码进行安装了,这里又有一个坑,我安装提示的去下载推荐的 M41.4.16版本的源码包,配置成功,但是编译的时候会出现类&#20284;下面的问题:
  

./stdio.h:477:1: error: 'gets' undeclared here (not in a function)
_GL_WARN_ON_USE (gets, &quot;gets is a security hole - use fgets instead&quot;);
^这个问题我在网上查找,发现不仅仅是安装M4会出现,很多人安装其他的库的时候也会出现类&#20284;问题,也找到有人更改 _GL_WARN_ON_USE进行hack,也有人说进行打补丁(这个问题的具体原因可能比较复杂,也没弄清)。但是我觉得我的ubuntu是13.10是比较新的版本,应该会有修复吧!于是我就重新下载了一个M4的最新版本:  
  

wget  http://ftp.gnu.org/gnu/m4/m4-latest.tar.gz
tar -zxf m4-latest.tar.gz;
mv m4-1.4.17  /usr/local/m4
cd /usr/local/m4
./configure
make
make insatll
  
  按照上面步骤安装的时候,奇迹出现了,果然可以编译安装完成,没有任何问题。此处得出的结论是,作为软件使用者和开发者我们一定要适合保持软件的更新,尽量使用最新的稳定的版本,这样可以避免遇到很多奇怪的问题。
  安装时把解压包放到/usr/local/m4下,然后直接configure不指定prefix才可以安装autoconf,否则也会同样的找不到M4的错误。
  安装autoconf如下:
  

export  PATH=/usr/local/m4:$PATH
cd autoconf
./configure --prefix=/usr/local/autoconf
make
make install按照上述命令安装就完成了autoconf的安装。  
  然后接着去安装memcache,此时,使用export将/usr/local/autoconf/bin导入到PATH并不起作用,因此我尝试使用了如下的命令:
  

sudo ln -s /usr/local/autoconf/bin/autoconf autoconf
sudo ln -s /usr/local/autoconf/bin/autoheader autoheader
sudo ln -s /usr/local/autoconf/bin/autom4te autom4te
sudo ln -s /usr/local/autoconf/bin/autoreconf autoreconf
sudo ln -s /usr/local/autoconf/bin/autoscan autoscan
sudo ln -s /usr/local/autoconf/bin/autoupdate autoupdate
sudo ln -s /usr/local/autoconf/bin/ifnames ifnames

  
  做了这些符号链接之后,我重新进入memcache源码文件使用phpize工具就没问题了,成功生成了configure文件:
DSC0004.jpg



安装过程如下:  

./configure  \
>--with-php-config=/usr/local/php5.5/bin/php-config \
>--enable-memcache=/usr/bin/memcached
make
make install安装完成如下图所示,最后出现的installed  shared extensions是在php的配置文件中进行配置memcache时候需要使用到的,需要保存下来。  
   DSC0005.jpg



配置php.ini文件,在/usr/local/php5.5/lib/php.ini,找到extension_dir这一行:

  

;extension_dir = &quot;./&quot; 改为
extension_dir = &quot;安装memcache完成后的目录路径&quot;
extension = &quot;memcache.so&quot; ;添加此行用于添加memcache扩展

使用如下的php代码进行测试:  
  

<?php
//Test memcache
$mem = new Memcache;
$mem->connect('127.0.0.1', 11211);
echo '<pre>';
var_dump($mem);
var_dump(class_exists(&quot;Memcache&quot;));
?>

结果如图:  
   DSC0006.jpg






  通过上述的种种艰辛,不仅是完成了安装的任务,也让我进一步熟悉了linux下安装软件的各种&#20540;得注意的地方。安装gd2库的时候需要依赖Xpm库,这个问题其实是在安装好了gd2后安装php的时候出现的,然后又重新安装gd2,特别是安装Xpm后,使用了符号链接之后,就可以安装带有Xpm的gd2库了。这个方法是一个启示!在后面安装autoconf完成后,使用PATH变量失效时是当时突然想起符号链接这个方法,因此就自己尝试性使用并解决了问题。还有就是安装M4的时候,版本问题可能牵涉出很多底层的问题,这个我也没弄清楚,当时也是尝试性的使用最新版本安装就可以解决了。最后安装memcache的时候就比较顺利了。同时也发现网上有很多安装php的时候就使用配置选项--with-autoconf选项直接一步安装了autoconf,这样就可以直接使用phpize工具了,但是我这里没有安装,虽然让我费了周折,但是最后单独安装了autoconf之后,使用符号链接指定安装的autoconf路径,然后phpize就可以从PATH中的/usr/bin这个路径下找到,因此这也说明了安装php是指定配置选项应该就是指定了php对这个依赖项需要调用时的一个寻找路径。晚饭时间到了,折腾了一天,看到一切都可以使用的时候还是感觉蛮不错的!希望有前辈可以解答我前面提到的一些疑惑!

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-140597-1-1.html 上篇帖子: Linux下,DIY apache和memcache守护进程 下篇帖子: php缓存扩展频繁存储/读取数组引发CPU过高问题排查手记(php-memcache为例)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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