YOYO的最新BLOG文章

Jun
30

很多时候我们要遍历一个文件夹里面的所有目录,列出里面所有的文件,PHP本身自带的有一个readdir的函数,不过只能读取当前的目录,根据这个函数,我写了另外一个函数,用来实现我的需求。函数的原理很简单,主要就是用了一下递归调用。

function file_list($path){
    
if ($handle = opendir($path)) {
        
while (false !== ($file = readdir($handle))) {
            
if ($file != "." && $file != "..") {
                
if (is_dir($path."/".$file)) {
                    
echo $path.": ".$file."<br>";//去掉此行显示的是所有的非目录文件
                    
file_list($path."/".$file);
                
} else {
                    
echo $path.": ".$file."<br>";
                
}
            
}
        
}
    
}
}

这个函数还可以继续做一些改进,加入一些文件夹或文件的图标什么的,这样就可以做成更强大的一个函数了,有兴趣的朋友可以扩展的一下。

Apr
20

在结束了为期两天的旅行之后,今天下午我们从五台山返回了北京。

五台山是驰名中外的佛教胜地,是文殊菩萨的道场,而五台山又以其建寺历史之悠久和规模之宏大,而居佛教四大名山之首——故有金五台之称,在日本、印度、斯里兰卡、缅甸、尼泊尔等国享有盛名。五台山寺庙始建于汉明帝,唐代因“文殊信仰”的繁盛,寺院多达360多处。清代,随着喇嘛教传入五台山,出现了各具特色的青、黄二庙。

五台山由东台山、南台山、西台山、北台山和中台山五座山组成,五座台顶合围的地区,称为台内,其外围则称台外。我们这次去主要是在台内的台怀镇周围的寺庙游览,虽然北京的春天已经早早的来到,而五台山却还处于春寒料峭的时节,平均温度才只有零上几度而已,所以大部分树木都还未发芽。适逢五台山申报世界文化遗产时期,拆迁了很多酒店和一些无用的房屋,所以拍摄的照片里面有些可以看到一些拆迁时留下的残垣断壁。 阅读全文 ->

Tags: ,
Posted in Server, 想说就说
Mar
21

一直都没搞明白是因为什么,我的机器上的IIS安装了就是不能使用,老是提示我数据库无法连接,但是实际上程序是没有问题的,这样折腾着安装卸载了IIS好几次,都无济于事。

于是在最无奈,最紧急的时候,我到绿色软件站上搜了一下不用安装可以搭建ASP环境的软件,没想到真的找到了两个,一个是Freda Web,一个是Asp Web Server (AWS)。

freda web

Asp Web Server

两个软件各有特点:从功能上来讲,AWS更强大一些,可以支持绝大部分的ASP功能,而Freda Web就略显弱了一些,只能支持最基本的一些ASP语法,对于验证码也无法显示;从方便上来讲的话,Freda Web更方便一些,可以设置服务器指向不同的目录,而AWS只能运行当前目录下面的文件,所以就需要在运行不同的站点的时候来回不断的移动相应的文件。

两个软件都只能运行单个站点,如果是从应急性的角度讲,应该也不会有太多的站点来切换,所以我认为AWS更好一些,毕竟功能是否强大是一个软件最重要的指标。

具体到个人,可能喜好不一样,选择也会不一样,适合自己的就是最好的。

Tags: , ,
Posted in Server
Mar
20

由于最近一些人对服务器上的mssql的要求越来越迫切,我花了整整一晚上的时间把SQL Server 2000安装上了,至此服务器上最常用的一些服务都有了。

在Windows 2003上安装SQL Server 2000有一点小小的问题,所以在这里特别的说一下。

上传和安装的过程中没有太大的问题,只是在安装的时候有一个小小的提示,说是sql 2000 sp2无法安装在这个版本的操作系统上,是否继续?选择继续,很快SQL Server就安装完了,但是安装之后的SQL Server 2000却无法工作,根本原因是1433端口没有打开(检测1433端口是否打开的命令可以用:telnet: 127.0.0.1 1433)。这是为什么呢?

这是因为Windows 2003版本太高,而SQL Server 2000的版本太低了,解决这个问题的办法是去微软的网站上下载一个SQL Server 2000的SP3补丁,把SQL Server 2000升级到SP3就可以正常使用了。

安装之后的服务器已经具有了ASPPHP,PERL,MYSQL,MSSQL等这些服务,也成为更加完善的全能服务器了。

Mar
10

去掉框架横向滚动条的问题困扰了我很久了,一直都没有找到很妥善的办法来解决,网络上也是莫衷一是,没有一个完全正确的,而今天我终于解决了,这主要应该感谢SkyClan,他那一篇去掉横向滚动条的文章写的很棒,只是有点小小的错误,我在下面会提到。

框架代码:

<frameset id="frame" rows="*,80" frameborder="no" border="0" framespacing="0">
 
<frame src="content.html" name="mainFrame" id="mainFrame" scrolling="Auto"
 
noresize="noresize" title="mainFrame" />
 
<frame src="bottom.html" name="bottomFrame" scrolling="No" noresize="noresize" id="bottomFrame" title="bottomFrame" />
</frameset>

这段代码在Firefox下面是正常的,但是在IE上运行总是有一个横向的滚动条,特别烦人。而你把mainFrame里面的scrolling设置为yes之后,IE是好了,而Firefox里面就出问题了,所以我首先考虑到的是用javascript解决,但是最终是失败的,而我代码是没有问题的,所以我也不知道为什么会是失败的。

这里还有一个办法,如果你的框架是用于动态网站上的话,你可以通过动态语言来控制在不同的浏览器下面现实不同的scrolling的值,不过不是动态网站的话就没办法了,继续往下看吧。

在用CSS来解决的时候,Skyclan给出的办法是在mainFrame的文件中(content.html)另外加一段CSS,如下:

body {
overflow: scroll;
overflow-x: hidden;
overflow-x: auto !important;
}

而我测试的结果是失败的,而我把上面的CSS样式中的body{…}改为htm{…}却成功了。经过我的反复测试得出的结论是只有在不声明DTD的时候body{…}和html{…}才是都可以的,声明了DTD的情况下,只有html{…}是可以的

通过上面的方法,丑陋的横向滚动条终于没有了,最后还是要再次感谢SkyClan。

Tags: , ,
Posted in HTML | CSS
Mar
07

去年六月份的时候,我写过一篇博客《PHP读取JAR文件并生成JAD文件》,之后有不少人问及此事,也有很多人和我要这个程序。

昨天我把那个程序整理了一下,做成了一个JAR生成JAD的小工具(而在我上传的时候发现我以前其实写了这么一个程序,这次真的是重新造了一次轮子),以方便安装手机软件和游戏而没有JAD文件的朋友。

对这个程序感兴趣的朋友,可以看看我去年写的那篇博客,自己照着写一个也是很简单的,这里唯一要说的是运行这个程序的服务器上必须支持ZIP扩展。其实你对这个程序熟悉了,那对于通过PHP操作ZIP文件也就差不多了。

Tags: , ,
Posted in PHP | MySQL
Mar
06

Javascript一向以他的灵活随意而著称,这也使得它的功能可以非常的强大,而由于没有比较好的调试工具,又使得它使用起来困难重重,尤其使对于一些初学者,更是感觉到无从下手。今天探讨的问题是用javascript获取textarea中光标的位置。

对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法。昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧。

var start=0;
    
var end=0;
    
function add(){       
        
var textBox = document.getElementById("ta");
        
var pre = textBox.value.substr(0, start);
        
var post = textBox.value.substr(end);
        
textBox.value = pre + document.getElementById("inputtext").value + post;
    
}
    
function savePos(textBox){
        
//如果是Firefox(1.5)的话,方法很简单
        
if(typeof(textBox.selectionStart) == "number"){
            
start = textBox.selectionStart;
            
end = textBox.selectionEnd;
        
}
        
//下面是IE(6.0)的方法,麻烦得很,还要计算上'\n'
        
else if(document.selection){
            
var range = document.selection.createRange();
            
if(range.parentElement().id == textBox.id){
                
// create a selection of the whole textarea
                
var range_all = document.body.createTextRange();
                
range_all.moveToElementText(textBox);
                
//两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
                
//range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(further to the left),则                //返回小于0的值,则range_all往右移一点,直到两个range的start相同。
                
// calculate selection start point by moving beginning of range_all to beginning of range
                
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                    
range_all.moveStart('character', 1);
                
// get number of line breaks from textarea start to selection start and add them to start
                
// 计算一下\n
                
for (var i = 0; i <= start; i ++){
                    
if (textBox.value.charAt(i) == '\n')
                        
start++;
                
}
                
// create a selection of the whole textarea
                
var range_all = document.body.createTextRange();
                
range_all.moveToElementText(textBox);
                
// calculate selection end point by moving beginning of range_all to end of range
                
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)
                    
range_all.moveStart('character', 1);
                    
// get number of line breaks from textarea start to selection end and add them to end
                    
for (var i = 0; i <= end; i ++){
                        
if (textBox.value.charAt(i) == '\n')
                            
end ++;
                    
}
                
}
            
}
        
document.getElementById("start").value = start;
        
document.getElementById("end").value = end;
    
}

下面是在页面中调用js代码的方法:

<form action="a.cgi">
<table border="1" cellspacing="0" cellpadding="0">
    
<tr>
        
<td>start: <input type="text" id="start" size="3"/></td>
        
<td>end: <input type="text" id="end" size="3"/></td>
    
</tr>
    
<tr>
        
<td colspan="2">
            
<textarea id="ta" onKeydown="savePos(this)"
                              
onKeyup="savePos(this)"
                              
onmousedown="savePos(this)"
                              
onmouseup="savePos(this)"
                              
onfocus="savePos(this)"
                              
rows="14" cols="50"></textarea>
        
</td>
    
</tr>
    
<tr>
        
<td><input type="text" id="inputtext" /></td>
        
<td><input type="button" onClick="add()" value="Add Text"/></td>
    
</tr>
</table>
</form>

此代码的原文是:http://blog.csdn.net/liujin4049/archive/2006/09/19/1244065.aspx,在此谢过!

这段js代码同时支持IE和Firefox,甚是精彩,可见此人js功力深厚啊,呵呵。

Btw:听说Firefox现在的市场占有率已经达到17%了,而IE8也快出来了,浏览器之间又会掀起一场你死我活的争斗,而这种争斗可以使浏览器的解析标准会越来越规范,我们写代码也会越来越省事,这实在是一件值得高兴的事。

Mar
03

Windows 2003服务器上线的时候,我曾安装过一次ASPJPEG组件,但是直到前几天我才知道当时我安装的这个组件无法正常工作。

回想起当时配置服务器的情况,好像是我由于没找到ASPJPEG 1.8的注册码,直接用ASPUPLOAD的注册码安装了,而更让人费解的是ASPJPEG什么提示都没有就安装上了,所以当时一点都没怀疑出自同一个公司的两个产品应该可以用一个注册码。而昨天我在我本地测试的时候发现用333作为注册码安装ASPJPEG的时候居然也可以安装上,此时我基本猜到ASPJPEG不正常工作原因了。

于是我去网上下载了一个带注册码的ASPJPEG 1.5版本,为了防止它和1.8版本的冲突,我又卸载了当时的1.8版本,还重新执行了一边卸载注册组件的命令:regsvr32 /u aspjpeg的路径,最终在阿江探针里面再也检测不到ASPJPEG的时候,我重新安装了1.5版本。

安装的时候很顺利,然后我又找了一个测试缩略图的程序,如下:

Set Jpeg = Server.CreateObject("Persits.Jpeg")    '创建实例
Path = Server.MapPath("img/j.jpg")       
'处理图片路径
Jpeg.Open Path                '打开图片
'调整宽度和高度为原来的50%
Jpeg.Width = Jpeg.OriginalWidth / 2
Jpeg.Height = Jpeg.OriginalHeight / 2
Jpeg.Save Server.MapPath("img/j2.jpg")        '保存图片到磁盘
Jpeg.Close:Set Jpeg = Nothing
?>

经过测试,程序正常,看来有戏。于是我又把原来工作不正常的程序打开,执行了一下,一切都好了,折腾了好几天都没找到原因的问题今天终于解决了。

顺便说一句,月光博客上面的生成缩略图的程序是错误的。

Tags: ,
Posted in Server