PHP

来源:互联网 发布:淘宝店铺常用推广方式 编辑:程序博客网 时间:2024/04/30 09:20

1      php安装

1.1    版本选择

1.1.1  如何选择PHP的VC9版本和VC6版本

    VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。

    VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。

    VC9版本是针对IIS服务器的版本,没有对APACHE的支持,而VC6版本对IIS和apache都提供了支持

1.1.2  如何选择PHP的Thread Safe和Non ThreadSafe版本

         先从字面意思上理解,ThreadSafe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe 是非线程安全,在执行时不进行线程(Thread)安全检查。

         再来看PHP的两种执行方式:ISAPI和FastCGI。      ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

         而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

1.2    GD库安装

1.2.1  libxml安装

# cd /tmp

# wget http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz

# tar zxvf libxml2-2.7.8.tar.gz

# cd libxml2-2.7.8

# ./configure --prefix=/usr/local/libxml2/

# make && make install

 

l  Error:

libxml2报错

在64位系统下安装libxml2报错./.libs/libxml2.so: undefined reference to `gzopen64'。

解决方案参考资料:

         http://hi.baidu.com/guangchun/blog/item/fadba086084bad3367096e19.html

         http://hi.baidu.com/haofefe/blog/item/ac97ebfa684f7fccb48f31d6.html

Fix:

只需在配置后面添加:--without-zlib

1.2.2  zlib安装

下面安装libpng前要安装zlib,参考:http://fruithardcandy.iteye.com/blog/1460647。

# cd /tmp

# wgethttp://www.zlib.net/zlib-1.2.3.tar.gz

# tar zxvf zlib-1.2.3.tar.gz

# cd zlib/1.2.3/

# ./configure --prefix=/usr/local/zlib2/

64位要改:

#vi Makefile

找到 CFLAGS=-O3 -DUSE_MMAP

在后面加入-fPIC,即变成CFLAGS=-O3 -DUSE_MMAP -fPIC

# make && make install

Ubuntu可直接安装

1.2.3  jpeg安装

# cd /tmp

# wgethttp://quirkysoft.googlecode.com/files/jpegsrc.v6b.tar.gz

# mkdir -pv/usr/local/jpeg6{,bin,lib,include,man/man1,man1}

# tar zxvf jpegsrc.v6b.tar.gz

# cd jpeg-6b

64位系统要执行如下两句:

# cp /usr/local/share/libtool/config.sub ./

# cp /usr/local/share/libtool/config.guess./

32位系统用:

# ./configure --prefix=/usr/local/jpeg6

64位系统用:

# ./configure --prefix=/usr/local/jpeg6/--enable-shared --enable-static

# make

# make install-lib

# make install

l  Error1:

安裝jpeg-6b png error错误解决方法

/usr/bin/install -c -m 644 jconfig.h/usr/local/jpeg6/include/jconfig.h

/usr/bin/install: cannot create regularfile `/usr/local/jpeg6/include/jconfig.h': No such file or directory

make: *** [install-headers] Error 1

Fix:

下面创建需要的文件夹

# mkdir /usr/local/jpeg6

# mkdir /usr/local/jpeg6/include

# mkdir /usr/local/jpeg6/lib

# mkdir /usr/local/jpeg6/bin

# mkdir /usr/local/jpeg6/man

# mkdir /usr/local/jpeg6/man/man1

# make clean

# make && make clean

l  Error2:

jpegb安装出现错误

php-jpeg库文件安装问题,在做 configure 的时候,报上述的错误。

Fix:

把 /usr/share/libtool/config.guess 覆盖到相关软件自带的config.guess

把 /usr/share/libtool/config.sub 覆盖到相关软件自带的config.sub

./configure ---prefix=/usr/local/jpeg6--enable-shared --enable-static

l  Error3:

/usr/bin/install -c cjpeg/usr/local/jpeg6/bin/cjpeg

Fix:

# mkdir /usr/local/jpeg6/bin

1.2.4  libpng安装

# cd /tmp

# wgetftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.11.tar.gz

# tar zxvf libpng-1.4.11.tar.gz

# cd libpng-1.4.11

Redhat 需要拷贝makefile

#cp scripts/makefile.linux makefile

# ./configure --prefix=/usr/local/libpng/

# make && make install

 

Error:configure: error:zlib not installed

Fix:设定环境变量

exportLDFLAGS="-L/usr/local/zlib/lib"

exportCPPFLAGS="-I/usr/local/zlib/include"

1.2.5  freetype安装

# cd /tmp

# wgethttp://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.3.5.tar.gz

# tar zxvf freetype-2.3.5.tar.gz

# cd freetype-2.3.5

# ./configure--prefix=/usr/local/freetype2/

# make && make install

1.2.6  gettext安装

# tar zxvf gettext-0.18.1.1.tar.gz

# cd gettext-0.18.1.1

# ./configure –prefix=/usr/local/gettext/

# make && make install

1.2.7  GD库安装

./configure --prefix=/usr/local/gd2--with-zlib=/usr/local/zlib2/ --with-png=/usr/local/libpng/--with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2/--with-gettext=/usr/local/gettext/ --with-libxml=/usr/local/libxml2

 

l  Error1:

gd库安装出错

                   不支持某些库文件:

                   Supportfor PNG library:          yes

                   Supportfor JPEG library:         yes

                   Supportfor Freetype 2.x library: yes

                   Supportfor Fontconfig library:   yes

                   Supportfor Xpm library:          yes

                   Supportfor pthreads:             yes

Fix:

Support for Fontconfig library: no    #yum -y install fontconfig-devel 

Support for Xpm library: no               #yum -y install libXpm-devel

 

l  Error2:

安装GD时的错误 make[2]: *** [gd_png.lo] Error 1

Fix:

在编译文件里vi gd_png.c

找到”#include <png.h>”

改成”#include usr/local/libpng/include/png.h>”

1.3    PHP安装

1.3.1  apache环境

./configure

--prefix=/usr/local/php5--with-config-file-path=/usr/local/php5 --with-mysql=/usr/local/mysql/--with-apxs2=/usr/local/apache2/bin/apxs --with-jpeg-dir=/usr/local/jpeg6/--with-freetype-dir=/usr/local/freetype2/ --with-zlib-dir=/usr/local/zlib/--with-png-dir=/usr/local/libpng/ --with-libxml-dir=/usr/local/libxml2--with-gd=/usr/local/gd2/ --with-mysqli=/usr/local/mysql/bin/mysql_config--with-mcrypt=/usr/local/libmcrypt/ --with-curl=/usr/local/curl

make && make install

1.3.2  nginx环境(fastcgi安装)

./configure --prefix=/usr/local/php--with-config-file-path=/usr/local/php --with-mysql=/usr/local/mysql/--with-jpeg-dir=/usr/local/jpeg6/ --with-freetype-dir=/usr/local/freetype2/--with-zlib-dir=/usr/local/zlib/ --with-png-dir=/usr/local/libpng/--with-libxml-dir=/usr/local/libxml2 --with-gd=/usr/local/gd2/--with-mysqli=/usr/local/mysql/bin/mysql_config --with-curl=/usr/local/curl--enable-fastcgi --enable-fpm

make && make install

1.4    扩展库安装

1.4.1  安装扩展库curl

下载地址:http://curl.haxx.se/.

l  安装php之前:

# ./configure --prefix=/usr/local/curl

# make && make install

配置php时添加--with-curl=/usr/local/curl即可

l  安装php之后:

首先安装curl,

# ./configure --prefix=/usr/local/curl

# make && make install

# cd /usr/local/src/php-5.3.10/ext/curl/

# /usr/local/php5/bin/phpize

# ./configure--with-php-config=/usr/local/php5/bin/php-config --with-curl=/usr/local/curl/

# make && make install

# cp/usr/local/php5/lib/php/extensions/no-debug-zts-20090626/curl.so

/usr/local/php5/lib/php/extensions/curl.so

# vi /usr/local/php5/php.ini    

添加extension_dir="/usr/local/php5/lib/php/extensions"    extension=curl.so

# service httpd restart

1.4.2  安装扩展库libmcrypt

需要在php安装时编译

mcrypt:http://haikong808.blog.51cto.com/434419/392106

同curl扩展

1.4.3  安装扩展库mbstring

http://www.jb51.net/os/RedHat/10332.html

# cd /usr/local/src/php-5.3.10/ext/mbstring/

# /usr/local/php5/bin/phpize

# ./ocnfigure--with-php-config=/usr/local/php5/bin/php-config

# make && make install

# cp/usr/local/php5/lib/php/extensions/no-debug-zts-20090626/mbstring.so

/usr/local/php5/lib/php/extensions/mbstring.so

# vi /usr/local/php5/php.ini    

添加extension_dir="/usr/local/php5/lib/php/extensions"    extension=mbstring.so

# service httpd restart

1.4.4  安装扩展库memcache

# tar zxvf memcache-3.0.6.tgz

# cd memcache-3.0.6

# /usr/local/php/bin/phpize

# ./configure--with-php-config=/usr/local/php/bin/php-config --enable-memcache

# make && make install

# vi /usr/local/php/lib/php.ini

增加

extension_dir ="/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922/"

extension=memcache.so

2      配置

2.1    Fastcgi配置管理

2.1.1  Fastcgi配置优化

php-fpm默认配置文件:/usr/local/php/etc/php-fpm.conf

2.1.2  Fastcgi进程管理

在配置完php-fpm后,就可以启动FastCGI进程了。

启动fastcgi进程有两种方式:

/usr/local/php/bin/php-cgi --fpm   或者

/usr/local/php/sbin/php-fpm  start 

建议采用第二种方式启动FastCGI进程。

/usr/local/php/sbin/php-fpm参数,具体为start|stop|quit|restart|reload|logrotate。

每个启动参数的含义:

? start,启动PHP的FastCGI进程。 

? stop,强制终止PHP的FastCGI进程。 

? quit,平滑终止PHP的FastCGI进程。 

? restart, 重启PHP的FastCGI进程。 

? reload, 重新加载PHP的php.ini。 

? logrotate, 重新启用log文件。 

reload是个很重要的参数,它可以在PHP的FastCGI进程不中断的情况下重新加载改动过的php.ini,因此通过php-fpm可以平滑变更FastCGI模式下的PHP设置。

 

在FastCGI进程启动后,其监听的IP地址和端口也随即启动,可以通过ps和netstat查看相关信息。netstat -antl|grep 9000  ps-ef|grep php-cgi

2.2    PHP配置管理

查看php版本:php –v

3      基本语法

3.1    PHP中超级全局变量使用

(参考资料:http://www.5idev.com/p-php_server.shtml)

3.1.1  GPSC

EGPCS值: (EGPCS是Environment、Get、Post、Cookies、Server的缩写 -- 这是PHP中外部变量来源的全部范围).

3.1.2  $_ENV

php中的$_ENV存储了一些系统的环境变量,因环境不同而值不同.

但有时候$_ENV是空的,可能有以下原因:

在php.ini中的variables_order值为"GPCS",也就是说系统在定义PHP预定义变量时的顺序是GET,POST,COOKIES,SERVER,没有定义Environment(E),

你可以修改php.ini文件的variables_order值为你想要的顺序,如:"EGPCS"。这时,$_ENV的值就可以取得了

可以用foreach来遍历$_ENV的数据,也可以直接用print_r($_ENV)来打印这个变量,查看他的数据.

3.1.3  $_SERVER

$_SERVER['QUERY_STRING']:查询(query)的字符串

$_SERVER['REQUEST_URI']:访问此页面所需的URI

$_SERVER['SCRIPT_NAME']:包含当期脚本的路径

$_SERVER['PHP_SELF']:当前正在执行脚本的文件名

 

eg.http://www.biuuu.com/index.php?p=222&q=biuuu

$_SERVER["QUERY_STRING"] =“p=222&q=biuuu”

$_SERVER["REQUEST_URI"] =“/index.php?p=222&q=biuuu”

$_SERVER["SCRIPT_NAME"] =“/index.php”

$_SERVER["PHP_SELF"] =“/index.php”

$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值

$_SERVER["REQUEST_URI"] 获取http://www.biuuu.com后面的值,包括/

$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php

$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名

3.2    过滤文本中特殊符号

htmlspecialchars()本函数将特殊字符转成HTML 的字符串格式 ( &....; )。最常用到的场合可能就是处理客户留言的留言版了。

& (和) 转成 &amp;

" (双引号) 转成 &quot;

< (小于) 转成 &lt;

> (大于) 转成 &gt;

此函数只转换上面的特殊字符,并不会全部转换成 HTML 所定的 ASCII 转换。

 

3.3    date

date_default_timezone_set(“Asia/Shanghai”)

时区格式:Asia/Shanghai; PRC

见:时区格式表http://www.php.net/manual/zh/timezones.asia.php

3.4    字符串函数

对大小写敏感的搜索:strpos()、str_replace();

对大小写不敏感的搜索:stripos()、str_ireplace()

3.5    SESSION COOKIE

3.5.1  SESSION

每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

Session_id():32位数 01aab840166fd1dc253e3b4a3f0b8381,

session_id(‘hello’)则sessionID为hello,存放server端session文件名为sess_**和sess_hello两个文件

session.name:Session_name();默认为sessionID存储的变量名称,存放client,默认PHPSESSID

session.cookie_lifetime:代表sessionID在客户端cookie存储的时间,默认为0,代表浏览器关闭session就失效

 

session在不同文件传值:

filenameA:

<?php

session_start();

$_SESSION['user']= 'hello';

echosession_id('hello');           //j625oahiuq5bg6a75601of0ie7,设置sessionidhello

echosession_id();                    // hello

echosession_name();                     //PHPSESSID

//session_destroy();

?>

filenameB:

<?php

session_id('hello');                    //sessionidhellosession,才可传值

session_start();

print_r($_SESSION);

echosession_id();                    // hello

//session_destroy();

?>

 

3.5.1.1 session存放server端

(一般是Apache with PHPmodule)

Session 存放server端位置两种设置方式:

session.save_path = ‘/tmp’;ini_set(‘session.save_path’,‘/tmp’)

默认情况:

php会将session保存在/tmp目录下文件名为:

sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。

more/tmp/sess_01aab840166fd1dc253e3b4a3f0b8381

session文件格式:username|s:9:”jiangfeng”;admin|s:1:”0″;

#变量名|类型:长度:值

删除这里的session文件,就表示对应的session失效了。

3.5.1.2 session存放client端(一般是浏览器)

session在浏览器端,只需要保存session ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:

index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通过session.use_cookies来控制使用哪一种方式)

3.5.1.3 session过期时间参数

两种设置方式:session.gc_maxlifetime = 1440;ini_set(‘session.gc_maxlifetime’,1440)

在server端,php如何判断session文件是否过期?

如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。

 

修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间。

注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除。

3.5.1.4 session回收机制

由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量

session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改)的值,来决定是否启动一个GC(Garbage Collector)。默认情况下,session.gc_probability = 1,session.gc_divisor=100,也就是说有1%的可能性会启动GC。

GC的工作,就是扫描所有的session信息,用当前时间减去session的最后修改时间(modifieddate),同session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除。

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

#概率是gc_probability/gc_divisor

session.gc_probability = 1

session.gc_divisor = 100

注意:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm

3.5.1.5 特殊处理

Session会话一直有效,但session内容长时间未改动,则回收机制会删除session。可如下解决:

<?php

if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)

 $_SESSION['last_access'] = time();

?>

代码会每隔60秒修改一次session。

 

总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。

3.5.2  COOKIE

设置cookie生效时间两种方式:setcookie(‘user’,’admin’,time()+3600); session.cookie_lifetime.

3.6    文件操作

3.6.1  文件基本操作

目录函数

Is_dir()文件名存在并且为目录

getcwd()获取当前目录

3.6.2  文件下载

见api/2.6.1.php代码

3.6.3  文件上传

上传方式:

         表单提交,模拟表单提交功能,jsclone()

         Ajaxfileupload上传控件,参考代码:api/ajaxfileupload

3.7    Array操作

3.7.1  shift函数

l  Array_shift()

语法 : mixed array_shift(array array);

说明 : 此函数移动数组array的第一个元素并将它传回,将数组array缩短一个元素,并且全部向下移动。

l  Array_unshift()

语法 : int array_unshift(array array, mixed var, [...] );

说明 : 此函数增加元素到数组array的前面,此函数传回数组array中新的元素数目。

4      Plug-in

4.1    LDAP

ldap 目前只能在32位系统下运行

ldap redhat 64位报错修正:找到 AC_CFLAGS = -g -O2 改成 ... AC_CFLAGS = -g -O2 -fPIC

4.2    PHPExcel

5      Rewrite

如果 httpd.conf文件中<Directory "F:/www"> 地方改为AllowOverrideNone,则 .htaccess文件中下列值失效:

php_value upload_max_filesize"1024M"

php_value post_max_size "1024M"

和是否启动mod_rewrite模块无关

 

补充:

5、XML

6、smarty

7、PDO

8、js执行php文件

 

9、正则表达式函数

 

 

需要解决的问题:

1、自动加载魔术方法autoload(),需要使用某个具体类的时候加载该类

2、new self()创建所在类的一个实例

1. redis

2. 伪静态处理

3. cdn缓存

4. gd库实现图片缩放

5. Instagram 图片分享社区

6. Cdn 高速缓存技术

7. varnish根据cookie生成缓存   url地址加参数生成缓存

原创粉丝点击