平时写程序时都是在服务器已经搭建好的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 mysqlmysql
# -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 mysqlvar
# 将组属性改为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)) { 
# 修改为 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!

Linux下PHP开发环境搭建的更多相关文章

  1. Linux下golang开发环境搭建

    对于golang开发来说,Windows下可以用vscode或者liteide都不错,但是Linux下的开发也就只有vim了,所以怎么搞笑的利用vim进行golang开发呢? 参考官方推荐的一个插件: ...

  2. Linux下Java开发环境搭建—CentOS下Eclipse的安装教程

    据了解,在Linux下的Java开发很多时候都比较喜欢使用vim + 插件,反而很少使用Eclipse,但是我是第一次使用Linux来进行Java编程,就什么都体验下啦,好啦,废话不多说,直接开始啦. ...

  3. Linux下Java开发环境搭建—CentOS下Mysql安装教程

    本人学习Linux时使用的是CentOs5.5版本,在该环境中,Mysql的安装方法有很多种,下面我只讲我这次成功了的方法,作为一个记录,供大家参考,同时给自己做一个笔记. MySQL下载 1.进入网 ...

  4. Linux 下web开发环境搭建-jdk环境搭建

    Centos 7 附:windows 下jdk环境变量 CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools ...

  5. linux下php开发环境搭建(nginx+php+mysql)

    安装前准备工作 先安装一些必要的类库 yum install -y wget  zlib-devel bzip2-devel  curl-devel openssl openssl-devel vim ...

  6. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  7. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  8. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  9. ubuntu下Nodic开发环境搭建

    ubuntu下Nodic开发环境搭建 1.编译环境 ubuntu可直接装gcc编译环境 sudo apt install gcc-arm-none-eabi 也可以下载可执行文件download 2. ...

随机推荐

  1. (大数据工程师学习路径)第三步 Git Community Book----Git介绍

    一.git诞生 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.1991年,Linus创建了开源的Linux,并且有着为数众多的参与者.虽然有世界各地的志愿者为Linux编写代码 ...

  2. UIMenuController,UIPasteboard:复制,粘贴详细解释

    首先,这四个地图.我想实现的功能.[一张照片讲一个复制到另一UIimageView上] 实现代码例如以下: -(IBAction)panGestureTop:(UILongPressGestureRe ...

  3. hdu 1098 Ignatius's puzz

    有关数论方面的题要仔细阅读,分析公式. Problem Description Ignatius is poor at math,he falls across a puzzle problem,so ...

  4. linux_删除空文件(大小等于0的文件)的方法

    1: 查看 find . -name "*" -type f -size 0c 2:删除 find . -name "*" -type f -size 0c | ...

  5. Java Web整合开发(12) -- JDBC

    JDBC访问数据库的一般步骤: 注册驱动,获取连接,获取Statement,执行SQL并返回结果集,遍历结果集显示数据,释放连接. Connection conn = null; Statement ...

  6. 3.集--LinkedTransferQueue得知

    近期在阅读开源项目里,发现有几个project都不尽同样地使用LinkedTransferQueue这个数据结构.比方netty,grizzly,xmemcache,Bonecp. Bonecp还扩展 ...

  7. ASP.NET 5- 1

    ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目   ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 建立项目 首先,目前只有VS 2015支持开发最新的ASP ...

  8. java_Timer_schedule jdk自带定时器

    定时器经常在项目中用到,定制执行某些操作,比如爬虫就需要定时加载种子等操作,之前一直用spring的定制器近期做项目发现,jdk有很简单的提供 代码如下 1 /* * Copyright (c) 20 ...

  9. JAVA于Get和Post差异请求

    1. get 离server在对数据的访问.post 它是对server数据的传输. get 请求返回 request - URI 随机信息指出,. Post 请求发送电子邮件.观看新闻或交互式用户发 ...

  10. OracleServiceORCL服务不见了怎么办

    用管理员身份运行命令提示符(CMD) 然后输入“oradim -new -sid orcl”即可