PHP技术积累

字符串替换的方法

这几天,工作中遇到一个小问题,有一内容类型的字段存储的是语言,因为这写数据是用Excel导入做的,所以为了处理简单,很多的

语言就用逗号分隔,把所有语言做一个字符串,这样存入的时候就简单的多。但是由于当初数据质量的问题,有一部分“Chinese”是

“Mandarin Chinese”,现在需要把所有的“Mandarin Chinese”改为“Chinese”。
这就需要把一个字符串中的部分字符串替换掉。对于这样的问题,一般就是用正则表达式来做替换,或者使用PHP的一些替换的方法,

这样做的话感觉很比较麻烦,时间又比较紧,所以就想了这样一个懒人办法,使用explode函数,把要替换的字符串做为分割符号,然

后把两个数组元素中间接上要换成的字符串,然后UPDATE一下就行了。
代码如下:
<?php
function replace(){
$sql = db_query("SELECT field_languages_value,nid FROM {content_type_company_profile} WHERE

field_languages_value like '%Mandarin Chinese%'");
while($result = db_fetch_object($sql)){


本文永久地址:http://drupalsh.cn/node/2804 , 转载请注明出处.

史上最全人PHP数组排序函数大全

有时候,一个php函数就能省去我们大量的代码,在写程序的时候,如果能灵活运用这些函数,将大大节省时间,提高效率,下面总结的是php常用的数组排序函数,phper一定会用到的。

简单排序

首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如Listing A所示:

Listing A

<?php
 $data
= array(5,8,1,7,2);

 sort($data);

 print_r($data);

Â
?>

输出结果如下所示:

Array ([0] => 1

[1] => 2

[2] => 5

[3] => 7

[4] => 8

)

也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简单排序结果相反。Rsort()函数对数组元素进行从高到低的倒排,同样可以按数字大小排列也可以按字母顺序排列。Listing B给我们展示了它的一个例子:

Listing B

<?php
$data
= array(5,8,1,7,2);rsort($data); print_r($data);
?>

它的输出结果如下:

Array ([0] => 8

[1] => 7

[2] => 5

[3] => 2

[4] => 1

)

根据关键字排序

当我们使用数组的时候,经常根据关键字对数组重新排序,从高到低。Ksort()函数就是根据关键字进行排序的函数,同时,它在排序的过程中会保持关键字的相关性。Listing C就是一个例子:

Listing C


本文永久地址:http://drupalsh.cn/node/1813 , 转载请注明出处.

关于Drupal中的patch

博客很久没有更新了,最近头有点痛。青岛的夏天来了,今天好热。。

好像跑题了,言归正转。最近有个朋友问我Drupal中的patch是怎么回事,他说用drupal半年了,但是没有遇到过要用patch的情况,于是就很迷惑。drupalchina论坛里经常见到有人提到patch,但是patch究竟是怎么回事,下面就patch的来龙去脉,做一个简单的说明。

Patch,英文意思是补丁,它并不是drupal的产物,它是一个linux的命令,说起它,不得不提linux的另一个命令:diff.在数学领域,diff是用来对2个集合求差的,patch是求合,在linux命令中,diff用来比较二个文件的不同地方,比如你是一个项目管理者,你让手下给你修改一下模块,修改好交给你后,你想看看他改了什么地方,就可以用diff命令,格式为:diff [命令行选项] 原始文件 新文件

例如

[hahalee@builder]$ diff -u a.module b.module

diff的常用参数如下:

-r 递归处理目录  -u 输出统一格式(unified format)    -N patch里包含新文件 -a   patch里可以包含二进制文件


本文永久地址:http://drupalsh.cn/node/1095 , 转载请注明出处.

jQuery的一个插件-Live Query

近来遇到一个问题,通过AJAX方式返回的结果,jquery的 document .ready 属性不起作用。document .ready是在DOM完全加载成功后执行,但是通过AJAX返回结果后,DOM已经加载完了,所以不会触发里面的javascript代码。

比如下面一段代码



if(Drupal.jsEnabled) { 
$(document).ready(function(){ 
$('a.un-pulish-num').livequery(&quot;click&quot;,function(){ 
var successfunction = function(data){
$('div.un-pulish-class'+data.nid).html(data.message);
$('#num-'+data.nid).fadeOut();
};
$.ajax({
type: 'POST',
url: this.href,
dataType: 'json',
success: successfunction,
data: 'js=1'
}); 
return false; 
});
}); 
}

它的作用是通过点击事件,动态更新结果。这个点击事件在页面第一次加载时,是有效果的,但是通过AJAX方式产生的结果,再点击就会失效了。

Jquery 1.3.x 增加了一个live方法,据说可以解决这个问题,写法如下,

 


本文永久地址:http://drupalsh.cn/node/811 , 转载请注明出处.

Drupal白屏的诊断方法

近来公司新装一台服务器,装上Cent os 5.3后,然后是装apache,mysql,等,以为一切万事大吉,谁知道导入一个Drupal系统后,出现白屏。检查一下,服务器配制也没有什么不对,于是重新安装了一个全新的Drupal,完全正常,这就怪了,为什么在本地一切正常,到服务器上怎么就白屏呢。

后来发现服务器的PHP是5.0系统的,想到drupal有些模块要求PHP5.2以上,就升级了一下PHP,在网上查的Linux下升级PHP方法如下

# rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
#
gedit /etc/yum.repos.d/utterramblings.repo
在打开的文件中加入以下内容:
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
保存
# yum update php
***
***
重启apache
# service httpd restart

一切搞定,再装,竟然成功了。原来如此。。

但是,后来再用的过程中,经常还是出现莫名其妙的白屏,特别是在加载内容比较多时,比如在编辑内容时或者启用模块时,这此时候往往用的内存比较多,会不会是内存不足的问题?查看一下现在PHP的内存设置,32M,也忒小了点,马上开始升级内存。


本文永久地址:http://drupalsh.cn/node/718 , 转载请注明出处.

使用distinct在mysql中查询多条不重复记录值的解

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是我们两人都郁闷了。。。。。。。。。

下面先来看看例子:

table
id name
1 a
2 b
3 c
4 c
5 b

库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。

select distinct name from table
得到的结果是:

name
a
b
c

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

select distinct name, id from table

结果会是:

id name
1 a
2 b
3 c
4 c
5 b

distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。

我们再改改查询语句:

select id, distinct name from table


本文永久地址:http://drupalsh.cn/node/417 , 转载请注明出处.

在drupal中开启SSL支持

在互联网中,"S" 是一个非常重要的字母。在互联网上的各种传输中,如果你非常关心你的数据的安全性,你对"S"一定不会陌生,比如,你会用

SFTP 而不是 FTP, 用 SSH 而不是 Telnet, 用 HTTPS 而不是 HTTP.所以,用drupal建的站中,如何开启SSH支持呢?

下面有四种解决方法,每种方法都各有利弊。你可以根据你的情况选择用不同的方法。

(注,下面所有的操作都假定你的WEB服务器已经支持SSH。如果你的WEB服务器还没有开启,请先Baidu一下如何开启)

用Drupal的加密模块(Securepages)加密登录页和admin管理页面

Secure Pages 是一个相当流行的模块。这个模块的作用是让drupal网站中的某个页面用

HTTPS。这个模块的优点是你可以有选择性的加密你认为重要的页面。它默认加密添加内容,编辑内容,任何与用户有关的页面和admin管理页面。

SSH相当耗费服务器资源。只有选择性的加密你认为非常重要的页面,这会大大降低服务器的负担。但是,session,cookie 仍然没有加密,这样,

假如一个用户在授权的HTTPS通过验证后,他再访问普通的HTTP页面,然后,黑客通过普通的HTTP页面盗取他的SESSION信息,登录我们的网站,这样就

可以取得我们认为非常机密的信息。这是一个很大的安全威胁。

优点: 相对于所有页面都用SSH加密,这种方法降低了服务器的负担。

缺点: 没有保护SESSION信息,数据仍有可能初盗.


本文永久地址:http://drupalsh.cn/node/345 , 转载请注明出处.

20个PHP库

下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法。
图表库
下面的类库可以让你很简的创建复杂的图表和图片。当然,它们需要GD库的支持。

  1. pChart– 一个可以创建统计图的库。
  2. Libchart– 这也是一个简单的统计图库。
  3. JpGraph– 一个面向对象的图片创建类。
  4. Open Flash Chart– 这是一个基于Flash的统计图。

RSS 解析
解释RSS并是一件很单调的事情,不过幸好你有下面的类库可以帮助你方便地读取RSS的Feed。


本文永久地址:http://drupalsh.cn/node/331 , 转载请注明出处.
同步内容