本文将介绍Windows下subversion作为Apache module的安装方法。
阅读全文 »
Apache的许多外挂功能是通过模块实现的,比如php、subversion等,安装这些功能时就需要向Apache中添加模块。看似很简单,向 httpd.conf 中添加下面这一行(以php为例):
LoadModule php5_module "php-5.1.2/php5apache2.dll"
但是试图重新启动Apache时却往往不能成功。在事件查看器中可以看到,Apache无法找到指定的模块(php-5.1.2/php5apache2.dll)。可是明明这个文件好好地在那里,为什么?
原来是系统找不到该模块所需的 dll 文件,而造成启动失败,Apache在报告错误时简单地报告为模块找不到。
那么如何判断该模块需要哪些dll才能执行?一般来说,模块所需的dll都饱含在该模块的软件包中,例如上述 php5apache2.dll 所需的 php5ts.dll 就包含在php的发行包中,并与php5apache2.dll位于同一目录下。如果你安装了 Microsoft Visual C++ 6.0,其中附带的一个工具Dependency Walker可以精确地告诉你模块需要什么dll。用Dependency Walker打开php5apache2.dll,可以看到该模块需要以下的dll:php5ts.dll,libhttpd.dll,libapr.dll,libaprutil.dll,msvcrt.dll,kernel32.dll。其中 msvcrt.dll 和 kernel32.dll 是系统文件,libxxx.dll 是 apache 自带的 dll 文件。
确定了模块需要哪些dll之后,下一步就是让系统找到这些dll。Apache启动时,它会在Apache.exe所在目录(一般是C:\Program Files\Apache Group\Apache2\bin)和系统的 %PATH% 变量中寻找dll。所以最简单的方法就是将模块所需的 dll 文件复制到 Apache.exe 所在目录下,或者复制到 C:\Windows\system32 下。这样Apache就可以正常加载该模块了。
另外一个方法就是修改%PATH%环境变量,使之包含模块所需dll所在的目录。在上面的例子里,假设php安装在 C:\php 下,那么向 %PATH% 中添加 C:\php,Apache即可正常加载php模块了。但是,如果你的Apache是通过系统服务启动的话,那么修改完环境变量之后必须重新启动计算机才能正常启动Apache服务(参考:http://tech.idv2.com/2006/04/06/windows-env-var-vs-reboot/)。
这一阵子使用了基于Ajax的PHP-MVC框架Zephyr。官方主页为 http://zephyr-php.sourceforge.net/。
该框架的Ajax通信机制使用第三方软件 cpaint (http://cpaint.booleansystems.com/)实现,而视图则使用PHP的官方模板 smarty (http://smarty.php.net/)实现。
基本的开发思想很简单:利用javascript通过Ajax来调用远程的php代码,然后自动地将返回结果显示在某个指定的div元素中。实现了以下的目标:
1. 业务逻辑和画面显示的分离。
业务逻辑完全在php代码中实现,而画面显示则完全由smarty提供的模板语言写成。
2. 完全封装了ajax操作。
利用cpaint完全封装了ajax操作,开发时完全不必考虑ajax的复杂性,而可以像开发windows程序那样进行ajax程序的开发。
3. 解决了动态装入js代码的执行问题。
Ajax应用中有一个很重要的问题,就是通过Ajax动态读入的javascript代码不会被自动执行。而zephyr解决了这个问题。
不过,我也同时发现zephyr的一个缺点。
1. 同时读取多个div的内容会引起冲突。
如果试图同时读取画面上多个div,则会导致显示混乱。这是因为,zephyr使用一个全局变量来保存div的名称,因此同时读取多个div时,仅有最后一个div的名字被保存,导致本应读入到各个div中的内容全部都被装入最后一个div。为解决此问题,应当在zephyr的核心javascript/function.js中增加信号量互斥的操作:仅有得到信号量的更新操作才允许进行,如果获取信号量失败,则等待一定时间之后再次尝试,直到成功为止。这样就能够保证各个更新操作依次执行,而不会引起冲突。
0. 前言
所谓IE地址栏表达式,就是在IE的地址栏中输入 javascript:<代码>,执行某些功能,来动态改变原有页面的参数以达到某些目的,例如开放被禁止的按钮、显示原本隐藏的图片等等。本文将就IE地址栏的使用方法做一个详细的说明。
阅读全文 »DOM对象event仅在事件发生的期间内存在。因此下面这种写法是错误的:
<a href="javascript:alert(window.event.x)">
而应当写成
<a href="#" onclick="alert(window.event.x); return false">
通常,如果对HTML元素指定了 position: absolute,则可以通过 left、top、pixelLeft等 属性获取该元素的位置和大小。但是不指定 position:absolute 的情况下则不能使用该方法。
幸运的是如果我们想知道的是文本框的位置,则可以使用 textRange 对象来获取。
如果我们有
<input type="text" id="inputbox">
则可以通过以下代码获取其位置:
var inputbox = document.getElementById('inputbox');
var tr = inputbox.createTextRange();
top = tr.boundingTop;
left = tr.boundingLeft;
height = tr.boundingHeight;
日本经济新闻社的个人电脑专刊每年都会对各大企业的网站进行易用性评价。从这些评价的条目我们可以看出日本人的网页设计理念是如何注重易用性的。
原文:http://npc.nikkeibp.co.jp/npc/contents/tuika/usability2005/markbook.html
阅读全文 »众所周知Apache是目前最优秀的HTTP服务器。实际上它不仅能当作服务器使用,也能够被用来架设代理服务器。本文就如何使用Apache架设HTTP代理服务器进行说明。
本文将基于Win32版的Apache 2.0.47进行说明。以前的Apache 1.x版配置方法稍有不同,但这里不作说明。
阅读全文 »译自http://flexfrank.net/toybox/gc.html
在Google的地址栏中输入某些特定的公式,即可将Google当作计算器使用。下面是Google计算器中可以使用的函数。
阅读全文 »