YOYO的最新BLOG文章

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
Feb
20

我要地图一直是我最情有独钟的电子地图网站,网站简洁、速度快,更重要的是内容详尽,连一些乡镇都标记的很精确。我要地图还有桌面版软件和绿色版的灵图UU,而最让我高兴的是他提供了API接口(见下面的效果图),可以让我们很轻松的就可以在我们的网站上嵌入地图,对于标记一些地理位置是个很不错的选择,下面就说一下在网站上加入地图的方法。

我要地图API接口

第一、打开我要地图网站的地图接口API页面:http://api.51ditu.com/。

第二、点击左侧的地图接口链接,来到地图应用接口页面,页面的下方有一个小地图和一段JS代码,把这段JS代码复制到网页种就可以呈现上面地图的效果。

第三、打开网页的源代码,找到maps.cityNameAndZoom( “beijing” , 2 );这行,修改第二个数字值可以调试地图的比例尺。

第四、找到var point = new LTPoint( 11640969 , 3989945 );这一句,修改里面的值,我们就可以把地图上“我的位置”的标记移动到我们想让它呆的地方去了。

第五,我们也可以把“我的位置”改为我们想要的名字,例如:中关村。

通过这些简单的修改,我们就可以把一个地图放到我们的网页里面了,这里我讲的是最简单的方法,如果你想得到更好的效果,可以参考API文档(http://mapplet.51ditu.com/guide.html),如果对上面讲得修改不知道所以然的话,可以先了解一些地图的基础知识(http://api.51ditu.com/docs/info.html#info1),然后再看API开发文档。

Feb
02

昨天我写到MP4无法播放MP4,而又无法转化为我的MP4支持的AVI格式的视频,不过今天我就把那个MP4文件解决了。这首先要感谢PPOPCN,因为这款软件就是从他给我的0Day论坛上找到的,这款软件就是Altdo video converter diamond。

Altdo video converter diamond box

Altdo video converter diamond是一个强大的多格式媒体转换工具,能转换 3gp, avi, asf, mov, wmv, mp4, m4v, mpeg, mpg 到几乎所有的视频格式,包括 AVI(DivX/XviD, Pocket PC), VOB, PMP, PSP, MOV, AMR, MP3, AAC, AC3, MPEG-4(iPod, Zune, Apple TV), MPG(XBox360), VCD (MPEG-1) ,SVCD(MPEG-2),其安装后的界面如下:

Altdo video converter diamond

Altdo还有一系列这样的转化软件,都非常不错,有时间大家可以试试。

软件及破解下载地址:http://www.noninstall.com/html/49/

Jan
15

有些时候我们看到网络上有一些漂亮的图片,而又不想手动去保存下来,尤其是大量的这样的图片,那这个时候我们需要写一段程序来帮助我们完成这个工作。今天在整理资料的时候发现以前找到的一个函数,通过这个函数我们就可以实现上面的功能。

主要函数:

function GrabImage($url,$filename="") {
    
if($url=="") return false;
 
    
if($filename=="") {
        
$ext=strrchr($url,".");
        
if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
        
$filename=date("YmdHis").$ext;
    
}
 
    
ob_start();
    
readfile($url);
    
$img = ob_get_contents();
    
ob_end_clean();
    
$size = strlen($img);
 
    
$fp2=@fopen($filename, "a");
    
fwrite($fp2,$img);
    
fclose($fp2);
 
    
return $filename;
}

获取一张图片的代码:

$img=GrabImage("http://www.google.com/intl/en_ALL/images/logo.gif","logo.gif");
if($img){
    
echo '<img src="'.$img.'">';
}else{
    
echo "false";
}

这是保存google的logo的例子,获取到的图片保存在同级目录下面。

获取一系列的有规律的图片(例如:以数字1-100命名的100张图片):

for ($i=1;$i<=100;$i++){
    
$img=GrabImage("http://www.yourimagesite.com/images/$i.gif","images/$i.gif");
}

上面的www.yourimagesite.com是图片的网址,需要自己修改,程序执行完后,所有的图片将会保存到images目录下面。

Tags: , ,
Posted in PHP | MySQL
Jan
11

豆瓣API开放了已经快半个月了,今天我测试了一下,发现还不错,使用起来也比较简单。我用的是PHP+JSON来测试的,不过要想用JSON,PHP版本必须达到5.2.0以上才可以。下面是我以搜索和CSS相关的书籍来简单的说一下我的实现方式。

获得豆瓣的数据,然后转化为一数组(记得修改{yourapikey}为你在豆瓣上申请的api的key):

header("Content-Type: text/html; charset=utf-8");
$contents = file_get_contents("http://api.douban.com/book/subjects?apikey={yourapikey}&amp;q=css&amp;max-results=10&amp;alt=json");
$array = json_decode($contents,true);

文字链接方式(由于PHP的变量都是以$开头的,所以数组key里面出现的这个$是个不大不小的问题,我稍微变通了一下):

foreach ($array["entry"] as $item){
    
echo '<li><a href="'.$item["link"][1]["@href"].'">'.$item["title"]["$"."t"].'</a></li>';
}

图片链接方式:

foreach ($array["entry"] as $item){
    
echo '<li><a href="'.$item["link"][1]["@href"].'"><img src="'.$item["link"][2]["@href"].'" title="'.$item["title"]["$"."t"].'" border="0" /></a></li>';
}

具体实现效果,请看这里:http://www.fesite.com/douban_api.php

容易吧,其实就是这么简单!不过现在的豆瓣开放的API功能还是太有限了,很多信息都无法通过API获得到,例如:好友列表等,不过这已经是一个很不错的开始了,希望豆瓣以后做得越来越好!

Tags: , , , ,
Posted in PHP | MySQL
Jan
04

服务器上线的那天开始,我就一直考虑在服务器安装一个邮局,今天我在服务器上成功安装了WinWebMail 3.7.5.1,下面简单的说一下WinWebMail的情况。

WinWebMail的原名是WebEasyMail,从名字上我们也可以看出作者的意图,就是希望能让Web邮箱使用起来更简单,更容易,可以说作者已经做到了,这款软件的安装和使用都非常得简单。

WinWebMail的安装,我觉得没啥好说的,直接双击安装包,一路“next” 就可以安装完成了,然后在IIS里面新建一个站点,把目录指向WinWebMail里面的web目录就可以通过WEB方式来登陆查收和发送邮件了。

从官方下载的WinWebMail没有任何功能方面的限制,但是有用户数的限制,无论是企业版还是标准版都是25个用户的限制,不过WinWebMail的破解在网上也比较多,而且破解都比较简单,更夸张的是网上还有一个专门以WinWebMail为例来讲解破解软件的视频教程,所以如果你想突破这25个用户的限制还是很容易的。

WinWebMail的官方网站:http://www.winwebmail.com
WinWebMail的下载页面:http://www.winwebmail.com/email-server-download.html

#update(2007-1-10) :通过上面的方法安装之后的WinWebMail还有一个问题,就是登录邮箱之后只能发送和接收邮件而无法删除邮件,也不能保存一些邮局的设置。解决方法是:假设你的WinWebMail安装在了D:\WinWebMail,你应该把D盘设置为users读取,然后把你的安装目录D:\WinWebMail设置为everyone或者users完全控制就可以了。

Tags: , ,
Posted in Server