php/apache/mysql安装全记录

来源:互联网 发布:电子工程师必备app软件 编辑:程序博客网 时间:2024/06/12 01:18

--------------------------------------------------------------------------------------------------------------------
至于 lamp 三者的具体的在开发机上的安装过程。
其实都差不多。
不过需要注意的安装顺序,最后安装php。
下面是 组内 peter的lamp环境搭建的安装顺序:

=============================================================================================================================================
    
                      ,
                    _/((
           _.---. .'   `/
         .'      `     ^ T=
        /     /       .--'
       |      /       )'-.                        下面LAMP + MediaWiki 安装过程
       ; ,   <__..-(   '-.)
        / /-.__)    ``--._)
         '.'-.__.-.
           '-...-'
=============================================================================================================================================

1. 安装mysql:我没装,直接用的119上装好的/usr/local/mysql
如果需要源码安装mysql,参考本博客的http://blog.csdn.net/zdl1016/archive/2010/11/20/6024175.aspx的文章(linux下mysql源码安装全纪录
并且,里面更详细的讲了安装完mysql后安装php遇到的问题。
2. 安装apache:我的apache版本:httpd-2.2.15.tar.gz,解压命令:
tar -zxvf httpd-2.2.15.tar.gz
然后会有一个解压的文件夹,cd进去,./configure --help能看配置命令的帮助。
我的配置命令:
./configure --prefix=/home/nemo/apache2 --with-mysql=/usr/local/mysql --enable-so --enable-cgi
make
make install
其中--prefix是设置将apache安装到哪个路径下,不写的话,会默认安装到/usr/local下。
3. 修改httpd.conf配置文件
/home/peterrzhan/apache2/conf/httpd.conf
里面有两个地方需要修改(分别是ServerName和Listen端口):
Listen 10.6.207.191:3125
ServerName 10.6.207.191:3125    
4. 安装libxml2-2.6.26.tar.gz。
方法和上面类似。configure命令为:
./configure --prefix=/home/peterrzhan/libxml2
5. 安装php
http://cn.php.net/downloads.php 我的php版本为php-5.3.2.tar.gz。方法类似。注意configure命令:
./configure --prefix=/home/peterrzhan/php5 --with-apxs2=/home/peterrzhan/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=mysqlnd --with-libxml-dir=/home/peterrzhan/libxml2
(测试通过)

(!!!注意,上面的--with-mysqli=mysqlnd 如果configure失败,试试 --with-mysqli=/usr/local/mysql/bin/)
(!!!反正我用--with-mysqli=/usr/local/mysql/bin/的时候提示 mysql_config not found)
或者更全的:
./configure --prefix=/home/peterrzhan/php5 --with-apxs2=/home/peterrzhan/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=mysqlnd --with-libxml-dir=/home/peterrzhan/libxml2 --enable-xml --enable-json --enable-dom --enable-hash --enable-sockets --enable-pcntl --enable-simplexml --enable-xmlreader --enable-xmlwriter --enable-sysvshm --enable-sysvsem --enable-ctype --enable-bcmath --enable-posix --enable-calendar
(测试通过)
如果我的mysql通过源码安装在=/home/nemo/mysql5的目录下的话,--with-mysql=/usr/local/mysql 就变成了 --with-mysql=/home/nemo/mysql5
--with-mysqli=mysqlnd  保持不变。

make //完成make后能看到“make test”的提示
make install
6. 编辑 httpd.conf文件以调用 PHP 模块。LoadMolude表达式右边的路径必须指向系统中的PHP。以上的make install命令可能已经帮您完成了这些,但务必要检查。
对于 PHP 5:
       LoadModule php5_module modules/libphp5.so
继续编辑 httpd.conf 文件,告知 Apache 将特定的扩展名解析成PHP,例如,我们让Apache将扩展名 .php解析成PHP。您可以将任何扩展名指定为 PHP,只需添加它们,每一个用空格分隔。
例如,我们要添加 .phtml:
AddType application/x-httpd-php .php .phtml
通常,我们还将 .phps 扩展名设置成显示高亮的 PHP 源文件,可以这样来完成:
AddType application/x-httpd-php-source .phps
找到DirectoryIndex index.html
并将其改为:
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_php5.c>
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php .php3
  AddType application/x-httpd-php-source .phps
</IfModule>
这样就可以支持index.php了
7. 安装最新版的mediawiki,注意一定要为最新版 http://www.mediawiki.org/wiki/MediaWiki/zh-hans,否则会和php5不兼容,出现问题(问题如:Parse error: syntax error, unexpected T_NAMESPACE, expecting T_STRING in C:/Programfiler/ApacheSoftwareFoundation/Apache2.2/htdocs/InnovitWiki/includes/Namespace.php on line 44)。我的版本为mediawiki-1.15.4.tar.gz,将其解压放在/home/peterrzhan/apache2/htdocs下。
在浏览器上访问http://10.6.207.191:3125/mediawiki-1.15.4/config/index.php 即可访问注册页面。
注册时候一定要注意数据库相关选项中,你填的用户名和密码在你安装的MySQL中有效。如果你不拥有一个mysql的账号的话,使用grant命令创建一个。
命令如下:
mysql -uroot   //使用root用户登录mysql
mysql> show databases;  //查看数据库
mysql> grant all on *.* to ddd@'%'  identified by 'ddd';
关于grant命令更多的详见:http://www.cnblogs.com/hcbin/archive/2010/04/23/1718379.html


修改conf/httpd.conf文件, 改动如下:
Listen 192.168.8.128:80 (192.168.8.128是linux的ip)
#Listen 80 (!! 注意, 该行一定要注释掉!!!)

提示:apache路径下如果改动了配置文件/conf/httpd.conf文件,要生效的话一定要重启apache,方法是在/bin路径下有一个apachectl
./apachectl stop
./apachectl start

如果运行没问题, 可以通过 ps -ef|grep httpd 查看到已经启动的进程。
通过浏览器 http://ip 访问。

启动报 Address already in use: make_sock: could not bind to address 0.0.0.0:80 错误
原因是 下面两行同时存在导致的, 将Listen 80注释掉即可。
Listen 192.168.8.128:80
Listen 80

如果提示绑定80端口没有权限 permission deny
尝试用 sudo 执行。
更详细参考本文后面专门有一节

如果提示80端口已经被使用, Address already in use
通过 netstat -aon|grep 80 查看那个进程在用,可以kill掉。

apache装好之后,可以运行 php, 却不可以运行cgi的问题.
解决方法: 重新源码编译安装. 加上 --enable-cgi 选项.
详细步骤如下:

1 重新安装apache 确保安装指令中包含 --enable-cgi
./configure --prefix=/home/nemo/apache2 --enable-cgi
傻逼的我 居然将 php的安装的命令复制过来,后面加上 --enable-cgi 居然还真的能安装成功了.
安装成功,居然还真的能用了.


httpd.conf的部分修改的配置内容如下:

<Directory "/home/nemo/php5/cgi-bin">
    AllowOverride None
    Options None
    Options ExecCGI              # 新加的
    Order allow,deny
    Allow from all
</Directory>

# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
#Listen 80
Listen 10.6.207.119:8881


#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName 10.6.207.119:8881

#不用另外的 加载 mod_cgi.so, 因为 我们编译的时候指定了 --enable-cgi, 其就是内置的了.
#LoadModule cgi_module modules/mod_cgi.so
如果加上上面一句,会报错:
httpd: Syntax error on line 56 of /home/nemo/php5/conf/httpd.conf: module cgi_module is built-in and can't be loaded


如果权限不够,比如说cgi 没有执行权限, 或者 目录没有执行权限, 会报错
查看 logs/error_log
[Tue Sep 07 12:51:14 2010] [error] [client 10.6.82.55] (13)Permission denied: exec of '/home/nemo/php5/cgi-bin/test-cgi' failed

chmod 777 .
chmod 777 test-cgi

执行 apache2ctl start, 没有任何提示,也没有任何反映。
   执行apache2ctl restart提示 httpd进程根本就没有启动
   查看 ps -aux|grep httpd 也没有发现我的 httpd进程
   查看 logs/error_log 发现:
   [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "vm04_sles10"
Configuration Failed
   修改httpd.conf 禁用mod_unique_id模块
#LoadModule unique_id_module modules/mod_unique_id.so

我是通过第三种方法尝试后,apache2ctl start,仍然没有任何提示,但是
logs目录下 多了个 httpd.pid
 功过ps -aux|grep httpd,查看,发现有nemo启动的服务器也起来了!
 通过浏览器访问 http://10.6.207.119:8880/
 输出“it works”!搞定。

执行 apache2ctl start,提示 绑定到80端口权限不够!不可以绑定。
   只好换个端口 8880
   修改 httpd.conf
   Liston 10.6.207.119:8880
   ServerName 10.6.207.119:8880


想要 apache支持 fashcgi
Apache下FastCGI开发(转载)
http://hi.baidu.com/jakisou/blog/item/03d4ba8bc40a1a7a9f2fb4d3.html

apache下php配置fastcgi代替mod_php
http://hi.baidu.com/rakeliujie/blog/item/5c9c7a8b1e1cf7729f2fb413.html

如果我先装了php,后安装了apache,如果让我的apache支持php?
答案是基本是很麻烦,最好重新编译安装php.
不过若想手动的解决你可以摸索下:
下面是在php的源码目录下,执行完make,执行make install的时候的提示信息,看是否有帮助:
注意,下面的额php5其实是我的apache的安装目录, php5_2是我的php的安装目录.

nemo@vm04_sles10:php-5.3.3$ make install
Installing PHP SAPI module:       apache2handler
/home/nemo/php5/build/instdso.sh SH_LIBTOOL='/home/nemo/php5/build/libtool' libphp5.la /home/nemo/php5/modules
/home/nemo/php5/build/libtool --mode=install cp libphp5.la /home/nemo/php5/modules/
cp .libs/libphp5.so /home/nemo/php5/modules/libphp5.so
cp .libs/libphp5.lai /home/nemo/php5/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /home/nemo/php-5.3.3/libs'
chmod 755 /home/nemo/php5/modules/libphp5.so
[activating module `php5' in /home/nemo/php5/conf/httpd.conf]

Installing PHP CLI binary:        /home/nemo/php5_2/bin/
Installing PHP CLI man page:      /home/nemo/php5_2/man/man1/
Installing build environment:     /home/nemo/php5_2/lib/php/build/
Installing header files:          /home/nemo/php5_2/include/php/
Installing helper programs:       /home/nemo/php5_2/bin/
  program: phpize

绑定apache到80端口没有权限的问题
默认情况下apache是绑定到80端口的, 但是,若没有权限,运行 apachectl restart的时候,会报错:
关于apache绑定到80端口没有权限的问题
nemo@vm04_sles10:bin$ apachectl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 10.6.207.189:80
no listening sockets available, shutting down
Unable to open logs

解决方法, 找leader给自己增加临时root权限(也就是sudo啦).
1)pwd, 首先查看当前 apachectl 的所在路径 /home/nemo/php5/bin
2)sudo -l, 查看当前自己拥有的额sudo权限的目录范围,和文件范围.
nemo@vm04_sles10:bin$ sudo -l
User nemo may run the following commands on this host:
    (root) NOPASSWD: /home/peterrzhan/apache2/bin/*
    (root) NOPASSWD: /home/nemo/php5/bin/*   <===注意这行, 表示自己已经具有了执行bin目录下的root权限.

3) sudo /home/nemo/php5/bin/apachectl restart
4) 如果没有报错,ps -ef|grep httpd可以发现apache已经启动好了,可以通过浏览器看啦.

 

执行php代码,提示apc_fetch()未定义.
Fatal error: Call to undefined function apc_fetch()
这是因为 php没有安装apc扩展.

为php安装apc扩展.
1) 到http://pecl.php.net/package/APC下在最新版本
2) tgz格式, gunzip *.tgz解压
3) 进入解压后的 APC_XXXX 目录
4) 在APC的源码目录里面执行php安装目录下下的/bin/phpize
   php_install_dir/bin/phpize
5) 执行./configure生成makefile文件. 注意, 需指定apache的安装目录和php的安装目录
   ./configure –enable-apc –enable-apc-mmap –with-apxs=apache_install_dir/bin/apxs –with-php-config=php_install_dir/bin/php-config
6) make && make install
7) 完后提示 : $ make install
Installing shared extensions:     /home/xxx/php5/lib/php/extensions/no-debug-non-zts-20060613/
到20060613目录下查看生成的最新的 apc.so
8) 配置php.ini以加载apc.so
extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 64
apc.ttl = 7200
apc.user_ttl = 7200
apc.num_files_hint = 0
apc.write_lock = On
9) 将apc.so拷贝到php的扩展库的路径下.(默认生成的apc.so放在no-debug-non-zts-20060613路径下)
扩展库的路径默认是在 php_install_dir/lib/php/extensions
如果php.ini里面有修改扩展库的路径, 按php.ini里面的为准吧.
eg 我得电脑上的扩展路径为
extension_dir = "/home/xxx/php5/lib/php/extensions/no-debug-non-zts-20090626/"
10) 重启apache
11) 运行 <?php phpinfo() ?>的脚本, 查看php是否正确配置了apc.


这是PHP Manual中socket段的样例,怎么会出错呢?
在console中输入
$ /usr/local/bin/php -f socket_test.php
运行出现以下错误提示:

调用socket_create出错
PHP Fatal error: Call to undefined function socket_create() in /webroot/test/socket_test.php on line 15
没有安装 sockets模块.


独立安装sockets.so模块
1。进入php源文件目录ext下,找到sockets目录。并进入此目录
  #cd php-5.2.9/ext/sockets/

2.在该目录下执行phpize命令,此命令在php目录的bin下。
# your_php_install_dir/bin/phpize
 
3。配置编译安装
# ./configure --enable-sockets --with-php-config=your_php_install_dir/bin/php-config
# make
# make install
Installing shared extensions:     your_php_install_dir/lib/php/extensions/no-debug-non-zts-20060613/
提示so已经安装到目录下。
 
4。修改配置在php.ini里,设置扩展目录:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并添加扩展模块引用:
extension = sockets.so
 
5.检查php.ini配置文件的正确性
/usr/local/php/bin/php -v
执行这个命令时,php会去检查配置文件是否正确,如果有配置错误,这里会报错,可以根据错误信息去排查

6.通过/usr/local/php/bin/php -m命令查看是否安装sockets成功
              

monitor# /usr/local/php/bin/php -m
[PHP Modules]
ctype
date
dom
filter
gd
hash
iconv
json
libxml
mbstring
mysql
pcre
PDO
pdo_sqlite
posix
Reflection
session
SimpleXML
sockets
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]


 
7.重启apache生效
/usr/local/apache2/bin/apachectl restart

 

独立安装soap模块
1) 进入 php-5.3.2/ext/soap目录
2) 类似于上面socket的方式 执行 phpize 和 php-config
3) make
    出错:‘zend_fcall_info’ has no member named ‘object_ptr'
   找不到object_ptr的定义
   进入 php-5.3.2目录   搜索 zend_fcall_info 结构的定义, 
     "find . -type f | xargs grep -wn zend_fcall_info | less" 或者通过
     "find . -name "*.c" -o -name "*.h" | xargs grep -wn zend_fcall_info | less"
发现:
   Zend/zend_API.h 里面有该结构的定义, 而且也确实包含了'object_ptr'成员.
   汗一个! 难道是Makefile的问题?没有正确的引用到头文件?
   查看, 果然是生成的Makefile问题!!!
   vim Makefile 发现: 红色部分是我修改过的, 原本是-I/usr/local/include/php/Zend 明显不是我用到版本.
    39 INCLUDES = -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM-I/home/peterrzhan/php-5.3.2/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -I/usr/local/include/libxml2
    网上发现 http://www.experts-exchange.com/OS/Unix/BSD/FreeBSD/Q_26199118.html 在5.3.2之前的版本, zend_fcall_info 的成员‘object_ptr'其实叫做object_pp.!!!

  修改完Makefile之后, make ok.

为何会调用到不匹配的zend_API.h文件?
问题发现:
1) 由于/home/peterrzhan/php5目录被eddy重新编译生成过, eddy用的是5.2.12源码编译的.
   所以 /home/peterrzhan/php5/include/php 等下面的头文件也都是5.1.12版本的.
2) 我在 /home/peterrzhan/php-5.3.2/ext/soap目录下 执行/home/peterrzhan/php5目录下的phpize 和 php-config,
   导致生成的Makefile 引用的头文件是/home/peterrzhan/php5/include/php目录下的,也就是说是5.2.12版本的.
   源文件和头文件版本不一致,导致make失败.

   解决方法1:找到5.2.12的源码目录
   在php-5.2.12/ext/soap 下面执行/home/peterrzhan/php5目录下的phpize 和 php-config,
   make即可.

   解决方法2:直接修改生成的Makefile文件, 指向正确的zend_API.h文件所在的目录即可
   虽然能编译过去, 但是生成的soap的版本可能不能用哦.

   为何生成的Makefile会和php-config有关系?
   查看php-config发现, 其中定义了安装php5时,源码的安装路径.
   php-config是个shell脚本,其中包含了如下内容:
   includes="-I$include_dir -I$include_dir/main -I$include_dir/TSRM -I$include_dir/Zend -I$include_dir/ext -I$include_dir/ext/date/
   而$include_dir就是编译安装php是的指定的路径了, 如果编译php时没有指定路径, 默认就是php-config使用的就是/usr/local/include/php

  另外, 在soap目录,如果configure的时候没有指定 php-config, 那么使用的也是默认的/usr/local/include/php路径.


为php安装curl扩展
安装curl扩展前,电脑上需安装好了libcurl库。
进入 php_源码目录/ext/curl
1)运行 php_install_dir/bin/phpize
   提示 没有autoconf,安装好autoconf后继续
   我的虚拟机里没有autoconf,和m4, 虚拟机不能联网,只要源码安装m4和autoconf
   由于autoconf是往默认的路径安装,直接 ./configure, make, make install即可。
2)执行 ./configure --with-curl=curl_dir
   上一步phpize已经执行成功,生成了configure文件。 执行  ./configure
   提示:configure: error: Please reinstall the libcurl distribution -
    easy.h should be in <curl-dir>/include/curl/
   电脑上没有安装curl,好吧,继续源码安装curl, 装到 /home/nemo/curl7路径
   重新执行 ./configure --with-curl=/home/nemo/curl7, 执行成功会生成makefile文件
3)make, make install, 生成了 curl.so扩展库
4)copy curl.so 到 /home/nemo/php5/lib/php/extensions 目录下
5)修改php.ini 以加载 curl.so
   extension_dir = "/home/nemo/php5/lib/php/extensions"
   extension=curl.so
6)重启apache, 查看phpinfo()确定 curl已经安装ok。

原创粉丝点击