平时写程序时都是在服务器已经搭建好的PHP环境进行的。出于对未知知识的好奇,这几天在自己的机器上搭建起了PHP开发环境。本想轻松顺利的看到phpinfo显示在我的页面上,没想到安装环境时一路的error,不停的google折腾了半天终于看到了phpinfo。在此把遇到的问题总结一下,给大家提供一个参考。
我的OS是ubuntu
9.10
,
得益于apt
-
get强大的功能参考了一下这篇文章http
:
//
wiki.ubuntu.org.cn/index.php?title=Apache&variant=zh-cn#.E5.AE.89.E8.A3.85LAMP,轻松的完成了LAMP的搭建。
后来手痒痒的不行,把环境全删了重新用源码包搭建了一遍。步骤如下:
(由于用非root账户登录,在需要root权限时用sudo执行)
一、build
-
essential的安装
#
bulid-essential是编译源码包(C/C++程序)所需的编译工具
#
ubuntu 下默认没有安装,ubuntu下可以执行sudo apt-get install build-essential
安装包 build
-
essential_11
.
4
.
tar
.
gz
#
安装命令
tar
-
zxvf build
-
essential_11
.
4
.
tar
.
gz
cd build
-
essential
-
11.4
./
configure
make
sudo make install
make clean
二、MySql的安装
step
.
1
ncurses的安装
#
如果缺少ncurses包mysql编译会报No curses/termcap library found的错误
安装包 ncurses
-
5.6
.
tar
.
gz
tar
-
zxvf ncurses
-
5.6
.
tar
.
gz
cd ncurses
-
5.6
./
configure
--
prefix
=/
usr
/
local
/
ncurses
--
with
-
shared
--
without
-
debug
--
enable
-
widec
make
sudo make install
make clean
step
.
2
mysql的安装
安装包
mysql
-
5.1
.
42
.
tar
.
gz
step
.
a
#
安装命令
tar
-
zxvf
mysql
-
5.1
.
42
.
tar
.
gz
cd
mysql
-
5.1
.
42
./
configure
--
prefix
=/
usr
/
local
/
mysql
--
with
-
named
-
curses
-
libs
=/
usr
/
local
/
ncurses
/
lib
/
libncursesw
.
so
.
5.6
--
with
-
charset
=
gbk
#
--prefix=/usr/local/mysql mysql的安装路径
#
关于mysql配置文件路径的说明:mysql按照下列顺序搜索my.cnf
#
/etc,mysql安装目录如 /usr/local/mysql/etc,安装目录下的data目录如 /usr/local/mysql/data,以最先找到的为准。/etc下my.cnf的配置是全局设置
#
--with-named-curses-libs=/usr/local/ncurses/lib/libncursesw.so.5.6 ncurses库文件安装路径
#
--localstatedir=/usr/local/mysql/var 数据库默认存放路径(可以设置其它路径如,/var/lib/mysql)
#
--with-charset=gbk 设置数据库支持中文字符集
make
sudo make install
step
.
b
#
拷贝mysql配置文件到目标目录/usr/local/mysql/etc
#
新建/usr/local/mysql/etc目录(该目录没有自动创建)
sudo
mkdir
/
usr
/
local
/
mysql
/
etc
sudo cp support
-
files
/
my
-
medium
.
cnf
/
usr
/
local
/
mysql
/
etc
/
my
.
cnf
#
删除安装产生的临时文件(一定要在拷贝完配置文件后在执行,不然my-medium.cnf会被删除)
make clean
step
.
c
#
添加一个名为mysql的linux系统群组(可以参考mysql手册2.8.1. 源码安装概述)
sudo groupadd
mysql
#
新建一个名为mysql的linux系统用户,并将其添加到mysql系统群组中
#
如果Linux只启动命令行界面,可以用下面的操作添加需要的账户
#
sudo useradd -M -s /bin/false -g mysql mysql
#
-M 该选项不会建立用户目录
#
-s 指定新建用户使用的shell,/bin/false表示该用户不能登录系统
#
-g mysql 将用户mysql添加到组mysql中
#
我现在用的时桌面系统,用如上命令添加账户。系统启动时在登录界面会显示mysql用户虽然它不登录
#
改用下面命令,mysql账户就不会显示在登录界面了
sudo useradd
-
r
-
s
/
bin
/
false
-
g
mysql
mysql
#
-r 建立系统账户,不创建用户目录,用户分配的uid小于1000
step
.
d
#
创建mysql授权表
#
如果用root运行命令,应当使用--user选项。选项的值应与你在stpe.czz中创建的登录账户相同。如果用该用户登录来运行命令,可以省略--user选项
#在此步如果报FATAL: Could not find mysqld错误,将命令改为
#sudo/usr/local/mysql/bin/mysql_install_db--user=mysql --basedir=/usr/local/mysql
step
.
e
#
进入mysql的安装目录(/usr/local/mysql)
cd
/
usr
/
local
/
mysql
#
将文件的所有属性改为root用户
sudo
chown
-
R root
.
#
将数据目录的所有属性改为mysql用户(即在step.c中创建的用户)
sudo
chown
-
R
mysql
var
#
将组属性改为mysql组
sudo
chgrp
-
R
mysql
.
step
.
f
#
启动mysql服务
sudo
/
usr
/
local
/
mysql
/
bin
/
mysqld_safe
--
user
=
mysql
&
#
登录数据库
/
usr
/
local
/
mysql
/
bin
/
mysql
-
uroot
mysql安装完成了
三、Apache的安装
#
使用DSO动态编译,关于动态编译与静态编译的区别可以参考http://www.ha97.com/2612.html
安装包 httpd
-
2.2
.
14
.
tar
.
gz
tar
-
zvxf httpd
-
2.2
.
14
.
tar
.
gz
cd httpd
-
2.2
.
14
./
configure
--
prefix
=/
usr
/
local
/
apache
--
enable
-
mods
-
shared
=
most
--
enable
-
so
#
--prefix=/usr/local/apache 将apache安装到/usr/local/apache路径
#
--enable-mods-shared=most 将所有标准模块都动态编译为DSO模块
#
--enable-so apache核心装载DSO,但是不实际编译任何动态模块
make
make install
make clean
#
启动apache
sudo
/
usr
/
local
/
apache
/
bin
/
apachectl start
#
打开浏览器输入浏览器会看到It works!
apache安装完成了
四、PHP的安装
step
.
1
freetype的安装
安装包 freetype
-
2.3
.
11
.
tar
.
gz
#
安装命令
tar
-
zxvf freetype
-
2.3
.
11
.
tar
.
gz
cd freetype
-
2.3
.
11
./
configure
--
prefix
=/
usr
/
local
/
freetype
make
sudo make install
make clean
step
.
2
zlib的安装
安装包 zlib
-
1.2
.
3
.
tar
.
gz
#
安装命令
tar
-
zxvf zlib
-
1.2
.
3
.
tar
.
gz
cd zlib
-
1.2
.
3
./
configure --prefix=/usr/local/zlib --shared
#--prefix=/usr/local/zlib zlib的安装目录 --shared安装共享库
make
sudo make install
make clean
step
.
3
libpng的安装
安装包 libpng
-
1.4
.
0
.
tar
.
gz
#
安装命令
tar
-
zxvf libpng
-
1.4
.
0
.
tar
.
gz
cd libpng
-
1.4
.
0
# 将scripts目录下的makefile.std文件拷贝到当前目录,并重命名为makefile
cp scripts/makefile.std makefile
# 编辑makefile文件找到27行左右如下内容
# ZLIBLIB=../zlib
# ZLIBINC=../zlib
# 修改为
# ZLIBLIB=/usr/local/zlib/lib (zlib的库文件路径)
# ZLIBINC=/usr/local/zlib/include (zlib的包含文件路径)
# 保存退出
# 如果安装zlib时配置命令为 ./configure ,则不用修改makefile文件
make
sudo make install
make clean
step
.
4
jpeg的安装
安装包 jpegsrc
.
v7
.
tar
.
gz
#
安装命令
tar
-
zxvf jpegsrc
.
v7
.
tar
.
gz
cd jpeg
-
7
./
configure
--
prefix
=/
usr
/
local
/
jpeg7
make
sudo make install
make clean
#
很多人手动建立 jpeg的目录结构不知道是因为不同还是有其它原因(有待查证)
#
以上包都是gd库所需要的组成库,下面安装gd库
step
.
5
gd库的安装
安装包 gd
-
2.0
.
35
.
tar
.
gz
#
安装命令
step
.
a
tar
-
zxvf gd
-
2.0
.
35
.
tar
.
gz
cd gd
-
2.0
.
35
# 执行gd配置命令
LDFLAGS="-L/usr/local/lamp/contrib/lib"
./
configure
--
prefix
=/
usr
/
local
/
gd2
--
with
-
freetype
=/
usr
/
local
/
freetype
--
with
-
png
=/
usr
/
local
/
libpng
--
with
-
jpeg
=/
usr
/
local
/
jpeg7
# LDFLAGS="-L/usr/local/zlib/lib" zlib的库文件路径
# 如果安装zlib时配置命令为./configure ,则将gd2库的配置命令改为 ./configure--prefix=/usr/local/gd2--with-freetype=/usr/local/freetype--with-png=/usr/local/libpng--with-jpeg=/usr/local/jpeg7
step
.
b
#
编辑 Makefile 文件, 找到 232 行左右
#
看到类似内容 CPPFLAGS = -I/usr/local/freetype/include/freetype2 -I/usr/local/freetype/include -I/usr/local/freetype/include -I/usr/local/jpeg7/include
#
修改为 CPPFLAGS = -I/usr/local/freetype/include/freetype2 -I/usr/local/freetype/include -I/usr/local/freetype/include -I/usr/local/jpeg7/include
-I/usr/local/libpng/include
# 保存退出
step
.
c
#
编辑 gd_png.c 文件 找到 if (!png_check_sig (sig, 8)) { /* bad signature */
#
修改为 if (png_sig_cmp (sig, 0, 8)) {
# 保存退出
step
.
d
#
执行命令
make
sudo make install
make clean
#
gd库安装完成
step
.
6
libxml2的安装
安装包 libxml2-2.6.20.tar.gz
#
libxml2用来解析xml
#
安装命令
tar
-
zxvf libxml2
-
2.6
.
20
.
tar
.
gz
cd libxml2
-
2.6
.
20
./
configure
--
prefix
=/
usr
/
local
/
libxml
# 编辑 nanohttp.c 文件,找到fd = open(filename, O_CREAT | O_WRONLY);(可以通过查找O_WRONLY定位)
# 修改为 fd = open(filename, O_CREAT | O_WRONLY,0777);
# 保存退出
make
make install
make clean
step
.
7
php的安装
安装包 php
-
5.3
.
1
.
tar
.
gz
#
安装命令
step
.
a
tar
-
zxvf php
-
5.3
.
1
.
tar
.
gz
cd php
-
5.3
.
1
.
tar
./
configure
--
prefix
=/
usr
/
local
/
php
--
with
-
apxs2
=/
usr
/
local
/
apache
/
bin
/
apxs
--
with
-
mysql
=/
usr
/
local
/
mysql
--
with
-
libxml
-
dir
=/
usr
/
local
/
libxml2
--
with
-
zlib-dir=/usr/local/zlib
--
with
-
png
-
dir
=/
usr
/
local
/
libpng
--
with
-
jpeg
-
dir
=/
usr
/
local
/
jpeg7
--
with
-
freetyp-e
-
dir
=/
usr
/
local
/
freetype
--
with
-
gd
=/
usr
/
local
/
gd2
# --with-zlib-dir=/usr/local/zlib 的安装目录,如果安装zlib的配置命令为 ./configure ,则安装目录为/usr/local
make
sudo make install
make clean
step
.
b
拷贝PHP配置文件
sudo cp php
.
ini
-
development
/
usr
/
local
/
php
/
lib
/
php
.
ini
#
php配置文件名称不同本版名称会有差异,当前版本中有两个文件 php.ini-development(开发环境中用的) php.ini-production(生产环境中用的)
step
.
d
修改apache配置文件
/
usr
/
local
/
apache
/
conf
/
httpd
.
conf
#
添加对php的支持
LoadModule php5_module modules
/
libphp5
.
so
AddType application
/
x
-
httpd
-
php
.
php
step
.
e
#
如果用root账户登录跳过这一步
#
更目录web目录权限
sudo
chown
-
R 登录用户
:
登录用户
/
usr
/
local
/
apache
/
htdocs
step
.
f
#
重启apache
sudo
/
usr
/
local
/
apache
/
bin
/
apachectl restart
好了到此linux配置环境配置完了,由于各种问题这篇文章拖了好几天才写完。这中间还发生了未保存而丢失文档的杯俱泪奔啊!其中各个包的安装
./
configure涉及到的参数只是一些基本的参数,LAMP之旅刚刚开始。走过了会发现没有想象的那么困难了,GOOD LUCK!
感谢张小叶童鞋的大力支持,快乐与你同在!