$ cd /root/lamp/php-5.2.3/ext/mysqli进入到mysqli的目录。
提示已经生成configure文件$ /usr/local/php/bin/phpize
可以看到php与我们现在要添加的api号是不同的,但不妨碍我们使用。Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
完成$ ./configure --with-php-config=/usr/local/php/bin/php-config \
--with-mysqli=/usr/bin/mysql_config
$ make
$ make test
$ make install
然后在/etc/php.ini加上一句:Installing shared extensions: /usr/local/php/lib/php/extensions/debug-non-zts-20060613/
注意:由于新编译的mysqli与php mysqlnd api no.不符,不能直接调用/usr/lib/php/modules里面的mysqli.so。而是需要我们指定。extension=/usr/local/php/lib/php/extensions/debug-non-zts-20060613/mysqli.so
2、执行产生模块编译文件(通过phpize工具)$cd /var/download/php-5.4.29/ext/gd
3、编译模块$ /usr/local/php/bin/phpize
对于libpng12、libXpm这些系统库找不到的话可以先通过$./configure --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir \
--with-jpeg-dir=/usr/lib/libpng12 --with-jpeg-dir=/usr/lib/libjpeg \
--with-xpm-dir=/usr/lib/libXpm --with-freetype-dir=/usr/lib/libfreetype \
--enable-gd-native-ttf --with-t1lib
安装,并记下它们的位置(一般都在/usr/lib下面)$yum -y install libpng12 libXpm
5、将生成的so移动到/usr/lib/php/modules下面$make test && make && make install
是否覆盖,选y$mv /usr/local/php/lib/php/extensions/debug-non-zts-20060619/gd.so /usr/lib/php/modules
restorecon -Rv -n /usr/apache/modules/mod_rewrite.so第二种情况是原来的源文件有其它的安全性脉络,而没有继承原来的缺省的安全性,则需要通过chcon来更改:
具体的content参数输入(如果没有semanage则需yum install)chcon -Rtf httpd_sys_content_t xxx.so
或chcon -Rtf texrel_shlib_t mod_rewrite.so
查看。这时你可以在/usr/apache/modules里查看各个so库文件的文件属性了# semanage fcontext -l |grep httpd_sys
ls -laZ不出意外,各个文件的安全性都没问题。但还是别高兴得太早。
某些文件还是拒绝了!我等菜菜鸟还是别折腾了。直接# service httpd start
cannot restore segment prot after reloc: Permission denied
降低SELinux的安全性检查算了。/usr/sbin/setenforce 0
setsebool -P httpd_enable_homedirs 1查看更改内容setsebool -P httpd_read_user_content 1
setsebool -P httpd_use_nfs 1
更改DocumentRoot目录权限,注意,因为对于files方式工作的session,它还需要写权限getsebool -a | grep httpd
chomd -Rcf o+wr /www/html更改php-cgi权限
检查mod_fcgid的模块名是否正确chomd -Rcf u+x /usr/local/php/bin/php-cgi
主目录/www/html是否添加了ExecCGI选项LoadModule fcgid_module modules/mod_fcgid.so
// ...other code
<IfModule fcgid_module>
FcgidInitialEnv PHPRC /etc/php.ini
...
</IfModule>
在调试阶段,最好添加一个mod_status.so模块,以对照配置<Directory /www/html>
AddHandler fcgid-script .fcgi .php
AddType application/x-httpd-php .php
Options Indexes FollowSymLinks Includes ExecCGI
...
</Directory>
LoadModule status_module modules/mod_status.so然后在浏览器中输入127.0.0.1/server-info查看apache配置...
<IfModule status_module>
ExtendedStatus On
</IfModule>
<Location /server-info>
SetHandler server-info
//...other code
Allow from 127.0.0.1
</Location>
# sudo service httpd start擦,httpd竟然不是running。于是各种检查系统与httpd.conf配置,不行,google之,各种牛头不对马嘴的回答。最终,在 这里打到了答案。
Starting httpd: [ OK ]# service httpd status
httpd dead but subsys locked
这个pid与subsys/httpd运行的是对不上的。更改之,httpd.conf添加/var/local/apache/run/httpd.pid
然后,找到/etc/sysconfig/httpd,改写(去掉注释)PidFile /var/run/httpd.pid
关闭原来的httpd进程PIDFILE=/var/run/httpd.pid
删掉httpd进程中的锁定# killall -9 httpd
可以重启httpd了#rm -rf /var/lock/subsys/httpd
再次检查httpd状态# service httpd restart
Stopping httpd: [ FAILED ]
Starting httpd: [ OK ]
service httpd status
httpd (pid 3037) is running...
FcgidProcessTableFilemod_fcgid在unix中用来与httpd进程的共享内存,以维持运行状态。此指令指定共享内存文件的名称
Description: shared memory file path
Syntax: FcgidProcessTableFile pathname
Default: FcgidProcessTableFile logs/fcgid_shm
Context: server config
Status: External
Module: mod_fcgid
FcgidIPCDir模块使用的AF_UNIX socket或命名的管道,取决于平台,用以与FASTCGI程序通信。指令指定socket或命名管道需要在哪个路径中建立。
Description: directory for AF_UNIX sockets (Unix) or pipes (Windows)
Syntax: FcgidIPCDir pathname
Default: FcgidIPCDir logs/fcgidsock
Context: server config
Status: External
Module: mod_fcgid
FcgidProcessTableFile /var/fun/httpd/fcgidsock不然mod_fcgid会自己到/var/run路径查找,如果path不存在则不会启动fcgid模块,当然,它不会提醒你目录有问题,而是出现...[emeg](17)file exists:mod_fcgid:can't create shared memory xxx bytes的错误。这点apache官方中的mod_fcgid指南并没有说明。
FcgidIPCDir /var/run/httpd/fcgid_shm
<Directory /var/www/html>
#Options Indexes# Or
Options -Indexes
</Directory>
PHP wrapper script - /usr/local/bin/php-wrapper那么/usr/local/bin/php-wrapper必须有执行权限
#!/bin/sh
# Set desired PHP_FCGI_* environment variables.
# Example:
# PHP FastCGI processes exit after 500 requests by default.
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
# Replace with the path to your FastCGI-enabled PHP executable
exec /usr/local/bin/php-cgi
还有最好禁止php运行子进程,设置PHP_FCGI_CHILDREN=0,最最需要注意的是,不要开启APC,因为它们的共享内存会冲突。APC发展至今已经穷途末路了,不需要使用。chmod og+x /usr/local/bin/php-wrapper