分类 网页与编程 中的文章

更新了 OneExplorer 到 1.3.2

近来实在太忙了,今天好不容易有点时间,终于决定把我的 OneExplorer 这款小程序改进下了。

OneExplorer 是自己以前没事写的一个代替服务器自带的目录浏览程序,用来开发的时候访问文件。
这个东西最大的特点是整个程序就只有一个 PHP 文件,上面的图片也全部来自这个 PHP 文件,我个人觉得还是挺有意思的。

这次的改变是增加了像 Win7 一样的地址栏,可以直接在地址栏上查看每一层下的目录列表。并且美化了ROOT、上一层和刷新的按钮,使用了 CSS3 的效果,程序代码方面也做了些简化,去掉了一些不必要的函数封装等,去掉了地址栏传递时目录前面的“./”,还修改一些文字表达,以及样式的调整等。并且还很猥琐的加上了版权信息,哇哈哈。

上截图:

[attach=250]

这次修改花了将近二十个小时的时间,其中有一个下午在解决一个 JS 的元素判断以及变量的迭代问题了,真郁闷。已测试通过 IE6+ 和目前的主流浏览器。

[attach=251]

还有最近我的 VgotFaster 框架在应用到公司的项目中时,很多东西也逐渐的成熟了,比如对数据库的多元操作,多语言支持,以及一些辅助函数和类库的完善,可惜的是一直没有时间来完成项目主页,还有我的 ideawind 啊,什么时候才有时间做完这些东西啊。

透露一下 VgotFaster 主页的 PSD 图部分,以及 ideawind 界面。

[attach=252]

[attach=253]

Pader 2011-5-15 2

今天把留言本这个老程序翻出来改了下

主页上的留言本用的是文本存储的,以前借别人用的时候被广告机灌了个遍导致读取文件文件时内存超出限制了,今天把获取数据的方法给改了下,理论上会快些,内存峰值也会低些,好几年前的程序了。

 

Pader 2010-11-14 0

Apache + PHP + MySQL Windows 下配置

经常碰到的东西,从来记不清,记一下。
几个软件的安装没有什么说的,这里记录下关键的部分。

php.ini
php.ini 放到 Windows 目录下(建议用 php.ini-dist)
启用 php_mysql.dll 扩展

Path
将 Apache 下的 bin 目录路径和 php 路径(或者加上 php 下的 ext 路径)加入到系统环境变量中

http.conf
启用 LoadModule php5_module D:/php/php5apache2.dll
可以在下面使用 PHPIniDir "D:/php" 参数,指定 php.ini 所在目录位置,在放在 Windows 目录下时无需指定。
AddType application/x-httpd-php .php  让 .php 格式文件可以执行 PHP
增加 DirectoryIndex 中的默认首页 index.php

重启服务吧,关于性能优化什么的找 Google 大神。
Pader 2010-10-23 0

简化 PHPWind 伪静态规则

PHPWind 的伪静态规则很简单,一条 RewriteRule 就可以了。

伪静态出来的规则地址如下:
thread.php?fid=1                   thread-htm-fid-1.html
read.php?tid=1                      read-htm-tid-1.html
read.php?tid=1&page=2     read-htm-tid-1-page-2.html
...

有没有发现其实有些东西是多余的,-htm- 这个是干嘛的呢,难道是为了让搜索引擎更加坚定的认为这个是静态页面?是则是,不是则不是,搜索引擎虽然不是很聪明的东西,但也不傻。所以,能简则简,默认的规则是这样的:
RewriteRule ^(.*)-htm-(.*)$ $1.php\?$2

我们首先在后台 核心设置>静态目录部署 设置中,把静态目录这个参数由 “-htm-” (默认时是 .php?)改为 “-”,对就是一个横杠。
然后把 Rewrite 规则改成:
RewriteRule ^([\w\d_]+)-(.*)$ $1.php?$2
或者你也可以使用这条:
RewriteRule ^(.*?)-(.*?\.html)$ $1.php?$2
 
这样地址就变成了:
thread-fid-1.html
read-tid-1.html
read-tid-1-page-2.html
....

看不到这里 -htm- 心里爽多了。
这里规则是 .htaccess 文件中的,Apache 配置文件,IIS 或 Nginx 等规则大同小异,懂的话对比修改一下就行了。
如果还想网站兼容以前的地址的来保证搜录的话,可以在这个规则之前加上下面这个规则:
RewriteRule ^(.*)-htm-(.*)$ $1.php?$2 [L]
记住,是加在之前哦,这样的话,以前的地址仍然可以访问了,不担心以前搜录的失效。
 
实话说,多用几条规则这里的 -fid-, -page- 之类的都可以省掉,像 Discuz 那样,但是还要改程序。还是简单最好,我们做小改动带来小简单。
Pader 2010-10-23 0

IMG 元素的 complete 属性:不在标签上使用 onload 自动调整图像大小

关于网页中调整图像大小的方法大家肯定都会,通常情况下,我们会在 <img/> 标签内使用 onload 在图像加载完成后调用指定的函数来调整大图像的大小,为什么要 onload 之后呢?因为必须等图像加载完成之后,JS才能正确的得到图像的宽高,从而等比缩放图像。

那么问题是什么呢?其实由于一些特殊原因,我们无法保证能在指定区域里的每一个 <img/> 元素中都增加 onload,如果我们在统一的脚本中去获取那一块的 <img/> 元素,然后增加 onload  事件是不靠谱的,因为 onload 事件必须在图像加载完成之前增加到元素上,如果元素已经加载完成后再去附件 onload 事件,那么这个事件是不会被触发的。

如果我们能得知这个元素是否加载完成,那么就好办了,加载完成的话,直接调用指定的 JS 的函数来调整大小,没有加载完成,则赋于这个元素 onload 事件,把调整大小的函数放到 onload 中。

怎么知道这个元素是否加载完成呢?对 complete 属性,比如我们有一个图像元素的 ID 是 "image" ,则可以使用 document.getElementById("image").complete 来得到这个元素是否加载完成。这是一个布尔值,TRUE 则代表加载完成。

那么我们具体的实用演示见下:
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cn" lang="cn">
<head>
<meta http-equiv="Content-Language" content="zh-CN" />
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>关于 IMG 元素的 complete 属性演示,自动调整图像大小 - VGOT.NET</title>
</head>
<body> 

<p>这个演示主要是介绍 img 的 complete 属性,而不是如何调整图像大小,大家注意重心哈。</p>
<p>几张图片也只是我从网上随便搜的演示,不一定随时都能打开。</p>

<!-- 这里先放几张图 -->
<div id="content">
 <img src="http://bbsfile.ifeng.com/bbsfile/attachments/72_OZcuDZ3H9wqU.jpg" border="0" />
 <img src="http://pic.nipic.com/2008-09-04/20089423244653_2.jpg" border="0" />
 <img src="http://www.thegreatwall.com.cn/photo/upload/2005/10/11294617800.jpg" border="0" />
</div>
</body>
<script type="text/javascript">
//这下面的脚本建议就像这样放在网页底部
//不建议放在 window.onload 里,如果使用了 jQuery 则可以放在 $(document).ready(); 里
//或者参考这篇文章:http://www.vgot.net/?A65.htm
function adjustImageSize() {
 //这里使用 this 指针来代替传参的当前元素,下面有解释
 var imgMaxWidth = 350, imgMaxHeight = 300;        //图像限制的最大宽高
 var w = this.offsetWidth, h = this.offsetHeight;  //获取元素的宽高
 //通过计算等比调整图像宽高
 if(imgMaxWidth > 0 && w > imgMaxWidth) {
  this.width = imgMaxWidth;
  this.height = h/(w/imgMaxWidth);
 } else if(imgMaxHeight > 0 && h > imgMaxHeight) {
  this.height = imgMaxHeight;
  this.width = w/(h/imgMaxHeight);
 }
}
var imgs = document.getElementById("content").getElementsByTagName("img");
for(var i=0; i<imgs.length; i++) {
 if(imgs[i].complete) {  //使用 complete 属性判断元素是否加载完成
  //直接调用函数调整图像大小
  //这里使用函数的 call() 方法将函数的 this 指针改为 imgs[i] 元素
  adjustImageSize.call(imgs[i]);
 } else {
  //没有加载完成则将函数赋到元素的 onload 事件中
  //onload 的内部 this 指针本身就是它所属的元素
  imgs[i].onload = adjustImageSize;
 }
}
</script>
</html>
 
点击这里下载示例文件:[attach=212]
Pader 2010-7-23 0