Tag: PHP


搜索引擎对动态页面不是很友好,像我的博客之前显示文章都是用article.php带查询方式,也就是形如article.php?a=12的方式。但是搜索引擎对后面的查询字段通常忽略,把所有article.php当作一个页面,因此多个页面无法被搜索引擎捕获。我们可以通过重写url将地址静态化,改成12.html等形式,这样浏览器就可以很容易的区分不同页面从而抓取。伪静态方法有很多,我这里用的是.htaccess方法,利用apache的rewrite模块进行,里面涉及到非常简单的正则表达式知识。这个方法主要是创建并编辑.htaccess文件。一、创建.htaccess因为我通常在linux下开发web因此没有无法生成.htaccess文件的困扰。对于windows用户,可以新建xx.htaccess然后在cmd里copy xx.htaccess .htaccess得到这个文件。这个文件可以用任意一款文本编辑器编辑。二、书写rewriterule这里首先打开.htaccess文件,然后输入如下文本:RewriteEngine OnRewriteBase [path]RewriteRule [from] [target]其中[path]是指从web根目录开始,要重定向的文件所在目录,比如本站,article.php在blog目录下因此[path]写成/blog。[from]是你希望用户在浏览器里输入的url形式,比如我这里希望用户输入 一些数字.html的形式,那么[from]写成^([d]+).html。这里的^表示目标串的开头,表示从开头匹配,一对圆括号的作用是今后引用它,而一对方括号的意思是将它包括的东西算作一组,后面的加好表示前面的一个或一组模式出现1次或以上次。因为.在正则表达式里有特殊含义,因此要加将其转义。[target]是要转向的文件,因此[target]在我这里是article.php?a=$1。这里的$1就是对前面的小括号的模式的引用,前面如果出现多个小括号就是匹配第一个,$2就是第二个,以此类推。值得注意的是,如果页面内大量链接以及图片的引用用的是相对路径形式,如x.jpg,需要保证重定向后目录层级不变,否则会造成链接失效,图片无法显示的问题。这个问题很容易理解,因为重定向发生在服务器端,因此浏览器并不清楚目前的目录到底在哪里比如在浏览器里输入地址www.domain.com/a/b/c.html并在服务器端指向www.domain.com/index.php?a=a&b=b&c=c文件,这是就会出现问题。原因是浏览器在查找相对路径x.jpg时,会在www.domain.com/a/b/目录下查找,而事实上并不存在这样一个目录。这个问题的另外一个解决办法是所有的链接都采用绝对路径形式,不过这样对今后网站转移和维护都会造成困扰。如果网站会频繁转移,又想用绝对路径,那就只能定义一个全局变量或者常量使其值为”http://www.domain.com/”这样,只要把这个变量在需要链接的位置的相对路径前输出即可。网站转移的时候只要修改这个全局变量。三、上传.htaccess文件书写好这个文件之后需要将这个文件上传到服务器。目前国外的linux主机几乎都支持这个功能,因此只要把这个文件传到想要作用的目录下即可。四、.htaccess的其他功能这个文件功能其实很强大,也可以自定义404错误等各种错误页面。网上这些资料很多。这段时间我会将站内几乎所有的链接都静态化,这可能会导致很多错误,因此只能在错误中前进了。


总得写点什么,不能总让这个Programing空着。我的WEB程序是自学的,学习不系统,也不专业,轻拍。从这个学期开始,发现身边好多同学在看有关WEB的书,这里就简单写一下应该怎样学WEB。我对WEB程序的理解很简单,就是生成HTML代码,无论静态网站还是动态网站。因此学习WEB首先要掌握基本的HTML。HTML会一些就好,首先个人认为HTML各种元素以及他们的属性一次性记不住,其次有些书介绍元素和属性在今天的WEB程序里已经很少用到,随着样式跟内容的分离,HTML已经失去了控制表现形式的义务,内容表现更多是交给CSS处理。刚提到了CSS,我是在学习过服务端脚本以及客户端脚本之后才接触的,不过我发现这个东西比较适合安排在学习HTML之后,有了CSS,HTML就基本算学会了WEB的表现部分,可以实现页面的布局以及表现。比较早接触CSS的另一个原因是,CSS学起来比较简单,本身就是个负责控制HTML表现的表,没啥具体语法要求。这样不至于过早对学习失去兴趣。之后我建议开始接触服务端语言,PHP或者JSP等。选择一门自己适合的服务端语言。我个人比较喜欢C风格的语言,因此选择了PHP。PHP在WEB中的作用就是生成HTML代码。一个PHP程序通过处理数据逻辑,并将数据添到HTML,从而中生成我们看到的代码。这就是服务端语言的作用。接着可以开始看javascript。Javascript有在客户端控制HTML的能力,因此适合处理一些不需要服务器参与的简单数据逻辑寻算。另外好多无刷新更新页面内容的功能也是通过Javascript控制的。因此Javascript肩负着使页面有更好的页面体验的使命。Javascript也是Ajax技术的核心,比如人人网上可以无刷新浏览照片,无刷新删除新鲜事,无刷新提交留言等。基本学习WEB就是这么个顺序。这些算是基础知识。更深层次的学习,比如mvc架构,如何提高页面的可用性有效性这些可以在开发中慢慢体会。


昨天比较受挫,google adsense申请第二次失败了。上网查原因,各种说法,比较可信的是我的域名注册时间不足6个月,而这项政策是google针对中国,印度等地区的。我的域名注册连6天还不到呢,不给我过也能理解。之后晚上又去看了阿里妈妈,觉得那种东西不靠谱,也没多少收入,就放弃了。于是我决定继续完善页面功能,第一步就是做了很久就想做的RSS订阅。RSS用的是xml,<channel><item>两个标签以及其子标签会用了就可以很方便的生成RSS FEED。<channel>主要用来说明这个FEED的基本情况,如名称<title>地址<link>描述<description>等。<item>用来表示一篇篇的文章,<title>表示标题,<link>原文地址,<description>用来描述文章,这三者为必须,其余的有可选的<author><pubDate>等.熟悉xml就可以很方便的创建自己的RSS FEED,值得注意的是,RSS FEED可以是动态文件,*.asp,*.php都是可以的.之后发布到网上,叫人订阅就ok了。另外欢迎订阅本站FEED,页面右侧就有。订阅之后可以无须登录本站的情况下,查看那更新。更重要的是,用RSS阅读确实方便,您可以添加很多关注的网站,这样就不用每天打开很多网站查看更新了。


今天用smarty帮谷歌(人人帐号)同学写了个东西,应该是什么机构的测试吧。总体感觉用smarty确实比之前的开发模式更方便。这也坚定了我以后自己构建smarty思想模板的决心。smarty的目的是实现前后台分离。因为在正式的web开发场合下,多数采用多人开发模式,这就要求分工明确,才能保证开发效率及质量。我曾尝试过按模块分工,这种方式比较适合各模块界限鲜明,工作模式简单的开发,个人认为对于RIA(Rich Internet Application)横行的今天,这种开发模式几本没有生存空间。除非各开发者之间默契超强,或者这次开发只由一人完成。更理想的情况是,按照前后台分工,对于后台再具体细分模块。因为大多数的web开发团队里,各个成员要么是美工很强,而对后台程序感觉较差,或者是后台程序能力很强而页面美工做不好(也许开发者自己认为页面很美观,比如我。而事实上开发者的审美观不能很好的满足用户)。Smarty就是适合这种分工方式的模板。Smarty不是一种MVC架构。在Smarty里,页面美工人员可以专注于页面布局,书写纯html代码,在需要数据处用smarty默认的或个人配置的定界符标识动态变量。当然多数情况下,html是很难预测页面具体由多少个样式重复的不同动态内容,因此Smarty在前端提供了foreach,for,if等流控关键字。事实上,前端开发者也只需用到如上的几个关键字。其余的完全可以交由后台程序员在php文件中对形如{$xx}的变量进行赋值等操作。事实上,如果后台开发着有良好的前端布局能力,也完全可以参与到前台布局中,只需要对前端标定的变量进行赋值即可。但这不符合前后台分离开发的根本需求,因此不推荐。不过这个事实说明,smarty开发是相对灵活的。而对于后台php人员,其程序量并没有本质变化,后台人员仅需要对smarty提供的smarty类的成员进行简单理解,并习惯于用smarty->assign方式对变量赋值即可。最后一点,smarty是基于php的。

CodePhoto.WTF © 2025