当前位置


PHP

用PHP程序以及专业编辑器进行正则表达式查找及替换

James Qi 在 2017年4月24日 - 22:34 提交

  在用Drupal搭建网站的时候,有时需要用到一些复杂的查找及替换,只用str_replace是无法做到的,这时需要用到正则表达式,有这样几个PHP函数可能会用到:

  更多PCRE 函数

一个判断访问者是否来自中国大陆的Drupal模块及PHP函数

James Qi 在 2017年3月24日 - 12:31 提交

  一直以来我们放在国外服务器上的网站在国内访问都很慢,当网站中包含有Google地图等内容的时候,更是在国内访问会被卡住,等待几十秒后才打开页面剩余部分,而地图部分也是空白。

  去年在做ipshu.com网站的时候也是遇到这个问题,因为这个站本身就是判断IP地址的,所以也方便解决,当时记录了一篇博客《让国内国外都可以调用Google地图API》,采用的其中第二种办法。

  但其它放在国外的网站依然没有解决,昨天干脆去编写了一个简单的Drupal模块in_china(放在本文的附件中),主要作用就是定义一个PHP函数in_china(),用于判断访问者IP地址是否属于中国大陆,如果属于返回True,反之返回False。

  in_china模块一共4个文件:

自由标签:

一个独立可用的中文简体繁体转换PHP程序

James Qi 在 2017年3月9日 - 17:53 提交

  前些天尝试成功了“Drupal中文网站简体版本自动生成一个对应的繁体版本”,那篇博文中详细记录了Drupal中需要修改的地方,而简体到繁体转换的核心PHP程序并没有给出,现在就放在下面供需要的朋友参考。

  需要说明的是,我在网上搜了好些中文简体繁体转换PHP程序的文章,基本上都残缺不全,需要下载的对照数据成了死链接,无法真正使用,我只好又找了别的语言(有一篇介绍Java做简繁转换的文章)程序中找到纯文本的对照数据,自己再花了一些时间来转换,最好放到自己的程序中,很是折腾,希望下面这段代码让需要的朋友不用这样折腾了。

Drupal 7中让页面归类的PHP程序

James Qi 在 2016年6月14日 - 09:38 提交

  最近需要编写一段程序来读取Drupal网站中页面Node的某个文本字段,进行处理、判断、匹配后,将这个页面归类Taxonomy到某个术语表Vocabulary的术语Term中。在刚开始用Drupal 6的时候就曾经编写过类似程序来分类,见博文《Drupal中让Node归类的PHP程序》,在后来使用Drupal 7的过程中,绝大多数分类都是在创建网站、导入数据的时候就自动进行了,使用了术语来源Term reference字段和自动完成术语挂件(标签)Autocomplete term widget (tagging)控件,但也有把数据作为文本导入字段,然后再运行php程序进行分类的情况,不过Drupal 7中的程序与Drupal 6的有些不同,当时没有记录博客,后来再找以前的程序很费劲,现在补记一下,示范程序如下:

自由标签:

修改Drupal的xmlsitemap模块来控制搜索引擎爬取网站地图速度

James Qi 在 2016年2月2日 - 16:40 提交

  以前托管服务器或者租用的服务器一般都是100M共享的带宽,很少出现机器带宽被占满的情况,去年开始采用阿里云平台后,带宽就是一个不得不考虑的成本因素,我们一般都是每台ECS购买的10M左右带宽,每年费用已经不少了,而投入使用后很轻易就会被占满,关键是网站的流量并没有特别提升,广告收入没有增加,成本却在大幅提高,还导致正常用户访问变慢、困难。

  同事在Linux服务器上安装了一个iftop来查看带宽占用情况,很容易就发现了是搜索引擎的爬虫抓取sitemap.xml这样的网址占用了很大带宽,我们网站系列多、页面多、还有多语言或者手机版,网站地图就特别的多,如果爬虫来得过于频繁就给我们不小困扰。

  但爬虫这种抓取活动还不宜直接屏蔽以免影响收录,所以考虑限制抓取速度的办法,安装了apache的mod_bw模块,还没有调试好,不过在网上搜索到文章说可以用PHP编程来实现控制下载速度,这个对我启发还比较大,因为我们正好修改过Drupal的xmlsitemap模块xmlsitemap.pages.inc文件来改变网站地图中的内容和格式,只要再把输出方式改一点、增加一点sleep循环就可以,代码如下:

自己编程进行Drupal 6网站升级数据迁移到Drupal 7

James Qi 在 2015年12月24日 - 15:32 提交

  整个2015年从开始到结尾都在进行网站向云服务器的搬迁以及网站的升级,其中大数据量的数据迁移是个令人很头痛的问题,几百万的数据量加上几十个字段,系列网站还有几十个这样的网站,需要等待数据迁移程序运行的时间真是太长太长了。上半年就遇到大数据量的问题,后来通过修改服务器配置,让PHP使用更多的内存、最大执行时间、数据库连接缓存等办法,还是用drush content-migrate-fields这样的命令来进行,算是解决了部分难以迁移的站点。但现在到年尾,而且随着Drupal 8的退出,Drupal 6很快就面临失去支持的境况,我们需要把所有Drupal 6网站都升级,现在把所有服务器资源都利用起来,还专门购买16核64G内存的云服务器临时实例来加快迁移程序的运行,但按目前的做法算下来,依然是不知道还需要几个月才能完成。sad

在Linux中临时设置交换内存

James Qi 在 2015年12月8日 - 16:00 提交

  Drupal 8在上月推出,Drupal 6在3个月后不再提供支持,今年我们本来就花了很多时间在做服务器迁移到阿里云以及Drupal系统升级的事情,现在还剩下的几个Drupal 6系列网站的升级工作也要抓紧进行。

  升级工作的流程我们已经很熟悉了,可以批量进行(见博客文章《用Drush批量升级Drupal 6到Drupal 7》),但遇到数据量很大的站点时,content migrating 的时间特别长,还容易因为服务器内存、php运行时间限制、SQL时间过长等原因报错失败,数量在几十万以内的升级起来都很快,但单个站点数据量达到数百万、每个站点的字段数量有几十个、系列网站有几十个子网站的时候,升级时需要的服务器资源和运行时间就成指数级别增长,实在痛苦!

Drupal网站中从字段内容获取对应的Node ID

James Qi 在 2015年11月12日 - 17:02 提交

  在Drupal网站有时候有多个内容类型之间需要互相连接,例如内容类型company中的字段field_address,需要查找内容类型location中field_street相同的node,然后在company的显示模板中field_address做一个指向location中这个node的链接。

  在Drupal 7中可以通过Entity查询来实现,不过因为location中的field_street可能有很多是重复的,我们只能取其一,就可以在查询中限制只找到第一个range(0,1),具体代码如下:

自由标签:

将Drupal中的Computed Field转为普通文本字段

James Qi 在 2015年11月12日 - 16:20 提交

  几年前刚接触Drupal的时候,为了让显示的内容更丰富、也便于做Views、便于内部搜索,在Drupal 6中曾经使用过Computed Field(需要设置计算结果保存到数据库才能进行Views、搜索索引等工作),也就是一种可以嵌入PHP代码来实现计算、变换的字段,这个确实有很大的灵活性。

  不过随着对Drupal的了解,让显示的内容更丰富其实只需要修改模板,便于做Views、便于内部搜索也可以做成固定的字段,只要事先对需要导入的文本进行一些处理就可以,在Drupal 7里面就基本没有用过这种字段了。

  Drupal 8在2015年11月19日会推出第一个正式版本,Drupal 6在随后的3个月还提供安全更新,此后就不再提供更新和支持了,所以Drupal 6的升级很迫切,最近我们也一直在做这方面的工作。

  在升级带有Computed Field字段的Drupal 6网站过程中,在Drupal 7里面也可以添加Computed Field,只是字段里面的计算设置、显示设置的写法都与以前的不一样了,需要修改。但想到这也比较麻烦,而且未来如果还要升级到Drupal 8估计又得折腾,并且用这种字段不是很必要,于是就干脆把这种字段改为普通text字段算了,下面是步骤记录:

自由标签:

Drupal网站模板中加入php程序比较Google和百度的广告及统计

James Qi 在 2015年8月4日 - 06:00 提交

  前段时间准备把百度广告管家的代码改为百度联盟的代码,顺便还想再比较一下百度、Google广告的一些数据,现在对Drupal模板、PHP程序比较熟悉了,所以采取在模板中嵌入PHP程序来随机出现Google/百度相关代码就很容易实现。

页面

订阅 RSS - PHP