Magento Index Management建立索引速度慢解决方案

Magento产品数量不多的话这点体现不严重。但是如果产品数据在10W以上(个人经验判断),建立索引常常要一小时多或者更多。

特此研究了下,知道Magento在Index Management这边建立索引机制
的处理步骤有:

1)目录和导航栏的产品属性的索引建立

2)产品价格的索引

3)目录URL和产品URL的建立

4)重组产品的EAV数据

5)重组目录的EAV数据

6)目录和产品之前的关联索引

7)目录产品的全文搜索

8)产品库存、产品状态

(有不足的地方还原指正 ^_^。)

Magento索引
过程里的这八点,我主要针对第七点来优化。具体办法是,建立脚本程序,替代Magento的这部分工作内容。

<?php
require_once 'app/Mage.php';
umask(0);
Mage::app( "default" );
Mage::log("开始建立搜索索引:".date("d/m/y h:i:s"));
$sql = "TRUNCATE catalogsearch_fulltext;";
$mysqli = Mage::getSingleton('core/resource')->getConnection('core_write');
$mysqli->query($sql);
$process = Mage::getModel('index/process')->load(7);
$process->reindexAll();
Mage::log("搜索索引建立完成: " .date("d/m/y h:i:s"));
?>

虽然这办法对Magento Index Management这边的速度有所帮助,但是效果有限。。

后续的大数据库建立Magento索引
耗时慢的处理正在进行中,不日更新。 > _<

Sphinx关于DOCID_MAX ids的问题

WARNING: DOCID_MAX document_id, skipping

在window下的Sphinx重建索引的时候一直提示这个notice,导致大部分数据被过滤未成功索引。

原因是数据库的主键字段是20位的BIGINT,超出了Sphinx的32位版本的DOCID_MAX( 4294967295)的限定。

for 64 bit mashines
#define DOCID_MAX       U64C(0xffffffffffffffff)  要小于18446744073709551615
for 32 bit mashines
#define DOCID_MAX       0xffffffffUL 要小于 4294967295

 

解决办法:

如果是linux环境下,根据官方手册说的,带参数:–enable-id64 option 重新编译Sphinx
即可。

如果是window环境,在官方下载编译好了的64bit的版本(Win32 binaries w/MySQL+PgSQL+libstemmer+id64 support):http://sphinxsearch.com/downloads/beta/

 

P,当初下载没注意看浪费半天才搞清楚这问题。

PHP - 读取操作IP地址数据库文件QQWry.dat

首先看看QQWry.Data文件的内容结构
,以及解读方式

一、文件结构
文件主要分三个结构
1、文件头,8个字节;
2、数据记录区,不定长度;
3、索引区,长度为 7 的整数倍;

二、文件头
文件头的8个字节分两部分,每个部分4个字节,分别指定了索引区的开始地址和结束地址。所以可以通过两个地址的差值 除 7 后 加 1 可以计算出总的记录数。

二、记录区
记录区的数据需要通过索引区的数据来获得各个数据的起始位置;本区数据记录了IP地址的结束地址和地区字符串;所有地区字符串都以 0×00 为结束。

三、索引区
检索IP对应的地区,关键就是找到IP起始地址对应的索引内容。一个IP索引数据包含7个字节,前4个字节是IP地址起始值,后3个字节是对应的IP数据 记录在文件内的偏移地址;IP数据记录中,前 4 个字节是IP结束地址;紧跟的数据有两种模式: 0×01 模式 和 0×02 模式。

0×01模式,即在IP数据的第5个字节是 0×01,则在后面的 3 个字节是国家地区数据的偏移地址;国家地区数据包括国家和地区这两个字符串。即
—————————————————————
4字节 | 3字节 重定向 0x NN NN NN -> 国家地区数据的文件偏移地址
—————————————————————

0×02模式,即在IP数据的第5个字节是 0×02,则在后面的 3 个字节是国家数据的偏移地址,地区数据是再往后的字符串,以 0×00 截至。即
—————————————————————————–
4字节 | 3字节 重定向 0x NN NN NN -> 国家数据的文件偏移地址 | 地区字符串 | 0×00
—————————————————————————–

对于 0×01 模式所得到的 国家地区数据中,它可能又带有一个重定向结构,即
————————————–
国家字符串 | 0×00 | 地区字符串 | 0×00
————————————–

————————————————————————-
国家字符串 | 0×00 | 0×02 | 3字节 0x NN NN NN -> 地区字符串的文件偏移地址
————————————————————————-

对于前一种情况,比较简单,直接读出两个字符串数据就可以了;对于后一种情况,需要再次重定向到地区字符串的偏移地址,然后读取到 0×00 为字符串结尾。

对于这种采取地址映射实际字符串值的方式,主要作用是避免重复记录字符串值。在整个IP地址库文件中,有太多相同字符串记录了,采用 3 字节的映射地址要比重复记录字符串值节省太多空间了。

PHP代码读取操作QQWry.dat文件

function bin2ip($bin){
	$ip = '';
	$bd = str_split($bin, 1);
	for($i = 4; $i > 0; $i--){
		$ip .= "." . sprintf("%03d", implode('', unpack('s', $bd[$i-1] . chr(0))));
	}
	return substr($ip, 1);
}

//--------------------------------------------------
$f = fopen('QQWry.Dat', 'r');
$c = fread($f, 4);
$d = fread($f, 4);

$index_begin	= implode('', unpack('L', $c));
$index_end		= implode('', unpack('L', $d));
if($index_begin < 0) $index_begin += pow(2, 32);
if($index_end < 0) $index_end += pow(2, 32);

$ip_num = ($index_end - $index_begin) / 7 + 1;

echo "index begin at: $index_begin\n";
echo "index end at: $index_end\n";
echo "ip data count : $ip_num\n";

$output = '';

for($i = 0; $i < $ip_num; $i++){

	//文件指针指到每个IP数据文件的索引取得索引数据(7字节)上
	fseek($f, $i * 7 + $index_begin);
	$ip4 = fread($f, 4); //IP起始地址
	if(strlen($ip4) < 4) exit('data file error');

	$ip3 = fread($f, 3); //IP记录偏移地址
	if(strlen($ip3) < 3) exit('data file error');

	$dataseek = implode('', unpack('L', $ip3 . chr(0)));
	if($dataseek < 0) $index_ip_record += pow(2, 32);

	//指向记录区 $dataseek 位置查找记录
	fseek($f, $dataseek);
	$ipdata = fread($f, 4); //IP结束地址
	if(strlen($ipdata) < 4) exit('data file error');

	$area = '';
	$country = '';

	//读一个标记位
	$flag = fread($f, 1);
	if($flag == chr(1)){ //国家名偏移标记位 模式一 0x01
		$area1seek = fread($f, 3);
		if(strlen($area1seek) < 3) exit('data file error');
		$area1seek = implode('', unpack('L', $area1seek . chr(0)));
		fseek($f, $area1seek);
		$flag = fread($f, 1); //可能又是标记位
	}
	if($flag == chr(2)){ //国家地区 重定向
		$area1seek = fread($f, 3);
		if(strlen($area1seek) < 3) exit('data file error');
		$area1seek = implode('', unpack('L', $area1seek . chr(0)));
		$flag = fread($f, 1);
		if($flag == chr(2)){
			$area2seek = fread($f, 3);
			$area2seek = implode('', unpack('L', $area2seek . chr(0)));
			fseek($f, $area2seek);
		}else{
			fseek($f, -1, SEEK_CUR);
		}
		while(($c = fread($f, 1)) != chr(0)) $area .= $c;
		fseek($f, $area1seek);
		while(($c = fread($f, 1)) != chr(0)) $country .= $c;
	}else{
		fseek($f, -1, SEEK_CUR);
		while(($c = fread($f, 1)) != chr(0)) $country .= $c;

		$flag = fread($f, 1); //如果地区是重定向的
		if($flag == chr(2)){
			$area2seek = fread($f, 3);
			$area2seek = implode('', unpack('L', $area2seek . chr(0)));
			fseek($f, $area2seek);
		}else{
			fseek($f, -1, SEEK_CUR);
		}
		while(($c = fread($f, 1)) != chr(0)) $area .= $c;
	}
	$adata = trim($country) . trim($area); //$country是国家字符串 , $area 是地区字符串
}
fclose($f);

顺便附上QQWry.dat文件下载地址

QQ IP数据库 纯真版20100815
IP数据记录:380573条
数据库大小:7919KB

mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别

<?php
$link=mysql_connect('localhost','root',”);
mysql_select_db('abc',$link);
$sql = “select * from book”;
$result = mysql_query($sql);
while($row =mysql_fetch_row($result))
{
echo $row['cid'].'::'.$row[1].'<br>';
}
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
echo $row['cid'].'::'.$row[1].'<br>';
}
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
echo $row->cid.'::'.$row->title.”<br>”;
}
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result))
{
echo $row['cid'].'::'.$row[1].'<br>';
}
?>


分析:
mysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。 注意,这里是从0开始偏移,也就是说不能用字段名字来取值,只能用索引来取值,所以如下代码是取不到值的:
while($row = mysql_fetch_row($res)){
echo $row['cid'].'::'.$row[1].”;
} //这里的$row['cid'] 取不到值。
mysql_fetch_array,从结果集中取得一行作为关联数组,或数字数组,或二者兼有,除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。 也就是说他得到的结果像数组一样,可以用key或者索引来取值,所以
while($row = mysql_fetch_array($res)){
echo $row['cid'].'::'.$row[1].”;
}//这里$row['cid'],$row[1]都能得到相应的值。
mysql_fetch_object,顾名思义,从结果集中取得一行作为对象,并将字段名字做为属性。所以只有这样才能取到值
while($row = mysql_fetch_object($res)){
echo $row->cid.'::'.$row->title.”";
}
mysql_fetch_assoc,从结果集中取得一行作为关联数组,也就是说这个函数不能像mysql_fetch_row那样用索引来取值,只能用字段名字来取,所以
while($row = mysql_fetch_assoc($res)){
echo $row['cid'].'::'.$row[1].”;
} //$row[1]这样是取不到值的
补充一点:
mysql_fetch_array函数是这样定义的:array mysql_fetch_array ( resource result [, int result_type]),返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。
mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH。其中:
1、mysql_fetch_assoc($result)==mysql_fetch_array($result,MYSQL_ASSOC);
2、mysql_fetch_row($result)==mysql_fetch_array($result,MYSQL_NUM);
所以mysql_fetch_array()函数在某种程度上可以算是mysql_fetch_row()与 mysql_fetch_assoc()的集合。另外,mysql_fetch_array()另外还有MYSQL_BOTH参数,将得到一个同时包含关联和数字索引的数组。
在来说句 $row = $db->fetch_array($query);
$db是人数据库操作类,$db->fetch_array($query),fetch_array($query)是那个db类里的方法,$row = $db->fetch_array($query)这句的意思是从记录集$query中得到数据库中的一行记录。
不用类可这样实现
复制代码 代码如下:

$conn=@mysql_connect($host,$user,$pass);
@mysql_select_db($database,$conn);
$query=mysql_query($sql);
while($row=mysql_fetch_array($query)){
$rows[]=$row;
}

标签: 数组, row, 索引, 一行

PHP效率开发--数组中的引号

 

PHP效率开发--数组中的引号

数组概述

       数组,作为一种简单的线性数据结构,在程序开发的过程中时常会被用到。PHP将数组分为两类:数值数组和关联数组。

       数值数组和大多数其它语言的使用方法一样:在一对中括号中加上一个数字表示要存取的值在数组中的存放位置。例如:$array[0] = ”value”。

       关联数组是PHP的一大亮点,它通过使用字符串来索引数组,例如在某个水果销售系统中,我们要为几种水果指定价格,于是我们可以这样写:$price[‘Apple’] = 1.8; $price[‘Banana’] = 4.6; $price[Pear] = 2.8; $price[Other] = 0.5; 。

 

问题出现

       从上面的例子可以看出关联数组使得我们的代码更加清晰,同时在很大程度上提高了开发效率。细心的可能会发现在我们举例关联数组时,前两个数组中(Apple和Banana)的字符串索引我们加上了单引号,而后面两个(Pear和Other)则没有!是的,为了提高开发效率,PHP允许我们在使用关联数组时不必给数组的索引字符串加上引号。这确实给我们带来了很大的方便:首先PHPer不必在每次写数组时都要记得加上烦人的引号;其次可以避免引号配对问题。不过这带来了另外的一个问题――性能。在接下来的文章中我们将通过例子来解释这个现象。

性能测试

性能和效率之间似乎总是呈反比的,有时为了效率我们必须牺牲性能,有时有不得不反过来,不过在这里我们应该选择哪个呢?先看下面的代码:

 


<?

       //定义一个存放临时数据的文件

       $fp=fopen('delete.txt','w');

       //初始化数组

       $array=array('name'=>'value');

       //定义循环次数

       $LOOPTIMES=100;

       //得到初始时间

       $t0=number_format(microtime(true),10,'.','');

       //循环显示没有使用引号的数组

       for($i=0;$i<$LOOPTIMES;$i++)

              fputs($fp,$array[name]);

       $t1=number_format(microtime(true),10,'.','');

       $rs1=$t1-$t0;

       //循环显示使用了引号的数组

       for($i=0;$i<$LOOPTIMES;$i++)

              fputs($fp,$array['name']);

       $t2=number_format(microtime(true),10,'.','');

       $rs2=$t2-$t1;

//     显示结果

       echo "$t1 - $t0 = ".$rs1." ";

       echo "$t2 - $t1 = ".$rs2." ";

       fclose($fp);

?>

 

上面的代码分别循环100次使用大引号的关联数组和不代引号的关联数组,最后输出它们所消耗的时间。下图显示了允许程序10次后的结果:

 


在10次的测试中,使用引号所花费的平均时间为0.003,而没使用引号的平均时间为0.032911,大约是前者的10倍!

总结

       从上的例子中可以看出:不使用引号的关联数组所带来的优点比较起来其,在关联数组中使用引号将使得程序的性能得到很大的提升。而且由于有了像Zend这样优秀的PHP集成开发环境,它不仅能为PHP字符串自动添加引号,而且配备了出色的代码检查功能。这使得我们更没有理由继续使用没有引号的关联数组。

 

 

 

 

更新:

一定要加引号,如果不加引号,则方括号中是一个常量,PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。
它能运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。
例如,如果没有常量定义为 anykey,PHP 将把它替代为 'anykey' 并使用之。
 

结果:$arr['a'] 的效率高于 $arr[a];

 

必须掌握的php函数集

array_change_key_case — 返回字符串键名全为小写或大写的数组
array_chunk — 将一个数组分割成多个
array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_count_values — 统计数组中所有的值出现的次数
array_diff_assoc — 带索引检查计算数组的差集
array_diff_key — 使用键名比较计算数组的差集
array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey — 用回调函数对键名比较计算数组的差集
array_diff — 计算数组的差集
array_fill_keys — Fill an array with values, specifying keys
array_fill — 用给定的值填充数组
array_filter — 用回调函数过滤数组中的单元
array_flip — 交换数组中的键和值
array_intersect_assoc — 带索引检查计算数组的交集
array_intersect_key — 使用键名比较计算数组的交集
array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey — 用回调函数比较键名来计算数组的交集
array_intersect — 计算数组的交集
array_key_exists — 检查给定的键名或索引是否存在于数组中
array_keys — 返回数组中所有的键名
array_map — 将回调函数作用到给定数组的单元上
array_merge_recursive — 递归地合并一个或多个数组
array_merge — 合并一个或多个数组
array_multisort — 对多个数组或多维数组进行排序
array_pad — 用值将数组填补到指定长度
array_pop — 将数组最后一个单元弹出(出栈)
array_product — 计算数组中所有值的乘积
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_rand — 从数组中随机取出一个或多个单元
array_reduce — 用回调函数迭代地将数组简化为单一的值
array_reverse — 返回一个单元顺序相反的数组
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_shift — 将数组开头的单元移出数组
array_slice — 从数组中取出一段
array_splice — 把数组中的一部分去掉并用其它值取代
array_sum — 计算数组中所有值的和
array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
array_udiff — 用回调函数比较数据来计算数组的差集
array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
array_uintersect_uassoc — 带索引检查计算数组的交集,用回调函数比较数据和索引
array_uintersect — 计算数组的交集,用回调函数比较数据
array_unique — 移除数组中重复的值
array_unshift — 在数组开头插入一个或多个单元
array_values — 返回数组中所有的值
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
array_walk — 对数组中的每个成员应用用户函数
array — 新建一个数组
arsort — 对数组进行逆向排序并保持索引关系
asort — 对数组进行排序并保持索引关系
compact — 建立一个数组,包括变量名和它们的值
count — 计算数组中的单元数目或对象中的属性个数
current — 返回数组中的当前单元
each — 返回数组中当前的键/值对并将数组指针向前移动一步
end — 将数组的内部指针指向最后一个单元
extract — 从数组中将变量导入到当前的符号表
in_array — 检查数组中是否存在某个值
key — 从关联数组中取得键名
krsort — 对数组按照键名逆向排序
ksort — 对数组按照键名排序
list — 把数组中的值赋给一些变量
natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort — 用“自然排序”算法对数组排序
next — 将数组中的内部指针向前移动一位
pos — current() 的别名
prev — 将数组的内部指针倒回一位
range — 建立一个包含指定范围单元的数组
reset — 将数组的内部指针指向第一个单元
rsort — 对数组逆向排序
shuffle — 将数组打乱
sizeof — count() 的别名
sort — 对数组排序
uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort — 使用用户自定义的比较函数对数组中的键名进行排序
usort — 使用用户自定义的比较函数对数组中的值进行排序
call_user_method_array — 调用一个用户方法,同时传递参数数组(已废弃)
call_user_method — 对特定对象调用用户方法(已废弃)
class_exists — 检查类是否已定义
get_class_methods — 返回由类的方法名组成的数组
get_class_vars — 返回由类的默认属性组成的数组
get_class — 返回对象的类名
get_declared_classes — 返回由已定义类的名字所组成的数组
get_declared_interfaces — 返回一个数组包含所有已声明的接口
get_object_vars — 返回由对象属性组成的关联数组
get_parent_class — 返回对象或类的父类名
interface_exists — 检查接口是否已被定义
is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
is_subclass_of — 如果此对象是该类的子类,则返回 TRUE
method_exists — 检查类的方法是否存在
property_exists — 检查对象或类是否具有该属性
checkdate — 验证一个格里高里日期
date_default_timezone_get — 取得一个脚本中所有日期时间函数所使用的默认时区
date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区
date_time_set — Sets the time
date_timezone_get — Return time zone relative to given DateTime
date_timezone_set — Sets the time zone for the DateTime object
date — 格式化一个本地时间/日期
getdate — 取得日期/时间信息
gettimeofday — 取得当前时间
gmdate — 格式化一个 GMT/UTC 日期/时间
gmmktime — 取得 GMT 日期的 UNIX 时间戳
gmstrftime — 根据区域设置格式化 GMT/UTC 时间/日期
idate — 将本地时间日期格式化为整数
localtime — 取得本地时间
microtime — 返回当前 Unix 时间戳和微秒数
mktime — 取得一个日期的 Unix 时间戳
strftime — 根据区域设置格式化本地时间/日期
strptime — 解析由 strftime() 生成的日期/时间
strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳
time — 返回当前的 Unix 时间戳
chdir — 改变目录
chroot — 改变根目录
dir — directory 类
closedir — 关闭目录句柄
getcwd — 取得当前工作目录
opendir — 打开目录句柄
readdir — 从目录句柄中读取条目
rewinddir — 倒回目录句柄
scandir — 列出指定路径中的文件和目录
basename — 返回路径中的文件名部分
chgrp — 改变文件所属的组
chmod — 改变文件模式
chown — 改变文件的所有者
clearstatcache — 清除文件状态缓存
copy — 拷贝文件
delete — 参见 unlink() 或 unset()
dirname — 返回路径中的目录部分
disk_free_space — 返回目录中的可用空间
disk_total_space — 返回一个目录的磁盘总大小
diskfreespace — disk_free_space() 的别名
fclose — 关闭一个已打开的文件指针
feof — 测试文件指针是否到了文件结束的位置
fflush — 将缓冲内容输出到文件
fgetc — 从文件指针中读取字符
fgetcsv — 从文件指针中读入一行并解析 CSV 字段
fgets — 从文件指针中读取一行
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
file_exists — 检查文件或目录是否存在
file_get_contents — 将整个文件读入一个字符串
file_put_contents — 将一个字符串写入文件
file — 把整个文件读入一个数组中
fileatime — 取得文件的上次访问时间
filectime — 取得文件的 inode 修改时间
filegroup — 取得文件的组
fileinode — 取得文件的 inode
filemtime — 取得文件修改时间
fileowner — 取得文件的所有者
fileperms — 取得文件的权限
filesize — 取得文件大小
filetype — 取得文件类型
flock — 轻便的咨询文件锁定
fnmatch — 用模式匹配文件名
fopen — 打开文件或者 URL
fpassthru — 输出文件指针处的所有剩余数据
fputcsv — 将行格式化为 CSV 并写入文件指针
fputs — fwrite() 的别名
fread — 读取文件(可安全用于二进制文件)
fscanf — 从文件中格式化输入
fseek — 在文件指针中定位
fstat — 通过已打开的文件指针取得文件信息
ftell — 返回文件指针读/写的位置
ftruncate — 将文件截断到给定的长度
fwrite — 写入文件(可安全用于二进制文件)
glob — 寻找与模式匹配的文件路径
is_dir — 判断给定文件名是否是一个目录
is_executable — 判断给定文件名是否可执行
is_file — 判断给定文件名是否为一个正常的文件
is_link — 判断给定文件名是否为一个符号连接
is_readable — 判断给定文件名是否可读
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
is_writable — 判断给定的文件名是否可写
is_writeable — is_writable() 的别名
lchgrp — Changes group ownership of symlink
lchown — Changes user ownership of symlink
link — 建立一个硬连接
linkinfo — 获取一个连接的信息
lstat — 给出一个文件或符号连接的信息
mkdir — 新建目录
move_uploaded_file — 将上传的文件移动到新位置
parse_ini_file — 解析一个配置文件
pathinfo — 返回文件路径的信息
pclose — 关闭进程文件指针
popen — 打开进程文件指针
readfile — 输出一个文件
readlink — 返回符号连接指向的目标
realpath — 返回规范化的绝对路径名
rename — 重命名一个文件或目录
rewind — 倒回文件指针的位置
rmdir — 删除目录
set_file_buffer — stream_set_write_buffer() 的别名
stat — 给出文件的信息
symlink — 建立符号连接
tempnam — 建立一个具有唯一文件名的文件
tmpfile — 建立一个临时文件
touch — 设定文件的访问和修改时间
umask — 改变当前的 umask
unlink — 删除文件
mail — 发送邮件
abs — 绝对值
acos — 反余弦
acosh — 反双曲余弦
asin — 反正弦
asinh — 反双曲正弦
atan2 — 两个参数的反正切
atan — 反正切
atanh — 反双曲正切
base_convert — 在任意进制之间转换数字
bindec — 二进制转换为十进制
ceil — 进一法取整
cos — 余弦
cosh — 双曲余弦
decbin — 十进制转换为二进制
dechex — 十进制转换为十六进制
decoct — 十进制转换为八进制
deg2rad — 将角度转换为弧度
exp — 计算 e 的指数
expm1 — 返回 exp(number) - 1,甚至当 number 的值接近零也能计算出准确结果
floor — 舍去法取整
fmod — 返回除法的浮点数余数
getrandmax — 显示随机数最大的可能值
hexdec — 十六进制转换为十进制
hypot — 计算一直角三角形的斜边长度
is_finite — 判断是否为有限值
is_infinite — 判断是否为无限值
is_nan — 判断是否为合法数值
lcg_value — 组合线性同余发生器
log10 — 以 10 为底的对数
log1p — 返回 log(1 + number),甚至当 number 的值接近零也能计算出准确结果
log — 自然对数
max — 找出最大值
min — 找出最小值
mt_getrandmax — 显示随机数的最大可能值
mt_rand — 生成更好的随机数
mt_srand — 播下一个更好的随机数发生器种子
octdec — 八进制转换为十进制
pi — 得到圆周率值
pow — 指数表达式
rad2deg — 将弧度数转换为相应的角度数
rand — 产生一个随机整数
round — 对浮点数进行四舍五入
sin — 正弦
sinh — 双曲正弦
sqrt — 平方根
srand — 播下随机数发生器种子
tan — 正切
tanh — 双曲正切
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数
mysql_change_user — 改变活动连接中登录的用户
mysql_client_encoding — 返回字符集的名称
mysql_close — 关闭 MySQL 连接
mysql_connect — 打开一个到 MySQL 服务器的连接
mysql_create_db — 新建一个 MySQL 数据库
mysql_data_seek — 移动内部结果的指针
mysql_db_name — 取得结果数据
mysql_db_query — 发送一条 MySQL 查询
mysql_drop_db — 丢弃(删除)一个 MySQL 数据库
mysql_errno — 返回上一个 MySQL 操作中的错误信息的数字编码
mysql_error — 返回上一个 MySQL 操作产生的文本错误信息
mysql_escape_string — 转义一个字符串用于 mysql_query
mysql_fetch_array — 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
mysql_fetch_assoc — 从结果集中取得一行作为关联数组
mysql_fetch_field — 从结果集中取得列信息并作为对象返回
mysql_fetch_lengths — 取得结果集中每个输出的长度
mysql_fetch_object — 从结果集中取得一行作为对象
mysql_fetch_row — 从结果集中取得一行作为枚举数组
mysql_field_flags — 从结果中取得和指定字段关联的标志
mysql_field_len — 返回指定字段的长度
mysql_field_name — 取得结果中指定字段的字段名
mysql_field_seek — 将结果集中的指针设定为制定的字段偏移量
mysql_field_table — 取得指定字段所在的表名
mysql_field_type — 取得结果集中指定字段的类型
mysql_free_result — 释放结果内存
mysql_get_client_info — 取得 MySQL 客户端信息
mysql_get_host_info — 取得 MySQL 主机信息
mysql_get_proto_info — 取得 MySQL 协议信息
mysql_get_server_info — 取得 MySQL 服务器信息
mysql_info — 取得最近一条查询的信息
mysql_insert_id — 取得上一步 INSERT 操作产生的 ID
mysql_list_dbs — 列出 MySQL 服务器中所有的数据库
mysql_list_fields — 列出 MySQL 结果中的字段
mysql_list_processes — 列出 MySQL 进程
mysql_list_tables — 列出 MySQL 数据库中的表
mysql_num_fields — 取得结果集中字段的数目
mysql_num_rows — 取得结果集中行的数目
mysql_pconnect — 打开一个到 MySQL 服务器的持久连接
mysql_ping — Ping 一个服务器连接,如果没有连接则重新连接
mysql_query — 发送一条 MySQL 查询
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
mysql_result — 取得结果数据
mysql_select_db — 选择 MySQL 数据库
mysql_stat — 取得当前系统状态
mysql_tablename — 取得表名
mysql_thread_id — 返回当前线程的 ID
mysql_unbuffered_query — 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行
flush — 刷新输出缓冲
ob_clean — Clean (erase) the output buffer
ob_end_clean — Clean (erase) the output buffer and turn off output buffering
ob_end_flush — Flush (send) the output buffer and turn off output buffering
ob_flush — Flush (send) the output buffer
ob_get_clean — Get current buffer contents and delete current output buffer
ob_get_contents — Return the contents of the output buffer
ob_get_flush — Flush the output buffer, return it as a string and turn off output buffering
ob_get_length — Return the length of the output buffer
ob_get_level — Return the nesting level of the output buffering mechanism
ob_get_status — Get status of output buffers
ob_gzhandler — ob_start callback function to gzip output buffer
ob_implicit_flush — Turn implicit flush on/off
ob_list_handlers — List all output handlers in use
ob_start — Turn on output buffering
output_add_rewrite_var — Add URL rewriter values
output_reset_rewrite_vars — Reset URL rewriter values
preg_grep — 返回与模式匹配的数组单元
preg_last_error — Returns the error code of the last PCRE regex execution
preg_match_all — 进行全局正则表达式匹配
preg_match — 进行正则表达式匹配
preg_quote — 转义正则表达式字符
preg_replace_callback — 用回调函数执行正则表达式的搜索和替换
preg_replace — 执行正则表达式的搜索和替换
preg_split — 用正则表达式分割字符串
session_cache_expire — Return current cache expire
session_cache_limiter — Get and/or set the current cache limiter
session_commit — session_write_close() 的别名
session_decode — Decodes session data from a string
session_destroy — Destroys all data registered to a session
session_encode — 将当前会话数据编码为一个字符串
session_get_cookie_params — Get the session cookie parameters
session_id — Get and/or set the current session id
session_is_registered — Find out whether a global variable is registered in a session
session_module_name — Get and/or set the current session module
session_name — Get and/or set the current session name
session_regenerate_id — Update the current session id with a newly generated one
session_register — Register one or more global variables with the current session
session_save_path — Get and/or set the current session save path
session_set_cookie_params — Set the session cookie parameters
session_set_save_handler — Sets user-level session storage functions
session_start — Initialize session data
session_unregister — Unregister a global variable from the current session
session_unset — Free all session variables
session_write_close — Write session data and end session
ereg_replace — 正则表达式替换
ereg — 正则表达式匹配
eregi_replace — 不区分大小写的正则表达式替换
eregi — 不区分大小写的正则表达式匹配
split — 用正则表达式将字符串分割到数组中
spliti — 用正则表达式不区分大小写将字符串分割到数组中
sql_regcase — 产生用于不区分大小的匹配的正则表达式
addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符
addslashes — 使用反斜线引用字符串
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名
chr — 返回指定的字符
chunk_split — 将字符串分割成小块
count_chars — 返回字符串所用字符的信息
crc32 — 计算一个字符串的 crc32 多项式
crypt — One-way string encryption (hashing)
echo — Output one or more strings
explode — 使用一个字符串分割另一个字符串
fprintf — Write a formatted string to a stream
get_html_translation_table — Returns the translation table used by htmlspecialchars() and htmlentities()
hebrev — Convert logical Hebrew text to visual text
hebrevc — Convert logical Hebrew text to visual text with newline conversion
html_entity_decode — Convert all HTML entities to their applicable characters
htmlentities — Convert all applicable characters to HTML entities
htmlspecialchars_decode — Convert special HTML entities back to characters
htmlspecialchars — Convert special characters to HTML entities
implode — Join array elements with a string
join — 别名 implode()
levenshtein — Calculate Levenshtein distance between two strings
localeconv — Get numeric formatting information
ltrim — Strip whitespace (or other characters) from the beginning of a string
md5_file — Calculates the md5 hash of a given file
md5 — Calculate the md5 hash of a string
metaphone — Calculate the metaphone key of a string
money_format — Formats a number as a currency string
nl_langinfo — Query language and locale information
nl2br — Inserts HTML line breaks before all newlines in a string
number_format — Format a number with grouped thousands
ord — Return ASCII value of character
parse_str — Parses the string into variables
print — Output a string
printf — Output a formatted string
quoted_printable_decode — Convert a quoted-printable string to an 8 bit string
quotemeta — Quote meta characters
rtrim — Strip whitespace (or other characters) from the end of a string
setlocale — Set locale information
sha1_file — Calculate the sha1 hash of a file
sha1 — Calculate the sha1 hash of a string
similar_text — Calculate the similarity between two strings
soundex — Calculate the soundex key of a string
sprintf — Return a formatted string
sscanf — Parses input from a string according to a format
str_getcsv — Parse a CSV string into an array
str_ireplace — Case-insensitive version of str_replace().
str_pad — Pad a string to a certain length with another string
str_repeat — Repeat a string
str_replace — Replace all occurrences of the search string with the replacement string
str_rot13 — Perform the rot13 transform on a string
str_shuffle — Randomly shuffles a string
str_split — Convert a string to an array
str_word_count — Return information about words used in a string
strcasecmp — Binary safe case-insensitive string comparison
strchr — 别名 strstr()
strcmp — Binary safe string comparison
strcoll — Locale based string comparison
strcspn — Find length of initial segment not matching mask
strip_tags — Strip HTML and PHP tags from a string
stripcslashes — Un-quote string quoted with addcslashes()
stripos — Find position of first occurrence of a case-insensitive string
stripslashes — Un-quote string quoted with addslashes()
stristr — Case-insensitive strstr()
strlen — Get string length
strnatcasecmp — Case insensitive string comparisons using a "natural order" algorithm
strnatcmp — String comparisons using a "natural order" algorithm
strncasecmp — Binary safe case-insensitive string comparison of the first n characters
strncmp — Binary safe string comparison of the first n characters
strpbrk — Search a string for any of a set of characters
strpos — Find position of first occurrence of a string
strrchr — Find the last occurrence of a character in a string
strrev — Reverse a string
strripos — Find position of last occurrence of a case-insensitive string in a string
strrpos — Find position of last occurrence of a char in a string
strspn — Find length of initial segment matching mask
strstr — Find first occurrence of a string
strtok — Tokenize string
strtolower — Make a string lowercase
strtoupper — Make a string uppercase
strtr — Translate certain characters
substr_compare — Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters
substr_count — Count the number of substring occurrences
substr_replace — Replace text within a portion of a string
substr — Return part of a string
trim — Strip whitespace (or other characters) from the beginning and end of a string
ucfirst — Make a string's first character uppercase
ucwords — Uppercase the first character of each word in a string
vfprintf — Write a formatted string to a stream
vprintf — Output a formatted string
vsprintf — Return a formatted string
wordwrap — Wraps a string to a given number of characters using a string break character
base64_decode — 对使用 MIME base64 编码的数据进行解码
base64_encode — 使用 MIME base64 对数据进行编码
get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头
get_meta_tags — 从一个文件中提取所有的 meta 标签 content 属性,返回一个数组
http_build_query — 生成 URL-encode 之后的请求字符串
parse_url — 解析 URL,返回其组成部分
rawurldecode — 对已编码的 URL 字符串进行解码
rawurlencode — 按照 RFC 1738 对 URL 进行编码
urldecode — 解码已编码的 URL 字符串
urlencode — 编码 URL 字符串
debug_zval_dump — Dumps a string representation of an internal zend value to output
doubleval — floatval() 的别名
empty — 检查一个变量是否为空
floatval — 获取变量的浮点值
get_defined_vars — 返回由所有已定义变量所组成的数组
get_resource_type — 返回资源(resource)类型
gettype — 获取变量的类型
import_request_variables — 将 GET/POST/Cookie 变量导入到全局作用域中
intval — 获取变量的整数值
is_array — 检测变量是否是数组
is_binary — Finds whether a variable is a native binary string
is_bool — 检测变量是否是布尔型
is_buffer — Finds whether a variable is a native unicode or binary string
is_callable — 检测参数是否为合法的可调用结构
is_double — is_float() 的别名
is_float — 检测变量是否是浮点型
is_int — 检测变量是否是整数
is_integer — is_int() 的别名
is_long — is_int() 的别名
is_null — 检测变量是否为 NULL
is_numeric — 检测变量是否为数字或数字字符串
is_object — 检测变量是否是一个对象
is_real — is_float() 的别名
is_resource — 检测变量是否为资源类型
is_scalar — 检测变量是否是一个标量
is_string — 检测变量是否是字符串
is_unicode — Finds whether a variable is a unicode string
isset — 检测变量是否设置
print_r — 打印关于变量的易于理解的信息。
serialize — 产生一个可存储的值的表示
settype — 设置变量的类型
strval — 获取变量的字符串值
unserialize — 从已存储的表示中创建 PHP 的值
unset — 释放给定的变量
var_dump — 打印变量的相关信息
var_export — 输出或返回一个变量的字符串表示