Arrive Hangzhou

应朋友之邀给一家航空杂志社《Arrive Hangzhou》做的官方网站,从设计到编码均为在下完成 – 。 – (虽然在对方boss要求下修改不少),采用WordPress实现。

欢迎大家关注 http://www.arrivehangzhou.com

利用Google Map API获取地址坐标

Google.com

朋友拜托改的一段PHP小代码,其实就是Google MAP API FAQ里面提到的例子稍作修改,原文例子还用到了MySQL作为存储因此扯了一堆MySQL和PHPMyAdmin,只是想简单查下的就显得没必要了。

修改 @ 2009-06-07 :

于是今天写了一个Javascript版本的:http://vifix.cn/atelier/address_to_coordinates/
,代码都在HTML里面了,感兴趣可以右键查看源码。

下面是PHP版本的代码:
Read the rest of this entry >>

一个PHP简易访问计数

source_php

嘛,受朋友所托写的,不是什么大不了的东西,贴上来就当给初学者参考吧
只有计数功能,利用session防止重复计数

注意只能运行在PHP5+上

代码见页内:

Read the rest of this entry >>

首页更新

vifix9

觉得先前的首页在载入效率上很有问题,于是干脆一鼓作气重新做了一个,总共消耗大概16个小时。并且加入了一些细节和效果和内容(主要是一些个人的作品)。嘛,今年过后也得找工作了,就当广告先做起来吧~

访问:http://vifix.cn

眼下似乎还有一些问题,慢慢进行调整了。

滚动和音效分别使用了这两个jQuery插件:jQuery.jScrollPane, jQuery.flashSound

PS: 搞这个东西时项目目录命名为vifix9(因为是09年),真有改成⑨的冲动……

PHP自动加载class文件的方案

PHP5中有一个很方便的__autoload的魔术函数,PHP Manual中的示例如下:

function __autoload($class_name) {
    require_once $class_name . '.php';
}
 
$obj  = new MyClass1();
$obj2 = new MyClass2();

算是很方便的一个函数,然而有一个缺陷就是没有名称空间,大量的class不得不放在一个目录下面,才可以用这个自动加载php的魔术函数,如果class文件要放在不同的目录里面,这个自动载入就无能为力了。为了解决这个问题,自己写了一个loadClass函数实现类似功能,代码如下:

function loadClass($tgt){
	$class = substr($tgt, strrpos($tgt, '.')+1);
	require_once(DIR_APP.str_replace('.','/',$tgt).'.php');
	return new $class();
}
 
$test = loadClass("model.test");
$test->myfunc();

DIR_APP/model/test.php:

class test{
	function myfunc(){
		echo "hello, world!~";
	}
}

如此一来,就可以方便的加载在不同的目录里面的(缺点就是要打完整的”名称空间”),并且应该在PHP4中也可以使用(虽然PHP5已经是大流)……

补充@2009-02-23 22:42

就此自动载入的问题咨询了一下某飞,给了两个采用spl_autoload的自动载入的实现(by flying~):

function loader($className) {
    $classPath = str_replace('_', DIRECTORY_SEPARATOR, $className);
    require $classPath . '.php';
}
 
spl_autoload_register('loader');
 
$user = new Model_User();
// load (inlcude paths):/Model/User.php

class的名称定义遵循PEAR标准用下划线_进行分隔
更加复杂点的支持多路径的”豪华版”(by flying~):
Read the rest of this entry >>

曾经将自己出卖给撒旦,现在皈依基督,又对人文主义有浓厚兴趣的某只?

好吧,标题其实说的是我自己 – v -

为什么这么说?见内文转载吧……

那么其实我觉得自己的想法应该更加接近不可知论 – v -

Read the rest of this entry >>

WordPress加上站点地图

花了些时间整合了Blog的一些标签和tag,看上去应该干净了不少。

同时修改了一下主题,加大宽度。虽然很喜欢现在用的主题,但是却已经很古老了,里面用的一些WordPress内部函数都已经不被推荐继续采用,因此也都改为新的函数。顺便在侧栏也加上了Tag Cloud。

然后加上了一个Sitemap页面,里面是全站链接。

Sitemap的做成记录:

Read the rest of this entry >>

SimpleXML真是个好东西

这两天写一个页面需要访问一个RSS并且读取rss内的的文章标题和文章的链接,就尝试了一下PHP5的新特性也就是这个SimpleXML,直接支持xpath获取,确实很方便啊 :

$file = file_get_contents("__YOUR__RSS__URL__HERE__");
 
$xml = new SimpleXMLElement($file);
 
$titles = $xml -> xpath("/rss/channel/item/title");
$links = $xml -> xpath("/rss/channel/item/link");

然后就对$titles和$links这两个数组进行操作即可。

在jetty中使用quercus以支持PHP应用

jetty是一个开源的java web服务器,适合用来架设小型的java web环境,其官方网站:http://www.mortbay.org/jetty/

quercus是一个PHP的纯java实现(目前quercus 3.1.6对应的php版本为5.2.0 —— 来自于在quercus中运行的phpinfo(); ),是一个servlet,可以在JEE应用服务器中运行PHP的应用,其官方网站为:http://quercus.caucho.com/
它已经被包含在另外一个Java EE应用服务器 – resin的3.0.17版本之后中,如果直接采用resin,也可以直接获得运行PHP应用的支持

最近在某飞的建议下,有考虑在VPS上面将JavaEE应用服务器和跑PHP的服务器合并成为一个,于是把自己的ubuntu 8.04当作沙箱,安装了jetty + quercus的环境,大致配置步骤如下:
Read the rest of this entry >>

利用__FILE__魔术常量来组织PHP项目文件

PHP中并没有明确的Application(或者与此类似)的概念,因此文件分类如果较多又有许多代码共用,在不使用框架的情况下,就比较难以组织,不得不说这是PHP的一个缺陷。最近在项目中就碰到了这个问题。有前台的页面和后台的页面,后台页面放在admin目录。前后台都有一定量的公用的代码,并且其中也包含了可以复用的函数,比如说输出出错信息,验证登录等等等的。我最初的方法是折中的在应用的根目录下面放一个includes目录,然后再在admin里面也放置一个同样的includes,两边的内容基本上是大同小异的。可以说实在谈不上优雅的解决方案。
后来想到了wordpress也是类似的结构,稍微看了一下代码,发现它有一个全局的wp-config.php文件,里面有如下行:

define('ABSPATH', dirname(__FILE__).'/');
require_once(ABSPATH.'wp-settings.php');

查了一下手册,发现__FILE__是PHP提供的一个魔术常量,永远返回PHP解析到它时的文件的绝对路径(似乎从这个角度来看应该是变量?),利用它可以很好的定位项目的绝对路径,也为进一步的项目中的其它目录提供一个基准,例如我目前的config.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/*
 * 配置文件
 */
 
//常量PATH_INC - /includes绝对路径
define("PATH_INC", dirname(__FILE__) . '/');
 
//常量PATH_APP - /路径
define("PATH_APP", PATH_INC . "../");
 
//常量PATH_LIB - /lib路径
define("PATH_LIB", PATH_INC . "../lib");
 
//常量PATH_ADMIN - /admin路径
define("PATH_ADMIN", PATH_INC . "../admin");
 
//数据库设置
define("DB_HOST", "YOUR_DATABASE_HOST");
define("DB_USER", "YOUR_DATABASE_USER");
define("DB_PASSWORD", "YOUR_DATABASE_PASSWORD");
define("DB_DBNAME", "YOUR_DATABASE_NAME");
 
?>

如此一来只要在任何这个项目的php文件中用相对路径包含这个config.php,再用如下方法include所需要的文件即可:

//载入配置文件
require_once 'includes/config.php';
 
//建立数据库连接
require_once PATH_INC . "conn.php";
Page 1 of 212