MysqlLimit出现误差?

在一段更新数据库的代码中,居然出现了虚假的更新动作。

数据库用的是MySql,测试环境是局域网,4核机器,Mysql无事务机制,无存储过程;PHP5.2.x。

 

这段代码需要更新超过300条记录。

每次更新完自己后,需要调用JobManage::synchroJobStatus做同步,同步过程中有一次数据库操作。

 

 < php
$ibegin=0;
while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID} LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 if (empty($jobList)) {
	break;
 }

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 $ibegin+=100;

 }
 >

更新的语句关键是这条:DB::edit(‘tb_job_status’, $data, $where, DBName_company);

 上面的问题是:

1.查询数据库,一轮300多条记录中,有100多条记录的该语句没有生效。
2.这条语句每次都返回了更新成功。

3.数据能够完整的读取,没有遗漏。

 

经过修改:

 < php
//$ibegin=0;
//while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID}";// LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 //if (empty($jobList)) {
//	break;
 //}

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 //$ibegin+=100;

 //}
 >

 

问题不再存在· · 

何种原因,导致这个错误出现呢?

初步断定 Limit 出现了这个误差!

具体如何产生的,还有待分析。

 

ulimit值(Linux文件句柄数量)的调整

本文链接: http://www.php-oa.com/2008/04/21/ulimit-linux.html

 

在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量.

查看方法

我们可以用ulimit -a来查看所有限制值

[root@centos5 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 4096
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited||<

其中 “open files (-n) 1024
“是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目).这个值可用ulimit
命令来修改,但ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效.

系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.

另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量

查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.

修改方法

若要令修改ulimits的数值永久生效,则必须修改配置文档,可以给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还
有一个方法是修改/etc/sysctl.conf .我修改了,测试过,但对用户的ulimits -a
是不会改变的。只是/proc/sys/fs/file-max的值变了.(我给命令放到rc.local中失败)

我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如

* soft nofile 32768
* hard nofile 65536

也可以直接运行下面这个shell。直接copy到你的终端中运行就好了.
echo -ne “
* soft nofile 65536
* hard nofile 65536
” >>/etc/security/limits.conf

就可以将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制

注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.

生效

修改完重新登录就可以见到.(我的系统是Centos5.1.修改了,重新登录后就立刻生效.可以用ulimit -a 查看确认.)

 

如果你使用squid的话,你要在/etc/init.d/squid的文件加入ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384

 

也可在catalina.sh文件里设置:

# —————————————————————————–

JAVA_OPTS=’-server -Xms1024m -Xmx2048m -XX:PermSize=64M -XX:MaxPermSize=128m -Duser.timezone=Asia/Shanghai’
#file open ulimit
ulimit -n 65536

Linux下PHP5+MySQL5+GD2+Proftpd+phpmyadmin

一直想写篇关于Linux下 PHP环境的详细安装配置文章, 没什么时间
趁现要配几台服务器, 借此机会把自己安装配置的步骤写出来, 供初学者参考!

有什么错误的地方请大家指证批评,谢谢! – by Mayer

首先我在 /root 目录下建了一个 soft 文件夹来保存我要安装的源码包
mkdir /root/soft
cd /root/soft

先找到 apache php mysql proftpd 源码包下载的URL地址
请浏览
http://www.apache.org
http://www.php.net
http://www.mysql.com
http://www.proftpd.org/
等官方网站
使用wget 直接下载

wget http://apache.justdn.org/httpd/httpd-2.0.55.tar.gz

wget http://cn.php.net/get/php-5.0.5.tar.gz/from/cn2.php.net/mirror

wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.15-linux-i686.tar.gz/from/http://mysql.oss.eznetsols.org/

第一步:安装apache
注:当前目录为/root/soft ,
目录下有
httpd-2.0.55.tar.gz, php-5.0.5.tar.gz
等二进制源码包
#号代表为root 根权限,#后是输入的一条命令

执行下列命令
解压源码包
# tar -zxf httpd-2.0.55.tar.gz
进入安装目录
# cd httpd-2.0.55
配置apache安装信息
# ./configure –prefix=/usr/local/apache –enable-modules=so –enable-rewrite
执行make安装
# make; make install
安装完后
# vi /usr/local/apache/conf/httpd.conf
找到 prefork.c 下的
MaxClients 150
改为
ServerLimit 2000
MaxClients 1000
apache默认工作在prefork.c模式下,并发进程为150,超过后就无法访问,150是远远不够的,所以这里按自己网站的需求改, 如1000
由于apache默认最大并发进程是 256 所以要先设置 ServerLimit 2000 将服务器可设的最大并发数设为2000, 然后再设置最大并发数 MaxClients 1000

找到 #ServerName www.example.com:80 在其下设置 ServerName 如下
ServerName www.mysite.com
基中 www.mysite.com 为你网站名,也可用IP代替
找到 DocumentRoot “/usr/local/apache/htdocs”
设置你的 WEB 服务器的根目录 如
DocumentRoot “/myweb”
找到 DirectoryIndex index.html index.html.var 改为
DirectoryIndex index.html index.php index.htm
找到 ForceLanguagePriority Prefer Fallback 在其下加上
AddDefaultCharset gb2312
改完后保存(vi 的用法请查 Linux vi 命令)
用下面命令启动WEB服务器
# /usr/local/apache/bin/apachectl start
查看自己的站点是否正常 http://www.mysite.com 也可用IP
用 # /usr/local/apache/bin/apachectl stop 可停止服务

安装MYSQL
# tar -zxf mysql-standard-5.0.15-linux-i686.tar.gz
# cp -r mysql-standard-5.0.15-linux-i686 /usr/local/mysql
# vi /usr/local/mysql/support-files/my-medium.cnf
在后面加上
max_connections = 1000
log-slow-queries
long_query_time = 5
注 max_connections 为允许的最大连接数
log-slow-queries 打开低速查询日志
long_query_time 低速查询的秒数(运行一句sql达到此时间记录在日志里)
然后COPY 它为 /etc/my.cnf 文件
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
添加mysql用户及用户组
# groupadd mysql
# useradd -g mysql mysql
修改mysql目录权限
# chown -R root /usr/local/mysql
# chgrp -R mysql /usr/local/mysql
# chown -R mysql /usr/local/mysql/data
生成mysql系统数据库
# /usr/local/mysql/scripts/mysql_install_db –user=mysql&
启动mysql服务
# /usr/local/mysql/bin/mysqld_safe –user=mysql&
如出现 Starting mysqld daemon with databases from /usr/local/mysql/data
代表正常启动mysql服务了, 按Ctrl + C 跳出
修改 mysql 的 root 密码
# /usr/local/mysql/bin/mysqladmin -u root -p password 123456
回车出现 Enter password: 最开始密码默认为空 继续回车即可
123456 即为你的新密码
注意:在安装MySQL5.0的时候会出现一个问题,就是和PHP联合编译的时候提示-lmysqlclient错误,这个原因是因为使用了另外一个版本的MySQL,我们需要使用的是Linux x86那个版本,不要是glibc-2.2那个。参考(http://forums.mysql.com/read.php 45,100371,101591#msg-101591)

安装GD库(让PHP支持GIF,PNG,JPEG)
首先下载 jpeg6,libpng,freetype 并安装模块
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.8.tar.gz
wget http://keihanna.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.10.tar.gz
wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz

安装 jpeg6
建立目录
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/bin
# mkdir /usr/local/jpeg6/lib
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/man
# mkdir /usr/local/jpeg6/man/man1
# cd /root/soft
# tar -zxf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
# make; make install

安装libpng
# cd /root/soft
# tar -zxf libpng-1.2.8.tar.gz
# cd libpng-1.2.8
# cp scripts/makefile.std makefile
# make; make install

安装 freetype
# cd /root/soft
# tar -zxf freetype-2.1.10.tar.gz
# cd freetype-2.1.10
# ./configure –prefix=/usr/local/freetype
# make;make install

安装最新的GD库
# cd /root/soft
# tar -zxf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure –prefix=/usr/local/gd2 –with-jpeg=/usr/local/jpeg6/ –with-png –with-zlib –with-freetype=/usr/local/freetype/
# make; make install

安装最新的Curl库
# cd /root/soft
# wget http://curl.haxx.se/download/curl-7.15.0.tar.gz
# tar -zxf curl-7.15.0.tar.gz
# ./configure –prefix=/usr/local/curl
# make; make install

安装PHP

由于php5需libxml2的支持, 所以先下载并安装libxml2
# cd /root/soft
# wget http://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.19.tar.gz
# tar -zxf libxml2-2.6.19.tar.gz
# cd libxml2-2.6.19
# ./configure –prefix=/usr/local/libxml2
# make; make install

安装 libxslt
# cd /root/soft
# wget http://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1/libxslt-1.1.15.tar.gz
# tar -zxf libxslt-1.1.15.tar.gz
# cd libxslt-1.1.15
# ./configure –prefix=/usr/local/libxslt –with-libxml-prefix=/usr/local/libxml2
# make; make install

# tar -zxf php-5.0.5.tar.gz
# cd php-5.05
# ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache/bin/apxs –with-mysql=/usr/local/mysql/ –with-curl=/usr/local/curl –enable-ftp –with-libxml-dir=/usr/local/libxml2 –with-expat-dir=/usr/lib –enable-soap –with-xsl=/usr/local/libxslt –enable-xslt –with-gd=/usr/local/gd2/ –with-jpeg-dir=/usr/local/jpeg6/ –with-zlib-dir=/usr/lib –with-png –with-freetype-dir=/usr/local/freetype –enable-mbstring
# make
# make install

其中./configure 后的
–prefix=/usr/local/php
–with-apxs2=/usr/local/apache/bin/apxs
–with-mysql=/usr/local/mysql/
–with-libxml-dir=/usr/local/libxml2
是必要的选项

–with-gd=/usr/local/gd2/
–with-jpeg-dir=/usr/local/jpeg6/
–with-png
–with-zlib-dir=/usr/lib
–with-freetype-dir=/usr/local/freetype
这是让PHP支持GD库的配置选项

–with-curl=/usr/local/curl 支持CURL库
–enable-ftp 打开FTP库函数支持

–enable-soap –with-xsl=/usr/local/libxslt –enable-xslt
让PHP支持SOAP, 上面这些一般用得少, 可以去掉

配置 httpd.conf 让apache支持PHP
# vi /usr/local/apache/conf/httpd.conf
找到 AddType application/x-gzip .gz .tgz 在其下添加如下内容
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

重启apache
# /usr/local/apache/bin/apachectl restart
在这里有一个问题,如果你的系统安装了SELinux模块,那么由于安全控制的原因,会出现如下错误:
Starting httpd: Syntax error on line 191 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/libphp5.so into server: libxml2.so.2: failed to map segment from shared object: Permission denied
[FAILED]
这样需要我们到指定的库文件的目录下执行如下命令:
restorecon libxml2.so.2.6.19
把类似的错误都解决之后,Apache就可以正常启动了。
在你Web目录里建一内容为 <  phpinfo();  > PHP文件, 输入URL地址查看PHP配置是否正确

安装 phpmyadmin
下载
# cd /root/soft
# wget http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.6.4-pl3.tar.gz
# tar -zxf phpMyAdmin-2.6.4-pl3.tar.gz
phpMyAdmin必须需要PHP支持MySQL。
并且在2.8以后的版本,解压完毕后,首先需要手工建一个config目录,然后配置完毕后,需要点击页面上的Configuration中的Save把文件存成config.inc.php。
# vi phpMyAdmin-2.6.4-pl3/config.inc.php
找到 $cfg[‘Servers’][$i][‘auth_type’] = ‘config’; 将config 改为 http
保存后
mv phpMyAdmin-2.6.4-pl3 /你的phpmyadmin目录
关于mysql4.1-4移植4.0旧数据库中文乱码问题的解决方法
进入phpmyadmin管理
建立你数据库名并选上 gb2312_bin 的编码
然后导入你先前备份好的SQL文件, 导入时选择 文件的字符集:gb2312
完成后就OK了
注: PHP连接mysql4.1和5.0 数据库后需指定字符集 需执行如 mysql_query(“SET NAMES ‘gb2312’ “);
否则会产生中文乱码问题!

Proftpd 的安装
下面这篇文章介绍得比较详细
http://www.5ilinux.com/blog/archives/000082.html

使用phpsql2005数据迁移

为了要 将原有的sql 2005 数据库迁移到 mysql里面……忙活了一整天。

本來使用php的 mssql函數 报错:

function.mssql-connect]: Unable to connect to server

打开phpinfo 查看 发现 mssql 的lib版本还是7.0 于是google找ntwdblib.dll的新版本……

但是找不到ntwdblib.dll 文件的sql2005版本

后来用到了 微软为php开发的php 驱动(SQL Server Driver for PHP) ,msdn的地址:http://msdn.microsoft.com/en-us/library/cc296175(SQL.90).aspx

安裝成php的扩展以后,一切正常,使用sqlsrv_connect 链接数据库一切正常。但马上就遇到了灵异现象。 数据库一直报错

超时时间已到。在操作完成之前超时时间已过或服务器未响应。 (.Net SqlClient Data Pro……

附件是微软的SQL Server Driver for PHP 安装成php扩展

PHP编程常用技巧四则

1.配置PHP文件目录

  作为服务器端解释执行的脚本语言,PHP程序放置在某个服务器可以访问的目录下,一般可以通过修改Apache的httpd.conj进行配置,例如我们在该文件中的一句:

  Alias /test/ “d:/phpwebsite/php/” 那么在浏览器端输入:“http://localhost/test/+PHP文件名”就可以访问d:/phpwebsite/php/下的PHP文件了;可见该行不过是为存放PHP文件的目录起一个别名。

  其次,还可以通过指定DocumentRoot路径得到存放服务器文件的目录,在httpd.conj找到以下两行,其中的路径可以随意指定,你的PHP文件也可以放在该目录下,服务器同样可以运行它们,如“http://localhost/+PHP文件名”。

  一般的,将PHP文件放在同一个地方比较好,可以方便管理,而其他文件放在另外一个地方。

DocumentRoot “C:/usr/bin/html/”
<Directory “C:/usr/bin/html/”>
2.服务器端目录的索引文件
在httpd.conj中,有一行:
DirectoryIndex index.html

  该行指定目录默认打开文件为index.html,当访问某个目录时,服务器就会自动查找index.html, 若果不存在,则显示目录中的所有文件列表,默认打开文件可以改为别的,如index.php3等等,但是也许我们有很多目录,无论是存放图片,文本等资料的,还是存放PHP文件或别的文件的目录,我们并不希望用户能看到目录中的文件列表,在httpd.conj 中指定了一个.htacess文件,该文件产生一个目录索引文件,例如我们用写字板建立一个.htacess文件:

# .htacess #
DirectoryIndex error_open.php
再建立一个错误警告文件:
# error_open.php #
<  echo ” 您没有权限访问该页!”  >

  其中的error_open.php为权限错误警告文件,将此2文件放在所有保护目录下,当用户企图打开目录时,自动转向执行error_open.php,显示错误警告。

  3.目录删除巧实现
我们知道,PHP4 for/win32中有个rename()函数可以支持对目录/文件进行重命名,如:
rename( oldpath, newpath) // oldpath为文件或目录原来路径;
// newpath为新定义路径;

  实现将 oldpath改名为 newpath。

  PHP4中没有删除目录/文件的函数,怎么作到删除呢?我们知道,php.ini中有一行用来完成HTTP上传操作的临时文件目录配置行:
upload_tmp_dir= ;

  PHP4支持该临时目录的配置(PHP3不支持),当上载操作完成则自动清空临时目录,好了,用它我们可以巧妙的实现文件/目录的删除,比如设置: upload_tmp_dir=”d:/phpwebsite/php/tmp/” ;
要删除某个目录 path,执行:

< php
tmp=”d:/phpwebsite/php/tmp/;”
rename( path, tmp)
 >

  那么文件或目录 path改名为 tmp后, tmp目录下的所有文件/目录自动清除,就完成了删除操作。

  4.快速建立MySql数据库表

  PHP和MySql数据库达到了完美结合,在网页上,比如在论坛或书屋发表作品的新用户,我们要把他的言论信息在线写入数据库中,往往要在相应的数据库中为该用户新建一个数据表。win32下建立新的MySQL空数据库很简单,只要在“/mysql/data/”目录下建立一个文件夹,如:”/usrinfo/”,就可以了。而向库中增添新表可通过以下程序实现:

  # connect.mysql–连接数据库 #
< php
connection = mysql_connect();
mysql_select_db(“usrinfo”, connection);
 >
# make.php– 建立如下结构的,以用户名为表名的数据表 #
< php
//调用connect.mysql
require(“connect.mysql”);
//检查以用户名为表名的数据表存在否 
query=”select count(*) from usrname”;
result=mysql_db_query( query);
//不存在则创建,如存在就是老用户;
if(! result){
mysql_query(“
create table usrname(
id tinyint(6),
title text,
body longtext,
dateof date;
timeof time;
)”) or die(mysql_error());
}
//此处为向数据表插入新的数据部分
 >

MySQL优化实例

进行了一系列更新:

PHP 升级到 5.2.6

MySQL 升级到 5.1.24-rc

Apache 升级到 2.2.8

更新都比较顺利,先停掉 mysql 和 apache。都比较顺利,先停掉 mysql 和 apache。

PLAIN TEXT >> CODE:

net stop mysql

httpd -k stop

PHP 和 MySQL 都可以直接解压要原来的目录(MySQL 别覆盖 data 文件夹),Apache 用安装程序,也覆盖以前的目录就可以。

Apache 和 PHP 没啥问题,就不必说了,我的 MySQL 之前是 5.0 的,启动没问题,只是用 mysqld –version 看版本时提示了一个警告信息,大概意思是 thread_stack 参数不再支持 64k 要改成 128k,这个打开 mysql.ini 把 thread_stack 后面的值改成 128k 即可。

改好这个之后再次执行 mysqld –version 又提示需要升级,让执行 mysql_upgrade,需要执行如下命令,然后会进行一系列升级,等升级完毕就一切OK了

PLAIN TEXT >> CODE:

mysql_upgrade -uroot -pYourPassword

在linux上面LAMP安装

1. Apache安装

1. download httpd 2.2.16

# mkdir -p /usr/local/apache2
生成/usr/local/apache2目录

2. ./configure \
   
–prefix=/usr/local/apache2 \
   
–enable-so \
   
–enable-mods-shared=all \
   
–with-included-apr \
   
–enable-proxy=shared \
   
–enable-cache=shared \
   
–enable-file-cache=shared \
   
–enable-disk-cache=shared \
   
–enable-mem-cache=shared

 

if compile error show zlib not found, then use command check:

rpm -qa | grep -i zlib

if zlib is already installed, zlib-devel is needed to be installed:

yum install zlib-devel

 

we can use ./configure -help | grep mpm to see module options. After installation, we can use httpd -l  to see compiled modules.


   
make
   
make install

 

# vi /usr/local/apache2/conf/httpd.conf
设置DocumentRoot 的路径
保存退出,现在就这么简单配置apache。

# /usr/local/apache2/bin/apachectl -k start
启动apahce


用浏览器查看
(这里写你自己网站,如http://localhost/
),得到It works,说明apache已经配置成功了。


# /usr/local/apache2/bin/apachectl -k stop
停止apache

# /usr/local/apache/bin/apachectl restart
重启Apache

 
把httpd 添加到系统的启动项里
# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
# chmod 700 /etc/rc.d/init.d/httpd
# vi /etc/rc.d/init.d/httpd
在第三行后增加
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 90 90
# description:http server
注意:没有这几行,在使用chkconfig时会提示你:service httpd does not support chkconfig。
chkconfig –add httpd
chkconfig –level 345 httpd on
这样,在运行级别345上httpd就可以自动启动了。


 

二,Mysql的安装
 
# cd /root
# tar -zvxf  mysql-5.1.32-linux-i686-glibc23.tar.gz
# mkdir -p /usr/local/mysql (省略也可)
# cp -r  mysql-5.1.32-linux-i686-glibc23/* /usr/local/mysql
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

添加mysql用户及用户组

# groupadd mysql
# useradd -g mysql mysql
修改mysql目录权限

# chown -R root /usr/local/mysql
# chgrp -R mysql /usr/local/mysql
# chown -R mysql /usr/local/mysql/data
生成mysql系统数据库

# /usr/local/mysql/scripts/mysql_install_db –user=mysql&
启动mysql服务

# /usr/local/mysql/bin/mysqld_safe –user=mysql&
如出现 Starting mysqld daemon with databases from /usr/local/mysql/data
代表正常启动mysql服务了, 按Ctrl + C 跳出
修改 mysql 的 root 密码


# /usr/local/mysql/bin/mysqladmin -u root -p password “wengdo”

wengdo 这里可以换为你自己的密码

 
把你编译目录的一个脚本COPY过去

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

# 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的库文件地址。

 
三,安装GD库 (如果你用系统自带的GD库,可以省略这一步)

  • 安装 jpeg6 

建立目录:

# mkdir -p /usr/local/jpeg6 
# mkdir -p /usr/local/jpeg6/bin 
# mkdir -p /usr/local/jpeg6/lib 
# mkdir -p /usr/local/jpeg6/include 
# mkdir -p /usr/local/jpeg6/man 
# mkdir -p /usr/local/jpeg6/man1
# mkdir -p /usr/local/jpeg6/man/man1

# cd /root
# tar -zvxf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure –prefix=/usr/local/jpeg6/ –enable-shared –enable-static
# make
# make install

  • 安装libpng
    # cd /root
    # tar -zvxf libpng-1.2.35.tar.gz
    # cd libpng-1.2.35
  • mkdir -p /usr/local/libpng
    # ./configure –prefix=/usr/local/libpng
    # make
    # make install 
  • 安装 freetype
    # cd /root 
    # tar -zvxf freetype-2.3.9.tar.gz 
    # cd freetype-2.3.9
    # mkdir -p /usr/local/freetype
    # ./configure –prefix=/usr/local/freetype 
    # make
    # make install
  • 安装zlib
  • 安装curl
  • 安装GD库

# cd /root
# tar -zvxf gd-2.0.35.tar.gz
# mkdir -p /usr/local/gd2
# cd gd-2.0.35
# ./configure –prefix=/usr/local/gd2 –with-jpeg=/usr/local/jpeg6/
 –with-png=/usr/local/lib/ –with-zlib=/usr/local/lib/
–with-freetype=/usr/local/freetype/ –enable-m4_pattern_allow
# make
# make install

四,安装PHP5
php5必须有libxml2支持!

安装libxml2

# cd /root
# tar -zxvf libxml2-2.6.19.tar.gz
# cd libxml2-2.6.19
# mkdir -p /usr/local/libxml2
# ./configure –prefix=/usr/local/libxml2
# make
# make install
 
安装php5

# cd /root
# tar -zvxf php-5.2.9.tar.gz 
# mkdir -p /usr/local/php
# cd php-5.2.9
# ./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache2/bin/apxs
–with-mysql=/usr/local/mysql/
–with-curl=/usr/local/curl –enable-ftp
–with-libxml-dir=/usr/local/libxml2
–with-gd=/usr/local/gd2/
–with-jpeg-dir=/usr/local/jpeg6/
–with-zlib-dir=/usr/local/zlib/
–with-png-dir=/usr/local/libpng/
–with-freetype-dir=/usr/local/freetype/
–enable-mbstring
# make
# make install
# cp php.ini-dist /usr/local/php/lib/php.ini (别忘记了)

其中./configure 后的
–prefix=/usr/local/php
–with-apxs2=/usr/local/apache2/bin/apxs
–with-mysql=/usr/local/mysql/
–with-libxml-dir=/usr/local/libxml2
是必要的选项

–with-gd=/usr/local/gd2/
–with-jpeg-dir=/usr/local/jpeg6/
–with-png=/usr/local/lib
–with-zlib-dir=/usr/lib
–with-freetype-dir=/usr/local/freetype
这是让PHP支持GD库的配置选项

–with-curl=/usr/local/curl 支持CURL库
–enable-ftp 打开FTP库函数支持

–enable-soap –with-xsl=/usr/local/libxslt –enable-xslt
让PHP支持SOAP, 上面这些一般用得少, 可以去掉

 

五,安装 ZendOptimizer
 
# cd /root
# tar -zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
# cd ZendOptimizer-3.3.0a-linux-glibc21-i386
# ./install.sh
然后出现图形界面,按提示Next

 
六,配置一些信息

配置 httpd.conf 让apache支持PHP

# vi /usr/local/apache2/conf/httpd.conf
找到 AddType application/x-gzip .gz .tgz 在其下添加如下内容
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

重启apache

# /usr/local/apache2/bin/apachectl restart
在你设置的目录里建一内容为 <  phpinfo();  > PHP文件, 输入URL地址查看PHP配置是否正确

打造稳定高效服务器-Nginx+PHP+fastCGI+php-fpm

打造并发上万的php平台,应该是到目前为止最稳定、最可靠的配置和组合。
我测试过了,使用最新的5.2.10安装,也没有问题。步骤和文章的一样。

注:nginx的安装我没有写,和原文一样,或者网上一搜索一把。我只贴出配置。

原文地址:http://interfacelab.com/nginx-php-fpm-apc-awesome/

我就直接贴出能跑的命令,以造福Ubuntuer。

wget http://us.php.net/get/php-5.2.10.tar.bz2/from/cn2.php.net/mirror
wget http://php-fpm.org/downloads/php-5.2.10-fpm-0.5.11.diff.gz

sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev
sudo apt-get install libxslt1.1 libxslt1-dev
sudo apt-get install libmysqlclient15-dev

tar -xvjf php-5.2.10.tar.bz2

gzip -cd php-5.2.10-fpm-0.5.11.diff.gz | sudo patch -d php-5.2.10 -p1

cd php-5.2.10

sudo ./configure –enable-fastcgi –enable-fpm –with-mcrypt –with-zlib –enable-mbstring –disable-pdo –with-pgsql –with-mysql \
–with-curl –disable-debug –with-pic –disable-rpath –enable-inline-optimization –with-bz2  –with-zlib –enable-sockets \
–enable-sysvsem –enable-sysvshm –enable-pcntl –enable-mbregex –with-mhash –with-xsl –enable-zip –with-pcre-regex \
–with-config-file-path=/etc/php/php.ini

/usr/local/src/php-5.2.10 $ sudo cp php.ini-recommended /usr/local/etc/php.ini
sudo mkdir /etc/php
sudo ln -s /usr/local/etc/php.ini /etc/php/php.ini

vi /usr/local/etc/php-fpm.conf 大概51, 52, 63 and 66行,改为www-data用户.

<value name=”owner”>www-data</value>
<value name=”group”>www-data</value>
<value name=”user”>www-data</value>
<value name=”group”>www-data</value>

#start up fastcgi process

sudo php-fpm start/stop

#nginx conf/fastcgi_params , 增加 :

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

#nginx.conf :

   location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www$fastcgi_script_name;
            include        fastcgi_params;
        }

Reference:

[1]http://interfacelab.com/nginx-php-fpm-apc-awesome/

apache2+PHP4.4.1+Mysql4.1.18+GD2+ZendOptimizer(原创)

apache2+PHP4.4.1+Mysql4.1.18+GD2+ZendOptimizer

安装前准备

所有软件目录:/soft/lapm

工作目录:    /soft/dotmp

安装后的程序工作目录: /httpd

package list:

freetype-2.1.10.tar.gz

gd-2.0.33.tar.gz

httpd-2.0.54.tar.gz

jpegsrc.v6b.tar.gz

libpng-1.2.8-config.tar.gz

mysql-4.1.18.tar.gz

php-4.4.1.tar.gz

ZendOptimizer-2.6.0-Linux_glibc21-i386.tar.gz

zlib-1.2.3.tar.gz

1. 安装zlib (安装libpng和gd前需要先安装zlib)

# tar zxvf zlib-1.2.3.tar.gz

# cd  zlib-1.2.3

# ./configure

# make

# make install

2. 安装libpng

# tar zxvf libpng-1.2.8-config.tar.gz

# cd libpng-1.2.8-config

# ./configure

# make

# make install

3. 安装freetype

# tar zxvf freetype-2.1.10.tar.gz

# cd freetype-2.1.10

# ./configure –prefix=/httpd/freetype

# make

# make install

4. 安装jpeg

# tar zxvf jpegsrc.v6b.tar.gz

# cd jpeg-6b

# mkdir /httpd/jpeg

# mkdir /httpd/jpeg/bin

# mkdir /httpd/jpeg/lib

# mkdir /httpd/jpeg/include

# mkdir /httpd/jpeg/man

# mkdir /httpd/jpeg/man/man1

# ./configure –prefix=/httpd/jpeg –enable-shared –enable-static

#make

#make install

5. 安装gd

修改 freetype.h

#cd /httpd/freetype/include/freetype2/freetype/freetype.h

#vi freetyp.h

注释掉下面的

//#ifndef FT_FREETYPE_H

//#error “`ft2build.h’ hasn’t been included yet!”

//#error “Please always use macros to include FreeType header files.”

//#error “Example:”

//#error ”  #include <ft2build.h>”

//#error ”  #include FT_FREETYPE_H”

//#endif

加入这一句

#include “/httpd/freetype/include/ft2build.h”

# tar zxvf gd-2.0.33.tar.gz

# cd gd-2.0.33

# ./configure –prefix=/httpd/gd –with-jpeg=/httpd/jpeg –with-freetype=/httpd/freetype –with-png –with-zlib

//编译过程中会看到如下信息

** Configuration summary for gd 2.0.33:

   Support for PNG library:          yes

   Support for JPEG library:         yes

   Support for Freetype 2.x library: yes

   Support for Fontconfig library:   no

   Support for Xpm library:          no

   Support for pthreads:             yes

//可以看到png 、 jpeg 、 freetype都已经安装上了

# make

# make install

6. 安装mysql

# tar zxvf mysql-4.0.24.tar.gz

# cd mysql-4.0.24

# ./configure –prefix=/httpd/mysql  –sysconfdir=/httpd/mysql –enable-assembler –with-unix-socket-path=/tmp/mysql.sock  –with-mysqld-user=mysql –with-mysqld-ldflags=-all-static –with-innodb  –with-extra-charsets=all –with-charset=gb2312  –with-collation=gb2312_chinese_ci –enable-thread-safe-client

# groupadd mysql

# useradd mysql -g mysql

#make

#make install

#cp support-files/my-medium.cnf /etc/my.cnf

# ./scripts/mysql_install_db –user=mysql

# cd /httpd/mysql

# chown -R root .

# chown -R mysql var

# chown -R mysql var/.

# chown -R mysql var/mysql/.

# chgrp -R mysql .

#cp support-files/mysql.server /etc/

#chmod +x /etc/mysql.server

#chkconfig –del mysql

#chkconfig –add mysql

#/etc/mysql.server start  

# /httpd/mysql/bin/mysqld_safe –user=mysql &

# /httpd/mysql/bin/mysqladmin -u root password ‘new-password’

或修改密码

mysql>;GRANT USAGE ON *.* TO root@”localhost” IDENTIFIED BY ‘new-password’;

7. 安装apache2

# tar zxvf httpd-2.0.33.tar.gz

# cd httpd-2.0.54

# ./configure –prefix=/httpd/apache –enable-so –enable-track-vars–enable-mods-shared=all –enable-cache –enable-disk-cache –enable-mem-cache –enable-rewrite –with-mpm=worker

# make

# make install

/*********************************************

svn的:

./configure –prefix=/httpd/apache –enable-so –enable-track-vars–enable-mods-shared=all –enable-cache –enable-disk-cache –enable-mem-cache –enable-rewrite –with-mpm=worker –enable-dav –enable-dav=share –enable-dav-fs  –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util

**********************************************/

8. 安装php

# tar zxvf php-4.3.11.tar.gz

# cd php-4.3.11

# ./configure –prefix=/httpd/php4 –with-config-file-path=/httpd/apache/conf –with-apxs2=/httpd/apache/bin/apxs –with-gd=/httpd/gd –enable-gd –enable-gd-native-ttf –with-jpeg-dir=/httpd/jpeg –with-png –with-ttf –with-zlib –with-freetype-dir=/httpd/freetype –enable-magic-quotes –with-mysql=/httpd/mysql –with-mysql-sock=/tmp/mysql.sock –with-iconv –with-mbstring –enable-mbstring=all –enable-track-vars –enable-force-cgi-redirect –enable-short-tags –disable-debug –enable-safe-mode –enable-trans-sid –with-xml

# cp php.ini-dist /httpd/apache/conf/php.ini

/****************************************************

php5的:

./configure –prefix=/httpd/php5 –with-config-file-path=/httpd/apache/conf –with-apxs2=/httpd/apache/bin/apxs –with-gd=/httpd/gd –enable-gd –enable-gd-native-ttf –with-jpeg-dir=/httpd/jpeg –with-png –with-ttf –with-zlib –with-freetype-dir=/httpd/freetype –enable-magic-quotes –with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql/bin/mysql_config –with-libxml-dir=/usr/local/libxml2 –with-expat-dir=/usr/lib –enable-soap  –with-xsl=/usr/local/libxslt –enable-xslt –enable-sqlite-utf8 –with-iconv –with-mbstring –enable-mbstring=all –enable-track-vars –enable-force-cgi-redirect –enable-short-tags –disable-debug –enable-safe-mode –enable-trans-sid –with-xml

****************************************************/

配置apache

ServerName 168.1.1.199 :80

AddType application/x-httpd-php .php

LoadModule php4_module modules/libphp4.so

9. 安装ZendOptimizer

# tar zxvf ZendOptimizer-2.5.7-Linux_glibc21-i386.tar.gz

# cd ZendOptimizer-2.5.7-Linux_glibc21-i386

# ./install.php

安装操作: [ok] ->; [EXIT] ->; [YES] ->; [/httpd/zend] ->; [/httpd/apache/conf] ->; [yes] ->; [/httpd/apache/bin/apachectl] ->; [OK] ->; [OK] ->; [NO]

安装svn

为php添加mysql

error: Call to undefined function mysql_connect()

libmysql.dll和php5ts.dll拷贝至windows目录下的system32下!

将php.ini 去掉;extension=php_mysql.dll前面的分号

extension_dir = “d:\php\ext