Archive for May, 2005

站点升级

以前用的是wordpress1.3的night版,bug太多,一直没升级是因为程序的源代码被我修改了好多地方,升级比较麻烦,而且也没有想好新的样式。这次升级还算顺利,样式及插件都重新做了一遍,wp的1.5版确实改进了不少,制作样式时基本不需要修改源代码,这样以后升级也就方便多了。

改的比较仓促,希望大家发现错误或者有好的建议时在这里提醒我一下,谢谢!

MSN中国测试站点推出

msn china

微软终于推出了msn中国的测试网站,但是感觉页面不是很整洁,颜色也有些花哨,内容基本上是那些合作伙伴的。地址:www.msn.com.cn

PHP代码加亮:显示行号及伸缩代码块

利用php的highlight_string和highlight_file函数进行代码加亮,分析加亮后的html代码,加上了两个小功能,显示行号及像现在流行的IDE一样伸缩代码块。

hightlight函数源代码及效果演示:demo.php

highlight($code, $isReturn = 0, $isStr = 1)

$code:字符串 要加亮的代码片断或者文件的名字
$isReturn:布尔型 直接显示还是作为字符串返回
$isStr:布尔型 指定$code参数是字符串还是文件名

完整源文件下载(包括图片、js、css及php源文件):highlight.rar

现在已知的还有些小错误,正在慢慢修改, wp插件制作中。andot 正在写一个php的多语言代码整理及加亮程序,敬请关注 www.CoolCode.cn

coolcode

  1. function getPageSize(){
  2.   var xScroll, yScroll;
  3.   if (window.innerHeight && window.scrollMaxY) {
  4.     xScroll = document.body.scrollWidth;
  5.     yScroll = window.innerHeight + window.scrollMaxY;
  6.   }
  7.   else if (document.body.scrollHeight > document.body.offsetHeight){
  8.     // all but Explorer Mac
  9.     xScroll = document.body.scrollWidth;
  10.     yScroll = document.body.scrollHeight;
  11.   }
  12.   else {
  13.     // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
  14.     xScroll = document.body.offsetWidth;
  15.     yScroll = document.body.offsetHeight;
  16.   }
  17.   var windowWidth, windowHeight;
  18.   if (self.innerHeight) {
  19.     // all except Explorer
  20.     windowWidth = self.innerWidth;
  21.     windowHeight = self.innerHeight;
  22.   }
  23.   else if (document.documentElement && document.documentElement.clientHeight) {
  24.     // Explorer 6 Strict Mode
  25.     windowWidth = document.documentElement.clientWidth;
  26.     windowHeight = document.documentElement.clientHeight;
  27.   }
  28.   else if (document.body) {
  29.     // other Explorers
  30.     windowWidth = document.body.clientWidth;
  31.     windowHeight = document.body.clientHeight;
  32.   }
  33.   // for small pages with total height less then height of the viewport
  34.   if(yScroll < windowHeight){
  35.     pageHeight = windowHeight;
  36.   }
  37.   else {
  38.     pageHeight = yScroll;
  39.   }
  40.   // for small pages with total width less then width of the viewport
  41.   if(xScroll < windowWidth){
  42.     pageWidth = windowWidth;
  43.   }
  44.   else {
  45.     pageWidth = xScroll;
  46.   }
  47.   arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
  48.   return arrayPageSize;
  49. }

在浏览器中以文本方式显示nfo文件:nfo2html

更新:在线制作eot字体:http://www.ugia.cn/nfo/eot.php

更新:因为以前的映射表不全而且有错误,andot从新做了影射表。现在使用压缩过的courier new字体做嵌入式字体,因为Lucida ConsoleP字体字符不全。nfo2html函数也优化了下,基本没有什么问题了。感谢andot的努力。

感谢nfo在我前面的一篇文章《在浏览器中以文本方式显示nfo文件的完美解决方案》对字符编码的建议,当时没有考虑网页编码的问题,所以这个方法在实际应用中会有些困难。因为在IE中必须指定网页编码为iso8859-1、firefox等其他浏览器中必须为utf-8编码才能正常浏览,当整合进现有的网站中时,会因为网页编码不相同导致乱码。解决这个问题的方法就是把nfo中的字符全部转化为十进制表示的html实体(NCR : Numeric character reference),这样不管网页编码是什么,都会正常显示了。

andot同学重新写了一个nfo2html来代替原先的nfo2txt,ie中还是使用eot字体,已经不需要特殊的字体了,courier new就可以,具体制作方法请参考我前面的那篇文章,firefox、netscape下通过字符映射表转化特殊字符,并把所有字符用十进制的html实体来表示。demo

wp插件显示效果如下:
nfo2html

完整代码(含wordpress插件)下载:nfo2html_and_wpplugin.rar

» 阅读全文

PHP:显示文件上传进度及上传任意大小的文件

update: UGiA PHP UPLOADER V0.2已发布http://www.ugia.cn/?p=70

利用php上传比较大的文件时,往往需要很长的等待时间,而且受网络和软件等的影响,经常会出现超时及上传失败的现象。如何在上传文件时实时的得到文件上传进度,以及如何避开php和其他因素的限制上传任意大小的文件呢?

php同asp等其他语言对上传文件的处理方式不同,asp中可以用Request.BinaryRead流式的读取客户端提交的数据。php是把文件存放在临时文件夹中,在文件上传完成后才能够获取其信息以及对其进行操作。如果在上传过程中我们能够得到其临时文件的文件名,我们就可以通过判断临时文件的大小来来得到上传进度,不过好像没有办法得到。所以我们只能通过其他方式,就是利用php的socket扩展建立一个简单的服务器,把数据post到这个服务器上,然后再用我们自己的机制来处理。

先说说流程,首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把ip地址和端口号通知客户端,客户端把上传表单提交到http://srvIpAddress:port(临时服务器), 临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成。 有点绕,不过思路还是简单的。

稍后我会发布一个类库,暂定名为:UGiA Visual PHP Uploader, 这样大家就可以在程序中很方便的调用了。效果如下:

uvpu