有这样一种情况,数组A、数组B、数组C的元素来自数据表,其中每个数组的键是字段名,值是字段值,为了更好地描述,我举例如下:
假设我从数据表中读取到的两个数组分别是如下结构:
$a = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678');

$b = array('small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
呵可...对了,就像上面这样的数组,不过我没有举例数组C哟,不过不影响你读懂数组合并的方法,现在要求把数组A和数组B合并为如下样子: $D = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678'
'small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
实现的方法有两个:
第一个:$D = array_merge($a, $b);
第二个:$D = $a + $b; //完全保留原有数组索引
来源:http://www.ityoudao.com/Web/Php_583_1476.html

FILES详解

WEB2.0 jackxiang 2011-3-27 19:12
文件上传表单<form enctype="multipart/form-data" action="URL" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input name="myFile" type="file">
<input type="submit" value="上传文件">
</form>



$_FILES数组内容如下:

$_FILES['myFile']['name']   客户端文件的原名称。
$_FILES['myFile']['type']   文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size']   已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name']   文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error']   和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
     值:0; 没有错误发生,文件上传成功。
  UPLOAD_ERR_INI_SIZE
     值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  UPLOAD_ERR_FORM_SIZE
     值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  UPLOAD_ERR_PARTIAL
     值:3; 文件只有部分被上传。
  UPLOAD_ERR_NO_FILE
     值:4; 没有文件被上传。
     值:5; 上传文件大小为0.


文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
阅读全文
我的实践:
/etc/hosts.allow
我的配置:
##########By Jack 2015/07/17 #############
sshd:10.108.*.* 10.4.*.* 192.168.112.135 10.64.16.128 10.23.158.84 202.108.16.108/255.255.255.224 202.108.107.* 220.181.198.* 101.23.22.* 10.23.23.* 10.23.64.* 12.23.56.*
##########  end   #############

重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart
——————————————这种小的代码进行部署会用到,实践如下:——————————————————
因为linux下的ssh的SSH限制某些用户/ip登录,功能影响如下:
1)会影响向测试机发执行测试执行上线脚本生成上线代码的命令和scp拷贝待上线代码到上线机特定目录并比对功能。
2)会影响向线上环境拷贝application下的PHP代码到上线机并比和目前仿真机代码比对出线上大于仿真的版本号文件。


为此,
得放开上线仿真机到测试机,上线仿真机到线上机的ssh连接,
因某些安全原因会给限制,放开IP即可,按如下操作步骤即可:

IP地址如下:
仿真机IP: 101.211.228.135(是它像两只手一样分别去两台机器上拿代码)

测试机IP: 101.211.1.114
线上机IP: 101.211.1.118

操作如下:

步骤一:
在测试机上打开ssh的限定:
用ssh登录到 101.211.1.114,
vi /etc/hosts.allow
sshd:101.211.228.135

步骤二,同理步骤一操作:
也放开线上机器对上线机的ssh连接:
用ssh登录到  101.211.1.118,
vi /etc/hosts.allow
sshd:101.211.228.135            

步骤三:重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart

—————————————————————以下内容摘自网络—————————————————————————

1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 1.2.3.4
在 /etc/hosts.deny 写:
sshd: ALL</p>
用 iptables 也行:
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT</p>

2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名</p>

3,设定登录黑名单
vi /etc/pam.d/sshd
增加
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/sshd_user_deny_list onerr=succeed</p>
所有/etc/sshd_user_deny_list里面的用户被拒绝ssh登录</p>

vi /etc/ssh/sshd_conf
DenyUsers jackxiang


来源:http://www.gipsky.com/modules/article6/view.article.php?59909
后期问题
在虚拟机里出现在最后时卡住了,于是排查:按F2,发现两个问题:
问题1:
mounting local filesystem: mount: mount point vmhgfs does not exist
mounting other filesystems: mount: mount  point vmhgfs does not exist
问题2:
PHP作为服务启动时老启动不起来,卡了,在最后,只好关闭:chkconfig php-fpm off
统一在脚本里启动:在/etc/init.d# vi lnmp
nohup service  php-fpm start > /dev/null 2>&1 &
对Mountain出现不存在的错误屏蔽掉:
/etc# vi fstab
#host://mnt/hgfs vmhgfs defaults,user,ttl=5,uid=root,gid=root,fmask=0113,dmask=0002 0 0
------------------------------------------------------------问题得到解决。

2.0 安装快速备份命令bcp
bcp命令:https://github.com/RickieL/bcp/blob/master/bcp
用于快速备份文件或目录。
wget https://nodeload.github.com/RickieL/bcp/tarball/master -O bcp.tar.gz
tar xzf  bcp.tar.gz
cd RickieL-bcp-f65e017
chmod +x bcp
mv bcp /bin/bcp
2.1 备份php.ini配置文件
bcp /usr/local/php5/lib/php.ini
2.2 备份php-fpm.conf配置文件
bcp /usr/local/php5/etc/php-fpm.conf
2.3 备份/etc/init.d/php-fpm 启动文件
    bcp /etc/init.d/php-fpm
2.4 备份原来的整个程序目录:
bcp /usr/local/php5

centos5.5安装最新的LNMP:
一、获取相关开源程序:
  1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):
yum install telnet -y
yum install lrzsz -y
yum install nc -y
yum install unzip -y
yum install wget -y
yum install sudo -y

嵌入式串口相关操作rpm包安装:
yum install setserial
yum install minicom

扯下串口这块的记录:
得到的串口信息:
setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600

设置:
root@192.168.225.128:/home/jackxiang/com# setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600
再看设置成功了没?
root@192.168.225.128:/home/jackxiang/com# setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
        Baud_base: 9600, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

其它setserial参数设置:
root@192.168.225.128:/home/jackxiang/c_com# setserial -g /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
root@192.168.225.128:/home/jackxiang/c_com#  setserial -gb /dev/ttyS0
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
root@192.168.225.128:/home/jackxiang/c_com# setserial -g -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 9600 spd_normal skip_test

相关参考:http://phorum.study-area.org/index.php/topic,25440.0.html
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Serial-HOWTO.html
http://baike.baidu.com/view/245027.htm
关于minicom也就可以在这儿查看以前的记录:http://jackxiang.com/visit.php?job=viewresult&sid=f13e4b9a640d4c80db689fab5db06c16



开始正式安装这个Lnmp:
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

RedHat AS4 系统环境,通常情况下缺少的支持包安装,64位和32位会自动识别:
yum install libjpeg-devel
yum install freetype-devel
yum install libpng-devel



CentOS下MySQL 5.7.9编译安装,安装成功:
https://blog.linuxeye.com/432.html


多行容易有问题,实践一行更好使:


mysql-8.0.0-dmr-Linux-x86_64

-- Downloading boost_1_60_0.tar.gz to /data/software/mysql-8.0.0-dmr/boost/boost_1_60_0/boost
-- [download 0% complete]
-- [download 1% complete]
直接不带boost版本的mysql安装包:






安装mysql最新版本:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/
安装cmake;
tar xvzf cmake-2.8.4.tar.gz
./configure
make
make install

http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz

vi /etc/profile
PATH=$PATH:/usr/local/bin/
export PATH


cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/usr/local/webserver/mysql/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0

为了不做软链接编译时就指定mysql.sock到另外的位置:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/data0/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0

VPS实践如下:(2014-09-28)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
我在编译的时候报错,意思是 DMYSQL_USER=mysql无效,懒得找原因,直接把那个参数给去掉了,接着进行下面的操作;
make && make install

如果想要加入:Coreseek编译上有区别,且目前版本不能全兼容,试了下:mysql5.5.8是可以的,需要加入参数:-DCMAKE_BUILD_TYPE=Release -DWITH_SPHINX_STORAGE_ENGINE=1
具体请看:http://jackxiang.com/post/4317/ 【可能没法访问,我还没有整理完的缘故】


/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql

cp support-files/my-small.cnf /etc/my.cnf
chown mysql:mysql /etc/my.cnf
chown -R mysql:mysql /usr/local/webserver/mysql
切换用户进入安装目录:
su  mysql
cd /usr/local/webserver/mysql/scripts
./mysql_install_db
下面技巧实践Ok:
如安装的源代码文件给丢失后,也可以用下面的方法直接初始化Mysql的mysql表,相当于:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --datadir=/data0/data/ --basedir=/usr/local/webserver/mysql
/usr/local/webserver/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql
出现:[注意:这儿就是指定BaseDir函数的脚本的地方啦]
FATAL ERROR: Could not find ./bin/my_print_defaults
修改:
basedir="/usr/local/webserver/mysql"
builddir="/root/software/mysql-5.5.8"
解决方法[上面就是直接修改啦,下面是参数传入罢了]:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data &(这点非常重要)

如何修改basedir特别是vps里有两个盘时,把database放到另外一块盘上:
datadir = /data/datadir/mysql
innodb_log_group_home_dir = /data/datadir/mysql

root@*.10.6.23:/usr/local/mysql/bin# ./mysqladmin -umysql shutdown
cp -Rf /usr/local/mysql/var/* /data/datadir/mysql/.

root@*.10.6.23:/usr/local/mysql/bin# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/data/datadir/mysql/ZWCLC6X-7198.pid).
MYSQL启动后报:ERROR! The server quit without updating PID file错误的问题解决
无法启动mysql,后来上网找了一下解决方法,无非就是以下几种

1. 注释/etc/my.cnf里的skip-federated注释掉即#skip-federated;
2. my.cnf文件配置过高,重新定义其中的参数(根据服务器情况定义);
3. 杀掉mysql_safe和mysqld进程,然后再重启;
4. 当前日志文件过大,超出了my.cnf中定义的大小(默认为64M),删除日志文件再重启;

但是在主机中:

1.        注释中无skip-federated这个选项
2.        My.cnf是自己优化过的,断电之前正常使用,不是这个的问题
3.        Ps –ef | grep mysql  根本就没有mysql的僵尸进程
4.        没有这个问题
基本上网上的所有方式都试过了,都无法解决问题,然后我就打开了error.log,发现了是磁盘空间不够。
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4141403

root@*.10.6.23:/data/datadir# chown -R mysql:root mysql

root@*.10.6.23:/data/datadir# service mysql start                    
Starting MySQL.. SUCCESS!


110327  3:07:33 InnoDB: Initializing buffer pool, size = 128.0M
110327  3:07:33 InnoDB: Completed initialization of buffer pool
在/etc/my.cnf  打开下面的InnoDB配置以减少内存即可:
default-storage-engine=MyISAM  [注意:Mysql5.6.11放在server-id里不行,还是会报Plugin 'InnoDB' is disabled错,要往上挪挪:放socket      = /data0/data/mysql.sock  后就行了。]
server-id       = 1
innodb_buffer_pool_size = 21M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

启动:带--user=mysql
/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql &



编译PHP前准备:libiconv PHP Mysql都用得到,不安会出现如下情况
本人在编译php5.2.8时候,make ZEND_EXTRA_LIBS='-liconv',出现下列错误提示
ext/gd/libgd/gdkanji.o: In function `do_convert':
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:350: undefined reference to `libiconv_open'
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:365: undefined reference to `libiconv'
........
........
........
/data0/software/php-5.2.8/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open'
/usr/bin/ld: final link failed: No space left on device
collect2: ld returned 1 exit status
先这样:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
./configure --prefix=/usr/local/libiconv
make;make install
后依旧的话,则再看下:
注意“/usr/bin/ld: final link failed: No space left on device
”,应该是磁盘空间不够所致,果然,我清空了部分内容,顺利通过编译!算是给大家提醒一下,希望大家不要出现下列错误!
最后可能是直接用了make,而不是:make ZEND_EXTRA_LIBS='-liconv' ...
以上是我在编译:5.3.8版本时发现的,后面编译完后在运行FastCGI时会提示:
Starting php-fpm [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.6. Rebuild it for your PHP version (5.3.8) or download precompiled binaries.
done
于是需要重新编译一次这个缓存插件:
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
还有就是查看php.ini关于eaccelerator的配置:
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
........
然后根据上面的目录结构中去删除以前版本的缓存即可:
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# ls
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# rm -Rf *
------------------------------------------------------------------------------------------------------------------------------------
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local
make
make install
cd ..

http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../

http://sourceforge.net/projects/mhash/files/mhash/
wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

http://sourceforge.net/projects/mcrypt/files/MCrypt/
wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make
make install

可能会出现:
=================================================================
configure: error: *** libmcrypt was not found

为了的到mcrypt.so库文件,先后安装编译了mhash和libmcrypt,但是到最后编译mcrypt时报错:

configure: error: *** libmcrypt was not found

最后发现是因为环境变量的问题,gcc编译的时候根据自身定义的变量寻找相关函数库等文件,libmcrypt也是刚安装的,在变量中没有定义出来,所以手动添加:

[root@localhost modules]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

再次编译即可。
=================================================================
PHP5.3.9: wget http://cn.php.net/get/php-5.3.9.tar.gz/from/this/mirror
编译PHP:
wget http://cn.php.net/distributions/php-5.3.6.tar.gz
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl

PHP7.0编译参数:
./configure  --prefix=/usr/local/php7.0 --with-config-file-path=/usr/local/php7.0/etc --with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --with-curl --enable-mbregex --enable-inline-optimization --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug  --enable-opcache --with-readline
make时还是需要加上iconv那个:make ZEND_EXTRA_LIBS='-liconv',否则还是会报错,对于PHP7.0主PHP低的生产版本混合运行,把:
cp /etc/init.d/php-fpm拷贝到自己的home目录下修改一下路径,重新启动,这个脚本的启动参数打印了下,如下:
/usr/local/php7.0/sbin/php-fpm --daemonize --fpm-config /usr/local/php7.0/etc/php-fpm.conf --pid /usr/local/php7.0/var/run/php-fpm.pid

本次新加:
--with-pdo=shared  -with-pdo-mysql=/usr/local/webserver/mysql  

PHP想在一开始就把PDO编译进去,而不是直接加载PDO.so,在configure时可能会出现一个问题,如下:
checking for MySQL support for PDO... yes
checking for mysql_config... /usr/local/webserver/mysql/bin/mysql_config
checking for mysql_query in -lmysqlclient... no
checking for mysql_query in -lmysqlclient... (cached) no
configure: error: PDO_MYSQL configure failed. Please check config.log for more information.
引起的原因,Centos6.2最小化安装,没有安一个rpm包:mysql-level没有装,或者是mysql的版本不对。但Mysql我是通过源码安装的,于是,可以在目录 /usr/local/webserver/mysql/lib/ 找到以下需要的包,也就是最新的Mysql5.5.20编译好的这些库,如下:
[root@bogon lib]# echo ~+/libmysqlclient.
libmysqlclient.a          libmysqlclient.so         libmysqlclient.so.18      libmysqlclient.so.18.0.0
[root@bogon lib]# ls ~+/libmysqlclient.a    
/usr/local/webserver/mysql/lib/libmysqlclient.a
export LDFLAGS=-L/usr/local/webserver/mysql/lib/

再次在PHP5.3.10下进行configure时,就不会提示PDO的相关问题了,但问题依旧,难道还是得要单独安装这个PDO模块!!
暂时不安PDO,先把所有用到的都给编译进PHP里去再说,如下:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl  --enable-soap=shared --enable-pdo enable-dom   --with-readline --enable-xmlwriter --with-pcre-regex  --with-pear  --enable-session --enable-spl  --enable-hash --enable-reflection


出现:configure: error: Please reinstall readline - I cannot find readline.h
解决方法:
yum install readline-devel

但又报错:php  configure: error: readline library not found 干脆去掉这一个不常用的项目:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl  --enable-soap=shared --enable-pdo enable-dom  --enable-xmlwriter --with-pcre-regex  --with-pear  --enable-session --enable-spl  --enable-hash --enable-reflection

就configure通过了:
Thank you for using PHP.

make ZEND_EXTRA_LIBS='-liconv'

//如果是路径L不对得手动加参数:
make ZEND_EXTRA_LIBS='-liconv -L/usr/local/lib'

成功...
make install


/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup'
/usr/bin/ld: note: 'ber_strdup' is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line
/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1
在老外的一篇文章中终于找到解决办法,我是在centos7下进行编译时遇到这个问题的:

-Run your configure command
-edit Makefile
-Find the line that starts with "EXTRA_LIBS ="
-Add the following to the end of the line " -llber"

cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../

刚开始就把SOAP编译进去:
Move into the source directory and configure PHP with SOAP enabled (this may take a few minutes):
cd php-5.2.5
./configure --enable-soap=shared
加上这个:
--enable-soap=shared
加上后是这样:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl  --enable-soap=shared

make ZEND_EXTRA_LIBS='-liconv'  

PHP5.6.3 2014-11-30 编译成功备案:


编译php报错:/usr/bin/ld: cannot find -liconv解决方法:
首先检查libiconv是否有安装,其次,确认libiconv的安装目录为/usr/local,即编译参数
  ]#./configure --prefix=/usr/local
  然后记得更新下库
  ]#ldconfig
在最后面添加 -liconv :
编辑:
./src/MakeFile文件

LIBS = -lm -lexpat -L/usr/local/lib
改成
LIBS = -lm -lexpat -liconv -L/usr/local/lib
vi /etc/ld.so.conf

  这样php编译安装就可以正常运行了。

但有时还是会报错的:
||||||PHP的configure没加:--with-iconv=/usr/local/libiconv引发的/usr/bin/ld: cannot find -liconv||||||||
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv=/usr/local/libiconv --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-gettext --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --with-snmp --enable-shmop --enable-sysvsem --enable-sysvshm --enable-calendar --enable-inline-optimization --with-curl --with-curlwrappers --enable-exif --enable-sysvmsg --with-mcrypt --with-gd --enable-gd-jis-conv --disable-debug --with-openssl --with-mhash --enable-pcntl --silent --enable-sockets
make
make install
出现的原因是没加:--with-iconv=/usr/local/libiconv ,这个是编译时编译到那儿的:
------------------------------------------------------------------------------------------------------------------------------------------
解决方法:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar -zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/libiconv
make
make install
------------------------------------------------------------------------------------------------------------------------------------------
~/software/php-5.3.15# ./configure --help|grep iconv
--without-iconv[=DIR]   Exclude iconv support
--with-iconv-dir=DIR      XMLRPC-EPI: iconv dir for XMLRPC-EPI

--with-iconv-dir:
用于 PHP 编译时指定 iconv 在系统里的路径,否则会扫描默认路径。
--with-iconv:
要激活这个扩展必须在编译时使用[DIR]

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

昨天编译安装PHP的时候make报错,make: *** [sapi/fpm/php-fpm] Error 1
/usr/bin/ld: cannot find -liconv
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 错误 1
上面的方法还是没法解决,最后解决了,直接用make,没有用make ZEND_EXTRA_LIBS='-liconv'
不再提示cannot find -liconv,而是:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory ,于是按以前的方法,如下:ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18  /usr/lib/ ,再make一下,直接就过去了,Yeath.

原因iconv重复安装在不同目录,造成include文件iconv.h等重复 通过 find / -name “iconv.h” 如果查找到2个以上返回结果,说明 iconv重复安装了,卸载多余的版本即可正常编译。
[root@bogon /]#  find / -name "iconv.h"
/usr/local/libiconv/include/iconv.h
/usr/include/iconv.h
果然是这个问题。

安装iconv是源码编译安装,于是到安装目录cd /usr/local/src/libiconv-1.13.1,执行 make uninstall卸载自己安装的版本。再重新安装PHP。


问题1:
You may want to add: /usr/local/webserver/php/lib/php to your php.ini include_path
/root/jackxiang.com/php-5.3.6/build/shtool install -c ext/phar/phar.phar /usr/local/webserver/php/bin
cp: cannot stat `ext/phar/phar.phar': No such file or directory
[vps实践]linux下安装php5.3.6的扩展包pear :http://jackxiang.com/post/4153/
(1)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation.  To
change individual locations, type the number in front of the
directory.  Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation base ($prefix)                   : /usr/local/webserver/php
2. Temporary directory for processing            : /tmp/pear/install
3. Temporary directory for downloads             : /tmp/pear/install
4. Binaries directory                            : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir)                 : /usr/local/webserver/php/lib/php
6. Documentation directory                       : /usr/local/webserver/php/docs
7. Data directory                                : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory                    : /usr/local/webserver/php/www
10. Tests directory                               : /usr/local/webserver/php/tests
11. Name of configuration file                    : /usr/local/webserver/php/etc/pear.conf

1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
================================================
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法1:./configure的时候 要加上--without-pear
然后再make install或者重新make ZEND_EXTRA_LIBS='-liconv',Then :make install
解决方法2:
cd ext/phar/. cp ./phar.php phar.phar
问题2:
/root/jackxiang.com/php-5.3.6/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
make: *** [ext/phar/phar.php] Error 127

ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18  /usr/lib/

PHP扩展:
memcache:
http://pecl.php.net/package/memcache
wget http://pecl.php.net/get/memcache-3.0.6.tgz
tar zxvf memcache-3.0.6.tgz
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

eaccelerator:
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
PDO_MYSQL:
http://pecl.php.net/package/PDO_MYSQL
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../

ImageMagick:
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.6.8-8
./configure
make
make install

imagick:[依赖前面的ImageMagick,注意顺序]
wget http://pecl.php.net/get/imagick-3.1.0b1.tgz
tar -zxvf imagick-3.1.0b1.tgz
cd imagick-3.1.0b1
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../


修改php.ini文件:
cd /root/jackxiang.com/php-5.3.6
cp ./php.ini-production /usr/local/webserver/php/etc/php.ini

手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
//各种PHP版本的extension_dir是不一样的!!!
并在此行后增加以下几行,然后保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"

再查找output_buffering = Off
修改为output_buffering = On
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="300"
eaccelerator.shm_prune_period="120"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


安装Nginx:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.zip
tar zxvf pcre-7.8.tar.gz
cd pcre-8.12
./configure
make && make install
cd ../

wget http://nginx.org/download/nginx-0.9.6.tar.gz
wget http://nginx.org/download/nginx-1.0.2.tar.gz
cd nginx-0.9.6
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../
启动nginx:
/usr/local/webserver/nginx/sbin/nginx  -c /usr/local/webserver/nginx/conf/nginx.conf

如果需要添加Nginx_HTTP_Push_Module长连接模块,需要加入新选项,/root/software/nginx_http_push_module-0.692是下载的模块文件位置:
--add-module=/root/software/nginx_http_push_module-0.692
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module  --add-module=/root/software/nginx_http_push_module-0.692


自己加入安全模块的编译选项:
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3  --with-http_secure_link_module

目前最新生产环境的版本:
wget http://nginx.org/download/nginx-1.0.8.tar.gz 这儿新加了一个模块:--with-http_mp4_module
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3  --with-http_secure_link_module --with-http_mp4_module




编译:
make;make install


配置nginx.conf:
  error_page 519 /519.html;
        if ($request_uri ~* "(cost\()|(concat\()") {
                return 519;
        }
        if ($request_uri ~* "[+|(%20)]union[+|(%20)]") {
                return 519;
        }
        if ($request_uri ~* "[+|(%20)]and[+|(%20)]") {
                return 519;
        }
        if ($request_uri ~* "[+|(%20)]select[+|(%20)]") {
                return 519;
        }


还有乱七八糟的一些扩展参考:
configure arguments: --prefix=/home/nginx --with-pcre --add-module=../ngx_http_consistent_hash --add-module=../ngx_max_connections --add-module=../ngx_cache_purge --add-module=../ngx_mp4_streaming_public --with-cc-opt=-O3 --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --without-http_memcached_module --without-http_fastcgi_module --with-google_perftools_module
编译过程中几个注意事项:
1、必须采用--with-pcre,而不要偷懒采用--without-http_rewrite_module,否则配置文件里将不支持if判断;
2、加载mp4_streaming,必须采用--with-cc-opt=-O3方式进行编译。
3、max_connections模块默认支持nginx最新版本是0.8.32,需要vi修改其DIR,然后path -p0,但千万不要看见有个Makefile就执行make && make install了,因为它会毫无道理的把整个nginx安装到当前目录的.nginx下隐藏起来……

最新安装nginx-1.1.0全编译项目配置如下:
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module   --add-module=/root/software/nginx_http_push_module-0.692   --add-module=/root/software/ngx_cache_purge-1.3



在linux下安装Nginx的Pcre包的时候,有时候提示
configure: error: newly created file is older than distributed files!
Check your system clock
出现此编译错误,请检查你的系统时间是否设置有误。。。
查看硬件日期时间
hwclock -show
linux是每隔一段时间将系统时间写入 硬件bois的 如果刚设置完了就关机,开机后时间还是等于没有设置
# date -s 991128
Sun Nov 28 00:00:00 CST 1999
实例:设置时间伟2008年8月8号12:00
# date -s “2008-08-08 12:00:00″
修改完后,记得输入:
clock -w
把系统时间写入CMOS即可
参看:http://linux.net527.cn/fuwuqiyingyong/Webfuwuqi/16516.html
---------------------
配置nginx和phpfastcgi平滑过度:
创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
  在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件:

rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf
输入以下内容(如果您安装 Nginx + PHP 用于程序调试,请将以下的<value name="display_errors">0</value>改为<value name="display_errors">1</value>,以便显示PHP错误信息,否则,Nginx 会报状态为500的空白错误页):
优化fpm参数:
[root@localhost]# vi php-fpm.conf 【把前面的分号给去掉】

user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 7
pm.max_requests = 120

创建Nginx日志目录:
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs

创建Nginx配置文件
在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

<!--Begin-->
user  www www;
worker_processes 8;
error_log  /data1/logs/nginx_error.log  crit;
pid        /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
  use epoll;
  worker_connections 51200;
}
http
{
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 60;
  tcp_nodelay on;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
  #limit_zone  crawler  $binary_remote_addr  10m;
  server
  {
    listen  80;
    server_name  status.blog.jackxiang.com;
    location / {
    stub_status on;
    access_log   off;
    }
  }
  server
  {
    listen       80;
    server_name  jackxiang.com www.jackxiang.com;
    index index.html index.htm index.php;
    root  /data0/htdocs/blog;
  if (!-e $request_filename)
  {
  rewrite ^/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?entryid=$1&page=$2&part=$3 last;
  rewrite ^/page/([0-9]+)/([0-9]+)/?$ /index.php?mode=$1&page=$2 last;
  rewrite ^/starred/([0-9]+)/?([0-9]+)?/?$ /star.php?mode=$1&page=$2 last;
  rewrite ^/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=category_$1&mode=$2&page=$3 last;
  rewrite ^/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
  rewrite ^/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=showday_$1-$2-$3&mode=$4&page=$5 last;
  rewrite ^/user/([0-9]+)/?$ /view.php?go=user_$1 last;
  rewrite ^/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /tag.php?tag=$1&mode=$2&page=$3 last;
  rewrite ^/component/id/([0-9]+)/?$ /page.php?pageid=$1 last;
  rewrite ^/component/([^/]+)/?$ /page.php?pagealias=$1 last;
  #Force redirection for old rules
  rewrite ^/read\.php/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
  rewrite ^/post/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
  rewrite ^/post/([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/ permanent;
  rewrite ^/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/$3/ permanent;
  rewrite ^/index\_([0-9]+)\_([0-9]+)\.htm$ http://$host/page/$1/$2/ permanent;
  rewrite ^/star\_([0-9]+)\_([0-9]+)\.htm$ http://$host/starred/$1/$2/ permanent;
  rewrite ^/category\_([0-9]+)\.htm$ http://$host/category/$1/ permanent;
  rewrite ^/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/category/$1/$2/$3/ permanent;
  rewrite ^/archive\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/ permanent;
  rewrite ^/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/$3/$4/ permanent;
  rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/ permanent;
  rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/$4/$5/ permanent;
  #Filename alias
  rewrite ^/([a-zA-Z0-9_-]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?blogalias=$1&page=$2&part=$3 last;
  }
    #limit_conn   crawler  20;    
    location ~ .*\.(php|php5)?$
    {      
      #fastcgi_pass  unix:/tmp/php-cgi.sock;
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      expires      30d;
    }
    location ~ .*\.(js|css)?$
    {
      expires      1h;
    }    
    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
    access_log  /data1/logs/access.log  access;
  }
}
<--End-->

安装Memache:
libevent-2.0.10-stable:
wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz

tar xzf libevent-2.0.10-stable.tar.gz
cd libevent-2.0.10-stable
./configure
make
make install

#刷新库文件连接

ldconfig
Then Memcache setup:
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar xzf  memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure  --prefix=/usr/local/webserver/memcached
make
make install


#增加用户组memcached和用户memcached
/usr/sbin/groupadd memcached
/usr/sbin/useradd -g memcached memcached
启动Memcached时可能出现的问题:
找不到以下的so,用如下操作及可:
ln -s /usr/local/lib/libevent-2.0.so.5  /usr/lib/


启动PHP的FastCGI:
启动PHP FastCGI:
cp /root/jackxiang.com/php-5.3.6/sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm
chmod 755 /etc/init.d/phpfpm
ulimit -SHn 51200
/etc/init.d/phpfpm start
启动PHp的FastCGI时可能会出现下面错误:
出现下面的错误(这个错误是我在安装过程中发现的,是内在不足导致的,在文章的结尾优化后,就不会有这样的问题了,在这里做个记录,方便大家学习)
Starting php_fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
PHP Warning:  [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0
failed

#说明
php.ini中设置的eAccelerator,eaccelerator.shm_size="64",解释:eaccelerator可使用的共享内存大小(单位为MB),即64M
在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节)  /proc/sys/kernel/shmmax = 33554432 (32M)
临时更改该值:
echo 128000000 > /proc/sys/kernel/shmmax
或者
vi /etc/sysctl.conf
#add by jack
kernel.shmmax = 128000000
使配置立即生效:
/sbin/sysctl -p
  

优化Linux内核参数
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000使配置立即生效:
/sbin/sysctl -p

配置开机自动启动Nginx + PHP:
在不停止Nginx服务的情况下平滑变更Nginx配置
修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确
/usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful这时,输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`

编写每天定时切割Nginx日志的脚本:
创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh

#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
00 00 * * * /bin/bash  /usr/local/webserver/nginx/sbin/cut_nginx_log.sh



开机自动 启动namp服务如下设置,关于开机程序的自动启动:
1)如专门启动Mysql这样一个,你可以参考:
开机自动 启动Mysql的方法: http://www.jackxiang.com/post/4730/  ,
也就是随便芿一个可执行文件到目录:/etc/rc.d/init.d/ ,赋予可执行权限写入开机启动的脚本即可。
2)如果要同时启动多个服务器软件,则如下所示:
开机启动知识及步骤如下:
想用命令chkconfig加载自启动.提示"**服务不支持chkconfig",原来是自己写的脚本时,忘记写两行了.开头一般要这样写,345是启动级,85和15分别是启动优先级,关闭优先级,下面的就是描述了。:
#!/bin/bash
#chkconfig:345 61 61  //此行的345参数表示,在哪些运行级别启动,启动序号(S61);关闭序号(K61)
#description:nginx php mysql memcache start shell
,修改来自Apache里的启动shell,也可以不用修改:
保存为/etc/init.d/lnmp,内容如下:
#!/bin/bash
#chkconfig:345 61 61
#description:nginx php mysql memcache start shell
echo "Starting memcache mysql php nginx daemon..."
ulimit -SHn 51200
nohup /usr/local/webserver/memcached/bin/memcached -d -m 1 -u www -p 11211 > /dev/null 2>&1 &
nohup /usr/local/webserver/mysql/bin/mysqld_safe --user=mysql  > /dev/null 2>&1 &
nohup /etc/init.d/phpfpm start > /dev/null 2>&1 &
nohup /usr/local/webserver/nginx/sbin/nginx  -c /usr/local/webserver/nginx/conf/nginx.conf > /dev/null 2>&1 &


把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/lnmp /etc/rc.d/rc3.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc4.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc5.d/S61lnmp
再执行
chkconfig --add lnmp
chkconfig --levels lnmp345 on //也成
开机启动:
service lnmp start
env: /etc/init.d/lnmp: 权限不够
chmod -R a+x /etc/init.d/lnmp
reboot 重启动,看服务起来了没,没起来再运行:service lnmp 试试,这儿就不用start了,因上面没有start这个参数!!!
要删除某个service的自动启动的设置,使用--del选项,如下:
# chkconfig --del lnmp
# chkconfig --list | grep lnmp

Nginx这块自己有ssl启动需要输入密码,默认的那个不行,怎么干掉?
nginx 开机启动的service项想删除,service nginx start 这个想干掉,我现在放开机启动里了:
/etc/init.d/nginx   //可以把它重写成自己的,因为我的有https
chkconfig nginx off


=======================shell环境关于bash启动脚本======================================
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
~/.bash_logout
每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。
/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。
/etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。
~/.bash_logout 在用户注销登陆的时候被读取

一 个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt]$/bin/bash。一般一个非交互的shell出现在运行 shell脚本的时候。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本程序。
关于开机程序的自动启动
系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。
init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本中。

chkconfig --list        //开机启动的list
ntsysv         //simple gui,直接修改
chkconfig httpd  off //还是这个见效快****
chkconfig iptables  off  //关闭防火墙,还是这个见效快*
chkconfig --list |grep sendmail
chkconfig sendmail  off
chkconfig --list |grep auditd
chkconfig auditd  off


chkconfig rpcgssd  off
chkconfig rpcidmapd  off
chkconfig rpcsvcgssd  off
chkconfig portmap off最近发现了一个Deamo进程也可以关闭:
udp    0      0 0.0.0.0:46563               0.0.0.0:*       2295/avahi-daemon:  
udp    0      0 0.0.0.0:5353                0.0.0.0:*       2295/avahi-daemon:
udp    0      0 :::5353                     :::*                   2295/avahi-daemon:
步骤方法如下:
chkconfig --list avahi-daemon
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon    0:off   1:off   2:off   3:on    4:on    5:on    6:off
avahi-daemon 关闭:
service avahi-daemon stop
chkconfig avahi-daemon  off 再看:
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon    0:off   1:off   2:off   3:off   4:off   5:off   6:off确实关闭了。

试试把 avahi-daemon 服务关闭,你会得到空前变化。avahi-daemon
     Avahi 是 zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。它跟mDNS 一样。除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。现在用的基本都是DNS了。
   更专业点讲就是The Avahi mDNS/DNS-SD daemon implements Apple’s Zeroconfarchitecture(also known as "Rendezvous" or "Bonjour"). The daemonregisters local IP addresses and static services using mDNS/DNS-SD andprovides two IPC APIs for local programs to make use of the mDNS recordcache the avahi-daemon maintains.
   avahi-daemon is a daemon which runs on client machines to performZeroconf service discovery on a network. avahi-daemon must be runningon systems that use Avahi for service discovery. Avahi-daemon shouldnot be running otherwise.

AutoMount 自动挂载功能
方法:    启动进程autofs
     在RedHat安装后期,在选择启动时需要自动执行进程的那一步骤剔选“autofs”。
    如果已经安装好了作业系统,也可以更改该项设置。在Terminal中输入“setup”指令,选“System services”,或者直接输入启动进程配置指令“ntsysv”都可以打开启动进程配置介面,剔选“autofs后,下次进入RedHat Linux后,这一进程就会被自动装载。

1837 root      15   0 29424 1376 1060 S  0.0  0.5   0:00.23 automount
root@116.255.139.240:~# chkconfig --list|grep autofs
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
chkconfig autofs  off  
root@116.255.139.240:~# service autofs stop

vps取消设置自动挂载ISCSI分区的服务:
方法一:
用编辑器打开/etc/fstab 例如:gedit /etc/fstab ,并在最后一行加入下列命令
/dev/sda1        /mnt/t0      ext2       defaults        0              0       //如果是FAT分区,则将ext2改为vfat。(这个选项很重要,如果没有则无法成功自动挂载)
关闭测试启动自动挂载磁盘的服务:
root@116.255.139.240:~# chkconfig --list|grep iscsi
iscsi           0:off   1:off   2:off   3:on    4:on    5:on    6:off
iscsid          0:off   1:off   2:off   3:on    4:on    5:on    6:off
root@116.255.139.240:~# chkconfig iscsid off
root@116.255.139.240:~# service iscsid stop
Stopping iSCSI daemon:
root@116.255.139.240:~#                                    [  OK  ]
Stopping automount:                                        [  OK  ]
php扩展ssh2的安装:

wget http://www.libssh2.org/download/libssh2-1.2.7.tar.gz
cd libssh2-1.2.7
./configure
make;make install
pecl install -f ssh2
选择:Y
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/ssh2.so
You should add "extension=ssh2.so" to php.ini
PHP SOAP Extension:

cd /root/jackxiang.com/php-5.3.6/ext/soap
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make;make install
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/soap.so

特别注意:
开机启动SVN服务的Apache的设置方法:
vim /etc/init.d/apache
/usr/local/webserver/apache2/bin/apachectl start
chmod 775 /etc/init.d/apache
chkconfig apache on
当然你也可以抄一个shell标准脚本,如前面php的phpfpm启动脚本。
遇到443端口加密需要需要输入密码的还请慎重考虑,如下所示:
Server svn.jackxiang.com:443 (RSA)
Enter pass phrase:
Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).
Enter pass phrase:

Ok: Pass Phrase Dialog successful.
需要研究如何自动启动并自动地输入密码。
这块还不行,这块expect里的spawn要和ssh结合,nginx这种情况还不行,下面这个有警告,但是能执行:

上面路径要写死/usr/local/scripts,别相对:
startNginx.sh

升级到PHP5.3.8后启动FastCGI出现:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# cat /root/runphp.sh  
pkill -9 php
usleep 100000
/etc/init.d/phpfpm start

=============执行上面这段代码:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# sh /root/runphp.sh
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Starting php-fpm
done
原因是:估计升级PHP后 还是在原来PHP目录下,到了一个不存在的目录中 而显示错误.



Mysql的数据文件移动时出现的新问题:2011-10-16 Add By:jack。
主要是讲述新版本的Mysql在移动目录时,在特别是有Innodb的情况下,出现问题解决问题的一个过程,及Mysql的sock文件和PHP接合的问题。
Mysql数据文件搬家到另外一个目录出现的 二个问题(从/usr/local/webserver/mysql/data/ 搬家到:/data0/data),如下:
1.Innodb出现问题,Mysql启动不了,如附录中的日志所示:
InnoDB: The InnoDB memory heap is disabled
这样的警告,查资料说,只要在my.cnf中加入以下,就可以消除以上警告
innodb_use_sys_malloc =0
系统默认为
innodb_use_sys_malloc =1
似乎有人说innodb_use_sys_malloc =1速度更快,我还没有得到证实。
所以,我就没有修改了。

解决办法:
cd /data0/data
rm -Rf ibdata1
rm -Rf ib_logfile0
rm -Rf ib_logfile1

========================================================
1.检查Linux下Mysql的日志
2.错误信息是"Default storage engine (InnoDB) is not available"

解决方法:
1.删除在MySQL安装目录下的Data目录中的
ib_logfile0
ib_logfile1
2.找到在配置MySQL服务器时指定的InfoDB目录删除掉
ibdata1
3.重新启动MySQL的Service
这个问题第二天又摸索了一下,其实是可以用InnoDB引擎的.
需要在mysql生成的配置文件增加一行配置,即增加一个临时目录,这个在启动mysql服务的时候是需要的.
[mysqld]
tmpdir=/tmp
我的my.ini配置文件如下,注意红色字体,是默认不会生成的;
========================================================


如下:
root@116.255.139.240:/data0/data# rm -Rf ib_logfile0 ib_logfile1
root@116.255.139.240:/data0/data# rm -Rf ibdata1
root@116.255.139.240:/data0/data# rm -Rf ibdata1

后续指定DB目录,和InnoDB目录及日志文件设置如下:
datadir  = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_log_group_home_dir = /data0/data/
innodb_data_file_path = ibdata1:128M:autoextend

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high

innodb_use_sys_malloc = 0
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 4M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 5M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

#log write and so on...
general-log = /data0/data/error_log/log-error.log
log-error = /data0/data/error_log/log-error.log
slow-query-log = /data0/data/error_log/log-slow-query.log

#slow query search
slow_query_log=1
slow_query_log_file = /data0/data/slow_query_log/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes



2.移动数据文件目录后再访问时出现了问题二:
  Bo-Blog Database System Tips: Can not connect to MySQL server
Time: 2011-10-16 8:09am
Script:
Error: Can't connect to local MySQL server through socket '/usr/local/webserver/mysql/data/mysql.sock' (2)
Errno.: 2002

检测php.ini的设置,再检测my.conf里面的值设成一样就OK 另外目录mysql.sock所在目录的读取权限也是
如果用php连接要特别注意php.ini的设置
mysql.default_socket=(默认为空) ,这块连接Mysql相关的设置请看:http://www.jackxiang.com/post/4327/
所以首要侨务检测php.ini的设置,再检测my.conf里面的值设成一样就OK
另外目录mysql.sock所在目录的读取权限也是问题(兄弟们原谅我linux下的目录权限真的是不懂,所以简单点就直接chmod 777了)
另外要特别注意,我想这点才是可能导致失败的就是web目录不能用root用户运行.而应该用nobody用户

# vi /etc/my.cnf
[mysqld]
port        = 3306
socket      = /data0/data/mysql.sock
vi /usr/local/webserver/php/etc/php.ini
mysql.default_socket =
修改成和修改后的一样即可:
mysql.default_socket = /data0/data/mysql.sock
是FastCGI得重启fastcgi的Php,而如是Apache,则重启动Apache即可,就是把PHP.ini给纳入重新初始化。
附录Mysql启动后的日志情况:
111016 16:01:29 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:01:29  InnoDB: Initializing buffer pool, size = 18.0M
111016 16:01:29  InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:01:29  InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
InnoDB: Error: all log files must be created at the same time.
InnoDB: All log files must be created also in database creation.
InnoDB: If you want bigger or smaller log files, shut down the
InnoDB: database and make sure there were no errors in shutdown.
InnoDB: Then delete the existing log files. Edit the .cnf file
InnoDB: and start the database again.
111016 16:01:49 [ERROR] Plugin 'InnoDB' init function returned error.
111016 16:01:49 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
111016 16:01:49 [ERROR] Unknown/unsupported storage engine: InnoDB
111016 16:01:49 [ERROR] Aborting
启动Ok如下:
111016 16:05:13 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:05:13  InnoDB: Initializing buffer pool, size = 16.0M
111016 16:05:13  InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:05:13  InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
111016 16:05:22  InnoDB: Log file /data0/data/ib_logfile0 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
111016 16:05:23  InnoDB: Log file /data0/data/ib_logfile1 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: 127 rollback segment(s) active.
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
111016 16:05:24  InnoDB: 1.1.4 started; log sequence number 0
111016 16:05:24 [Note] Event Scheduler: Loaded 0 events
111016 16:05:24 [Note] /usr/local/webserver/mysql/bin/mysqld: ready for connections.
Version: '5.5.8-log'  socket: '/data0/data/mysql.sock'  port: 3306  Source distribution



注意,Nginx下的file_get_contents会出现100%的Cpu情况,原因是:
开启<value name="request_slowlog_timeout">3s</value>记录慢执行日志,会在日志中打印出执行慢的代码行数。php-cgi(php-fpm) 使用了Libevent,而Libevent 在 Linux 2.6 内核以上默认会使用 epoll I/O 模型处理 FastCGI 网络请求,而非 select/poll。在慢日志记录的代码行数中,包含 file_get_contents 以及其他函数,而 file_get_contents 等作为 Client 发起 HTTP 请求的函数使用的是 select/poll 模型,也就是说,只有 file_get_contents 等满足“TCP请求默认不超时、使用select/poll 模型、进程CPU 100%”的网络操作函数,会导致 strace -p 看到的这种情况。

最好还是用Curl吧,这个靠谱些。


后补上,如何在PHP里安装GD2,方法如下:
如果源码安装需要找齐下面的源码包,在安GD2时需要指定其安装的位置:
./configure --prefix=/usr/local/modules/gd --with-jpeg=/usr/local/modules/jpeg6 --with-png --with-zlib --with-freetype=/usr/local/modules/freetype

如果安装gd版本低,会报configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/gd
GD库重装成功 尝试重装PHP 依然报错 查找到libgd.*位置 复制到/usr/local/gd/ 依然找不到。 找到原因,GD库版本过低,低于2.1.0 下载最新版本
替换高版本gd解决,也可能是这样解决:
configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/libgd
如果提示libgd版本错误,把php编译参数--with-gd=/usr/local/libgd修改为--with-gd即可 ,Dockerfile 是这样的:--with-gd=/usr \ ,指向/usr。



修改成下面这个路径试试:
--with-gd=/usr/local/gd \


而要是自带的这个rpm,用linux的yum安好即可,特别要注意要用到的devel这样的包,这个是有一个头文件在里面的,
rpm -ql zlib-devel-1.2.3-27.el6.i686
/usr/include/zconf.h
/usr/include/zlib.h
/usr/lib/libz.so

如下,查看是否所有的包都安好了:
root@192.168.225.128:~# rpm -qa|grep zlib
zlib-devel-1.2.3-27.el6.i686
zlib-1.2.3-27.el6.i686
root@192.168.225.128:~# rpm -qa|grep libpng
libpng-devel-1.2.46-1.el6_1.i686
libpng-1.2.46-1.el6_1.i686
root@192.168.225.128:~# rpm -qa|grep freetype
freetype-2.3.11-6.el6_1.8.i686
freetype-devel-2.3.11-6.el6_1.8.i686
root@192.168.225.128:~# rpm -qa|grep libxml
libxml2-2.7.6-4.el6_2.1.i686
libxml2-devel-2.7.6-4.el6_2.1.i686
root@192.168.225.128:~# rpm -qa|grep gd
gdbm-1.8.0-36.el6.i686
root@192.168.225.128:~# rpm -qa|grep jpeg
libjpeg-6b-46.el6.i686
libjpeg-devel-6b-46.el6.i686
于是直接这样来安这个GD2即可:
./configure --prefix=/usr/local/gd

** Configuration summary for gd 2.0.34:

   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


make;make install


PHP:
--with-gd=/usr/local/gd

安装配置方法:
/configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd=/usr/local/gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl  --enable-soap=shared --enable-pdo enable-dom  --enable-xmlwriter --with-pcre-regex  --with-pear  --enable-session --enable-spl  --enable-hash --enable-reflection


重新指定so的位置:
打开/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/gd/lib
ldconfig



再make;make install ,以上安装出现PHP还是跑到php5.3.10/ext/gd 并报错了。考。。。。

再试着用源码来安装(记录一下,安装是可以,但在最后时发现php还是去读取了PHP自己的目录下的ext/gd),后面只有先暂时不安,在最后再来安装这个gd2:
FreeType安装
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
[root@yznvm1 yzn]# wget http://nchc.dl.sourceforge.net/project/freetype/freetype2/2.4.8/freetype-2.4.8.tar.gz
[root@yznvm1 yzn]# tar xzvf freetype-2.4.8.tar.gz              
[root@yznvm1 yzn]# cd freetype-2.4.8    
[root@yznvm1 yzn]# ./configure --prefix=/usr/local/freetype  
[root@yznvm1 freetype-2.4.8]# make && make install
[root@yznvm1 yzn]# wget http://www.ijg.org/files/jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# tar zxvf jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# cd jpeg-8c/
[root@yznvm1 jpeg-8c]# ./configure --prefix=/usr/local/jpeg
[root@yznvm1 jpeg-8c]# make &&  make install && cd ..
libpng
可查看http://www.libpng.org/pub/png/libpng.html
查看zlib版本
[root@yznvm1 yzn]# rpm -qa  zlib
zlib-1.2.3-3
zlib-1.2.3-3
出于性能和安全考虑,zlib最好是1.2.5以上版本
[root@yznvm1 yzn]# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# tar zxvf libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# cd libpng-1.5.7
[root@yznvm1 libpng-1.5.7]# ./configure --prefix=/usr/local/libpng
[root@yznvm1 libpng-1.5.7]# make && make install  
[root@yznvm1 libpng-1.5.7]# cd ..
libgd
http://www.libgd.org/  这个网站down
[root@yznvm1 gd-2.0.33]# http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# tar xzvf gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# cd gd-2.0.33
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/pngconf.h /usr/include            
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/png.h /usr/include  
[root@yznvm1 gd-2.0.33]# ./configure --prefix=/usr/local/gd2 --with-freetype=/usr/local/freetype --with-png=/usr/local/libpng --with-jpeg=/usr/local/jpeg
[root@yznvm1 gd-2.0.33]# make
[root@yznvm1 gd-2.0.33]# make install


下面是全的安装配置configure文件,但实践中要注意下面四点:
1)This is the test message -- configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
    configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
    Fix: yum install net-snmp-devel
2)
configure: WARNING: You will need re2c 0.13.4 or later 解决办法
我在为php安装imagick-2.3.0模块的时候出现来错误
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
说需要安装re2c
执行以下命令
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install
3)configure: warning: bison versions supported for regeneration of the Zend/PHP parsers: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (found: none).
yum install bison
4)checking for lemon... no
configure: warning: lemon versions supported for regeneration of libsqlite parsers: 1.0 (found: none).
解决方法:
wget http://www.sqlite.org/cvstrac/getfile/sqlite/tool/lemon.c [下载不了]
这儿下:
http://code.google.com/p/lemonbind/source/browse/tools/lemon.c
gcc -o lemon lemon.c
mv lemon /usr/local/bin
重新运行 ./configure 后,问题解决。

最后正确的安装php5.3.10的配置configure方法,汇总,配置完所有的扩展要要用的配置参数了:

接着用如下make,不加参数会报错找不到ld什么的:
make ZEND_EXTRA_LIBS='-liconv'
更多的事件驱动扩展,PHP5.3 下安装ZendGuardLoader及eaccelerator 加速器:
http://www.jackxiang.com/post/5626/

PHP高一点的版本如:php-5.3.26,那些没有用的参数就不用了,于是得出下面的编译列表:

如果想兼容Nginx和Apache2时,还应加上--with-apxs2,但只能编译成一种,不能同时编译既支持fastCGI,又支持Apache的传统方式:
关于php编译时SAPI错误 :
近日在Centos6.3上编译php的时候出现了错误:You've configured multiple SAPIs to be build. You can build only   |
| one SAPI module and CLI binary at the same time.
翻译:
You've configured multiple SAPIs to be build.You can build only one SAPI module and CLI binary at the same time.(你已经配置了多个SAPIs,你只可以建立一个SAPI模块和一个CLI binary。)

导致的原因是我的配置参数中同时使用了--enable-fpm 与--with-apxs2= ,因此编译的时候出错了,去掉其中的任意一个参数编译成功。

checking for Apache 1.x module support via DSO through APXS... configure: error: You have enabled Apache 1.3 support while your server is Apache 2.  Please use the appropiate switch --with-apxs2
把下面的语句 --enable-fpm 去掉:就可以编译成功Apache下的PHP了。

./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath  --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex  --enable-fpm  --enable-mbstring --with-mcrypt --with-gd  --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl  --enable-soap=shared --enable-pdo --enable-dom  --enable-xmlwriter --with-pcre-regex  --with-pear  --enable-session   --enable-hash  --with-pdo-mysql=/usr/local/webserver/mysql --with-apxs2=/usr/local/webserver/apache2/bin/apxs

make ZEND_EXTRA_LIBS='-liconv'  

会提示:如果要用Apache的线程安全模式,需要加上配置参数为: --enable-maintainer-zts      
参考:http://jackxiang.com/post/5868/
You have built PHP for Apache's current non-threaded MPM.      
If you change Apache to use a threaded MPM you must reconfigure
PHP with --enable-maintainer-zts                                

出现配置时的输出错误:
configure :error:unable to find your mysql installation
在--with-pdo-mysql后加上路径  ---with-pdo-mysql=/usr/local/webserver/mysql
终于再次编译成功!!

Apache相关的编译成功参数情况如下:

make install ...安装时会在Apache2下安装libphp5.so等文件:


在编译Apache下的PHP时出现一个can't find -lltdl的问题解决方法:
/usr/bin/ld: cannot find 错误解决方法
通常在软件编译时出现的usr/bin/ld: cannot find -lxxx的错误,主要的原因是库文件并没有导入的ld检索目录中。
解决方式:
1。确认库文件是否存在,比如-l123, 在/usr/lib, /usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,
那么可以通过ln -sv lib123.so.1   lib123.so,建立一个连接重建lib123.so.
2。检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
3。ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
4。测试,gcc -l123 --verbose.
参考:http://blog.siyebocai.cn/20100324_5p424qs7.html
实践操作:
/usr/lib/libltdl.so /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] 错误 1
找找下面这些位置是否有这样的包?
erro: Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0

Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0
如果找不到,解决的方法基本很容易.
#yum install libtool-ltdl-devel
如果找到,我的情况:
root@192.168.244.128:/# cd /;find . -name "*libltdl.so*"
./usr/lib/libltdl.so.7.2.1
./usr/lib/libltdl.so.7
按上面的介绍来作出添加操作:
1)检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
2)ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
如下操作:
vi /etc/ld.so.conf 添加一行:
/usr/lib/
执行:  ldconfig
再次编译PHP即可!!!
------------------------------------------------------------------------------------------------------------------------------------------------------------------
还是不行啊?呵呵,那明明整上去了还不行再这样试试:
第一步很容做到:yum -y install libtool libtool-ltdl; //这一步实在是没有那个库再说吧,略。直接第二步。
root@192.168.244.128:/# ldconfig -p |grep ltdl
libltdl.so.7 (libc6) => /usr/lib/libltdl.so.7  
第二步由于PHP的configure指定的libltdl名为libltdl.so,为此我们只需添加一个名称连接:ln -s /usr/lib64/libltdl.so.3.1.4 /usr/lib64/libltdl.so ,如果不是64位则:
,其原始文件是:/usr/lib/libltdl.so.7.2.1 ,一个个都是软链接。
http://blog.chinaunix.net/uid-20774942-id-3001010.html
------------------------------------------------------------------------------------------------------------------------------------------------------------------

安装php并且打补丁(由于gd与iconv冲突,暂不编译gd库),于是在后来追加编译gd库
进入目录php-5.2.10/ext/gd执行命令
/usr/local/php/lib/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng  --with-zlib-dir=/usr/local/zlib/ --with-freetype-dir=/usr/local/freetype
make;make install

,最后,发现这个新生成的gd.so,和前面默认安的这个gd是一样的东东,现在还是不太明白他们所说的gd2和gd有什么大的区别,哈哈,上面这种方法提供了一条安gd.so的方法,也还是不小的收获。同时,以前这个PDO都是编译为so,而上面这个编译是直接编译进php的源码时就编译了,也是不错的收获。
这次主要是把PHP模块Mysql的的PDO直接安装在了编译时,而不需要extension(;extension = "pdo_mysql.so"):
root@192.168.225.128:~/software/php-5.3.10# php -m|grep pdo
PHP Warning:  Module 'pdo_mysql' already loaded in Unknown on line 0
pdo_mysql
pdo_sqlite





==============后期的方便操作的设置===================
方便管理,显示IP等,如:jackxiang@72.46.128.82:~#
vi ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -l'
alias la='ls -A'
alias vi='vim'
alias v='vim'

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
ipL=`/sbin/ifconfig eth0|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "

  alias cdh="cd /usr/local/tads/htdocs/"
  alias cnginx="cd /usr/local/webserver/nginx/"
  alias chtdocs="cd /data0/htdocs/"
  alias cphpuml="cd /root/software/PHP_UML-1.5.5/PHP/scripts"

一些目录的快捷键:
vi ~+/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin:/usr/local/webserver/memcached/bin:/usr/local/webserver/nginx/sbin:./usr/local/webserver/subversion/bin:/usr/local/webserver/python/bin:/home/webdev/bin;
export PATH
unset USERNAME
alias chtdocs='cd /data0/htdocs'
alias cphp='cd /usr/local/webserver/php'
alias cmysql='cd /usr/local/webserver/mysql'
alias capache='cd /usr/local/webserver/apache'
alias cblog='cd /data0/htdocs/blog'
alias h='history'


Vim的一些设置等:
vi ~+/.vimrc
syntax on
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set nu
if &term=="xterm"
  set t_Co=8
  set t_Sb=^[[4%dm
  set t_Sf=^[[3%dm
endif


behave mswin
colo murphy
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set fileencoding=utf-8



au FileType php call AddPHPFuncList()
function AddPHPFuncList()
set dictionary-=/root/.vim/ExtraVim/php_funclist.txt dictionary+=/root/.vim/ExtraVim/php_funclist.txt
set complete-=k complete+=k
endfunction

map <F10> : NERDTreeToggle<CR>
map <F12> ::TlistToggle<CR>
let NERDTreeWinPos = "right" "where NERD tree window is placed on the screen
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 1
let Tlist_WinWidth = 40
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'





eaccelerator的小生产配置备案:
[Zend]
zend_optimizer.optimization_level=15
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/data/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"


YAML扩展:http://jackxiang.com/post/4431/
Xdebug:http://jackxiang.com/post/4675/

更加清晰的参考:
http://www.osyunwei.com/archives/4924.html
http://www.ypgogo.com/world/pearl/id/13000

_____________________PHP5.4以上非fastCGI和apche结合支持上传进度的实践之重新配置Apache____________________________
目的:想实现PHP5.4的进度progress的上传,搞了个nginx的,后来一老外说这Nginx玩意在获取进度时获取不到,还得用传统的Apache那一套。Add Time:14/3/27 星期四
一)给Apache2重新编译下PHP:(像什么GD库,Mysql先省了)
./configure --prefix=/usr/local/webserver/php5.4ForApache -with-apxs2=/usr/local/webserver/apache2/bin/apxs --with-curl --with-mcrypt --enable-mbstring    --enable-pdo --with-iconv-dir=/usr/local/libiconv

二)make ZEND_EXTRA_LIBS='-liconv'  && make install
libtool: install: install .libs/libphp5.so /usr/local/webserver/apache2/modules/libphp5.so
libtool: install: install .libs/libphp5.lai /usr/local/webserver/apache2/modules/libphp5.la


三)再次检查下httpd.conf的配置情况:
<IfModule mime_module>                                                    
TypesConfig conf/mime.types                                          
LoadModule php5_module        modules/libphp5.so                          
AddType application/x-httpd-php .php                                  
AddType application/x-httpd-php-source .phps    

启动Apache,开始测试。
root@192.168.0.6:/usr/local/webserver/apache2/bin# ./httpd -k start
httpd: Syntax error on line 388 of /usr/local/webserver/apache2/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/webserver/apache2/modules/libphp5.so: undefined symbol: zend_parse_parameters
解决办法:
在新的服务器(centos 6.3)编译安装完php-5.4.8,再配置好php.ini和httpd.conf后,启动apache-2.4.3的时候,命令执行/usr/local/apache2/bin/apachectl start时,提示:
httpd: Syntax error on line 146 of /etc/httpd/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: zend_parse_parameters
通过搜索发现,说是缺少bison。
如果通过rpm -qa|grep bison发现没有安装bison,安装bison即可。centos可以用yum install bison
rpm -qa|grep bison 是:bison-2.4.1-5.el6.i686,但是我发现已经安装了bison-2.4.1,rpm -e bison-2.4.1-5.el6.i686。最后实在是没办法了,下载了bison-2.5的rpm包直接安装。
[root@localhost ~]#  wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
[root@localhost ~]#  tar -zxvf bison-2.5.tar.gz
[root@localhost ~]#  cd bison-2.5
[root@localhost ~]#  ./configure
[root@localhost ~]#  make && make install
再重新编译安装了PHP[实践发现在重新编译PHP时要注意:make clean再编译,后才能启动Apache2并支持PHP5.4.26]。然后/usr/local/apache2/webserver/bin/apachectl start启动Apache。惊奇的发现可以正常启动了,测试了下PHP网页,可以正常访问。
来自:http://www.myxzy.com/post-272.html
1)配置好后,测试上传进度占比的PHP自己带的进度实践来源:
(1)http://www.pureweber.com/article/php-upload-progress/
(2)https://github.com/pureweber/samples/blob/master/php-upload-progress/upload.php
2)配置好后,测试上传进度占比的Flash实践来源:http://jackxiang.com/post/6939/
FATAL ERROR: Could not find ./bin/my_print_defaults
修改:
basedir="/usr/local/mysql"
builddir="/root/software/mysql-5.5.9"

FATAL ERROR: Could not find ./bin/my_print_defaults

If you are using a binary release, you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run 'make install' first.




/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data
(1)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation.  To
change individual locations, type the number in front of the
directory.  Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation base ($prefix)                   : /usr/local/webserver/php
2. Temporary directory for processing            : /tmp/pear/install
3. Temporary directory for downloads             : /tmp/pear/install
4. Binaries directory                            : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir)                 : /usr/local/webserver/php/lib/php
6. Documentation directory                       : /usr/local/webserver/php/docs
7. Data directory                                : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory                    : /usr/local/webserver/php/www
10. Tests directory                               : /usr/local/webserver/php/tests
11. Name of configuration file                    : /usr/local/webserver/php/etc/pear.conf

1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法:./configure的时候 要加上--without-pear
文:周鸿祎
阅读全文
最近有个月经问题,老有人问为何开机后,还没有其他服务,mem就被用完了?是不是内存泄露?是否要重启服务?只能说不要看现象,要看本质才能找到问题的根源。
往往给出这样的结果,怀疑内存用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的消耗情况。在我看来,Windows物理内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这样子新程序启动速度就较快,而Linux则不然。

而在Linux下,使用top命令看到内存占用情况:

Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached


这里的结果显示使用了3.8G的used,占用率达到90%。看看free的结果你还可以对比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588

虽然MEM显示了3.7G左右的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,当前进程实际占用内存是636M,而可用空闲(free)内存为3.4G。


可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。

因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

个人之见,欢迎拍砖。


参考:http://apps.hi.baidu.com/share/detail/23407310
SSH的连接登录延时一般来说是因为sshd默认打开了反向DNS解析的问题。
修改ssh服务器的/etc/ssh/sshd_config,把UseDNS yes改为UseDNS no就可以了。
不过今天遇到了Anonomous的Ubuntu,连接到修改过的服务器上仍然有延时。
找到了一个解决方法:
编辑/etc/nsswitch.conf
找到hosts那行,将其改成下面这样:
hosts: files dns [NOTFOUND=return]
测试效果不错。

获得root权限
然后执行
/etc/init.d/sshd restart

来源:http://www.eusidc.com/showfaq/1387.html
  用ports安装了mysql以后,过一段时间发现/var空间不足了,查一下,会发现是mysql-bin.000001、mysql-bin.000002等文件占用了空间,那么这些文件是干吗的?这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。


====================================================================
删除MYSQl BIN-LOG 日志
想要恢愎数据库以前的资料,执行:show binlog events;屏幕就开始显示很多内容,心里烦(那有这么多没有用的LOG),还是删除一些去吧!
1.查找当
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000001 | 150462942 |
| mysql-bin.000002 | 125 |
| mysql-bin.000003 | 106 |
+—————-+———–+
2.删除bin-log(删除mysql-bin.000003之前的而没有包含mysql-bin.000003)
mysql> purge binary logs to ‘mysql-bin.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: mysql-bin.000003
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 106
Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(mysql-bin.000001和mysql-bin.000002已被删除)
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| mysql-bin.000003 | 106 |
+—————-+———–+
1 row in set (0.00 sec)
(删除的其它格式运用!)
  PURGE {MASTER | BINARY} LOGS TO ‘log_name’
  PURGE {MASTER | BINARY} LOGS BEFORE ‘date’
  用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
  例如:
  PURGE MASTER LOGS TO ‘mysql-bin.010′;
  PURGE MASTER LOGS BEFORE ’2008-06-22 13:00:00′;
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
  BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。
  如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
  要清理日志,需按照以下步骤:
  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志。


那么这些文件该怎么删除和禁止呢?
禁止方法: vi /etc/my.cnf把里面的
#log-bin=mysql-bin
#binlog_format=mixed
注释掉,重启mysql服务即可.
删除方法:
输入命令:
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆mysql后,运行命令:
reset master;
(包括;号)
清空日志文件.再查看Mysql文件的大小,已经小了很多了.
-bash-3.2# du -h –max-depth=1 /usr/local/mysql/var
du: cannot access `250Cmax-depth=1': No such file or directory
142M    /usr/local/mysql/var

mysql-bin 日志文件的清除
对于一个繁忙的mysql数据库而言,日志文件日渐增多增大。必须加以删除或控制。
更改配置文件不让产生 mysql-bin 文件:
vi /etc/my.cnf
找到如下几行信息:
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
把 log-bin 这一行注释掉即可。
完毕,需要重新启动mysqld使配置生效。
删除现有的 mysql-bin 文件:
进入mysql:
/usr/local/mysql/bin/mysql -u root -p
然后,执行如下命令:
reset master;


如果你安装的MYSQL启用了记录日志功能,那就会占用很多空间,甚至可能把你所有的空间都耗光,这是非常可怕的,而且这一切都在悄悄的进行,你完全感受不到……
mysql-bin.0000X文件通常在MYSQL安装文件夹的var目录,我的是/usr/local/mysql/var/,如果你的不在这里,那就找一下……
好了,下面我就来提供解决方案,首先打开/etc/my.cnf文件,找到下面的内容,需要注意的是,log-bin和binlog_format这2行内容,并不是在一起的,然后注释掉。
log-bin=mysql-bin
binlog_format=mixed
注释方法很简单,在他们前面加 一个#符号就可以了,接着把mysql-bin.0000X的日志文件删除掉。
然后执行这个命令
/usr/local/mysql/bin/mysql -u root -p
输入密码登陆后执行reset master命令。如果成功的话不会返回任何信息,如果失败则会出现提示,到此问题就解决啦!


mysql-bin.000001、mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。

这样做主要有以下两个目的:
1:数据恢复
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

处理方法分两种情况:
1:只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。
vi /etc/my.cnf把里面的log-bin这一行注释掉,重启mysql服务即可。
2:如果你的环境是主从服务器,那么就需要做以下操作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器还要跟它同步。
清理日志方法为:
PURGE MASTER LOGS TO ‘mysql-bin.010′;
PURGE MASTER LOGS BEFORE ‘2008-12-19 21:00:00′;

如果你确定从服务器已经同步过了,跟主服务器一样了,那么可以直接RESET MASTER将这些文件删除。

mysql> PURGE MASTER LOGS BEFORE '2011-03-13 21:00:00';
Query OK, 0 rows affected (0.04 sec)

mysql> PURGE MASTER LOGS TO 'mysql-bin.000007';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

来源:http://www.amcoding.com/faq/mysql-bin-%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E7%9A%84%E6%B8%85%E9%99%A4/

http://imcat.in/delete-mysql-bin-0000x-mysql-log-file/
http://www.jiucool.com/terror-mysql-bin-0000x-log-file/
http://doc.linuxpk.com/56482.html
http://ourmysql.com/archives/568
为了创建复杂的Flash应用,客户端的Flash应用程序常常需要动态的向服务器发送和接受数据。而在AS3中主要提供了4种客户端与服务器之间进行通讯的方式。

      1、HTTP的Get和Post方式:

      2、WebService方式:

      3、Flash Remoting方式:

      4、Socket方式:

      Socket通讯方式与其他几种通讯方式之间的最大区别就是客户端一旦和服务器端建立连接后,除非客户端主动与服务器端之间中断连接,否则该连接会一直保存,在这种情况下,服务器便可以主动的推送数据给客户端,从而非常适合多用户实时交互情形下的应用。

       Action Script提供了两种Socket连接方式,一种是早期的XMLSocket,另一种是AS3新增的二进制Socket。可以使用flash.net.XMLSocket类创建XML数据格式的socket连接,使用flash.net.Socket类创建二进制数据格式socket连接。XMLSocket以XML数据报交换数据,而二进制Socket则以二进制数据报的方式交换数据,因此可以和任何Socket服务器进行连接和通讯,例如邮件服务器、新闻服务器等等。功能很是强大。

       当用socket连接主机时,要遵循Flash Player安全沙漏规则:swf 和主机必须在同一个域;网络上的swf不能连接本地服务器;本地的swf 不能访问任何网络资源;要允许域名交叉访问或连接低于1024的端口,需要提供cross-domain 策略文件。
来源:http://www.awsws.com/?p=34

try { document.getElementById("").SetReturnValue(__flash__toXML(MY_FUNCTION()) ); } catch (e) { document.getElementById("").SetReturnValue("<undefined/>"); }



   今天在改  ohthink 时候遇到一个js报错 一直在报 只有IE希勒报名  火狐正常  就是上面的那行  但是根据脚本调试的结果显示 也找不到那一行   只提示个NULL 无从下手  最后终于发现了问题  ~

原来是某篇日志引入flash时候调用的函数   object必须要有 id 和 name  即使你随意加一个值  但是必须要有~

增加id、name,解决问题,不再报错误。

增加右边: id="jackxiagn" name="jackxiang"

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="974" height="246" id="jackxiagn" name="jackxiang">
小A:我一个高中同学,之前高中毕业后就来深圳卖黄色光碟,后来干脆自己弄了条线生产。平均2年被逮一次,收缴生产资料,罚款共计损失100多万,但他赚到了500多万。
小B:自己弄了条线?这个比较过瘾~拍~卖~一条龙~
小A:其实就是刻录,批量刻录.
小C:你告诉他 现在日本地震 以后原材料供应会相当紧张 自己必须具备造血功能~
小D:人才。。
互联网创业的葵花宝典
一个朋友,在一家软件的大企业做了十年的软件研发,想出来创业,问我要注意什么。我开玩笑说,要想成功,必须学习互联网创业的“葵花宝典”,第一条就是 “挥刀自宫”。
大的软件公司有很多资源,研发能力不错,各种推广资源也非常优越,但很少开发出来优秀的互联网产品。初步看上去,原因很多,比如很难调动个人的积极性、内部管理协调非常困难等。我认为还有一个重要的原因,就是方法不得当。大公司资源多,一个互联网创新项目,投入大量资源后,公司期望值高,考虑的问题自然多了,反而不容易做好。
从大公司离职出来创业,首先要“挥刀自宫”,干掉大公司这套做法,控制成本尽量少花钱,集中精力和资源解决核心的一两个问题就足够了。
不要想太多,不做太长时间的计划,尤其是计划不能太复杂!创业成功需要的是发现机会和快速突破的能力,再加一点运气。大公司的工作经验太多,有时候反而会限制自己的做法。互联网创业,越简单越单纯,越容易成功!
1.专注:解决用户一个迫切的需求,解决的问题一句话就可以说清楚。
(1) 一个明确而且用户迫切需要的产品,很容易找到明确的用户群。这样,产品研发出来后,不容易走偏。(2) 选择的用户需求要有一定的普遍性,这点决定这个产品的未来市场前景。(3) 解决的问题少,开发速度快,也容易控制初期的研发成本和风险。(4) 解决明确问题的产品,容易给用户说清楚,推广也会相对简单。
2.极致:要在这个功能点上做到所有同类产品的极致,做到最好才能赢。
(1) 极致是互联网产品的核心,只要极致才能超出用户的口碑,形成口口相传的效应,给后期的推广带来了很大的便利。(2) 专注才能做到极致,做到极致才能击败竞争对手。
3.快:开发周期一定要控制在三到六个月的时间,一定要快。
(1) 互联网时代,用户需求变化比较快,而且竞争也比较激烈。快速的开发,容易适应整个市场的节奏,并且节约成本。(2) 用户试用过程中,如果发现问题,反应速度也要快,尽快改善尽快更新。初期,我认为要保持在一两周的更新速度。
4.口碑:初期市场营销坚持少花钱甚至不花钱,才能看出产品对用户真正的吸引力。
(1) 产品完成后,不要着急,先坚持在一个小规模的用户群中试用,听听用户反馈。(2) 大规模的推广会带来如下的两个问题:一、投入大量市场费用后,用户期望值很高,如果产品不完善,很容易引起负面的口碑,为以后的推广留下了隐患。二、大规模市场推广得到的测试效果不准确。如果产品不完善,甚至需求选择有问题,会被数字掩盖。当推广费用停止后,用户量不增长甚至下滑,再改就来不及了。过去几年成功的互联网创业公司,其实在市场营销上花的钱都非常少,但这些公司在市场营销上花的精力并不少。(3) 刚开始最重要的推广技巧是搜索引擎优化和病毒式营销。
互联网创业的葵花宝典就是“专注”、“极致”、“快”和“口碑”!
一次完美的互联网创业,最好是技术、产品高手搭配的两三人创业,三到六个月内完成产品,再用半年到一年的时间测试完善产品,达成初步成功的门槛,再寻求融资,摸索成功的商业模式,然后投入大量的市场资源推广,形成规模化业务。
初步成功的标准,不同的业务要求不同。我有一个简单的标准供大家参考,就是产品推出半年到一年时间,网站页面过一百万PV,或者客户端产品日净增安装量1万次,而且用户数还在持续增长。达成这个目标之后,需要琢磨的事情,就是在保持增长速度的同时,如何探索好的商业模式。

来源:http://www.alibuybuy.com/posts/57142.html

/usr/local/apache2/bin/apachectl -t
分页: 138/339 第一页 上页 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 下页 最后页 [ 显示模式: 摘要 | 列表 ]