Posts Tagged ‘的用’

ASPX中的用户控件与ASP中的INCLUDE方法对比

星期二, 06月 3rd, 2008

在ASPde年代里,为了避免经常性重复de劳动,对一些功能相似de区域或者相关代码,经常作成一个文件,然后通过连接(直接连接或者虚拟连接)de方法引入到ASP网页文件之中,对于一个很大de引用了很多ASP文件就相当于一个文件被分成了很多块,彼此文件之间de数据是可以自由共享de(除了函数之中de数据).
ASPXde用户控件就与INCLUDE有很大de不同了,它de最大特点就是在于他是以包装好de对象de形式呈现,通过我de编程,可以将一个公用de事例抽象出来,将一些功能和方法总结出来,作成相应de函数和属性供外部de事件调用,实现完全de类化,最大程度de封装外层用户不需要了解de内部事实,使得其更加具有可维护性,也提高了数据de安全性,更利于程序de发布.
简单de东西好用,但自然也功能比较少,或者是很不完善de,我可以自由de将某个文件de包含到指定deASP文件之中,但是,由于彼此de数据是可以共享de,所以导致,文件de相互依赖性很高,降低了相关代码可读性,不利于系统de维护,同时,如果被INCLUDEde文件中如果有一个图片,并且被包含de文件与需要包含文件de文件不在同一个目录之下时,被包含de文件de图片de地址必须以需要包含文件de文件中能显示图片de地址为准,如/FILE/INDEX.ASP是主文件(需要包含文件de文件),而/FILE/INCLUDE/TITLE.ASP是被包含文件,而图片地址为/file/title.jpg此时就需要将TITLE.ASP中de图片地址改为title.jpg而不是../title.jpg,否则将无法在主文件中显示图片,超级链接也是同样de问题.
复杂deASPX固然解决了很多de问题,如能够在控件文件中自由de设置图片de地址,无须理会引用他de文件在什么目录之下,只要在控件文件中能显示出来de东西,被引用之后依然可以被使用,这使得用户制作de控件具有更多de可重用性,而不象ASP中,对于不同目录下de文件引用相同功能de文件时需要设置两个事实上相同但是图片或者超级链接de地址不同de文件.浪费资源,也使得维护费用更高.当然这些优点也使得文件编写起来也比较麻烦,对于分析上要求有更高de归纳能力,使得控件能更广泛de使用.

在线增减.htpasswd内的用户

星期一, 06月 2nd, 2008

在线增减.htpasswd内de用户
<?php
include("./class.Htpasswd.php3");
/* 请修改此.htpasswd文件路径
*/
$htpasswdfile = "/usr2/amitc/.htpasswd";

// 此行请勿修改
echo ‘<FORM ACTION="’.$PHP_SELF . ‘" METHOD=POST>’;
?>
<Table BORDER><TR>
<TD>Username: </TD>
<TD><INPUT TYPE=text name="username"></TD>
</TR><TR>
<TD>Password: </TD>
<TD><INPUT TYPE=text name="password"></TD>
</TR><TR>
<TD>
<INPUT TYPE=radio NAME=doop VALUE="verify" CHECKED> Verify Password <BR>
<INPUT TYPE=radio NAME=doop VALUE="add" > 加入新用户<BR>
<INPUT TYPE=radio NAME=doop VALUE="delete" > 删除用户 <BR>
<INPUT TYPE=radio NAME=doop VALUE="change" > 更改密码 <BR>
</TD>
<TD>
<INPUT TYPE=submit name="operation">
</TD></TR>
</TR>
</TABLE>
</FORM>
<?php
if(!isset($operation)) {
}
else {
echo "<FONT COLOR=RED> <HR>";
echo "您刚进行了此项操作,请核查 <BR><HR>";
echo "您要对用户 $username 及密码 $password 进行 = [$doop] <BR>";
$handle = new Htpasswd($htpasswdfile);
switch ($doop) {
case ‘add’:
print "用户<BR>";
$retval = $handle->addUser($username, $password);
if($retval) {
print "用户 [$username] 加入成功!<BR>";
} else {
print "加入用户 [$username] 失败.<BR>";
}
break;
case ‘change’:
print ‘修改密码<BR>’;
$retval = $handle->changePass($username, $password);
if($retval) {
print "[$username] de密码修改成功.<BR>";
} else {
print "[$username] de密码修改失败.<BR>";
}
break;
case ‘delete’:
print ‘删除用户<BR>’;
$retval = $handle->deleteUser($username);
if($retval) {
print "[$username] 被删除.<BR>";
} else {
print "删除 [$username]时发生错误.<BR>";
}
break;
case ‘verify’:
print ‘Code to verify user’s password<BR>’;
$retval = $handle->verifyUser($username, $password);
if($retval) {
print "[$username] verifies okay with password [$password]<BR>";
} else {
print "Verify Error for [$username] with [$password] (wrong password or user doesn’t exist!) <BR>";
}
break;
default:
print ‘您要中断? <BR>’;
}
echo "</FONT>";
}
?>

简单的用PHP编写的导航条程序

星期一, 06月 2nd, 2008

//简单de用PHP编写de导航条程序
<?php
//导航条配置说明:默认显示de是目录名
//如果不愿意使用目录名,请去掉下面一行注释,并修改数组元素
$label=
array("目录1"=>"导航名1","目录2"=>"导航名2","目录3"=>"导航名3");
$ur1=$REQUEST_URI;
while($ur1 != ""){
$text=basename($ur1);
//获取文件名
if(isset($label[$text]))
{$text=$label[$text]; }
$link=$ur1;
$curx= " > <a href="$link">$text</a>";
$komplettx= $curx.$komplettx;
$ur1=dirname($ur1);
//获取目录名
}
echo $komplettx;
?>
//在页面中可以用include调用该程序

PHP中显示格式化的用户输入

星期一, 06月 2nd, 2008

您可以在这个页面下载这个文档附带de文件,也可以在文件下载中de字符处理中下载这个文档描述如何安全显示de有格式de用户输入.我将讨论没有经过过滤de输出de危险,给出一个安全de显示格式化输出de方法.
没有过滤输出de危险
如果您仅仅获得用户de输入然后显示它,您可能会破坏您de输出页面,如一些人能恶意地在他们提交de输入框中嵌入javascript脚本:
This is my comment.
<script language=”javascript:
alert(’Do something bad here!’)”>.
这样,即使用户不是恶意de,也会破坏您de一些HTMLde语句,如一个表格突然中断,或是页面显示不完整.

只显示无格式de文本
这是一个最简单de解决方案,您只是将用户提交de信息显示为无格式de文本.使用htmlspecialchars()函数,将转化全部de字符为HTMLde编码.
如<b>将转变为<b>,这可以保证不会有意想不到deHTML标记在不适当de时候输出.
这是一个好de解决方案,如果您de用户只关注没有格式de文本内容.但是,如果您给出一些可以格式化de能力,它将更好一些.
Formatting with Custom Markup Tags
用户自己de标记作格式化
您可以提供特殊de标记给用户使用,例如,您可以允许使用[b]…[/b]加重显示,[i]…[/i]斜体显示,这样做简单de查找替换操作就可以了: $output = str_replace(”[b]“, “<b>”, $output);
$output = str_replace(”[i]“, “<i>”, $output);
再作de好一点,我可以允许用户键入一些链接.例如,用户将允许输入[link="url"]…[/link],我将转换为<a href=”">…</a>语句
这时,我不能使用一个简单de查找替换,应该使用正则表达式进行替换:
$output = ereg_replace(’\[link="([[:graph:]] )”\]’, ‘<a href=”\\1″>’, $output);
ereg_replace()de执行就是:
查找出现[link="..."]de字符串,使用<a href=”…”> 替换它
[[:graph:]]de含义是任何非空字符,有关正则表达式请看相关de文章.

在outputlib.phpdeformat_output()函数提供这些标记de转换,总体上de原则是:
调用htmlspecialchars()将HTML标记转换成特殊编码,将不该显示deHTML标记过滤掉,
然后,将一系列我自定义de标记转换相应deHTML标记.
请参看下面de源相关代码:
<?php

function format_output($output) {
/****************************************************************************
* Takes a raw string ($output) and formats it for output using a special
* stripped down markup that is similar to HTML
****************************************************************************/
$output = htmlspecialchars(stripslashes($output));
/* new paragraph */
$output = str_replace(’[p]‘, ‘<p>’, $output);
/* bold */
$output = str_replace(’[b]‘, ‘<b>’, $output);
$output = str_replace(’[/b]‘, ‘</b>’, $output);
/* italics */
$output = str_replace(’[i]‘, ‘<i>’, $output);
$output = str_replace(’[/i]‘, ‘</i>’, $output);
/* preformatted */
$output = str_replace(’[pre]‘, ‘<pre>’, $output);
$output = str_replace(’[/pre]‘, ‘</pre>’, $output);
/* indented blocks (blockquote) */
$output = str_replace(’[indent]‘, ‘<blockquote>’, $output);
$output = str_replace(’[/indent]‘, ‘</blockquote>’, $output);
/* anchors */
$output = ereg_replace(’\[anchor="([[:graph:]] )”\]’, ‘<a name=”\\1″></a>’, $output);
/* links, note we try to prevent javascript in links */
$output = str_replace(’[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('\[link="([[:graph:]] )”\]’, ‘<a href=”\\1″>’, $output);
$output = str_replace(’[/link]‘, ‘</a>’, $output);
return nl2br($output);
}
?>
一些注意de地方:
记住替换自定义标记生成HTML标记字符串是在调用htmlspecialchars()函数之后,而不是在这个调用之前,否则您de艰苦de工作在调用htmlspecialchars()后将付之东流.
在经过转换之后,查找HTML相关代码将是替换过de,如双引号”将成为”
nl2br()函数将回车换行符转换为<br>标记,也要在htmlspecialchars()之后.
当转换[links=""] 到 <a href=”">, 您必须确认提交者不会插入javascript脚本,一个简单de方法去更改[link="javascript 到 [link=" javascript, 这种方式将不替换,只是将原本de相关代码显示出来.
outputlib.php
在浏览器中调用test.php,可以看到format_output() de使用情况
正常deHTML标记不能被使用,用下列de特殊标记替换它:
- this is [b]bold[/b]
- this is [i]italics[/i]
- this is [link="http://www.phpbuilder.com"]a link[/link]
- this is [anchor="test"]an anchor, and a [link="#test"]link[/link] to the anchor
[p]段落
[pre]预先格式化[/pre]
[indent]交错文本[/indent]
这些只是很少de标记,当然,您可以根据您de需求随意加入更多de标记
Conclusion
结论
这个讨论提供安全显示用户输入de方法,可以使用在下列程序中
留言板
用户建议
系统公告
BBS系统

filesystemobject组件的用法示例

星期一, 06月 2nd, 2008

””””””””””””””””””””””””””””””””””””

‘ CreateLyrics

‘ 目de:

‘ 在文件夹中创建两个文本文件.

‘ 示范下面de内容

‘ - FileSystemObject.CreateTextFile

‘ - TextStream.WriteLine

‘ - TextStream.Write

‘ - TextStream.WriteBlankLines

‘ - TextStream.Close

””””””””””””””””””””””””””””””””””””

Sub CreateLyrics(Folder)

Dim TextStream

Set TextStream = Folder.CreateTextFile("OctopusGarden.txt")

TextStream.Write("Octopus’ Garden ") ‘ 请注意,该语句不添加换行到文件中.

TextStream.WriteLine("(by Ringo Starr)")

TextStream.WriteBlankLines(1)

TextStream.WriteLine("I’d like to be under the sea in an octopus’ garden in the shade,")

TextStream.WriteLine("He’d let us in, knows where we’ve been — in his octopus’ garden in the shade.")

TextStream.WriteBlankLines(2)

TextStream.Close

Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")

TextStream.WriteLine("She Came In Through The Bathroom Window (by Lennon/McCartney)")

TextStream.WriteLine("")

TextStream.WriteLine("She came in through the bathroom window protected by a silver spoon")

TextStream.WriteLine("But now she sucks her thumb and wanders by the banks of her own lagoon")

TextStream.WriteBlankLines(2)

TextStream.Close

End Sub

‘ GetLyrics

‘ 目de:

‘ 显示 lyrics 文件de内容.

‘ 示范下面de内容

‘ - FileSystemObject.OpenTextFile

‘ - FileSystemObject.GetFile

‘ - TextStream.ReadAll

‘ - TextStream.Close

‘ - File.OpenAsTextStream

‘ - TextStream.AtEndOfStream

‘ - TextStream.ReadLine

””””””””””””””””””””””””””””””””””””

Function GetLyrics(FSO)

Dim TextStream

Dim S

Dim File

‘ 有多种方法可用来打开一个文本文件,和多种方法来从文件读取数据.

‘ 这儿用了两种方法来打开文件和读取文件:

Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt", OpenFileForReading)

S = TextStream.ReadAll & NewLine & NewLine

TextStream.Close

Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")

Set TextStream = File.OpenAsTextStream(OpenFileForReading)

Do While Not TextStream.AtEndOfStream

S = S & TextStream.ReadLine & NewLine

Loop

TextStream.Close

GetLyrics = S

End Function