你在这里


PHP

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/百度相关代码就很容易实现。

Drupal 6网站迁移到PHP 5.4后的报错

James Qi 2015年5月29日 - 16:04 发布

  以前Drupal 6的网站迁移到阿里云服务器后,我们使用的是PHP 5.4,出现了几个以前没有的报错,在网上查了一下,说是Drupal 6比较老了,只支持到PHP 5.2,用在5.3以后可能会出现各种问题。没有办法,这样情况只好先自己改一下代码,下面就把改过的记录下来:

自由标签:

尝试编写MediaWiki的扩展程序

James Qi 2015年4月22日 - 18:06 发布

  MediaWiki用了9年多还从来没有尝试过编写扩展程序,有扩展需求也是在MediaWiki官方网站上去寻找能满足需求的第三方扩展。不过有用Drupal过程中积累下来的编写模块的经验,也应该可以编写出MediaWiki的扩展模块。

  以前为了在Wiki页面中输出一段循环代码,用过一个叫做include_PHP的扩展,把php程序嵌入到Wiki中,但现在这个扩展已经找好不到了,是因为安全问题已经被删除了,更无法找到升级版本。前一阵子在导入新数据的时候,就遇到报错的情况而无法解决。

  所以决心要自己来编写一个扩展程序解决,今天花了一下午的时间,终于算是编写出来了我的第一个MediaWiki扩展程序。需要用的资料如下:

自由标签:

检测网站301重定向跳转的PHP程序

James Qi 2015年3月4日 - 10:48 发布

  最近在继续把一些网站从托管的自己服务器向云服务器转,做网站很多年了,少不了一些以前用301重定向做的网站调整,例如某个子域名telecode.027.net后来单独申请域名www.chahaoba.com后就一直用的301重定向,这样的重定向按照搜索引擎优化的说法是需要保持至少6个月,但我们基本上保持了几年,期间机房、服务器也多次变化,每次都需要记得去进行修改设置。

  这样的跳转做得多了、服务器搬迁也多了,有些记不得了,这次干脆趁着再次搬迁的时候来一个整体梳理,把所有以前做过的301重定向全部列出来,还专门做了一个PHP程序来检测看是否跳转、跳转是否正确,把这个程序放到服务器上定期每日运行一次,结果发送邮件,邮件标题举例:check_jump: 148 jump ( match = 145, not_match = 3 ) , 0 not jump, total: 00:02:53 average: 1.169 seconds,这样以后就再也不用担心因为什么原因将这些跳转改变了自己还不知道。

页面

订阅 RSS - PHP