2008年11月25日星期二

bat manual

1 echo 和 @@ #关闭单行回显
echo off #从下一行开始关闭回显
@echo off #从本行开始关闭回显。一般批处理第一行都是这个
echo on #从下一行开始打开回显
echo #显示当前是 echo off 状态还是 echo on 状态
echo. #输出一个”回车换行”,空白行
#(同echo, echo; echo+ echo[ echo] echo/ echo\)

2 errorlevelecho %errorlevel%
每个命令运行结束,可以用这个命令行格式查看返回码
默认值为0,一般命令执行出错会设 errorlevel 为13 dirdir #显示当前目录中的文件和子目录
dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件
dir c: /a:d #显示 C 盘当前目录中的目录
dir c: /a:-d #显示 C 盘根目录中的文件
dir c:\ /b/p #/b只显示文件名,/p分页显示
dir *.exe /s #显示当前目录和子目录里所有的.exe文件
4 cdcd\ #进入根目录
cd #显示当前目录
cd /d d:\sdk #可以同时更改盘符和目录5 mdmd d:\a\b\c #如果 d:\a 不存在,将会自动创建中级目录
#如果命令扩展名被停用,则需要键入 mkdir \a\b\c。6 rdrd abc #删除当前目录里的 abc 子目录,要求为空目录
rd /s/q d:\temp #删除 d:\temp 文件夹及其子文件夹和文件,/q安静模式7 deldel d:\test.txt #删除指定文件,不能是隐藏、系统、只读文件
del /q/a/f d:\temp\*.*
删除 d:\temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
del /q/a/f/s d:\temp\*.*
删除 d:\temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录8 ren

ren d:\temp tmp #支持对文件夹的重命名9 cls
清屏10 type
显示文件内容type c:\boot.ini #显示指定文件的内容,程序文件一般会显示乱码
type *.txt #显示当前目录里所有.txt文件的内容11 copy
拷贝文件copy c:\test.txt d:\test.bak
复制 c:\test.txt 文件到 d:\ ,并重命名为 test.bakcopy con test.txt
从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为test.txt文件
con代表屏幕,prn代表打印机,nul代表空设备copy 1.txt + 2.txt 3.txt
合并 1.txt 和 2.txt 的内容,保存为 3.txt 文件
如果不指定 3.txt ,则保存到 1.txtcopy test.txt +
复制文件到自己,实际上是修改了文件日期12 title
设置cmd窗口的标题title 新标题 #可以看到cmd窗口的标题栏变了13 ver
显示系统版本14 label 和 vol
设置卷标vol #显示卷标
label #显示卷标,同时提示输入新卷标
label c:system #设置C盘的卷标为 system15 pause
暂停命令16 rem 和 ::
注释命令注释行不执行操作17 date 和 time
日期和时间date #显示当前日期,并提示输入新日期,按\"回车\"略过输入
date/t #只显示当前日期,不提示输入新日期
time #显示当前时间,并提示输入新时间,按\"回车\"略过输入
time/t #只显示当前时间,不提示输入新时间18 goto 和 :
跳转命令:label #行首为:表示该行是标签行,标签行不执行操作
goto label #跳转到指定的标签那一行19 find (外部命令)
查找命令find \"abc\" c:\test.txt
在 c:\test.txt 文件里查找含 abc 字符串的行
如果找不到,将设 errorlevel 返回码为1find /i “abc” c:\test.txt
查找含 abc 的行,忽略大小写find /c \"abc\" c:\test.txt
显示含 abc 的行的行数20 more (外部命令)
逐屏显示more c:\test.txt #逐屏显示 c:\test.txt 的文件内容21 tree
显示目录结构tree d:\ #显示D盘的文件目录结构22 &
顺序执行多条命令,而不管命令是否执行成功23 &&
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令find \"ok\" c:\test.txt && echo 成功
如果找到了\"ok\"字样,就显示\"成功\",找不到就不显示24 ||
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令find \"ok\" c:\test.txt || echo 不成功
如果找不到\"ok\"字样,就显示\"不成功\",找到了就不显示25 |
管道命令dir *.* /s/a | find /c \".exe\"
管道命令表示先执行 dir 命令,对其输出的结果执行后面的 find 命令
该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数type c:\test.txt|more
这个和 more c:\test.txt 的效果是一样的26 > 和 >>
输出重定向命令> 清除文件中原有的内容后再写入
>> 追加内容到文件末尾,而不会清除原有的内容
主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件type c:\test.txt >prn
屏幕上不显示文件内容,转向输出到打印机echo hello world>con
在屏幕上显示hello world,实际上所有输出都是默认 >con 的copy c:\test.txt f: >nul
拷贝文件,并且不显示\"文件复制成功\"的提示信息,但如果f盘不存在,还是会显示出错信息copy c:\test.txt f: >nul 2>nul
不显示”文件复制成功”的提示信息,并且f盘不存在的话,也不显示错误提示信息echo ^^W ^> ^W>c:\test.txt
生成的文件内容为 ^W > W
^ 和 > 是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号27 <
从文件中获得输入信息,而不是从屏幕上一般用于 date time label 等需要等待输入的命令
@echo off
echo 2005-05-01>temp.txt
date del temp.txt
这样就可以不等待输入直接修改当前日期28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
命令行传递给批处理的参数%0 批处理文件本身
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数

批参数(%n)的替代已被增强。您可以使用以下语法:

%~1 - 删除引号(\"),扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1
扩充到找到的第一个完全合格的名称。如果环境
变量名未被定义,或者没有找到文件,此组合键会
扩充到空字符串

可以组合修定符来取得多重结果:

%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,
并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
可以参照 call/? 或 for/? 看出每个参数的含意echo load \"%%1\" \"%%2\">c:\test.txt
生成的文件内容为 load \"%1\" \"%2\"
批处理文件里,用这个格式把命令行参数输出到文件29 if
判断命令if \"%1\"==\"/a\" echo 第一个参数是/aif /i \"%1\" equ \"/a\" echo 第一个参数是/a
/i 表示不区分大小写,equ 和 == 是一样的,其它运算符参见 if/?if exist c:\test.bat echo 存在c:\test.bat文件if not exist c:\windows (
echo 不存在c:\windows文件夹
)if exist c:\test.bat (
echo 存在c:\test.bat
) else (
echo 不存在c:\test.bat
)30 setlocal 和 endlocal
设置”命令扩展名”和”延缓环境变量扩充”SETLOCAL ENABLEEXTENSIONS #启用\"命令扩展名\"
SETLOCAL DISABLEEXTENSIONS #停用\"命令扩展名\"
SETLOCAL ENABLEDELAYEDEXPANSION #启用\"延缓环境变量扩充\"
SETLOCAL DISABLEDELAYEDEXPANSION #停用\"延缓环境变量扩充\"
ENDLOCAL #恢复到使用SETLOCAL语句以前的状态“命令扩展名”默认为启用
“延缓环境变量扩充”默认为停用
批处理结束系统会自动恢复默认值可以修改注册表以禁用\"命令扩展名\",详见 cmd /? 。所以用到\"命令扩展名\"的程
序,建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句,以确
保程序能在其它系统上正确运行\"延缓环境变量扩充\"主要用于 if 和 for 的符合语句,在 set 的说明里有其实用例程31 set
设置变量引用变量可在变量名前后加 % ,即 %变量名%set #显示目前所有可用的变量,包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2
echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2
echo %p:~0,3% #显示前3个字符,即aa1
echo %p:~-2% #显示最后面的2个字符,即b2
echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #设置p为数值型变量,值为39
set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用
set /a p=”1&0″ #”与”运算,要加引号。其它支持的运算符参见set/?
set p= #取消p变量set /p p=请输入
屏幕上显示”请输入”,并会将输入的字符串赋值给变量p
注意这条可以用来取代 choice 命令注意变量在 if 和 for 的复合语句里是一次性全部替换的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p%
)
结果将显示
aaa
aaa
因为在读取 if 语句时已经将所有 %p% 替换为aaa
这里的\"替换\",在 /? 帮助里就是指\"扩充\"、\"环境变量扩充\"
可以启用”延缓环境变量扩充”,用 ! 来引用变量,即 !变量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo !p!
)
ENDLOCAL
结果将显示
aaa
bbb还有几个动态变量,运行 set 看不到
%CD% #代表当前目录的字符串
%DATE% #当前日期
%TIME% #当前时间
%RANDOM% #随机整数,介于0~32767
%ERRORLEVEL% #当前 ERRORLEVEL 值
%CMDEXTVERSION% #当前命令处理器扩展名版本号
%CMDCMDLINE% #调用命令处理器的原始命令行
可以用echo命令查看每个变量值,如 echo %time%
注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到32 start
批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令33 call
批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行
有时有的应用程序用start调用出错的,也可以call调用34 choice (外部命令)
选择命令让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……
win98里是choice.com
win2000pro里没有,可以从win98里拷过来
win2003里是choice.exechoice /N /C y /T 5 /D y>nul
延时5秒35 assoc 和 ftype
文件关联assoc 设置'文件扩展名'关联,关联到'文件类型'
ftype 设置'文件类型'关联,关联到'执行程序和参数'当你双击一个.txt文件时,windows并不是根据.txt直接判断用 notepad.exe 打开
而是先判断.txt属于 txtfile '文件类型'
再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1可以在\"文件夹选项\"→\"文件类型\"里修改这2种关联assoc #显示所有'文件扩展名'关联
assoc .txt #显示.txt代表的'文件类型',结果显示 .txt=txtfile
assoc .doc #显示.doc代表的'文件类型',结果显示 .doc=Word.Document.8
assoc .exe #显示.exe代表的'文件类型',结果显示 .exe=exefile
ftype #显示所有'文件类型'关联
ftype exefile #显示exefile类型关联的命令行,结果显示 exefile=\"%1\" %* assoc .txt=Word.Document.8
设置.txt为word类型的文档,可以看到.txt文件的图标都变了assoc .txt=txtfile
恢复.txt的正确关联

ftype exefile=\"%1\" %*
恢复 exefile 的正确关联
如果该关联已经被破坏,可以运行 command.com ,再输入这条命令36 pushd 和 popd
切换当前目录@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp437 for
循环命令这个比较复杂,请对照 for/? 来看for %%i in (c: d: e: f:) do echo %%i
依次调用小括号里的每个字符串,执行 do 后面的命令
注意%%i,在批处理中 for 语句调用参数用2个%
默认的字符串分隔符是\"空格键\",\"Tab键\",\"回车键\"for %%i in (*.txt) do find \"abc\" %%i
对当前目录里所有的txt文件执行 find 命令for /r . %%i in (*.txt) do find \"abc\" %%i
在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行for /r . %%i in (.) do echo %%~pni
显示当前目录名和所有子目录名,包括路径,不包括盘符for /r d:\mp3 %%i in (*.mp3) do echo %%i>>d:\mp3.txt
把 d:\mp3 及其子目录里的mp3文件的文件名都存到 d:\mp3.txt 里去for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1for /f %%i in ('set') do echo %%i
对 set 命令的输出结果循环调用,每行一个for /f \"eol=P\" %%i in ('set') do echo %%i
取 set 命令的输出结果,忽略以 P 开头的那几行for /f %%i in (d:\mp3.txt) do echo %%i
显示 d:\mp3.txt 里的每个文件名,每行一个,不支持带空格的名称for /f \"delims=\" %%i in (d:\mp3.txt) do echo %%i
显示 d:\mp3.txt 里的每个文件名,每行一个,支持带空格的名称for /f \"skip=5 tokens=4\" %%a in ('dir') do echo %%a
对 dir 命令的结果,跳过前面5行,余下的每行取第4列
每列之间的分隔符为默认的\"空格\"
可以注意到 dir 命令输出的前5行是没有文件名的for /f \"tokens=1,2,3 delims=- \" %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)
对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和\"空格\",注意 delims=- 后面有个\"空格\"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的for /f \"tokens=2* delims=- \" %%a in ('date /t') do echo %%b
取第2列给 %%a ,其后的列都给 %%b32 subst (外部命令)
映射磁盘。subst z: \server\d #这样输入z:就可以访问\server\d了
subst z: /d #取消该映射
subst #显示目前所有的映时38 xcopy (外部命令)
文件拷贝xcopy d:\mp3 e:\mp3 /s/e/i/y
复制 d:\mp3 文件夹、所有子文件夹和文件到 e:\ ,覆盖已有文件
加 /i 表示如果 e:\ 没有 mp3 文件夹就自动新建一个,否则会有询问

2008年11月24日星期一

DOS(windows命令行)截取变量中字符串问题的详细说明

为了说明截取变量中字符串的问题曾经举过如下这个例子:

@echo off
set str=123456789
echo 第一个字符为:%str:~0,1%
echo 头两个字符为:%str:~0,2%
echo 头5个字符为:%str:~0,5%
echo 去掉最后一个字符后的字符串为:%str:~0,-1%
echo 去掉最后3个字符后的字符串为:%str:~0,-3%
echo 第4个字符为:%str:~3,1%
echo 第4个及其之后的3个字符为:%str:~3,4%
echo 最后一个字符为:%str:~-1%
echo 最后一个字符为:%str:~-1,1%
echo 最后一个字符为:%str:~-1,2%
echo 倒数第4个字符为:%str:~-4,1%
echo 倒数第4个及其之后的字符为:%str:~-4%
echo 倒数第4个及其之后的1个字符为:%str:~-4,2%
echo 倒数第4个及其之后的2个字符为:%str:~-4,3%
pause
为了说明这个问题,我在这里把批处理取字符,做下进一步的解释,希望对新手有所启发
如下:
echo %var:~n,k%
我们在这里对每个参数做个说明:"%var",即我们要从中要截取字符的字符串." ~ "取字

符标志符(我是这么理解的),"n" 我们将其理解为指针,"k"我们将其理解为偏移地址.(注

:指针和偏移地址都是从零开始数的)
我们还是用namejm版主的例子做下说明:

@echo off
set str=123456789

rem 定义一个str字符串为123456789

echo 第一个字符为:%str:~0,1%

rem 指针为0,偏移地址为1,即从第0位开始,取1位

echo 头两个字符为:%str:~0,2%

rem 指针为0,偏移地址为2,即从第0位开始,取2位

echo 头5个字符为:%str:~0,5%

rem 指针为0,偏移地址为5,即从第0位开始,取5位

echo 去掉最后一个字符后的字符串为:%str:~0,-1%

rem 当"k"为负值时,我们可以这样理解:从指针开始处开始取其后面所有字符,然后减去

后面"abs(k)位"..所以这个句字我们可以做如下解释:从第0位开始取其全部字符

为:123456789然后从后面减去abs(k)位,所以最后结果为:12345678

echo 去掉最后3个字符后的字符串为:%str:~0,-3%

rem 该句解释同上↑

echo 最后一个字符为:%str:~-1%

rem 参数"n,"和"k"都可以为缺省,缺省"n,"时可以理解为:从abs(k)位开始取其全部

echo 倒数第4个及其之后的字符为:%str:~-4%

rem 解释同上↑

echo 最后一个字符为:%str:~-1,1%

rem n为负值时,表示从后面开始截取字符,取k位(此时n应从1开始数)

echo 最后一个字符为:%str:~-1,2%

rem 解释同上↑

echo 倒数第4个字符为:%str:~-4,1%

rem 解释同上↑

echo 倒数第4个及其之后的1个字符为:%str:~-4,2%

rem 解释同上↑

echo 倒数第4个及其之后的2个字符为:%str:~-4,3%

rem 解释同上↑
pause


请问dos中如何截取字符串中开头的2个字符呢?
set str=teststr
echo %str:~0,2%

即把字符串读到变量中后,然后用%var:~0,2%方式重新获取即可

//或者通过查找某个字符,然后从该字符处开始截取2个字符?

查找字符推荐使用findstr命令,具体参数请查看帮助。
findstr /?


熟练使用DOS命令,让我回归自然!
其实,DOS批处理是比较强大的,
从DOS(windows命令行)截取字符串,你会用DOS了吗?

2008年11月19日星期三

PHP SOAP 教程 实例 基础篇(一)(转自播客)

为了公开接口,被其他的应用程序调用,经常需要创建SOAP端,而在PHP中,SOAP的使用自从PHP4就有了广泛的使用,开源的例如nosoap都是很不错的SOAP类,在PHP5开始,就已经支持SOAP了,在php_soap.dll(如果需要,请确定你的PHP5+的PHP.INI的SOAP扩展是打开的,并在phpinfo()中可以看到SOAP扩展。)
SOAP的使用有三个步骤:

1:创建您需要真正执行的程序,返回为一函数,例如需要查询当前的时间,我们创建获取目前时间的函数(可创建保存在soapfunction.php):


function GetTime(){
return date('Y-m-d',time());
}


2:然后创建一个SOAPServer(可以创建于soaps.php):

include_once('soapfunction.php');
$soap = new SoapServer(null,array('uri'=>"http://www.5do8.com/webs/"));
$soap->addFunction('GetTime');
$soap->handle();


以上代码第一行是包含了soap要执行的文件,第二行创建了一个SoapServer类,该类的第一个参数是wsdl,第二个参数是uri,php自带目前不支持自动生成wsdl,这个构造函数如果第一个参数是null,第二个是必填的,第二个参数就是命名空间,这是为了保证互联网WebServer的一致性和开发的一致性而产生的,你可以写入任何你想要的地址,无论存在与否。
3:客户端访问(可以创建soapc.php):

$client = new SoapClient(null, array('location' =>"http://s/test/soap/soaps.php",'uri' => "http://www.5do8.com/webs/"));
$reversed = $client->GetTime();
echo "获取到时间是:".$reversed;



这里第一行市创建一个SoapClent,第一个参数还是wsdl,这里为null,第二个参数中必须包含命名空间(uri),这两个参数都要和需要访问的SoapServer一致,而执行地址(location)为SoapServer的php访问地址。

访问soapc.php,将返回(类似):

获取到时间是:2008-04-08


到此,一个简单的SOAP传递结束了。

相关:我博客更多关于SOAP的知识。

2008年11月18日星期二

tomcat mine 大全(转自网络)

Tomcat在默认情况下下载.rar/.mp3的文件是把文件当作文本文件打开,

导致打开后,不是下载,而是乱码一页,解决方法网上不是很多也

不全面,于是我找了凑在一起弄了这个;


解决方法:

打开conf/web.xml,加入下面的代码.

请大家按需要选择
1 < mime-mapping >
2 < extension > doc
3 < mime-type > application/msword
4
5 < mime-mapping >
6 < extension > xls
7 < mime-type > application/msexcel
8
9 < mime-mapping >
10 < extension > pdf
11 < mime-type > application/pdf
12
13 < mime-mapping >
14 < extension > zip
15 < mime-type > application/zip
16
17 < mime-mapping >
18 < extension > rar
19 < mime-type > application/rar
20
21 < mime-mapping >
22 < extension > txt
23 < mime-type > application/txt
24
25 < mime-mapping >
26 < extension > chm
27 < mime-type > application/mshelp
28
29 < mime-mapping >
30 < extension > mht
31 < mime-type > text/x-mht
32
33 < mime-mapping >
34 < extension > rar
35 < mime-type > application/octet-stream
36
37 < mime-mapping >
38 < extension > iso
39 < mime-type > application/octet-stream
40
41 < mime-mapping >
42 < extension > ape
43 < mime-type > application/octet-stream
44
45 < mime-mapping >
46 < extension > rmvb
47 < mime-type > application/octet-stream
48
49 < mime-mapping >
50 < extension > ico
51 < mime-type > image/x-icon
52
53 < mime-mapping >
54 < extension > dsp
55 < mime-type > text/html
56
57 < mime-mapping >
58 < extension > gif
59 < mime-type > image/gif
60
61 < mime-mapping >
62 < extension > htm
63 < mime-type > text/html
64
65 < mime-mapping >
66 < extension > html
67 < mime-type > text/html
68
69 < mime-mapping >
70 < extension > jnlp
71 < mime-type > application/x-java-jnlp-file
72
73 < mime-mapping >
74 < extension > jpeg
75 < mime-type > image/jpeg
76
77 < mime-mapping >
78 < extension > jpg
79 < mime-type > image/jpeg
80
81 < mime-mapping >
82 < extension > js
83 < mime-type > application/x-javascript
84
85 < mime-mapping >
86 < extension > pdf
87 < mime-type > application/pdf
88
89 < mime-mapping >
90 < extension > png
91 < mime-type > image/png
92
93 < mime-mapping >
94 < extension > txt
95 < mime-type > text/plain
96
97 < mime-mapping >
98 < extension > xls
99 < mime-type > application/vnd.ms-excel
100
101 < mime-mapping >
102 < extension > xml
103 < mime-type > text/xml
104
105 < mime-mapping >
106 < extension > xul
107 < mime-type > application/vnd.mozilla.xul-xml
108
109 < mime-mapping >
110 < extension > zhtml
111 < mime-type > text/html
112
113 < mime-mapping >
114 < extension > zip
115 < mime-type > application/x-zip
116
117 < mime-mapping >
118 < extension > zul
119 < mime-type > text/html
120
121 < mime-mapping >
122 < extension > foo
123 < mime-type > application/x-fubar
124
125 < mime-mapping >
126 < extension > ps
127 < mime-type > application/postscrīpt
128
129
130

其他的,用法和上面一样给个大概:

1application/astound asd,asn
2application/bld bld
3application/bld2 bld2
4application/cprplayer pqi
5application/e-score sdf
6application/fastman lcc
7application/font-tdpfr pfr
8application/futuresplash spl
9application/java-archive jar
10application/jwc jwc
11application/lgh lgh
12application/listenup ptlk
13application/mac-binhex40 hqx
14application/mbedlet mbd
15application/metastream mts,mtx,mtz,mzv,rtg,
16application/msword doc
17application/octet-stream avb, AVB, bin, bpk, class, dmg,exe, tad, TAD, ttf,dll
18application/oda oda
19application/pdf pdf
20application/postscript ai,eps,ps
21application/presentations shw
22application/rdf+xml rdf
23application/rtf rtf
24application/smil smi
25application/studiom smp
26application/timbuktu tbt
27application/toc toc
28application/t-time ttz
29application/vnd.fujixerox.docuworks xdw
30application/vnd.lotus-1-2-3 123
31application/vnd.ms-excel xls,xlw,xla,xlc,xlm,xlt
32application/vnd.ms-powerpoint ppt,pps,pot
33application/vnd.ms-project mpp
34application/vnd.rn-realplayer rnx
35application/vnd.wap.wmlc wmlc
36application/winhlp hlp
37application/x-asap asp
38application/x-AtlasMate-Plugin oom
39application/x-authoware-bin aab
40application/x-authoware-map aam
41application/x-authoware-seg aas
42application/x-bzip2 bz2
43application/x-cmx cmx
44application/x-cnc ccn
45application/x-cocoa cco
46application/x-cprplayer pqf
47application/x-csh csh
48application/x-cult3d-object co 丂丂丂
49application/x-digitalloca lcr,lcl
50application/x-director dcr,dir,dxr
51application/x-dot dot
52application/x-dreamcast-vms vms
53application/x-dreamcast-vms-info vmi
54application/x-dvi dvi
55application/x-earthtime etc
56application/x-envoy evy
57application/x-excel xls,xlc,xll,xlm,xlw
58application/x-expandedbook ebk
59application/x-gca-compressed gca
60application/x-gtar gtar
61application/x-gps gps
62application/x-gzip gz,x-gzip
63application/x-hdf hdf
64application/xhtml+xml xhtml,xhtm,xht
65application/x-ipix ipx
66application/x-jam jam
67application/x-javascript js
68application/x-java-jnlp-file jnlp
69application/x-kjx kjx
70application/x-Koan skp,skd,skt,skm
71application/x-latex latex
72application/x-lzh lzh, LZH
73application/x-maker fm
74application/x-mapserver mps
75application/x-mascot mct
76application/x-mif mif,mi
77application/x-mocha mocha,moc
78application/x-mpeg amc
79application/x-mrm mrm
80application/x-mscardfile crd
81application/x-msaccess mdb
82application/x-msclip clp
83application/x-msmediaview m13,m14
84application/x-msmetafile wmf
85application/x-msmoney mny
86application/x-mspublisher pub
87application/x-msschedule scd
88application/x-msterminal trm
89application/x-mswrite wri
90application/x-NET-Install ins
91application/x-netcdf nc,cdf
92application/x-netfpx npx
93application/x-neva1 nva
94application/x-nif nif
95application/x-ns-proxy-autoconfig proxy
96application/x-pan pan
97application/x-perl pm
98application/x-pmd pmd
99application/x-prc prc
100application/x-richlink rlf
101application/x-rogerwilco rwc
102application/x-salsa slc
103application/x-scream nmz
104application/x-sh sh
105application/x-shar shar
106application/x-shockwave-flash swf,swfl
107application/x-smaf mmf
108application/x-sprite spr,sprite
109application/x-spt spt
110application/x-supercard sca
111application/x-stuffit sit,sea
112application/x-tar tar,tgz,taz
113application/x-tcl tcl
114application/x-tex tex
115application/x-texinfo texinfo,texi
116application/x-timbuktu tbp
117application/x-tkined tki,tkined
118application/x-troff t,tr,roff
119application/x-troff-man man
120application/x-troff-me me
121application/x-troff-ms ms
122application/x-wais-source src
123application/x-wxl wxl
124application/x-xdma xdm,xdma
125application/x-xpinstall xpi
126application/x-yumekara mof
127application/x-yz1 yz1
128application/x-zaurus-zac zac
129application/zip zip,nar
130audio/basic au,snd
131audio/echospeech es,esl
132audio/midi mid,midi
133audio/tsplayer tsi
134audio/vnd.qcelp qcp
135audio/voxware vox
136audio/x-aiff aif,aiff,aifc
137audio/X-Alpha5 als
138audio/x-epac pae
139audio/x-imy imy
140audio/x-mio mio
141audio/x-mod mod, s3z, xm, it, s3m, xmz, itz, mdz
142audio/x-mpeg mp2, mp3
143audio/x-mpegurl m3u
144audio/x-ms-wax wax
145audio/x-ms-wma wma
146audio/x-pn-realaudio ra, ram, rm
147audio/x-pac pac
148audio/x-pn-RealAudio-plugin rpm
149audio/x-smd smd,smz
150audio/x-twinvq vqf, vql
151audio/x-twinvq-plugin vqe
152audio/x-wav wav
153chemical/x-pdb pdb
154chemical/x-csml csm,csml
155chemical/x-gaussian-input gau
156chemical/x-embl-dl-nucleotide emb,embl
157chemical/x-mdl-molfile mol
158chemical/x-xyz xyz
159chemical/x-mopac-input mop
160drawing/x-dwf dwf
161image/bmp bmp
162image/cis-cod cod
163image/fif fif
164image/gif gif,ifm
165image/ief ief
166image/ifs ifs
167image/jpeg jpeg,jpg,jpe,jpz
168image/j2k j2k
169image/png png,pnz
170image/svg-xml svg
171image/svh svh
172image/tiff tiff,tif
173image/vnd dwg,svf
174image/vnd.rn-realflash rf
175image/vnd.rn-realpix rp
176image/vnd.wap.wbmp wbmp
177image/wavelet wi
178image/x-cals mil,cal
179image/x-cmu-raster ras
180image/x-dcx dcx
181image/x-dxf dxf
182image/x-eri eri
183image/x-freehand fh4,fh5,fhc
184image/x-fpx fpx,FPX
185image/x-icon ico
186image/x-pcx pcx
187image/x-pda pda
188image/x-pict pict
189image/x-portable-anymap pnm
190image/x-portable-bitmap pbm
191image/x-portable-graymap pgm
192image/x-portable-pixmap ppm
193image/x-quicktime qtif, qti丂丂丂
194image/x-rgb rgb
195image/x-up-wpng wpng
196image/x-xbitmap xbm
197image/x-xpixmap xpm
198image/x-xwindowdump xwd
199i-world/i-vrml ivr
200magnus-internal/imagemap map
201magnus-internal/parsed-html shtml
202magnus-internal/cgi cgi
203text/css css
204text/html htm,html
205text/plain txt,asc
206text/richtext rtx
207text/tab-separated-values tsv
208text/vnd.rn-realtext rt
209text/vnd.rn-realtext3d r3t
210text/vnd.sun.j2me.app-descriptor jad
211text/vnd.wap.wml wml
212text/vnd.wap.wmlscript wmls
213text/xml xml,xsl
214text/xul xul
215text/x-hdml hdml,hdm
216text/x-mrml mrl
217text/x-setext etx
218text/x-speech talk,spc
219text/x-vcard vcf
220video/3gpp 3gp
221video/isivideo fvi
222video/mpeg mpeg,mpg,mpe
223video/msvideo avi
224video/quicktime qt,mov
225video/vdo vdo
226video/vivo viv,vivo
227video/vnd.rn-realvideo rv
228video/wavelet wv
229video/x-mng mng
230video/x-ms-asf asf,asx,lsf,lsx,wm
231video/x-ms-wmv wmv
232video/x-ms-wmx wmx
233video/x-ms-wvx wvx
234video/mp4 mp4,mpg4
235video/x-pv-pvx pvx
236video/x-sgi-movie movie
237workbook/formulaone vts
238x-conference/x-cooltalk ice
239x-gzip gz
240x-compress z
241x-lml/x-lml lml
242x-lml/x-lmlpack lmlpack
243x-lml/x-evm evm, dcm
244x-lml/x-ndb ndb
245x-lml/x-lak lak
246x-lml/x-gdb gdb
247x-lml/x-gps trk, wpt, rte
248x-rar-compressed rar
249x-uuencode uu, uue
250x-world/x-svr svr
251x-world/x-vrml wrl, wrz, WRL, WRZ
252x-world/x-vrt vrt
253x-world/x-vream vrw,vre
254
255MIME增补
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282

用PHP操作MySql数据库分页(转自php.cn)

/*
* mysql数据库 分页类
* @package pagelist
* @author yytcpt(无影)
* @version 2008-03-27
* @copyrigth http://www.d5s.cn/
*/
/*
* 分页样式
.page{float: left;font: 11px Arial, Helvetica, sans-serif; padding:6px 0; margin: 0px 10%; margin-top: 10px;}
.page a, .page strong{padding: 2px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.page a:visited{padding: 2px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;}
.page .break{padding: 2px 6px; border: none; background: #fff; text-decoration: none;}
.page strong{padding: 2px 6px; border-color: #999; font-weight: bold; font-size: 13px; vertical-align: top; background: #fff;}
.page a:hover{color: #fff; background: #0063DC; border-color: #036; text-decoration: none;}
.page a:hover div{color: #FFF;cursor: pointer !important;cursor: hand;}
*/
class pagelist{
var page; //分页页码
var sql; //分页sql
var img_path; //图标路径
var img; //图标名称
var img_btn; //图标地址
var page_size; //设置每页显示条数
var num_btn; //设置数字分页的显示个数
var total_pages; //一共分多少页
var total_records; //一共有多少条记录
var url;
var table;
var new_sql; //指定的SQL语句
var db;
function __c****truct(){
global db;
this->db = db;
tmp_page = intval(trim(_GET["page"]));
this->page = empty(tmp_page)?1:tmp_page;
this->set_table();
this->page_size = 20;
this->num_btn = 9;
this->img_path = ’/images/’;
this->img = array("ico_first.gif", "ico_front.gif", "ico_next.gif", "ico_last.gif");
}
function set_table(){
this->table["tablename"] = "";
this->table["id"] = "id";
this->table["orderby"] = this->table["id"];
this->table["descasc"] = "DESC";
this->table["fileds"] = "*";
this->table["where"] = "";
}
function set_img(){
this->img_btn[0] = "img_path.this->img[0]."’ alt=’首页’ border=’0’ align=’absmiddle’/>";
this->img_btn[1] = "img_path.this->img[1]."’ alt=’上一页’ border=’0’ align=’absmiddle’/>";
this->img_btn[2] = "img_path.this->img[2]."’ alt=’下一页’ border=’0’ align=’absmiddle’/>";
this->img_btn[3] = "img_path.this->img[3]."’ alt=’末页’ border=’0’ align=’absmiddle’/>";
}
function set_show_page(){
this->set_img(); //设置翻页图片路径
this->set_url();
this->set_total_records();
if (this->total_recordspage_size){
this->total_pages = 1;
}else{
this->total_pages = ceil(this->total_records/this->page_size);
}
if (this->page>this->total_pages){
this->page = this->total_pages;
}
}
function show_first_prv(){
if (this->page==1){
str = "".this->img_btn[0]." ".this->img_btn[1]."";
}else{
str = "url."1"."’>".this->img_btn[0]." "; //此处1为首页,page值为1
str.= "url.(this->page-1)."’>".this->img_btn[1]."";
}
return str;
}
function show_next_last(){
if (this->page>=this->total_pages){
str = "".this->img_btn[2]." ".this->img_btn[3]."";
}else{
str = "url.(this->page+1)."’>".this->img_btn[2]." ";
str.= "url.this->total_pages."’>".this->img_btn[3]."";
}
return str;
}
function show_num_text(){
str = " 转到第 page."’ style=’border:0;border-bottom:1px solid #CCC;text-align:center;width:20px;’/> 页 ";
str.= "url."’+document.getElementById(’go_num_text’).value;\" style=’font-family: Arial, Helvetica, sans-serif;font-weight:bold;font-size:14px;’>[Go]";
return str;
}
function show_num_select(){
if (this->total_pages<50){
str = " ";
}else{
str = "";
}
return str;
}
function show_num_btn(){
if (this->page>=1 and this->page<=this->total_pages){
tmp_p = (this->num_btn-1)/2;
if ((this->page - tmp_p)<=0){
start_p = 1;
}else{
if ((this->page-tmp_p)>this->num_btn and (this->page-tmp_p)>(this->total_pages - this->num_btn+1)){
start_p = this->total_pages - this->num_btn + 1;
}else{
start_p = this->page - tmp_p;
}
}
if ((this->page+tmp_p) < this->total_pages){
end_p = (this->page + tmp_p)num_btn?this->num_btnthis->page + tmp_p);
if (end_p>this->total_pages){
end_p = this->total_pages;
}
}else{
end_p = this->total_pages;
}
}
str = "";
for (i=start_p; i<=end_p; i++){
if (i==this->page){
str.= " ".i." ";
}else{
str.= " url.i."’>".i." ";
}
}
return str;
}
function show_page_info(){
str = " 共".this->total_records."条/".this->total_pages."页";
return str;
}
function show_page(){
if (this->total_records<1){
this->set_show_page();
}
str = this->total_pages>1 ? this->show_first_prv().this->show_num_btn().this->show_next_last().this->show_page_info().this->show_num_text():"";
return str;
}
//总页数
function set_total_pages(){
this->total_pages = ceil(this->total_records/this->page_size);
}
//总记录数
function set_total_records(){
if (this->total_records==0 or !isset(this->total_records)){
if (empty(this->count_sql) and !empty(this->table["tablename"])){
sql = "SELECT count(".this->table["id"].") as count_id FROM `".this->table["tablename"]."` ".(this->table["where"]!=""?" WHERE ".this->table["where"]:"");
}else{
sql = preg_replace("/SELECT(.*?)FROM(.*?)/i", "SELECT count(id) AS count_id FROM\\2", this->sql);
}
arr = this->db->row_query_one(sql);
this->total_records = arr["count_id"];
}
}
/*
* 根据sql返回查询数据
* 指定sql时,不必指定limit
*/
function get_rows_by_sql(sql){
this->sql = sql." LIMIT ".this->page_size*(this->page-1).", ".this->page_size; //指定的SQL;
return this->db->row_query(this->sql);
}
/*
* 最常用的分页方法,只需要传3个参数
* tablename 表名, where 查询条件, orderby 排序字段(默认以id倒序排列)
*/
function get_rows(tablename, where="", orderby=""){
this->table["tablename"] = tablename;
this->table["where"] = where;
orderby ? this->table["orderby"] = orderby : "";
arr = array(
"page" => this->show_page(), //分页代码
"rows" => this->get_rows_by_sql(), //记录数
"sum" => this->total_records, //总记录数
);
return arr;
}
/*
* 特殊查询,sql_query 查询sql语句, row_count 统计总数
*/
function get_rows_sql(sql_query, row_count=0) {
this->total_records = row_count;
arr["rows"] = this->get_rows_by_sql(sql_query);
arr["page"] = this->show_page();
arr["sum"] = this->total_records;
return arr;
}
function get_sql(){
if (this->total_records>10000) {
this->sql = "SELECT ".this->table["fileds"]." FROM `".this->table["tablename"]."` ".(this->table["where"]!=""?" WHERE ".this->table["where"].’ AND ’.this->table["id"].’>=’:’ WHERE ’.this->table["id"].’>=’).’(SELECT ’.this->table["id"].’ FROM `’.this->table["tablename"].’` ORDER BY ’.this->table["id"].’ LIMIT ’.this->page_size*(this->page-1).’, 1)’." ORDER BY ".this->table["orderby"]." ".this->table["descasc"]." LIMIT ".this->page_size;
}else{
this->sql = "SELECT ".this->table["fileds"]." FROM `".this->table["tablename"]."` ".(this->table["where"]!=""?" WHERE ".this->table["where"]:"")." ORDER BY ".this->table["orderby"]." ".this->table["descasc"]." LIMIT ".this->page_size*(this->page-1).", ".this->page_size;
}
//SELECT * FROM articles ORDER BY id DESC LIMIT 0, 20
//SELECT * FROM articles WHERE category_id = 123 AND id >= (SELECT id FROM articles ORDER BY id LIMIT 10000, 1) LIMIT 10
return this->sql; //SQL语句
}
function set_url(){
arr_url = array();
parse_str(_SERVER["QUERY_STRING"], arr_url);
unset(arr_url["page"]);
if (empty(arr_url)){
str = "page=";
}else{
str = http_build_query(arr_url)."&page=";
}
this->url = "http://"._SERVER["HTTP_HOST"]._SERVER["HP_SELF"]."?".str;
}
}
?>

如果您加了新功能,或者是有改进,请与大家一起分享。

测试代码如下,db.php 请到这里下载:

http://dwww.cn/news/2008-6/2008662043517349.shtml

db_config["hostname"] = "127.0.0.1"; //服务器地址
db_config["username"] = "root"; //数据库用户名
db_config["password"] = "root"; //数据库密码
db_config["database"] = "wap_blueidea_com"; //数据库名称
db_config["charset"] = "utf8";
config["charset"] = "utf-8"; //网站编码

include(’db.php’);
include(’pagelist.php’);
db = new db();
db->connect(db_config);
header("content-type:text/html;charset=".config["charset"]);//设置页面编码
pl = new pagelist();
arr = pl->get_rows(’table_name’);
unset(pl);
echo ’
’; 

print_r(arr);
echo ’
’;
//指定特殊 sql 时候
pl = new pagelist();
sql = ’SELECT * FROM `wap_article` AS a, `wap_article_info` AS b WHERE a.id=b.articleid’;
arr = pl->get_rows_sql(sql);
unset(pl);
echo ’
’; 

print_r(arr);
echo ’
’;
?>

当表中的记录总数在 10000条以上时,使用了 子查询分页,这样效率会更高一些,数据量小的时候,直接查询更快。

2008年11月16日星期日

PHP+MySQL分页显示示例分析(转自php.cn)

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。

  一、分页程序的原理

  分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。

  二、主要代码解析
$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//计算总页数

$pages=intval($numrows/$pagesize);

//判断页数设置

if (isset($_GET['page'])){
 $page=intval($_GET['page']);
}
else{
 $page=1; //否则,设置为第一页
}


  三、创建用例用表myTable
create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))


  四、完整代码
<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<?php
 $conn=mysql_connect("localhost","root","");
 //设定每一页显示的记录数
 $pagesize=1;
 mysql_select_db("mydata",$conn);
 //取得记录总数$rs,计算总页数用
 $rs=mysql_query("select count(*) from tb_product",$conn);
 $myrow = mysql_fetch_array($rs);
 $numrows=$myrow[0];
 //计算总页数

 $pages=intval($numrows/$pagesize);
 if ($numrows%$pagesize)
  $pages++;
 //设置页数
 if (isset($_GET['page'])){
  $page=intval($_GET['page']);
 }
 else{
  //设置为第一页
  $page=1;
 }
 //计算记录偏移量
 $offset=$pagesize*($page - 1);
 //读取指定记录数
 $rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn);
 if ($myrow = mysql_fetch_array($rs))
 {
  $i=0;
  ?>
  <table border="0" width="80%">
  <tr>
   <td width="50%" bgcolor="#E0E0E0">
    <p align="center">标题</td>
    <td width="50%" bgcolor="#E0E0E0">
    <p align="center">发布时间</td>
  </tr>
  <?php
   do {
    $i++;
    ?>
  <tr>
   <td width="50%"><?=$myrow["news_title"]?></td>
   <td width="50%"><?=$myrow["news_cont"]?></td>
  </tr>
   <?php
   }
   while ($myrow = mysql_fetch_array($rs));
    echo "</table>";
  }
  echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
  for ($i=1;$i< $page;$i++)
   echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
   echo "[".$page."]";
   for ($i=$page+1;$i<=$pages;$i++)
    echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
    echo "</div>";
   ?>
  </body>
  </html>


  五、总结

  本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

if ($page > 1)
{
 echo "<a href='fenye.php?page=".$first."'>首页</a> ";
 echo "<a href='fenye.php?page=".$prev."'>上一页</a> ";
}

if ($page < $pages)
{
 echo "<a href='fenye.php?page=".$next."'>下一页</a>
 echo "<a href='fenye.php?page=".$last."'>尾页</a> ";
}


  其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。

2008年11月13日星期四

用PHP实现ODBC数据分页显示一例(转自网络)

$pagesize = 2; //一页显示记录数

$con = odbc_connect("access_test","","",SQL_CUR_USE_ODBC) or die("无法连接ODBC数据源access_test"); //连接一个ODBC数据源
$sql = "select count(*) as total from test"; //取得记录总数SQL语句
$rst = odbc_exec($con,$sql) or die("$sql查询出错"); //执行取得记录总数SQL语句
$recordcount = odbc_result($rst,1); //取得记录总数,在这里也可以用$recordcount = odbc_result($rst,"total");
odbc_free_result($rst); //释放资源

$pagecount = bcdiv($recordcount+$pagesize-1,$pagesize,0); //算出总页数

if(!isset($page)) $page = 1; //如果没有指定显示页码,缺省为显示第一页
if($page<1) $page = 1; //如果页码比1小,则显示第一页
if($page>$pagecount) $page = $pagecount; //如果页码比总页数大,则显示最后一页

if($page>0){ //页码比0大,表示有数据
echo '>> 分页 ';
echo '首页 ';
if($page>1){
echo '前页 ';
}
else{
echo '前页 ';
}
if($page<$pagecount){
echo '后页 ';
}
else{
echo '后页 ';
}
echo '尾页 ';
echo '页次: ' . $page . '/' . $pagecount . '页 ';
echo $pagesize . '条/页 ';
echo '共' . $recordcount . '条 ';

$sql = "select * from test"; //取得数据SQL语句
$rst = odbc_exec($con,$sql) or die("$sql查询出错"); //执行取得数据SQL语句

$fieldcount = odbc_num_fields($rst); //取得字段总数

echo '';
echo '';
for($i=1;$i<=$fieldcount;$i++){
echo ''; //显示第$i个字段名
}
echo '';
$rowi = ($page-1)*$pagesize+1;
for($i=0;$i<$pagesize;$i++){
echo '';
if($rowi>$recordcount){
for($j=0;$j<$fieldcount;$j++){
echo '';
}
}
else{
odbc_fetch_into($rst,$rowi,&$row);
for($j=0;$j<$fieldcount;$j++){
$field = $row[$j];
if($field=='') $field = ' ';
echo '';
}
$rowi = $rowi+1;
}
echo '';
}
echo '
' . odbc_field_name($rst,$i) . '
 ' . $field . '
';

odbc_free_result($rst); //释放资源
}
else{
echo "无数据";
}

odbc_close($con); //关闭连接并释放资源
?>

2008年11月4日星期二

关于Linux系统下网卡手写配置文件的介绍

/etc/sysconfig/network-scripts/ifcfg-interface-name



配置文件ifcfg-interface-name包含了初始化接口所需的大部分详细信息。其中interface-name将根据网卡的类型和排序而不同,一般其名字为eth0、eth1、ppp0等,其中eth表示以太(eth0)类型网卡,0表示第一块网卡,1表示第二块网卡,而ppp0则表示第一个point-to-poirt protocol网络接口。在ifcfg文件中定义的各项目取决于接口类型。



(1)下面的值较问常见:



》DEVICE=name ,其中,name是物理设备名。



》IPADDR=addr,其中,addr是IP地址。



》NETMASK=mask,其中,mask是网络掩码值。



》NETWORK=addr,其中addr是网络地址。



》BROADCAST=addr,其中,addr是广播地址。



》GATEWAY=addr,其中addr是网关地址。



》ONBOOT=answer,其中,answer是yes(引导时激活设备)或no(引导时不激活设备)



》USERCTL=answer,其中,answer是yes(非root用户可以控制该设备)或no



》BOOTPROTO=proto,其中,proto取下列值之一:none,引导时不使用协议;static静态分配地址;bootp,使用BOOTP协议,或dhcp,使用DHCP协议。



(2)根据上述各参数的意义,设定linpcl.lintec.edu.cn机器的设置文件如下:



[root@linpcl root]#cat /etc/sysconfig/networking/devices/ifcfg-rth0



DEVICE=eth0



ONBOOT=yes



BOOTPROTO=static



IPADDR=192.168.0.2



NETMASK=255.255.255.0



GATEWAY=192.168.0.1



(3)参数配置完毕后保存文件,并使用/etc/init.d/network restart命令重启网络设备,最新设值即可生效。



[root@linpcl root]# /etc/rc.d/init.d/network restart



正在关闭接口 eth0: [确定]



关闭环回接口: [确定]



设置网络参数: [确定]



弹出环回接口: [确定]



弹出界面eth0: [确定]



(4)使用ifconfig命令查看网络设备状况。



[root@linpcl root]# ifconfig



eth0 Link encap: Ethernet HWassr 52:54:AB:28:EE:37



linet addr:192.168.0.2 bcast:192.168.0.255 Mask:255.255.255.0

2008年11月1日星期六

珍惜眼前人(转自MOP)

这天,白云酒楼里来了两位客人,一男一女,四十岁上下,穿着不俗,男的还拎着一个旅行包,看样子是一对出来旅游的夫妻.


  服务员笑吟吟地送上菜单.男的接过菜单直接递女的,说:"你点吧,想吃什么点什么."女的连看也不看一眼,抬头对服务员说:"给我们来碗馄饨就行了!"


  服务员一怔,哪有到白云酒楼吃馄饨的?再说,酒楼里也没有馄饨卖啊.她以为自己没听清楚,不安的望着那个女顾客.女人又把自己的话重复了一遍,旁边的男人这时候发话了:"吃什么馄饨,又不是没钱?"


  女人摇摇头说:"我就是要吃馄饨!" 男人愣了愣,看到服务员惊讶的目光,很难为情地说:"好吧.请给我们来两碗馄饨."


  "不! " 女人赶紧补充道,"只要一碗!" 男人又一怔,一碗怎么吃?女人看男人皱起了眉头,就说:"你不是答应的,一路上都听我的吗?"


  男人不吭声了,抱着手靠在椅子上.旁边的服务员露着了一丝鄙夷的笑意,心想:这女人抠门抠到家了.上酒楼光吃馄饨不说,两个人还只要一碗.她冲女人撇了撇嘴:"对不起,我们这里没有馄饨卖,两位想吃还是到外面大排挡去吧!"


  女人一听,感到很意外,想了想才说:"怎么会没有馄饨卖呢?你是嫌生意小不愿做吧?"


  这会儿,酒楼老板张先锋恰好经过,他听到女人的话,便冲服务员招招手,服务员走过去埋怨道:"老板,你看这两个人,上这只点馄饨吃,这不是存心捣吗?"


  张先锋微微一笑,冲她摆摆手.他也觉得很奇怪:看这对夫妻的打扮,应该不是吃不起饭的人,估计另有什么想法.不管怎样,生意上门,没有往外推的道理。


  他小声吩咐服务员:"你到外面买一碗馄饨回来,多少钱买的,等会结帐时多收一倍的钱!"说完他拉张椅子坐下,开始观察起这对奇怪的夫妻.


  过了一会,服务员捧回一碗热气腾腾的馄饨,往女人面前一放,说 :"请两位慢用 ."


  看到馄饨,女人的眼睛都亮了,她把脸凑到碗面上,深深地细了一口气,然后 ,用汤匙轻轻搅拌着碗里的馄饨,好象舍不得吃,半天也不见送到嘴里.


  男人瞪大眼睛看者女人,又扭头看看四周,感觉大家都在用奇怪的眼光盯着他们,顿感无地自容,恨恨地说道:"真搞不懂你在搞什么,千里迢迢跑来 ,就为了吃这碗馄饨?"


  女人抬头说道:"我喜欢!"


  男人一把拿起桌上的菜单:"你爱吃就吃吧,我饿了一天了,要补补." 他便招手叫服务员过来,一气点了七八个名贵的菜.


  女人不急不慢,等男人点完了菜.这才淡淡地对服务员说:"你最好先问问他有没有钱,当心他吃霸王餐."


  没等服务员反应过来,男人就气红了脸:"放屁!老子会吃霸王餐?老子会没钱?"他边说边往怀里摸去,突然"咦"的一声:"我的钱包呢?"他索性站了起来,在身上又是拍又是捏,这一来竟然发现手机也失踪了.男人站着怔了半晌,最后将眼光投向对面的女人.


  女人不慌不忙地说道:"迩别瞎忙活了,钱包和手机我昨晚都扔到河里了."


  男人一听,火了:"你疯了!"女人好象没听见一样,继续缓慢的搅拌着碗里的馄饨.男人突然想起什么,拉开随身的旅行包,伸手在里面猛掏起来.


  女人冷冷说了句:"别找了,你的手表,还有我的戒指,咱们这次带出来所有值钱的东西,我都扔河里了.我身上还有五块钱,只够买这碗馄饨了!"


  男人的脸刷地白了,一屁股坐下来,愤怒的瞪着女人:"你真是疯了,你真是疯了!咱们身上没有钱,那么远的路怎么回去啊?"


  女人却一脸平静,不温不火地说:"你急什么?再怎么着,我们还有两条腿,走着走着就到家了."


  男人沉闷的哼了一声.女人继续说道:"二十年前,咱们身上一分钱也没有,不也照样回到家了吗?那时侯的天.比现在还冷呢!"


  男人听了这句,不由的瞪直了眼:"你说,你说什

么?"女人问:"你真的不记得了?"男人茫然的摇摇头.


  女人叹了口气:"看来,这些年身上有了几个钱,迩就真的把什么都忘了.二十年前,咱们第一次出远门做生意,没想到被人骗了个精光,连回家的路费都没了.经过这里的时候,你要了一碗馄饨给我吃,我知道,那时候你身上就剩下五毛钱了......"


  男人听到这里,身子一震,打量了四周:"这,这里......" 女人说:"对,就是这里,我永远也不会忘记的,那时它还是一间又小又破的馄饨店 ."


  男人默默地低下头,女人转头对在一旁发愣的服务员道:"姑娘,请给我再拿只空碗来."


  服务员很快拿来了一只空碗,女人捧起面前的馄饨,拨了一大半到空碗里,轻轻推到男人面前:"吃吧,吃完了我们一块走回家!"


  男人盯着面前的半碗馄饨,很久才说了句:"我不饿. "女人眼里闪动着泪光,喃喃自语:"二十年前,你也是这么说的!"说完,她盯着碗没有动汤匙,就这样静静地坐着.


  男人说:"你怎么还不吃?"女人又哽咽了:"二十年前,你也是这么问我的.我记得我当时回答你.要吃就一块吃,要不吃就都不吃,现在,还是这句话!"


男人默默无语,伸手拿起了汤匙.不知什么原因,拿着汤匙的手抖得厉害,舀了几次,馄饨都掉下来.最后,他终于将一个馄饨送到了嘴里,使劲一吞,整个都吞到了肚子里.当他舀第二个馄饨的时候,眼泪突然"叭嗒`叭嗒"往下掉.



  女人见他吃了,脸上露出了笑容,也拿起汤匙开始吃.馄饨一进嘴,眼泪同时滴进了碗里.这对夫妻就这和着眼泪把一碗馄饨分吃完了.


  放下汤匙,男人抬头轻声问女人:"饱了么?"


  女人摇了摇头.男人很着急,突然他好象想起了什么,弯腰脱下一只皮鞋,拉出鞋垫,手往里面摸,没想到居然摸出了五块钱.他怔了怔,不敢相信地瞪着手里的钱.


  女人微笑的说道:"二十年前,你骗我说只有五毛钱了,只能买一碗馄饨,其实呢,你还有五毛钱,就藏在鞋底里.我知道,你是想藏着那五毛钱,等我饿了的时候再拿出来.后来你被逼吃了一半馄饨,知道我一定不饱,就把钱拿出来再买了一碗!" 顿了顿,她又说道,"还好你记得自己做过的事,这五块钱,我没白藏!"


  男人把钱递给服务员:"给我们再来一碗馄饨."服务员没有接钱,快步跑开了,不一会,捧回来满满一大碗馄饨.

  男人往女人碗里倒了一大半:"吃吧,趁热!"


  女人没有动,说:"吃完了,咱们就得走回家了,你可别怪我,我只是想在分手前再和你一起饿一回.苦一回!"


  男人一声不吭,低头大口大口吞咽着,连汤带水,吃得干干净净.他放下碗催促女人道:"快吃吧,吃好了我们走回家!"


  女人说:"迩放心,我说话算话,回去就签字,钱我一分不要,你和哪个女人好,娶个十个八个,我也不会管你了....."



  男人猛地大声喊了起来:"回去我就把那张离婚协议书烧了,还不行吗?"说完,他居然号啕大哭,"我错了,还不行吗?我脑袋抽筋了,还不行吗?"


  女人面带笑容,平静地吃完了半碗馄饨,然后对服务员:"姑娘,结帐吧.",


  一直在旁观看的老板张先锋猛然惊醒,快步走了过来,挡住了女人的手,却从身上摸出了两张百元大钞递了过去:"既然你门回去就把离婚协议书烧了,为什么还要走路回家呢?"


  男人和女人迟疑地看着张先锋,张先锋微笑道:"咱们都是老熟人了,你门二十年前吃的馄饨,就是我卖的,那馄饨就是我老婆亲手做的!"说罢,他把钱硬塞到男人手中,头也不回地走了.....


  张先锋回到办公室,从抽屉取出那张早已拟好的离婚协议书,怔怔地看了半晌,喃喃自语地说:"看来,我的脑袋也抽筋了..."



  分手时想想以前,那个陪你甘苦与共的人,一路走来..其实你们的故事并不短.. 时间慢慢过去,那些感动却一点一点封存.. 其实最疼你的人不是那个甜言蜜语哄你开心的人.,也许就是在鞋底藏5元钱.. 在最后的时候把最后一点东西省着给你吃,却说不饿的人。

PAUL2SMOON 的共享项目