PHP工具

史上最全人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 , 转载请注明出处.

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 , 转载请注明出处.

Windows下用SSH登录Linux乱码的解决方法

管理员登录后

vi /etc/sysconfig/i18n

在打开的文件中加入下面片段:

LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_us.UTF-8:en_US:en"
SYSFONT="lato-sun16"


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

使用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 , 转载请注明出处.

回调和事件

很多 Javascript 框架都提供了自定义事件(custom events),例如 jQuery、YUI 以及 Dojo 都支持“document ready”事件。而部分自定义事件是源自回调(callback)。
回调将多个事件句柄存储在数组中,当满足触发条件时,回调系统则会从数组中获取对应的句柄并执行。那么,这会有什么陷阱呢?在回答这个问题之前,我们先看下代码。
下面是两段代码依次绑定到 DOMContentLoaded 事件中

document.addEventListener("DOMContentLoaded", function() {
console.log("Init: 1");
DOES_NOT_EXIST++; // 这里会抛出异常
}, false);

document.addEventListener("DOMContentLoaded", function() {
console.log("Init: 2");
}, false);
那么运行这段代码会返回什么信息?显然,会看见这些(或者类似的):

Init: 1
Error: DOES_NOT_EXIST is not defined
Init: 2
可以看出,两段函数都被执行。即使第一个函数抛出了个异常,但并不影响第二段代码运行。
麻烦
OK,我们回来看下常见框架中的回调系统。首先,我们看下 jQuery 的(因为它很流行):


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