So Tired !_! 逆水行舟, 不进则退!

20Sep/14

在windows server 2003 IIS6下安装PHP 5.3x的心得

Posted by Nick Xu

本来不打算写这份心得的,这几天为了安装wordpress,得升级一下PHP的版本,于是乎去下了个PHP5.3.8,之前不知道5.3x跟5.2x有那么大的差距,按照老方法安装了一遍,木有作用。到网上找了很多传说中的高手写的文章,前前后后重装了10几次才折腾成功!废话就不说了,来点实际的。
我只说IIS 6 + PHP5.3 ,Apache那玩意还木有研究过。

1.下载一个FastCgi For IIS6 ,到这里去下载,http://www.iis.net/expand/fastcgi
反正我下载到的文件是这样的,应该都差不多,如下图

下载完毕之后就安装,安装成功后会在C:\WINDOWS\system32\inetsrv\目录下搞出了5个文件,如下图

这个时候在IIS 6的“WEB服务扩展”里就多出了一个FastCGI Handler

2.去下载一个php-5.3.8-nts-Win32-VC9-x86.zip(不好意思,这个我忘记是在哪里下载了),然后解压到D:\PHP目录(可以解压到任意目录,这里就按照我自己的习惯来讲吧),并给IIS启动帐户或用户赋予读取和运行权限。
接着将D:\PHP目录下的所有.dll复制到C:\WINDOWS\system32下,如果有提示覆盖的,就全部覆盖吧。注:网上很多人的文章里都没写这一点,不知道是他们太高估了我的智商还是他们给忘记了,这点蛮重要。
到命令行可以输入COPY D:\PHP\*.dll C:\WINDOWS\system32\  ,省得找的麻烦。

3.注册PHP 到 FastCGI
打开 C:\WINDOWS\system32\inetsrv\fcgiext.ini文件
在[Types]下面添加以下配置(网上大部分人都说了行号,让你到哪一行附近去找,这是个误区,直接到这个文件的末尾就是,前面是没有分号的)
[Types]
php=PHP
[PHP]
ExePath=D:\PHP\php-cgi.exe
如下图所示

接下来就是修改php.ini配置文件了,D:\PHP目录下是找不到这个文件的,可以把php.ini-development复制一份,然后重命名为php.ini
打开php.ini后Ctrl+F查找
extension_dir = "./" , 把这个修改成extension_dir = "D:/PHP"
在D:下建立文件夹,并命名为tmp
查找;upload_tmp_dir =
将;upload_tmp_dir = 最前面的";"去掉
upload_tmp_dir是用来定义上传文件存放的临时路径,这里可以修改并给它定义一个绝对路径,同时需要有读、写权限。
这里我的设置为upload_tmp_dir = "D:/tmp"  (这就是我前面建立的文件夹)
找到 ;fastcgi.impersonate = 1 ,记得把前面的";"去掉
找到 ;short_open_tag = Off ,把前面的";"去掉,并把"Off"改成"On"

搜索Windows Extensions,将以下这些常用扩展前面的分号去掉

; extension=php_curl.dll
; extension=php_gd2.dll
; extension=php_ldap.dll
; extension=php_mbstring.dll
; extension=php_exif.dll
; extension=php_mysql.dll
; extension=php_mysqli.dll
; extension=php_sockets.dll
; extension=php_xmlrpc.dll

继续!

搜索;date.timezone =
去掉前面的分号,将其设置为 date.timezone = Asia/Shanghai
传说还可以设置为PRC,这个我没试过,大家有兴趣,爱折腾的可以去试一下。
如果不修改date.timezone,打开网页的时候蛮有可能提示500错误
---------------------------------------------------------------------
需要说明一下的是把D:\PHP下的php.ini文件copy到C:\WINDOWS下,然后再把D:\PHP下的php.ini删除掉(我没删除,而是改了个后缀收藏起来了)

4.配置网站
打开IIS 6管理器,在"网站"上点右键-->属性-->主目录-->配置-->添加,,操作方式就不详写了,继续上图

可执行文件路径是: C:\WINDOWS\system32\inetsrv\fcgiext.dll
运行D:\PHP\php-cgi.exe,如果能进入命令窗口并且只有光标,说明FastCGI能正常调用php-cgi,否则会提示错误,如图

OK,基本上就这些了,把IIS重启一下,命令行输入IISRESET,传说这个步骤很重要!!!
这时候可以找个php文件测试一下,常用的最简单的方式就是

<?php
    phpinfo();
>

看到类似以下效果就说明成功了

18Jul/12

在linux下编译安装nginx+php(fastcgi)

Posted by Nick Xu

nginx使用fastcgi方式连接php,在linux下面编译安装时要编译php支持fastcgi方式,其他的一些东西,照着原来的方式装就可以了。

分为以下步骤:

1、安装php的fastcgi版
2、使用spawn-fcgi启动php的fastcgi引擎
3、配置nginx连接php的fastcgi引擎

1、安装php的fastcgi版

mkdir /usr/local/modules

#jpeg目录
mkdir /usr/local/modules/jpeg6
mkdir /usr/local/modules/jpeg6/bin
mkdir /usr/local/modules/jpeg6/lib
mkdir /usr/local/modules/jpeg6/include
mkdir /usr/local/modules/jpeg6/man
mkdir /usr/local/modules/jpeg6/man/man1

A1、安装zlib

tar xzvf zlib-1.2.1.tar.gz
cd zlib-1.2.1
#不要用--prefix自定义安装目录,影响gd的安装
./configure
make
make install

A2、安装freetype

tar xzvf freetype-2.1.5.tar.gz
cd freetype-2.1.5
./configure --prefix=/usr/local/modules/freetype
make
make install

A3、安装libpng

tar xzvf libpng-1.2.5.tar.gz
#不要用--prefix自定义安装目录,影响gd的安装
cd libpng-1.2.5
cp scripts/makefile.std makefile
make test
make install

A3、安装jpeg

tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --prefix=/usr/local/modules/jpeg6 --enable-shared --enable-static
make
make install

A4、安装GD

tar xzvf gd-2.0.28.tar.gz
./configure --prefix=/usr/local/modules/gd --with-jpeg=/usr/local/modules/jpeg6 --with-png --with-zlib --with-freetype=/usr/local/modules/freetype
make
make install

然后编译安装php,注意加上--enable-fastcgi参数和--enable-force-cgi-redirect参数

./configure --prefix=/usr/local/php --with-gd=/usr/local/modules/gd --with-jpeg-dir=/usr/local/modules/jpeg6 --with-zlib --with-png --with-freetype-dir=/usr/local/modules/freetype --enable-magic-quotes --enable-fastcgi --with-mysql=/usr/local/mysql --enable-track-vars --enable-ftp --with-config-file-path=/usr/local/php/etc --with-zip --enable-force-cgi-redirect
make -j10
make install

如果过程中发现有错误:

mysql的错误在ubuntu 12.04 x64上解决方法:
sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 /usr/lib64/
sudo ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib64/
2、使用spawn-fcgi启动php的fastcgi引擎

编译完成后在/usr/local/php/bin/下面就会有php-cgi这个可执行程序,使用spawn-fcgi启动php的fastcgi引擎:

/data/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f /usr/bin/php-cgi -C 20

意思是fastcgi使用本机ip和端口9000提供服务,权限nobody,启动20个进程。其中主要留意-C这个参数,一般20个进程足够用了,觉得不够亦可开大,在我的机器上每个php-cgi进程会占用7-8兆内存,开100个就是700-800兆。

spawn-fcgi这个程序在nginx里没有提供,可以在

http://www.sudone.com/download/spawn-fcgi

下载到,一般放在nginx的sbin目录下,然后要给它加上可执行权限:

chmod +x /data/nginx/sbin/spawn-fcgi

3、配置nginx连接php的fastcgi引擎

首先弄一份fastcgi-params配置,在nginx的conf目录下建一份文本文件,内容是:

#fastcgi-params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
#end

这个是最原始的fastcgi-params,在网上也可能有更优化的版本,可以相应取用。

然后配置nginx.conf,比如www.sudone.com,这样配置就可以用了:

server {
include port.conf;
server_name www.sudone.com sudone.com;

location / {
index index.html index.php;
root /data/sudone/php/;
}

location ~ .php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /data/sudone/php$fastcgi_script_name;
include        fastcgi_params;
}
}

拿下来之后,有几个需要改的地方:

1、server_name
2、location /里面的root
3、location ~ .php$里面的fastcgi_param  SCRIPT_FILENAME

其中fastcgi_param  SCRIPT_FILENAME的参数中,$fastcgi_script_name前面是php文件的路径一般和root一样的,最后不用写/,貌似会有点问题,不要画蛇添足。

注意事项:

可能会有的管理员启动nginx后总是忘记启动spawn-fcgi,所以最好是写一份脚本来启动,然后要养成测试服务可用性的习惯。

15Jul/11

Ubuntu 9.04 server用apt安装nginx并配置php(fastcgi)

Posted by Nick Xu

由于Ubuntu 904已经包含了nginx,所以根本不要编译,安装超简单!

修改/etc/apt/sources.list文件内容为国内镜像,然后运行:

apt-get update
apt-get install nginx

即可完成安装

启动nginx:

/etc/init.d/nginx start
然后就可以访问了,http://localhost/ , 一切正常!如果不能访问,先不要继续,看看是什么原因,解决之后再继续。

下面配置php和mysql。

安装php和MySQL:

apt-get install php5-cli php5-cgi mysql-server-5.0 php5-mysql
我们需要/usr/bin/spawn-fcgi这个文件,而它是属于lighttpd这个包里面的,所以我们安装lighttpd然后把它设置为开机不启动:

apt-get install lighttpd #我们只要/usr/bin/spawn-fcgi
rcconf #去掉lighttpd开机自启动
修改nginx的配置文件:/etc/nginx/sites-available/default
修改 server_name 58.30.17.154;
修改index的一行修改为:
index index.php index.html index.htm;

去掉下面部分的注释:

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
重新启动nginx:

/etc/init.d/nginx stop
/etc/init.d/nginx start
启动fastcgi php:

spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
为了让php-cgi开机自启动:

cd /etc/init.d
cp nginx php-cgi
vim php-cgi
替换nginx为php-cgi
并修改相应部分为:

DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS=”-a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi”

stop)
echo -n “Stopping $DESC: ”
pkill -9 php-cgi
echo “$NAME.”
然后运行rcconf设置php-cgi为开机自启动

在/var/www/nginx-default/目录下创建一个文件:

echo ‘< ?phpinfo();?>’ > /var/www/nginx-default/index.php
然后浏览器访问nginx就可以看到一切正常了

   
site
site