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

6Aug/15

Installing RabbitMQ Ubuntu 12.04 with PHP extension(AMQP)

Posted by Nick Xu

download from http://pecl.php.net/package/amqp

apt-get install librabbitmq0
ln -s /usr/lib/librabbitmq.so.0 /usr/local/lib/librabbitmq.so
git clone https://github.com/alanxz/rabbitmq-c rabbitmq-c
cd rabbitmq-c
cp ./librabbitmq/amqp_framing.h /usr/local/include/
cp ./librabbitmq/amqp.h /usr/local/include/

cd ../amqp-1.2.0
phpize
./configure --with-amqp
make
make test
make install
echo "extension=amqp.so" >> /etc/php5/cli/php.ini

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();
>

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

26Dec/12

Install Nginx/PHP-FPM on Fedora 17/16, CentOS/RHEL 6.3/5.8

Posted by Nick Xu

I have once written Install nginx, PHP 5.3 and FastCGI on CentOS 5.5, Fedora 13, Red Hat RHEL 5.5/6 guide, but this guide is “updated” version, howto install Nginx with PHP 5.4.10 and PHP-FPM on Fedora 17/16/15/14, CentOS 6.3/6.2/6.1/6/5.8 and Red Hat (RHEL) 6.3/6.2/6.1/6/5.8. PHP-FPM is easier to use and configure than FastCGI and some tests says that PHP-FPM is even much more efficient than FastCGI.

Nginx (engine x) is a robust, small and high performance http server, reverse proxy server and also mail proxy server.

PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites.

Install Nginx, PHP 5.4.10 and PHP-FPM on Fedora 17/16/15/14, CentOS 6.3/6.2/6.1/6/5.8, Red Hat (RHEL) 6.3/6.2/6.1/6/5.8

1. Change to root user.

sudo -i
## OR ##
su -

2. Install needed repositories

Fedora 17/16/15/14 Remi repository

## Remi Dependency on Fedora 17, 16
rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm 
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

## Fedora 17 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-17.rpm

## Fedora 16 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-16.rpm

## Fedora 15 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-15.rpm

## Fedora 14 ##
rpm -Uvh http://rpms.famillecollet.com/remi-release-14.rpm

CentOS 6.3/6.2/6.1/6/5.8 and Red Hat (RHEL) 6.3/6.2/6.1/6/5.8 Remi repository

## Remi Dependency on CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm

## CentOS 6 and Red Hat (RHEL) 6 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

## CentOS 5 and Red Hat (RHEL) 5 ## 
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

CentOS 6.3/6.2/6.1/6/5.8 and Red Hat (RHEL) 6.3/6.2/6.1/6/5.8 Nginx repository

Create file /etc/yum.repos.d/nginx.repo and add following content to repo file:
CentOS

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Red Hat (RHEL)

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=0
enabled=1

3. Install Nginx, PHP 5.4.10 and PHP-FPM

Fedora 17/16/15/14, CentOS 6.3/5.8 and Red Hat (RHEL) 6.3/5.8

yum --enablerepo=remi install nginx php php-fpm php-common

CentOS 6.3/5.8 and Red Hat (RHEL) 6.3/5.8

yum --enablerepo=remi,remi-test install nginx php php-fpm php-common

4. Install PHP 5.4.10 modules

  • APC (php-pecl-apc) – APC caches and optimizes PHP intermediate code
  • CLI (php-cli) – Command-line interface for PHP
  • PEAR (php-pear) – PHP Extension and Application Repository framework
  • PDO (php-pdo) – A database access abstraction module for PHP applications
  • MySQL (php-mysql) – A module for PHP applications that use MySQL databases
  • PostgreSQL (php-pgsql) – A PostgreSQL database module for PHP
  • MongoDB (php-pecl-mongo) – PHP MongoDB database driver
  • SQLite (php-sqlite) – Extension for the SQLite V2 Embeddable SQL Database Engine
  • Memcache (php-pecl-memcache) – Extension to work with the Memcached caching daemon
  • Memcached (php-pecl-memcached) – Extension to work with the Memcached caching daemon
  • GD (php-gd) – A module for PHP applications for using the gd graphics library
  • XML (php-xml) – A module for PHP applications which use XML
  • MBString (php-mbstring) – A module for PHP applications which need multi-byte string handling
  • MCrypt (php-mcrypt) – Standard PHP module provides mcrypt library support

Select what you need: APC, CLI, PEAR, PDO, MySQL, PostgreSQL, MongoDB, SQLite, Memcache, Memcached, GD, MBString, MCrypt, XML

More info about PHP APC from PHP APC Configuration and Usage Tips and Tricks

Fedora 17/16/15/14

yum --enablerepo=remi install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

CentOS 6.3/5.8 and Red Hat (RHEL) 6.3/5.8

yum --enablerepo=remi,remi-test install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml

5. Stop httpd (Apache) server, Start Nginx HTTP server and PHP-FPM (FastCGI Process Manager)

Stop httpd (Apache)

/etc/init.d/httpd stop
## OR ##
service httpd stop

Start Nginx

/etc/init.d/nginx start ## use restart after update
## OR ##
service nginx start ## use restart after update

Start PHP-FPM

/etc/init.d/php-fpm start ## use restart after update
## OR ##
service php-fpm start ## use restart after update

6. Autostart Nginx and PHP-FPM on boot, also prevent httpd (Apache) autostarting on boot

Prevent httpd (Apache) autostarting on boot

chkconfig httpd off

Autostart Nginx on boot

chkconfig --add nginx
chkconfig --levels 235 nginx on

Autostart PHP-FPM on boot

chkconfig --add php-fpm
chkconfig --levels 235 php-fpm on

7. Configure Nginx and PHP-FPM

Create directory layout for your site

I use here testsite.local site, but this could of course be your real site, like www.if-not-true-then-false.com.

## public_html directory and logs directory ##
mkdir -p /srv/www/testsite.local/public_html
mkdir /srv/www/testsite.local/logs
chown -R apache:apache /srv/www/testsite.local

Alternative setup to add logs under /var/log directory.

## public_html directory and logs directory ##
mkdir -p /srv/www/testsite.local/public_html
mkdir -p /var/log/nginx/testsite.local
chown -R apache:apache /srv/www/testsite.local
chown -R nginx:nginx /var/log/nginx

Note: I use apache user and group here, because PHP-FPM runs as apache default (apache choosed to be able to access some dir as httpd). If you use some other user on your php-fpm conf then change this accordingly.

Create and configure virtual host directories under /etc/nginx

mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled

Add following lines to /etc/nginx/nginx.conf file, after “include /etc/nginx/conf.d/*.conf” line (inside http block).

## Load virtual host conf files. ##
include /etc/nginx/sites-enabled/*;

Create testsite.local virtual host file

Add following content to /etc/nginx/sites-available/testsite.local file. This is very basic virtual host config.

server {
    server_name testsite.local;
    access_log /srv/www/testsite.local/logs/access.log;
    error_log /srv/www/testsite.local/logs/error.log;
    root /srv/www/testsite.local/public_html;

    location / {
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/testsite.local/public_html$fastcgi_script_name;
    }
}

Link your virtual host to /etc/nginx/sites-enabled

cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/testsite.local
service nginx restart

Add your testsite.local “domain” to /etc/hosts file

/etc/hosts file Nginx on same machine
127.0.0.1 … row should look like example following:

127.0.0.1               localhost.localdomain localhost testsite.local

And if you use another machine where you are running your Nginx server, then add it’s public IP as following:

10.0.2.19               wordpress

Note: This is just very simple basic configuration, but if you want configure and optimize Nginx and PHP-FPM more then check following guide, Nginx and PHP-FPM Configuration and Optimizing Tips and Tricks

8. Test your Nginx and PHP-FPM setup

Create /srv/www/testsite.local/public_html/index.php file with following content:

<?php 
    phpinfo();
?>

Access following address, with your browser. http://testsite.local/
Nginx PHP 5.4.4 PHP-FPM

Enable Remote Connection to Nginx Web Server (Open Port 80 on Iptables Firewall)

1. Edit /etc/sysconfig/iptables file:

nano -w /etc/sysconfig/iptables

2. Add following line before COMMIT:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

3. Restart Iptables Firewall:

service iptables restart
## OR ##
/etc/init.d/iptables restart

4. Test remote connection

Access following address, with your browser. http://your.domain/

Tagged as: , , No Comments
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,所以最好是写一份脚本来启动,然后要养成测试服务可用性的习惯。

28May/12

给PHP加速,eAccelerator配置和使用指南

Posted by Nick Xu

Trackback URL: http://www.toplee.com/blog/wp-trackback.php?p=100

前一段时间完成了服务器从FreeBSD4.10到6.1的升级,同时把PHP也升级到了最新的PHP5.1.4,Apache也升级到了最新的Apache2.2,为了更好的提高系统的性能,考虑对PHP再进行一些优化,前两年接触过MMCache和eAccelerator,尤其对eAccelerator非常喜欢,这次优化也选择了它,下面整理一些文档和大家分享。

 

目录:
一、eAccelerator介绍
1、背景
2、原理
二、安装和配置
1、支持平台
2、系统要求
3、安装
4、php.ini文件配置
5、验证安装
三、使用eAccelerator开发PHP代码
1、API文档和接口说明
2、开发范例
四、附录和参考资料

一、eAccelerator介绍

1、背景
eAccelerator 是一个免费开源的PHP加速、优化、编译和动态缓存的项目,它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能,使得一向很复杂和离我们很远的PHP脚本编译问题完全得到解决。通过使用eAccelerator,可以优化你的PHP代码执行速度,降低服务器负载,可以提高PHP应用执行速度最高达10倍。

eAccelerator 项目诞生于2004年,当时它是作为 Turck MMCache 项目的一个分支提出并投入开发的。 Turck MMCache 由 Dmitry Stogov 开发,是个非常优秀的PHP内存缓存加速系统,如今仍然有很大部分 eAccelerator 的代码应用到该项目中,目前该项目有很长时间没有更新了,对于最新的PHP5.x的支持还未推出。

2、原理
eAccelerator 通过把经过编译后的PHP代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编译后的代码都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,eAccelerator还可以把他们缓存到系统磁盘上。

eAccelerator 同样还支持PHP代码的编译和解释执行,你可以通过encoder.php脚本来对php代码进行编译达到保护代码的目的,经过编译后的代码必须运行在安装了eAccelerator的环境下。eAccelerator编译后的代码不能被反编译,它不象其他一些编译工具那样可以进行反编译,这将使得代码更加安全和高效。

二、eAccelerator安装配置

1、支持平台
由于aAccelerator提供了大部分基于共享内存的API,所以在*nix的平台上将得到更好的支持,虽然也发布了基于windows平台的binary版本,但我在这里就只提供基于*nix平台的配置和说明,目前可以支持的平台包括Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX en HP-UX。

2、系统要求
php4 or php5
autoconf
automake
libtool
m4
eAccelerator 只支持使用 mod_php 或者 fastcgi mode 安装的PHP

3、安装
先去eAccelerator官方下载最新版的源码包:http://sourceforge.net/projects/eaccelerator/files/eaccelerator/

#tar -zxvf ./eaccelerator-0.9.5-beta2.tar.bz2
#cd eaccelerator-0.9.5-beta2
#export PHP_PREFIX="/usr/local" (把PHP安装目录导入到环境变量,FreeBSD默认是/usr/local)
#$PHP_PREFIX/bin/phpize
#./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
#make
#make install

4、ini文件配置
安装完成,下面开始配置php.ini文件,eAccelerator提供了两种配置和调用方式,分别如下。

安装为 Zend extension 模式:

zend_extension="/usr/local/lib/php/20050922/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/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"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

如果你使用了thread safe模式安装的PHP,你必须使用 “zend_extension_ts” 替换第一行的 “zend_extension”.

安装为 PHP extension 模式:(这是大部分采用的方式)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/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"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

有关php.ini文件的详细配置说明,请参照源码目录的README文档或者访问官方文档:ini setting

完成安装配置后,我们最后要创建缓存目录

#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator

5、验证安装结果
通过浏览器访问您的phpinfo()页面或者运行 php -i 得到php配置信息,里面如果看到类似下面的信息就表示安装成功了。

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

我的机器上同时还安装了Zend Optimizer3.0.1,所以看到的信息如下:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.0.10, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend Technologies

如果你打开了eAccelerator的debug选项,可以从日志中看到类似下面的信息

#tail /var/log/httpd/eAccelerator_log
EACCELERATOR hit: "/var/www/toplee.com/blog/index.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-blog-header.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-config.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-settings.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.php"
...

以上信息表示文件都得到了缓存和命中。

至此,我们就完成了全部的安装和配置,好好享受eAccelerator带给你的惊喜吧,根据Michael的测试,效果的确相当的好。

三、在PHP中可以使用eAccelerator的API开发

1、API和文档说明:

eAccelerator提供了便捷便捷而又稳定的本机缓存实现方式,由于大部分代码实现基于共享内存,所以只能在*nix平台中使用,Windows平台Michael就暂时不知道何时有这方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源码包的doc/php/目录下)

文件列表:

cache.php
dasm.php
encoder.php
info.php
loader.php
session.php
shared_memory.php

接口列表:

array eaccelerator_cached_scripts ()
void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])
void eaccelerator_cache_page (string $key, [int $ttl = 0])
void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])
void eaccelerator_caching (boolean $flag)
void eaccelerator_clean ()
void eaccelerator_clear ()
array eaccelerator_dasm_file (mixed $filename)
mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])
void eaccelerator_gc ()
mixed eaccelerator_get (string $key)
array eaccelerator_info ()
array eaccelerator_list_keys ()
void eaccelerator_load ()
boolean eaccelerator_lock (string $key)
void eaccelerator_optimizer (boolean $flag)
void eaccelerator_purge ()
boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])
array eaccelerator_removed_scripts ()
boolean eaccelerator_rm (string $key)
void eaccelerator_rm_page (string $key)
boolean eaccelerator_set_session_handlers ()
boolean eaccelerator_unlock (string $key)

有关上述文档详细说明请参考官方文档:API Documents

下面有部分网友翻译后的接口说明:

eaccelerator_put($key, $value, $ttl=0)
将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。eaccelerator_get($key)
根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL

eaccelerator_rm($key)
根据 $key 移除缓存

eaccelerator_gc()
移除清理所有已过期的 key

eaccelerator_lock($key)
为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。
例如:
<?php
eaccelerator_lock("count");
eaccelerator_put("count",eaccelerator_get("count")+1));
?>

eaccelerator_unlock($key)
根据 $key 释放锁

eaccelerator_cache_output($key, $eval_code, $ttl=0)
将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put)
例如:
<?php eaccelerator_cache_output('test', 'echo time(); phpinfo();',30); ?>

eaccelerator_cache_result($key, $eval_code, $ttl=0)
将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output
例如:
<?php eaccelerator_cache_result('test', ' time() . "Hello";', 30); ?>

eaccelerator_cache_page($key, $ttl=0)
将当前整页缓存 $ttl 秒。
例如:
<?php
eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30);
echo time();
phpinfo();
?>

eaccelerator_rm_page($key)
删除由  eaccelerator_cache_page() 执行的缓存,参数也是 $key

2、PHP代码中使用eAccelerator加速

下面有一个测试的代码,你可以测试一下eAccelerator强大的威力:(该代码在 cli 模式下可能无效)

<?php
class test_cache {
var $pro = 'hello';function test_cache() {
echo "Object Created!<br>\n";
}
function func() {
echo ', the world!';
}
function now($t) {
echo date('Y-m-d H:i:s', $t);
}
}

$tt = eaccelerator_get("test_tt");
if (!$tt)
{
$tt = new test_cache;
eaccelerator_put("test_tt", $tt);
echo "no cached!<br>\n";
}
else {
echo "cached<br>\n";
}

echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>

另外,据说在著名的vBulletin 3.60Beta版里面已经集成了对eAccelerator的支持,下面是一段来自vBulletin里面的代码

// #############################################################################
// eAccelerator/**
* Class for fetching and initializing the vBulletin datastore from eAccelerator
*
* @package    vBulletin
* @version    $Revision: 0.1 $
* @date        $Date: 2005/06/12 13:14:18 $
*/
class vB_Datastore_eAccelerator extends vB_Datastore
{
/**
* Fetches the contents of the datastore from eAccelerator
*
* @param    array    Array of items to fetch from the datastore
*
* @return    void
*/
function fetch($itemarray)
{
if (!function_exists('eaccelerator_get'))
{
trigger_error("eAccelerator not installed", E_USER_ERROR);
}

foreach ($this->defaultitems AS $item)
{
$this->do_fetch($item);
}

if (is_array($itemarray))
{
foreach ($itemarray AS $item)
{
$this->do_fetch($item);
}
}

$this->check_options();

// set the version number variable
$this->registry->versionnumber =& $this->registry->options['templateversion'];
}

/**
* Fetches the data from shared memory and detects errors
*
* @param    string    title of the datastore item
*
* @return    void
*/
function do_fetch($title)
{
$data = eaccelerator_get($title);
if ($data === null)
{ // appears its not there, lets grab the data, lock the shared memory and put it in
$data = '';
$dataitem = $this->dbobject->query_first("
SELECT title, data FROM " . TABLE_PREFIX . "datastore
WHERE title = '" . $this->dbobject->escape_string($title) ."'
");
if (!empty($dataitem['title']))
{
$data =& $dataitem['data'];
$this->build($dataitem['title'], $dataitem['data']);
}
}
$this->register($title, $data);
}

/**
* Updates the appropriate cache file
*
* @param    string    title of the datastore item
*
* @return    void
*/
function build($title, $data)
{
if (!function_exists('eaccelerator_put'))
{
trigger_error("eAccelerator not installed", E_USER_ERROR);
}
eaccelerator_lock($title);
eaccelerator_put($title, $data);
eaccelerator_unlock($title);
}
}

四、附录和参考资料
eAccelerator 官方网站 :http://eaccelerator.net
Websites using eAccelerator ?

    • http://www.advfn.com/ (2006/03/03) Advanced Financial Network, serves over 7 million page hits per day.
    • http://www.domaincity.co.uk/ (2005/01/29) Andrew Hutchings – Linux Guru – Just a quick message to say we are now using eaccelerator as a replacement for mmcache on 2 of our 3 node round robin clusters, 2.5million hits per day. We will be doubling this in the next few week, as well as implementing new clusters.
    • http://www.ets-online.de/ (2005/02/07) Denny Reeh – System Developer – The e/t/s didactic media provides an elearning server (Distance Learning System) written in PHP. We are hosting the systems for our customers mainly by ourself. So we have 5 live-servers (freebsd, apache2, php4, eaccelerator) with 5.5 million hits per month. First without eAccelerator we should have installed more servers for good performance and secondly we improve the customer convenience by quartering the medium response time of a script.
    • http://www.gorgoyle.com/ (2005/08/03) Gorgoyle.com is Yet Another Debian Personal Server with just a few lost Internet wanderers passing by, powered by a glorious Celeron 433 that needed some fresh air… With eAccelerator the result is quite impressive: users say the server speed is now 10000% higher (no joke!) So thank you all and keep up the good work!!! Server: eAccelerator 0.9.5 beta 1 Apache/2.0.55 (Debian) mod_python/3.1.3 Python/2.3.5 PHP/4.4.2-1 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2
    • http://www.mafia-inc.de/ (2005/05/24) The Mafia-Incorporated is a succesfull Browser game with around 2.500.000 page impressions each day and over 5000 users. Server: PHP Version 4.3.10-9, eAccelerator 0.9.2a, Debian , Apache 2.0.53
    • http://www.mondespersistants.com/ (2005/01/07) An other game oriented french website with 6 000 000 pageloads monthly. http://guildes.mondespersistants.com is a full PHP5 oo development. Theses websites are running under freebsd / apache 1.3 / php 5.0.3 / eaccelerator 0.9.2
    • http://www.moviemaze.de/ (2005/12/09) Markus Ostertag – Movie Maze is a large german online-magazine with trailer, wallpaper, reviews, news and much more. Currently we use three servers (Suse & Debian with Apache 2, PHP4) with eAccelerator and provide more than 3TB data to ~1 Mio. users each month.
    • http://www.rtvslo.si (2005/01/04) The Slovenian National RTV Station and its news/misc portal with forums. Over 3500 users and more than 37000 forum messages in a year. Two round-robin servers for the masses, and an administrator server. 6 000 000 pageloads monthly.
    • http://www.shroomery.org/ (2006/03/28) A site about mushrooms and mycology, serving 20,000,000 pages per month. Web and database server are identical dual 64-bit Xeons with 4GB and SCSI RAID5 running Gentoo. eAccelerator help keep our page generation time under .1 second!
    • http://www.sourceforge.net/ (2005/04/25) SourceForge.net is the world’s largest Open Source software development web site, hosting more than 100,000 projects and over 1,000,000 registered users with a centralized resource for managing projects, issues, communications, and code. SourceForge.net has the largest repository of Open Source code and applications available on the Internet, and hosts more Open Source development products than any other site or network worldwide. SourceForge.net provides a wide variety of services to projects we host, and to the Open Source community. eAccelerator is used on the webserver cluster for their frontpage.

Companies offering hosting with eAccelerator enabled ?

  • http://lylix.net/ (2006/04/29) Offering webhosting w/ Apache/2.0.55, PHP 5.0.5, and eAccelerator 0.9.5 beta1 on Gentoo Linux servers. Also a provider of quality Virtual Private Server (VPS) hosting, including 32 and 64-bit platforms. Most VPS images have a pre-installed LAMP environment w/ eAccelerator installed and configured.
  • http://www.ulyssis.org A student organisation which provides shell and internet services for students at very cheap prices.
24May/12

How to configure Eclipse + XDebug + Firefox

Posted by Nick Xu

This "howto" is based on the following model:
-Ubuntu v 10.04
-Eclipse v 3.5.2
-Local LAMP server

Requirements:
-LAMP already installed
-Eclipse already installed

Server configuration:
-Open a terminal
-run: sudo apt-get install php5-xdebug
-run: sudo nano /etc/php5/conf.d/xdebug.ini
-Don't delete the content of this file, just go to the end of the file add 2 blank lines and paste the next configuration:

xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"

-save changes
-run: sudo service apache2 restart

Eclipse configuration:
-Open eclipse
-On the eclipse main menu go to: Help--> Install New Software...
-open the dropDownList "work with"
-select "--All Available Sites--"
-On the filter text field put: php
-Check out: "Programming Languages"
-Check out: "Web, XML, and Java EE Development"
-Follow the wizard instruction until finish
-On the eclipse main menu go to: Window--> Preferences
-Navigate on the tree menu to: PHP--> Debug
-open the dropDownList "work with"
-On "PHP Debugger" select "XDebug"
-Leave alone "Server" and "PHP Executables"
-Save changes and close the window
-On the eclipse main menu go to: Run--> Debug configurations...
-Do a double click over "PHP Web Page" just to add a new setting
-On the DropDowList "Server Debugger" select "XDebug"
-On the file section browse and select the "index.php" of your project or whatever file you need to start your application
-Uncheck "Break at Fist Line"
-Apply changes and close the window
-On the eclipse main menu go to: Window--> Web Browser--> Default System Web Browser

Testing xdebug
-Open a project with source code that already is hosted in your LAMP server
-Place a "break point" at some point of you script
-Press "F11" to start the debugger
-Your code should stop at the break point
-Now move the mouse over variables so watch its values

That is all i hope you enjoy this HowTo 

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就可以看到一切正常了

11Nov/10

直接把ASP.NET文件后缀改为php或者htm在IIS7上运行

Posted by Nick Xu

今天用了第三方开源的一个服务程序,返回页面写死了是PHP后缀的,因为不想修改别人的程序,只有我这边把ASP.NET的程序以PHP后缀来执行了.

问了谷哥好多次,都没有找到我想要的结果.后来想了一下,如果真正安装PHP的时候是怎样的呢?

然后我就查了一下PHP在IIS7下的安装过程(不是安装官方MSI包的那种方式哦),然后照版煮碗,结果,肯定是成功的啦,不然就不会写到这了,呵呵

我观察了一下设置完成后的WEB.CONFIG文件,其实在三个地方添加一点代码即可完成ASP.NET以PHP后缀运行,我直接把代码贴出来了.

<compilation debug="true">
<buildProviders>
<add extension=".php" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
<httpHandlers>
<add path="*.php" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
</httpHandlers>

<system.webServer>
<handlers>
<add name="php" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
</handlers>
</system.webServer>

25May/10

php.ini配置,php.ini 中的 php-5.2.0 配置指令详解

Posted by Nick Xu

php.ini 中的 php-5.2.0 配置指令详解
;;;;;;;;;;;;;;;;
;; 作者:金步国
;;;;;;;;;;;;;;;;
;;  版权声明  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;
;; BUG报告,切磋与探讨 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;
; 由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别。
; 如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳。
; 如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系。
; 联系方式:Email: csfrank@citiz.net ; QQ: 70171448 ; MSN: csfrank122@hotmail.com
;
;;;;;;;;;;;;;;
;;   简介   ;;
;;;;;;;;;;;;;;
; 本文并非是对英文版 php.ini 的简单翻译,而是参考了众多资料以后,结合自己的理解,
; 在原有 php.ini 基础上增加了一些实用模块的配置说明,同时对文件内容的安排进行了调整。
; 由于作者不喜欢 no-free 的玩意儿,所以删除了除 MySQL 和 PostgreSQL 以外的其他数据库模块配置选项。

;;;;;;;;;;;;;;;;;
;; 关于php.ini ;;
;;;;;;;;;;;;;;;;;
; 这个文件必须命名为'php.ini'并放置在httpd.conf中的PHPIniDir指令指定的目录中。
; 最新版本的php.ini可以在下面两个位置查看:
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?view=co
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co
;;;;;;;;;;;;
;;  语法  ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
; 章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。
;
; 设置指令的格式如下:
; directive = value
; 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 值(value)可以是:
; 1. 用引号界定的字符串(如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)
; 4. 一个INI常量(On, Off, none)
; 5. 一个表达式(如:E_ALL & ~E_NOTICE)
;
; INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
; 位或
; & 位与
; ~ 位非
; ! 逻辑非
;
; 布尔标志用 On 表示打开,用 Off 表示关闭。
;
; 一个空字符串可以用在等号后不写任何东西表示,或者用 none 关键字:
; foo =         ; 将foo设为空字符串
; foo = none    ; 将foo设为空字符串
; foo = "none"  ; 将foo设为字符串'none'
;
; 如果你在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,

; 那么你只能在加载这些动态扩展的指令行之后使用这些常量。
;;;;;;;;;;;;;;;;;;
;;  httpd.conf  ;;
;;;;;;;;;;;;;;;;;;
; 还可以在httpd.conf中覆盖php.ini的值,以进行更灵活的配置:
; php_value name value  ;设置非bool型的指令,将value设为none则清除先前的设定
; php_flag  name onoff ;仅用于设置bool型的指令
;
; PHP常量(如E_ALL)仅能在php.ini中使用,在httpd.conf中必须使用相应的掩码值。
; 带"SYS"标志的指令只能在httpd.conf中的全局配置部分使用,
; 带"ini"标志的指令不能在httpd.conf中使用,它们仅能用于php.ini中。
;=========================================================================
;;====================配置指令详解========================================
;=========================================================================
; 以下每个指令的设定值都与 PHP-5.2.0 内建的默认值相同。
; 也就是说,如果'php.ini'不存在,或者你删掉了某些行,默认值与之相同。

;;;;;;;;;;;;;;
;;  Apache  ;;
;;;;;;;;;;;;;;
[Apache]
; 仅在将PHP作为Apache模块时才有效。

engine = On
; 是否启用PHP解析引擎。
; 可以在httpd.conf中基于目录或者虚拟主机来打开或者关闭PHP解析引擎。

last_modified = Off
; 是否在Last-Modified应答头中放置该PHP脚本的最后修改时间。

xbithack = Off
; 是否不管文件结尾是什么,都作为PHP可执行位组来解析。

child_terminate = Off
; PHP脚本在请求结束后是否允许使用apache_child_terminate()函数终止子进程。
; 该指令仅在UNIX平台上将PHP安装为Apache1.3的模块时可用。其他情况下皆不存在。
;;;;;;;;;;;;;;;
;;  PHP核心  ;;
;;;;;;;;;;;;;;;

[PHP-Core-DateTime]
; 前四个配置选项目前仅用于date_sunrise()和date_sunset()函数。

date.default_latitude = 31.7667
; 默认纬度

date.default_longitude = 35.2333
; 默认经度

date.sunrise_zenith = 90.583333
; 默认日出天顶

date.sunset_zenith = 90.583333
; 默认日落天顶

date.timezone =
; 未设定TZ环境变量时用于所有日期和时间函数的默认时区。
; 中国大陆应当使用"PRC"
; 应用时区的优先顺序为:
; 1. 用date_default_timezone_set()函数设定的时区(如果设定了的话)
; 2. TZ 环境变量(如果非空的话)
; 3. 该指令的值(如果设定了的话)
; 4. PHP自己推测(如果操作系统支持)
; 5. 如果以上都不成功,则使用 UTC
[PHP-Core-Assert]

assert.active = On
; 是否启用assert()断言评估

assert.bail = Off
; 是否在发生失败断言时中止脚本的执行

assert.callback =
; 发生失败断言时执行的回调函数

assert.quiet_eval = Off
; 是否使用安静评估(不显示任何错误信息,相当于error_reporting=0)。

; 若关闭则在评估断言表达式的时候使用当前的error_reporting指令值。

assert.warning = On
; 是否对每个失败断言都发出警告
[PHP-Core-SafeMode]
; 安全模式是为了解决共享服务器的安全问题而设立的。
; 但试图在PHP层解决这个问题在结构上是不合理的,
; 正确的做法应当是修改web服务器层和操作系统层。
; 因此在PHP6中废除了安全模式,并打算使用open_basedir指令取代之。

safe_mode = Off
;SYS
; 是否启用安全模式。
; 打开时,PHP将检查当前脚本的拥有者是否和被操作的文件的拥有者相同,
; 相同则允许操作,不同则拒绝操作。

safe_mode_gid = Off
;SYS
; 在安全模式下,默认在访问文件时会做UID比较检查。
; 但有些情况下严格的UID检查反而是不适合的,宽松的GID检查已经足够。
; 如果你想将其放宽到仅做GID比较,可以打开这个参数。

safe_mode_allowed_env_vars = "PHP_"
;SYS
; 在安全模式下,用户仅可以更改的环境变量的前缀列表(逗号分隔)。
; 允许用户设置某些环境变量,可能会导致潜在的安全漏洞。
; 注意: 如果这一参数值为空,PHP将允许用户更改任意环境变量!

safe_mode_protected_env_vars = "LD_LIBRARY_PATH"
;SYS
; 在安全模式下,用户不能更改的环境变量列表(逗号分隔)。
; 这些变量即使在safe_mode_allowed_env_vars指令设置为允许的情况下也会得到保护。

safe_mode_exec_dir = "/usr/local/php/bin"
;SYS
; 在安全模式下,只有该目录下的可执行程序才允许被执行系统程序的函数执行。
; 这些函数是:system, escapeshellarg, escapeshellcmd, exec, passthru,
; proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec

safe_mode_include_dir =
;SYS
; 在安全模式下,该组目录和其子目录下的文件被包含时,将跳过UID/GID检查。
; 换句话说,如果此处的值为空,任何UID/GID不符合的文件都不允许被包含。
; 这里设置的目录必须已经存在于include_path指令中或者用完整路径来包含。
; 多个目录之间用冒号(Win下为分号)隔开。
; 指定的限制实际上是一个前缀,而非一个目录名,
; 也就是说"/dir/incl"将允许访问"/dir/include"和"/dir/incls"
; 如果您希望将访问控制在一个指定的目录,那么请在结尾加上斜线。

sql.safe_mode = Off
;SYS
; 是否使用SQL安全模式。
; 如果打开,指定默认值的数据库连接函数将会使用这些默认值代替支持的参数。
; 对于每个不同数据库的连接函数,其默认值请参考相应的手册页面。
[PHP-Core-Safe]

allow_url_fopen = On
;ini
; 是否允许打开远程文件

allow_url_include = Off
;SYS
; 是否允许include/require远程文件。

disable_classes =
;ini
; 该指令接受一个用逗号分隔的类名列表,以禁用特定的类。

disable_functions =
;ini
; 该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。

enable_dl = On
;SYS
; 是否允许使用dl()函数。dl()函数仅在将PHP作为apache模块安装时才有效。
; 禁用dl()函数主要是出于安全考虑,因为它可以绕过open_basedir指令的限制。
; 在安全模式下始终禁用dl()函数,而不管此处如何设置。

expose_php = On
;ini
; 是否暴露PHP被安装在服务器上的事实(在http头中加上其签名)。

; 它不会有安全上的直接威胁,但它使得客户端知道服务器上安装了PHP。

open_basedir =
;SYS
; 将PHP允许操作的所有文件(包括文件自身)都限制在此组目录列表下。
; 当一个脚本试图打开一个指定目录树之外的文件时,将遭到拒绝。
; 所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
; 特殊值'.'指定了存放该脚本的目录将被当做基准目录。
; 但这有些危险,因为脚本的工作目录可以轻易被chdir()改变。
; 对于共享服务器,在httpd.conf中灵活设置该指令将变得非常有用。
; 在Windows中用分号分隔目录,UNIX系统中用冒号分隔目录。
; 作为Apache模块时,父目录中的open_basedir路径将自动被继承。
; 指定的限制实际上是一个前缀,而非一个目录名,
; 也就是说"/dir/incl"将允许访问"/dir/include"和"/dir/incls",
; 如果您希望将访问控制在一个指定的目录,那么请在结尾加上一个斜线。
; 默认是允许打开所有文件。

[PHP-Core-Error]

error_reporting = E_ALL & ~E_NOTICE
; 错误报告级别是位字段的叠加,推荐使用 E_ALL E_STRICT
;    1  E_ERROR             致命的运行时错误
;    2  E_WARNING           运行时警告(非致命性错误)
;    4  E_PARSE             编译时解析错误
;    8  E_NOTICE            运行时提醒(经常是bug,也可能是有意的)
;   16  E_CORE_ERROR        PHP启动时初始化过程中的致命错误
;   32  E_CORE_WARNING      PHP启动时初始化过程中的警告(非致命性错)
;   64  E_COMPILE_ERROR     编译时致命性错
;  128  E_COMPILE_WARNING   编译时警告(非致命性错)
;  256  E_USER_ERROR        用户自定义的致命错误
;  512  E_USER_WARNING      用户自定义的警告(非致命性错误)
; 1024  E_USER_NOTICE       用户自定义的提醒(经常是bug,也可能是有意的)
; 2048  E_STRICT            编码标准化警告(建议如何修改以向前兼容)
; 4096  E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同E_ERROR
; 6143  E_ALL               除E_STRICT外的所有错误(PHP6中为8191,即包含所有)

track_errors = Off

; 是否在变量$php_errormsg中保存最近一个错误或警告消息。

display_errors = On
; 是否将错误信息作为输出的一部分显示。
; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替(参看下面)。
; 在最终发布的web站点打开这个特性可能暴露一些安全信息,
; 例如你的web服务上的文件路径、数据库规划或别的信息。

display_startup_errors = Off
; 是否显示PHP启动时的错误。
; 即使display_errors指令被打开,关闭此参数也将不显示PHP启动时的错误。
; 建议你关掉这个特性,除非你必须要用于调试中。

report_memleaks = On
; 是否报告内存泄漏。这个参数只在以调试方式编译的PHP中起作用,
; 并且必须在error_reporting指令中包含 E_WARNING

report_zend_debug = On
; 尚无说明文档

html_errors = On
; 是否在出错信息中使用HTML标记。
; 注意: 不要在发布的站点上使用这个特性!

docref_root =  ;"http://localhost/phpmanual/"
docref_ext =   ;".html"
; 如果打开了html_errors指令,PHP将会在出错信息上显示超连接,
; 直接链接到一个说明这个错误或者导致这个错误的函数的页面。
; 你可以从http://www.php.net/docs.php下 载php手册,
; 并将docref_root指令指向你本地的手册所在的URL目录。
; 你还必须设置docref_ext指令来指定文件的扩展名(必须含有'.')。
; 注意: 不要在发布的站点上使用这个特性。

error_prepend_string =  ;"<font color=#f00>"
; 用于错误信息前输出的字符串
error_append_string =   ;"</font>"
; 用于错误信息后输出的字符串

xmlrpc_errors = Off
xmlrpc_error_number = 0
; 尚无文档
[PHP-Core-Logging]

define_syslog_variables = Off
; 是否定义各种系统日志变量,如:$LOG_PID, $LOG_CRON 等等。
; 关掉它以提高效率的好主意。
; 你可以在运行时调用define_syslog_variables()函数来定义这些变量。

error_log =
; 将错误日志记录到哪个文件中。该文件必须对Web服务器用户可写。
; syslog 表示记录到系统日志中(NT下的事件日志, Unix下的syslog(3))
; 如果此处未设置任何值,则错误将被记录到Web服务器的错误日志中。

log_errors = Off
; 是否在日志文件里记录错误,具体在哪里记录取决于error_log指令。
; 强烈建议你在最终发布的web站点时使用日志记录错误而不是直接输出,
; 这样可以让你既知道那里出了问题,又不会暴露敏感信息。

log_errors_max_len = 1024
; 设置错误日志中附加的与错误信息相关联的错误源的最大长度。
; 这里设置的值对显示的和记录的错误以及$php_errormsg都有效。
; 设为 0 可以允许无限长度。

ignore_repeated_errors = Off
; 记录错误日志时是否忽略重复的错误信息。
; 错误信息必须出现在同一文件的同一行才被被视为重复。

ignore_repeated_source = Off
; 是否在忽略重复的错误信息时忽略重复的错误源。
[PHP-Core-Mail]
; 要使邮件函数可用,PHP必须在编译时能够访问sendmail程序。

; 如果使用其它的邮件程序,如qmail或postfix,确保使用了相应的sendmail包装。
; PHP首先会在系统的PATH环境变量中搜索sendmail,接着按以下顺序搜索:
; /usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib
; 强烈建议在PATH中能够找到sendmail。
; 另外,编译PHP的用户必须能够访问sendmail程序。

SMTP = "localhost"
; mail()函数中用来发送邮件的SMTP服务器的主机名称或者IP地址。仅用于win32。

smtp_port = 25
; SMTP服务器的端口号。仅用于win32。

sendmail_from =
; 发送邮件时使用的"From:"头中的邮件地址。仅用于win32
; 该选项还同时设置了"Return-Path:"头。

sendmail_path = "-t -i"
;SYS
; 仅用于unix,也可支持参数(默认的是'sendmail -t -i')
; sendmail程序的路径,通常为"/usr/sbin/sendmail或/usr/lib/sendmail"。
; configure脚本会尝试找到该程序并设定为默认值,但是如果失败的话,可以在这里设定。
; 不使用sendmail的系统应将此指令设定为sendmail替代程序(如果有的话)。
; 例如,Qmail用户通常可以设为"/var/qmail/bin/sendmail"或"/var/qmail/bin/qmail-inject"。
; qmail-inject 不需要任何选项就能正确处理邮件。

mail.force_extra_parameters =
; 作为额外的参数传递给sendmail库的强制指定的参数附加值。
; 这些参数总是会替换掉mail()的第5个参数,即使在安全模式下也是如此。
[PHP-Core-ResourceLimit]

default_socket_timeout = 60
; 默认socket超时(秒)

max_execution_time = 30
; 每个脚本最大允许执行时间(秒),0 表示没有限制。
; 这个参数有助于阻止劣质脚本无休止的占用服务器资源。
; 该指令仅影响脚本本身的运行时间,任何其它花费在脚本运行之外的时间,
; 如用system()/sleep()函数的使用、数据库查询、文件上传等,都不包括在内。
; 在安全模式下,你不能用ini_set()在运行时改变这个设置。

memory_limit = 16M
; 一个脚本所能够申请到的最大内存字节数(可以使用K和M作为单位)。
; 这有助于防止劣质脚本消耗完服务器上的所有内存。
; 要能够使用该指令必须在编译时使用"--enable-memory-limit"配置选项。
; 如果要取消内存限制,则必须将其设为 -1 。
; 设置了该指令后,memory_get_usage()函数将变为可用。

max_input_time = -1
; 每个脚本解析输入数据(POST, GET, upload)的最大允许时间(秒)。
; -1 表示不限制。

post_max_size = 8M
; 允许的POST数据最大字节长度。此设定也影响到文件上传。
; 如果POST数据超出限制,那么$_POST和$_FILES将会为空。
; 要上传大文件,该值必须大于upload_max_filesize指令的值。
; 如果启用了内存限制,那么该值应当小于memory_limit指令的值。

realpath_cache_size = 16K
;SYS
; 指定PHP使用的realpath(规范化的绝对路径名)缓冲区大小。
; 在PHP打开大量文件的系统上应当增大该值以提高性能。

realpath_cache_ttl = 120
;SYS
; realpath缓冲区中信息的有效期(秒)。
; 对文件很少变动的系统,可以增大该值以提高性能。
[PHP-Core-FileUpLoad]

file_uploads = On
;SYS
; 是否允许HTTP文件上传。
; 参见upload_max_filesize, upload_tmp_dir, post_max_size指令

upload_max_filesize = 2M

; 允许上传的文件的最大尺寸。

upload_tmp_dir =
;SYS
; 文件上传时存放文件的临时目录(必须是PHP进程用户可写的目录)。
; 如果未指定则PHP使用系统默认的临时目录。
[PHP-Core-MagicQuotes]
; PHP6将取消魔术引号,相当于下列指令全部为 Off

magic_quotes_gpc = On
; 是否对输入的GET/POST/Cookie数据使用自动字符串转义( '  "    NULL )。
; 这里的设置将自动影响 $_GEST $_POST $_COOKIE 数组的值。
; 若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号(')转义为(''),
; 其它特殊字符将不被转义,即( "    NULL )将保持原样!!
; 建议关闭此特性,并使用自定义的过滤函数。

magic_quotes_runtime = Off
; 是否对运行时从外部资源产生的数据使用自动字符串转义( '  "    NULL )。
; 若打开本指令,则大多数函数从外部资源(数据库,文本文件等)返回数据都将被转义。
; 例如:用SQL查询得到的数据,用exec()函数得到的数据,等等
; 若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号(')转义为(''),
; 其它特殊字符将不被转义,即( "    NULL )将保持原样!!
; 建议关闭此特性,并视具体情况使用自定义的过滤函数。

magic_quotes_sybase = Off
; 是否采用Sybase形式的自动字符串转义(用 '' 表示 ')
[PHP-Core-HighLight]

highlight.bg = "#FFFFFF"
highlight.comment = "#FF8000"
highlight.default = "#0000BB"
highlight.html = "#000000"
highlight.keyword = "#007700"
highlight.string = "#DD0000"
; 语法高亮模式的色彩(通常用于显示 .phps 文件)。
; 只要能被<font color=xxx>接受的东西就能正常工作。

[PHP-Core-Langue]

short_open_tag = On
; 是否允许使用"<? ?>"短标识。否则必须使用"<?php ?>"长标识。
; 除非你的php程序仅在受控环境下运行,且只供自己使用,否则请不要使用短标记。
; 如果要和XML结合使用PHP,可以选择关闭此选项以方便直接嵌入"<?xml ... ?>",
; 不然你必须用PHP来输出:<? echo '<?xml version="1.0"'; ?>
; 本指令也会影响到缩写形式"<?=",它和"<? echo"等价,要使用它也必须打开短标记。

asp_tags = Off
; 是否允许ASP风格的标记"<% %>",这也会影响到缩写形式"<%="。
; PHP6中将删除此指令

arg_separator.output = "&"
; PHP所产生的URL中用来分隔参数的分隔符。
; 另外还可以用"&"或","等等。

arg_separator.input = "&"
; PHP解析URL中的变量时使用的分隔符列表。
; 字符串中的每一个字符都会被当作分割符。
; 另外还可以用",&"等等。

allow_call_time_pass_reference = On
; 是否强迫在函数调用时按引用传递参数(每次使用此特性都会收到一条警告)。
; php反对这种做法,并在将来的版本里不再支持,因为它影响到了代码的整洁。
; 鼓励的方法是在函数声明里明确指定哪些参数按引用传递。
; 我们鼓励你关闭这一选项,以保证你的脚本在将来版本的语言里仍能正常工作。

auto_globals_jit = On

; 是否仅在使用到$_SERVER和$_ENV变量时才创建(而不是在脚本一启动时就自动创建)。
; 如果并未在脚本中使用这两个数组,打开该指令将会获得性能上的提升。
; 要想该指令生效,必须关闭register_globals和register_long_arrays指令。

auto_prepend_file =
auto_append_file  =
; 指定在主文件之前/后自动解析的文件名。为空表示禁用该特性。
; 该文件就像调用了include()函数被包含进来一样,因此会使用include_path指令的值。
; 注意:如果脚本通过exit()终止,那么自动后缀将不会发生。

variables_order = "EGPCS"
; PHP注册 Environment, GET, POST, Cookie, Server 变量的顺序。
; 分别用 E, G, P, C, S 表示,按从左到右注册,新值覆盖旧值。
; 举例说,设为"GP"将会导致用POST变量覆盖同名的GET变量,
; 并完全忽略 Environment, Cookie, Server 变量。
; 推荐使用"GPC"或"GPCS",并使用getenv()函数访问环境变量。

register_globals = Off
; 是否将 E, G, P, C, S 变量注册为全局变量。
; 打开该指令可能会导致严重的安全问题,除非你的脚本经过非常仔细的检查。
; 推荐使用预定义的超全局变量:$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER
; 该指令受variables_order指令的影响。
; PHP6中已经删除此指令。

register_argc_argv = On
; 是否声明$argv和$argc全局变量(包含用GET方法的信息)。
; 建议不要使用这两个变量,并关掉该指令以提高性能。

register_long_arrays = On
; 是否启用旧式的长式数组(HTTP_*_VARS)。
; 鼓励使用短式的预定义超全局数组,并关闭该特性以获得更好的性能。
; PHP6中已经删除此指令。

always_populate_raw_post_data = Off
; 是否总是生成$HTTP_RAW_POST_DATA变量(原始POST数据)。
; 否则,此变量仅在遇到不能识别的MIME类型的数据时才产生。
; 不过,访问原始POST数据的更好方法是 php://input 。
; $HTTP_RAW_POST_DATA对于enctype="multipart/form-data"的表单数据不可用。

unserialize_callback_func =
; 如果解序列化处理器需要实例化一个未定义的类,
; 这里指定的回调函数将以该未定义类的名字作为参数被unserialize()调用,
; 以免得到不完整的"__PHP_Incomplete_Class"对象。
; 如果这里没有指定函数,或指定的函数不包含(或实现)那个未定义的类,将会显示警告信息。
; 所以仅在确实需要实现这样的回调函数时才设置该指令。
; 若要禁止这个特性,只需置空即可。

y2k_compliance = On
; 是否强制打开2000年适应(可能在非Y2K适应的浏览器中导致问题)。

zend.ze1_compatibility_mode = Off
; 是否使用兼容Zend引擎I(PHP 4.x)的模式。
; 这将影响对象的复制、构造(无属性的对象会产生FALSE或0)、比较。
; 兼容模式下,对象将按值传递,而不是默认的按引用传递。

precision = 14
; 浮点型数据显示的有效位数。

serialize_precision = 100
; 将浮点型和双精度型数据序列化存储时的精度(有效位数)。
; 默认值能够确保浮点型数据被解序列化程序解码时不会丢失数据。
[PHP-Core-OutputControl]
; 输出控制函数很有用,特别是在已经输出了信息之后再发送HTTP头的情况下。
; 输出控制函数不会作用于header()或setcookie()等函数发送的HTTP头,
; 而只会影响类似于echo()函数输出的信息和嵌入在PHP代码之间的信息。

implicit_flush = Off

; 是否要求PHP输出层在每个输出块之后自动刷新数据。
; 这等效于在每个 print()、echo()、HTML块 之后自动调用flush()函数。
; 打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。
; 在CLI SAPI的执行模式下,该指令默认为 On 。

output_buffering = 0
; 输出缓冲区大小(字节)。建议值为4096~8192。
; 输出缓冲允许你甚至在输出正文内容之后再发送HTTP头(包括cookies)。
; 其代价是输出层减慢一点点速度。
; 设置输出缓冲可以减少写入,有时还能减少网络数据包的发送。
; 这个参数的实际收益很大程度上取决于你使用的是什么Web服务器以及什么样的脚本。

output_handler =
; 将所有脚本的输出重定向到一个输出处理函数。
; 比如,重定向到mb_output_handler()函数时,字符编码将被透明地转换为指定的编码。
; 一旦你在这里指定了输出处理程序,输出缓冲将被自动打开(output_buffering=4096)。
; 注意0: 此处仅能使用PHP内置的函数,自定义函数应在脚本中使用ob_start()指定。
; 注意1: 可移植脚本不能依赖该指令,而应使用ob_start()函数明确指定输出处理函数。
;        使用这个指令可能会导致某些你不熟悉的脚本出错。
; 注意2: 你不能同时使用"mb_output_handler"和"ob_iconv_handler"两个输出处理函数。
;        你也不能同时使用"ob_gzhandler"输出处理函数和zlib.output_compression指令。
; 注意3: 如果使用zlib.output_handler指令开启zlib输出压缩,该指令必须为空。
[PHP-Core-Directory]

doc_root =
;SYS
; PHP的"根目录"。仅在非空时有效。
; 如果safe_mode=On,则此目录之外的文件一概被拒绝。
; 如果编译PHP时没有指定FORCE_REDIRECT,并且在非IIS服务器上以CGI方式运行,
; 则必须设置此指令(参见手册中的安全部分)。
; 替代方案是使用的cgi.force_redirect指令。

include_path = ".:/path/to/php/pear"
; 指定一组目录用于require(), include(), fopen_with_path()函数寻找文件。
; 格式和系统的PATH环境变量类似(UNIX下用冒号分隔,Windows下用分号分隔):
; UNIX: "/path1:/path2"
; Windows: "path1;path2"
; 在包含路径中使用'.'可以允许相对路径,它代表当前目录。

user_dir =
;SYS
; 告诉php在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效。
; 也就是在用户目录之下使用PHP文件的基本目录名,例如:"public_html"

extension_dir = "/path/to/php"
;SYS
; 存放扩展库(模块)的目录,也就是PHP用来寻找动态扩展模块的目录。
; Windows下默认为"C:/php5"
[PHP-Core-HTTP]

default_mimetype = "text/html"
default_charset =  ;"gb2312"
; PHP默认会自动输出"Content-Type: text/html" HTTP头。
; 如果将default_charset指令设为"gb2312",
; 那么将会自动输出"Content-Type: text/html; charset=gb2312"。
[PHP-Core-Unicode]

detect_unicode = On
; 尚无文档
[PHP-Core-Misc]

auto_detect_line_endings = Off
; 是否让PHP自动侦测行结束符(EOL)。

; 如果的你脚本必须处理Macintosh文件,
; 或者你运行在Macintosh上,同时又要处理unix或win32文件,
; 打开这个指令可以让PHP自动侦测EOL,以便fgets()和file()函数可以正常工作。
; 但同时也会导致在Unix系统下使用回车符(CR)作为项目分隔符的人遭遇不兼容行为。
; 另外,在检测第一行的EOL习惯时会有很小的性能损失。

browscap =  ;"c:/windows/system32/inetsrv/browscap.ini"
;SYS
; 只有PWS和IIS需要这个设置
; 你可以从http://www.garykeith.com/browsers/downloads.asp
; 得到一个browscap.ini文件。

ignore_user_abort = Off
; 是否即使在用户中止请求后也坚持完成整个请求。
; 在执行一个长请求的时候应当考虑打开该它,
; 因为长请求可能会导致用户中途中止或浏览器超时。

user_agent =  ;"PHP"
; 定义"User-Agent"字符串

;url_rewriter.tags = "a=href,area=href,frame=src,form=,fieldset="
; 虽然此指令属于PHP核心部分,但是却用于Session模块的配置

extension
; 在PHP启动时加载动态扩展。例如:extension=mysqli.so
; "="之后只能使用模块文件的名字,而不能含有路径信息。
; 路径信息应当只由extension_dir指令提供。
;主意,在windows上,下列扩展已经内置:
; bcmath ; calendar ; com_dotnet ; ctype ; session ; filter ; ftp ; hash
; iconv ; json ; odbc ; pcre ; Reflection ; date ; libxml ; standard
; tokenizer ; zlib ; SimpleXML ; dom ; SPL ; wddx ; xml ; xmlreader ; xmlwriter

[PHP-Core-CGI]
; 这些指令只有在将PHP运行在CGI模式下的时候才有效

cgi.discard_path = Off
; 尚无文档

cgi.fix_pathinfo = On/Off(??)
; 是否为CGI提供真正的 PATH_INFO/PATH_TRANSLATED 支持(遵守cgi规范)。
; 先前的行为是将PATH_TRANSLATED设为SCRIPT_FILENAME,而不管PATH_INFO是什么。
; 打开此选项将使PHP修正其路径以遵守CGI规范,否则仍将使用旧式的不合规范的行为。
; 鼓励你打开此指令,并修正脚本以使用 SCRIPT_FILENAME 代替 PATH_TRANSLATED 。
; 有关PATH_INFO的更多信息请参见cgi规范。

cgi.force_redirect = On
; 是否打开cgi强制重定向。强烈建议打开它以为CGI方式运行的php提供安全保护。
; 你若自己关闭了它,请自己负责后果。
; 注意:在IIS/OmniHTTPD/Xitami上则必须关闭它!

cgi.redirect_status_env =
; 如果cgi.force_redirect=On,并且在Apache与Netscape之外的服务器下运行PHP,
; 可能需要设定一个cgi重定向环境变量名,PHP将去寻找它来知道是否可以继续执行下去。
; 设置这个变量会导致安全漏洞,请务必在设置前搞清楚自己在做什么。

cgi.rfc2616_headers = 0
; 指定PHP在发送HTTP响应代码时使用何种报头。
; 0 表示发送一个"Status: "报头,Apache和其它web服务器都支持。
; 若设为1,则PHP使用RFC2616标准的头。
; 除非你知道自己在做什么,否则保持其默认值 0

cgi.nph = Off

; 在CGI模式下是否强制对所有请求都发送"Status: 200"状态码。

fastcgi.impersonate = Off
; IIS中的FastCGI支持模仿客户端安全令牌的能力。
; 这使得IIS能够定义运行时所基于的请求的安全上下文。
; Apache中的mod_fastcgi不支持此特性(03/17/2002)
; 如果在IIS中运行则设为On,默认为Off。

fastcgi.logging = On
; 是否记录通过FastCGI进行的连接。

[PHP-Core-Weirdy]
; 这些选项仅存在于文档中,却不存在于phpinfo()函数的输出中

async_send = Off
; 是否异步发送。

from =  ;"john@doe.com"
; 定义匿名ftp的密码(一个email地址)
;;;;;;;;;;;;;;;;;;
;;  近核心模块  ;;
;;;;;;;;;;;;;;;;;;

[Pcre]
;Perl兼容正则表达式模块

pcre.backtrack_limit = 100000
; PCRE的最大回溯(backtracking)步数。

pcre.recursion_limit = 100000
; PCRE的最大递归(recursion)深度。
; 如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃。

[Session]
; 除非使用session_register()或$_SESSION注册了一个变量。
; 否则不管是否使用了session_start(),都不会自动添加任何session记录。
; 包括resource变量或有循环引用的对象包含指向自身的引用的对象,不能保存在会话中。
; register_globals指令会影响到会话变量的存储和恢复。

session.save_handler = "files"
; 存储和检索与会话关联的数据的处理器名字。默认为文件("files")。
; 如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"。
; 有一个使用PostgreSQL的处理器:[url]http://sourceforge.net/projects/phpform-ext /[/url]

session.save_path = "/tmp"
; 传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。
; Windows下默认为临时文件夹路径。
; 你可以使用"N;[MODE;]/path"这样模式定义该路径(N是一个整数)。
; N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。
; [MODE;]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。
; 这是一个提高大量会话性能的好主意。

Tagged as: , No Comments
21May/10

Ubuntu php 环境配置

Posted by Nick Xu

什么要叫桌面服务器配置?就是在桌面应用中加上

Web

服务器,以便于我们在本地测试相关程序,和专业服务器肯定有区别。前面写的 2 篇关于 WordPress 和 Habari 的服务器配置方法,在

Ubuntu

7.04 上完全可以推倒,因为那太“复杂”了,什么

mysql

、 pdo、perl ,都不用管,安装好后就可以直接运行 WordPress、Habari、Movable Type。翻阅了一下资料,其实在

PHP

5.1 中就加入了 pdo 支持,但 Ubuntu 6.10 时期 apt 安装 php 的时候没有把它编译进去,搞得还要自己手动添加,Ubuntu 7.10 终于默认就把它编译了进去。

很 多人认为 Ubuntu 和其他 GUN/Linux 一样是给开发者使用的系 统,我却不这么认为。如果你只习惯浏览一下网 站、写写文章、看看电影、听听歌、搞搞图 片、打打小游戏,那么 Ubuntu 7.04 完全可以胜任这些,Vista 对你来说太臃肿了。如果有人来参观,你还可以打开 beryl 给他炫一番什么叫 3D 桌面?如果你还特别爱好 WordPress ,那就更好,大家都是免费开源软件,算得上是绝配。。。好像跑题了。。。。

进 入正题,下面就是我使用 Ubuntu 7.04 用最简单最快捷的方法搭建 Apache/PHP/MySQL 环境,并加入了 Zend Engine、PHP Data Objects、GD、phpMyAdmin 等等。主要用来做本地测试,服务器的优化和安 全性就暂不考虑,做到安装步骤最简。

[ Ubuntu 7.04 + Apache 2.2.3 + PHP 5.2.1 + MySQL 5.0.38 ]

1、安装 Apache2+PHP5+MySQL

sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd zend-framework mysql-server php5-mysql phpmyadmin

joelhy 提醒 这一步可以使用新立得来安装,同样效果。
打开新立得,编辑 –> 使用任务分组标记软件包 –> 勾选 LAMP Server
然 后再单独安装 phpmyadmin
sudo apt-get install phpmyadmin

2、启用 mod_rewrite 模块

sudo a2enmod rewrite

3、配置 apache2.conf

sudo gedit /etc/apache2/apache2.conf

去掉 AddHandler cgi-script. .cgi 前的注释 “#”。

然后在任意地方添加这么一段:

<Virtualhost localhost>

   DocumentRoot /var/www/

   <Directory />

   Options FollowSymLinks

   AllowOverride all

   </Directory>

   <Directory /var/www/cgi-bin/>

   Options ExecCGI

   </Directory>

</Virtualhost>

重启服务器
sudo /etc/init.d/apache2 restart

搞定。

说明:PHP 程序放 /var/www/ 下面都可以,CGI 程序放 /var/www/cgi-bin/ 下面。

是不是太简单了,除去下载的时间,要不了一分钟就可以完成配置, 在 Ubuntu 上还需要 APM 包吗?还是记住以下几个命令和位置就行了。

sudo /etc/init.d/apache2 restart (重启 apache)
sudo gedit /etc/php5/apache2/php.ini (配置 php.ini)
sudo gedit /etc/apache2/apache2.conf (配置 apache2.conf)
/var/www/(主目录位置)

以 上服务器配置,经测试可以正常运行 WordPress、Habari、Movable Type 。

Tagged as: , No Comments
   
site
site