apache + apache c++ 扩展 + mysql + php + php c++ 扩展

来源:互联网 发布:linux运维面试技巧 编辑:程序博客网 时间:2024/05/20 17:40
apache + apache c++ 扩展 + mysql + php + php c++ 扩展

安装环境:
Redhat linux 9.0 Apache 2.2.4    Mysql 5.0.2    PHP 5.2.6


1.安装Mysql5.0.2
软件地址:
http://download.mysql.cn/src/2006/0710/5544.html

安装步骤:

#tar xzvf mysql-3.23.58.tar.gz
#cd mysql-3.23.58
#./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql

------------------遇到如下问题--1---------------------------
root@localhost mysql-5.0.18]# ./configure -prefix=/usr/bin/mysqladmin
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking "character sets"... default: latin1, collation: latin1_swedish_ci; compiled in: latin1 latin1 utf8
checking whether to compile national Unicode collations... yes
checking whether build environment is sane... yes
checking whether make sets $(MAKE)... (cached) yes
checking for gawk... (cached) gawk
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

-------------------解决办法----------------------
未安装开发包development tools     缺少gcc等编译所需工具
------------------------------------------------

#make       对配置好的mysql进行编译    (慢长的过程)

#make install     编译好后安装mysql

prefix=/usr/local/mysql mysql安装的目标目录

sysconfdir=/etc my.ini配置文件的路径

localstatedir=/var/lib/mysql 数据库存放的路径

安装完以后要初始化数据库,当然你是升级的话不用做这步;

/usr/local/mysql/bin/mysql_install_db

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果系统没有mysql这个用户的话,最好做以下这步:

useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
然后我启动mysql

/usr/local/mysql/bin/safe_mysqld &     ----没有这个,没法启动mysql,导尽遇到问题2,

ok,先看看mysql能否正常工作

mysql -uroot mysql

---------------------------如果如下错误

一般情况下都是不能正常链接数据库,错误提示一般为:

ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
--------------------------解决办法


其实网上大家问的最多的都是整个问题,说什么链接不到mysqld.sock,其实大家不妨看看mysql的错误日志就明白怎么回事,我这里的错误日志是在

/var/lib/mysql/*.err 你会发现mysql只所以不能启动,是因为/var/lib/mysql的权限不允许mysql服务访问,英文mysql默认是调用mysql用户来启动服务的,好了,既然知道是什么原因找到不能启动,那就简单了。我们只要

chown -R mysql:mysql /var/lib/mysql 就行,如果还是启动不了,再慢慢调试权限,反正一般启动不了都是权限的问题。

如果大家还是不能启动不了的话,那就用我的比较繁琐的权限的设置,反正我每次都是这么做的,一般不会有问题,见下:

chown -R root /usr/local/mysql
chgrp -R mysql /usr/local/mysql

chown -R root /usr/local/mysql/bin
chgrp -R mysql /usr/local/mysql/bin

chgrp -R mysql /var/lib/mysql
chmod 777 /var/lib/mysql
chown -R root /var/lib/mysql/mysql
chgrp -R mysql /var/lib/mysql/mysql
chmod 777 /var/lib/mysql/mysql
chown -R root /var/lib/mysql/mysql/*
chgrp -R mysql /var/lib/mysql/mysql/*
chmod 777 /var/lib/mysql/mysql/*
chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a


做完上面的步骤,然后把你编译目录的一个脚本COPY过去

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

-----------------出现问题--2-------------
redhat 8.0中,我装MYSQL安装在/usr/local/mysql/下面
 一切安装都成功,运行的时出现了:
ERROR 2002 : Can't connect to local MYSQL server throngh socket '/tmp/mysql.sock' (2)的问题,

---------------解决办法 因为没有启动mysql服务----(到网上找答案)

redhat 9.0中,我装MYSQL安装在/usr/local/mysql/下面
说明你是编译安装的,是用 .tar.gz 的源码包经过configure 和make, make install三步曲装的
如果你是编译安装,而不是安装现成的rpm包,那么你安装之后要启动mysqld的服务先,然后才能用mysql去连接,你mysqld服务都没启动,就无法运行mysql进行连接,就会报这个错误。启动服务器的方法如下:
#cd /usr/local/mysql/bin
#sh safe_mysqld.sh &

还有一种方法
#cd /usr/local/mysql/share/mysql
#./mysql.server start

启动了mysqld的服务器后,你才能用mysql连接服务器。

另外,如果你编译安装了MySQL,确信你没有安装rpm的MySQL,否则,两个会冲突,因为都用到了3306端口,你用rpm -qa|grep MySQL来检查你是否有安装。

如果你已经有了rpm的MySQL,确信你有
mysql-3.23.54a-11
mysql-server-3.23.54a-11
两个包,第一个是客户端,第二个是服务器。如果你要自己编译php,那么你至少还要有
mysql-devel-3.23.54a-11
这个是开发接口的c源代码

-----------------------------------------------------------------

因为不能直接运行mysql所以建了一个链接
ln -s /usr/local/mysql/bin/     /usr/loca/bin
---------------------------------------------------------------
设置mysql密码>set passwork for root@localhost password('你的密码')


chkconfig --add mysqld

用ntsysv设置使mysql每次启动都能自动运行。

好了,至此mysql安装完毕,你可以这样起动你的mysql服务

/etc/rc.d/init.d/mysqld start

下面这步比较关键,-------------------

ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql

大家可以不做这步,大可以在编译其他软件的时候自定义myslq的库文件路径,但我还是喜欢把库文件链接到默认的位置,这样你在编译类似PHP,Vpopmail等软件时可以不用指定mysql的库文件地址。

-----------------------*******************************************--------------

2.安装Apache 2.2.4和 PHP 5.2.2

软件获取:http://httpd.apache.org/   http://www.php.net/
#cd /usr/src      (一般选它作为释放地址)
#tar xzvf httpd-2.2.4.tar.gz

#tar xzvf php-5.5.2.tar.gz

#cd httpd-2.2.4

#./configure --prefix=/usr/local/apache           (我只安装了第一个选项)


----------------------------???????????????????    有些参数不清楚,只能简单安装了

#./configure --prefix=/usr/local/apache 
#make %% make install
/usr/local/apache/bin/apachectl start      开始服务    与rpm安装不一样
配置文件在
/usr/local/apache/conf/httpd.conf
默认主页文件在
/usr/local/apache/htdocs/index.html
http://ip/     测试OK


------------libxml2-2.6.24.tar.bz2 安装 要不php会出错
下载地址:
http://download.chinaunix.net/download/0007000/6094.shtml
#bzip2 -d libxml2-2.6.24.tar.bz2
#tar xvf libxml2-2.6.24.tar
#./configure &&make &&make install
----------------------

#cd /usr/src/php-5.5.2
./configure  --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/httpd-2.2.8/bin/apxs
#make
#make instatll



查找<ifModule mime_module> 在其中加入以下4行。第307行
AddType application/x-httpd-php .php  


然后COPY PHP的配置文件

cp /usr/src/php5.2.2/php.ini.dist /usr/local/php/lib/php.ini

修改php.ini文件
register_globals = On      //是否允许注册全局变量
重启服务OK!/usr/local/apache/bin/apachectl restart
-----------------------------????????????





3.编译PHP扩展so

大致的步骤如下:
#cd /usr/port/distfiles/php-5.1.4/ext/    (进入到您的php源码目录)
#./ext_skel --extname=toplee (此处的toplee为您的扩展so的名称)
#cd ..
#vim ./ext/toplee/config.m4 (修改config.m4文件,此处细节可以参考我另外那篇文章中说明)
#vim ./ext/toplee/toplee.c   (修改和加入您自己的c代码)
#vim ./ext/toplee/toplee.h   (修改和添加函数定义代码)
#./buildconf --force (加上force参数是避免您使用的php版本为release版本)
如果上面命令执行中提示autoconf not found之类的错误,可以执行下面命令
#export PHP_AUTOCONF=/usr/local/bin/autoconf259  (这里的autoconf259路径和名称根据您自己安装的autoconf情况而定)
#export PHP_AUTOHEADER=/usr/local/bin/autoheader259 (autoheader259同上)
#./buildconf --force
#./configure --disable-all --with-toplee=shared --with-apxs2=/usr/local/sbin/apxs
(xiaocong)./configure --disable-all --with-ConvertCode=shared --with-apxs2=/usr/local/httpd-2.2.8/bin/apxs
上面命令中,--disable-all是为了加快编译速度而使用的,减少php默认要编译的模块数量。 --with-toplee=shared为了编译后能直接生产.so文件, --with-apxs2=/usr/local/sbin/apxs是根据您服务器上apache安装具体路径和版本来确定的
#make
#cp ./ext/toplee/.libs/toplee.so /usr/local/lib/php/20050922/ (把生产的so文件拷贝到您的php存放so扩展文件的目录下)  或者make install
#vim /usr/local/etc/php/extensions.ini   (加入toplee.so一行)
#/usr/local/etc/rc.d/apache22.sh restart

最后从phpinfo()函数看看返回结果,如果看到有toplee部分,那么恭喜你!如果没有,按照步骤好好检查一下!
这是我的phpinfo看到的结果:
topleeso

如果只生成o文件 ,再使用下面的方法,由0文件生成so文件

另外,顺便提一下另外一种编译php扩展的方法,就是使用phpize工具,这种方法允许你在一个独立编写的目录下编译php的扩展,不用按照前面的方式在php源文件目录的ext下,大致的思路是:
1.创建自己的扩展目录 toplee
2.编写config.m4文件,可以参考前面ext_skel生成的范本
3.执行 phpize 命令
4.执行 ./configure –enable-toplee –with-apxs2=/usr/local/sbin/apxs -–with-php-config=/usr/local/bin/php-config
(xiaocong)./configure --with-ConvertCode=shared --with-apxs2=/usr/local/httpd-2.2.8/bin/apxs --with-php-config=/usr/local/php/bin/php-config
(xiaocong)./configure --with-ConvertCode --with-apxs2=/usr/local/httpd-2.2.8/bin/apxs  --with-php-config=/usr/local/php/bin/php-config
5.make

这时会在当前目录下生产一个toplee.so,呵呵,这就是你想要的!


php.ini 修改:
1. extension=xc.so
2. extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20060613/"   

httpd.conf 修改:
1. AddType application/x-httpd-php .php


注意事项:
1. 先编译好php 再写ext下的自已的模块库,小心写了自已的东东后,再去编译php会把写的东东静态编入php.
2. 编扩展时一定要加 =shared ,不然不产生so.

4 .apache 扩展模块


* [安装]                                                                    *
*   1:拷贝 moddcd.so 到apache2安装目录的modules目录下。                     *
*   2:修改apache2安装目录下的conf下的htttp.conf文件。在该文件尾部加上       *
*       LoadModule dcd_module modules/moddcd.so                             *
*       AddHandler dcd .dcd