零:重要的PHP超级全局变量
1、$_SERVER
$_SERVER超级全局变量包含由web服务器创建的信息,它提供了服务器和客户配置及当前请求环境的有关信息。根据服务器不同,$_SERVER中的变量值和变量个数会有差别,不过一般都可以找到CGI1.1规范中定义的变量。其中包括:
$_SERVER[ 'HTTP_REFERER' ] ; 引导用户到达当前位置的页面的URL ;
$_SERVER[ 'REMOTE_ADDR‘ ] ; 客户IP地址 ;
$_SERVER[ ’REQUEST_URI‘ ] ; URL的路径部分。如果URL是[url]http://www.example.com/blog/apache/index.html[/url] ,那么URI就是/blog/apache/index.html 。
$_SERVER[ 'HTTP_USER_AGENT' ] ; 客户的用户代理,一般会提供操作系统和浏览器的有关信息。
2、$_GET
$_GET超级全局变量包含使用GET方法传递的参数的有关信息。如果请求URL为[url]http://www.example.com/index.html?cat=apache&id=157[/url], 就可以使用$_GET超级全局变量访问如下变量:
$_GET[ 'cat' ] = "apache" ;
$_GET[ 'id' ] = "157" ;
默认情况下,要访问通GET方法传递的变量,$_GET超级全局变量是唯一的途径。
3、$_POST
$_POST超级全局变量包含用POST方法传递的参数的有关信息。
<form caction="subscribe.php" method = "post">
<p>
Email address : <br>
<input type="text" name="email" size="20" maxlength="so" value="">
</p>
<p>
Password : <br>
<input type="password" name="pswd" size="20" maxlength="15" value="">
</p>
<p>
<input type="submit" name="subscribe" value="subscribe!">
</p>
</form>
通过脚本subscribe.php,就可以使用下面的POST变量:
$_POST[ 'email' ] = " jason@example.com " ;
$_POST[ 'pswd' ] = "rainyday" ;
$_POST[ 'subscribe' ] = "subscribe!" ;
与$_GET一样,在默认情况下,$_POST超级全局变量是访问POST变量的唯一途径。
4、$_COOKIE
$_COOKIE超级全局变量存储了通过HTTP cookie传递到脚本的信息。这些cookie一般是由以前执行的PHP脚本通过PHP函数setcookie ( ) 设置的。例如,假设使用 setcookie ( )存储了一个名为 example.com、值为ab2213的cookie。以后就可以通过调用$_COOKIE[ ' example.com' ]来获得这个值。
5、$_FILES
$_FILES超级全局变量包含通过POST方法向服务器上传的数据的有关信息。这个超级全局变量与其他的变量有所不同,它是一个二维数组,包含5个元素。第一个下标标示表单的文件上传元素名;第二个下标是五个预定义下标之一,这些下标描述了上传文件的某个属性:
△ $_FILES[ 'upload-name' ][ 'name' ]; 从客户端向服务器上传文件的文件名;
△ $_FILES[ 'upload-name' ][ 'type' ]; 上传文件的MIME类型,这个变量是否赋值取决于浏览器的功能。
△ $_FILES[ 'upload-name' ][ 'size' ]; 上传文件的大小(以字节为单位);
△ $_FILES[ 'upload-name' ][ 'tmp_name' ]; 上传之后,将此文件移到最终位置之前赋予的临时名。
△ $_FILES[ 'upload-name' ][ 'error' ]; 上传状态码。尽管这个变量的名为 error ,但实际上在成功的情况下也会填写这个变量。它有五个可能的值:
■ UPLOAD_ERR_OK 文件成功上传
■ UPLOAD_ERR_INI_SIZE 文件大小超出了 upload_max_filesize 指令所指定的最大值。
■ UPLOAD_ERR_FORM_SIZE 文件大小超出了MAX_FILE_SIZE 隐藏表单域参数(可选)指定的最大值。
■ UPLOAD_ERR_PARTIAL 文件只上传了一部分
■ UPLOAD_ERR_NO_FILE 上传表单中没有指定文件
6、$_ENV
$_ENV超级全局变量提供PHP解析所在服务器环境的有关信息。此数组中的变量包括:
△ $_ENV[ 'HOSTNAME' ] 服务器的主机名
△ $_ENV[ 'SHELL' ] 系统 shell
7、$_REQUEST
$_REQUEST超级全局变量是一个全能选手,它记录了通过各种方法传递给脚本的变量,特别是GET ,POST 和 COOKIE 。 这些变量的顺序不依赖于它们在发送脚本中出现的顺序,而是依赖于 variables_order 配置指令所指定的顺序。建议少用这个超级变量,因为它不够安全。
8、$_SESSION
$_SESSION 超级全局变量包含与所有会话有关的信息。注册会话信息能为你提供便利,这样就能在整个网站中引用这些会话信息,而无需通过GET或POST显示的传递数据。
9、$GLOBALS
$GLOBALS 超级全局变量数组可以认为是超级全局变量的超集,包含全局作用域内的所有变量。执行下面的代码可以查看$GLOBALS 中所有的变量。
print ' <pre>' ;
print_r ($GLOBALS);
print ' </pre>' ;
一 :php处理字符串常用函数
1查找字符位置函数:
strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;
stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感
strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int开始
strripos($str,search,[int]):同上,该函数对大小写不敏感
2、提取子字符串函数(双字节)
substr($str,int start[,int length]):从$str中strat【下标(0,length-1)】位置开始提取[length长度的字符串]。
strstr($str1,$str2):从$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE。
stristr() 功能同strstr,只是不区分大小写。
strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名
3、替换字符串的PHP字符串函数
str_replace(search,replace,$str):从$str中查找search用replace来替换
str_ireplace(search,replace,$str):同上,该函数对大小写不敏感
strtr($str,search,replace):这个函数中replace不能为"";
substr_replace($Str,$rep,$start[,length]):$str原始字符串,$rep替换后的新字符串,$start起始位置,$length替换的长度,该项可选
4、字符长度
int strlen($str)
5、比较字符函数
int strcmp($str1,$str2):$str1>=<$str2分别为正1,0,-1(字符串比较)
strcasecmp() 同上(不分大小写)
strnatcmp("4","14") 按自然排序比较字符串
strnatcasecmp() 同上,(区分大小写)
6、分割成数组的PHP字符串函数
str_split($str,len):把$str按len长度进行分割返回数组
split(search,$str[,int]):把$str按search字符进行分割返回数组int是分割几次,后面的将不分割
expload(search,$str[,int])
7、去除空格:
ltrim()、rtrim()、trim()
8、加空格函数
chunk_split($str,2):向$str字符里面按2个字符就加入一个空格;
9、chr、ord--返回指定的字符或ascii
10、HTML代码有关函数
nl2br():使\n转换为<br>。
strip_tags($str[,'<p>']):去除HTML和PHP标记
在$str中所有HTML和PHP代码将被去除,可选参数为html和PHP代码作用是将保留
可选参数所写的代码。
如:echo strip_tags($text, '<br><p>');
htmlspecialchars($str[,参数]):页面正常输出HTML代码参数,是转换方式
11、字符大小写转换的PHP字符串函数
strtolower($str): 字符串转换为小写
strtoupper($str): 字符串转换为大写
ucfirst($str): 将函数的第一个字符转换为大写
ucwords($str): 将每个单词的首字母转换为大写
12、数据库相关的PHP字符串函数
addslashes($str):使str内单引号(')、双引号(")、反斜线(\)与 NUL
字符串转换为\',\",\\。
magic_quotes_gpc = On :自动对 get,post,cookie的内容进行转义
get_magic_quotes_gpc():检测是否打开magic_quotes_gpc
stripslashes(): 去除字符串中的反斜杠
13 确定字符串长度
* int strlen(string str)
14 比较两个字符串
* 1、strcmp函数对两个字符串进行二进制安全的比较,并区分大小写
* int strcmp(string str1,string str2)
* 2、以不区分大小写的方式比较两个字符串
* int strcasecmp(string str1,string str2)
* 3、求两个字符串相同部分
* int strspn(string str1,string str2)
* 4、求两个字符串的不同部分
* int strcspn(string str1,string str2)
15 处理字符串大小写
* 1、将字符串全部转换为小写
* string strtolower(string str)
* 2、将字符串全部转化为大写
* string strtoupper(string str)
* 3、将字符串第一个字符大写
* string ucfirst(string str)
* 4、将字符串中的每个单词变成大写
* string ucword(string str)
16 字符串与HTML相互转换
* 1、将换行符转换为HTML终止标记
* string bl2br(string str)
* 2、将特殊字符转换wieldHTML等价形式
* string htmlentities(string str[,int quote_style[,int charset]])
* 3、使用特殊的HTML字符用于其他目的
* string htmlspecialchars(string str[,int quote_style[,string charset]])
* 4、将文本转换为HTML等价形式
* array get_html_translaction_table(int table[,int quote_style])
* 5、创建一个自定义的转换清单
* string strtr(string str,array replacements)
* 6、将HTML转换为纯文本
* string strip_tags(string str[,string allowable_tags])
17 正则表达式函数的替代函数
* 1、strtok函数根据预定义的字符串列表来解析字符串
* string strtok(string str,string tonens)
* 2、根据预定义的定界符分析字符串
* array explode(string separator,string str[,int limit])
* 3、将数组转换为字符串
* string implode(string delimiter, array array)
* 4、解析复杂的字符串
* int strpos(string str,string substr[,int offset])
* 5、找到字符串的最后一次出现
* int strrpos(string str,char substr[,offset])
* 6、用另外一个字符串替代字符串的所有实例
* mixed str_replace(string occurrence,mixed replacement,mixed str[,int count])
* 7、获取字符串的一部分strstr返回字符串中预定义字符串第一次出现开始的剩余部分
* string strstr(string str,string occurrence)
* 8、根据预定义的偏移返回字符串一部分
* string substr(string str,int start[,ing length])
* 9、确定字符串出现的频率
* int substr_count(string str,string substring)
* 10、用另一个字符串替换一个字符串的一部分
* string substr_replace(string str,string replacement,int start[,int length])
18 填充和剔除字符串
* 1、从字符串开始出裁剪字符
* string ltrim(string str[,string charliset])
* 2、从字符串结尾裁剪字符
* string rtrim(string str[,string charliset])
* 3、从字符串两端裁剪字符
* string trim(string str[,string charliset])
* 4、填充字符串
* string str_pad(string str,int length[,string pad_string[,int pad_type]])
19字符和单词计数
* 1、字符串中字符计数
* mixed count_chars(string str[,mode])
* 2、字符串中单词总数计数
* mixed str_word_count(string str[,int format])
二、数组操作的基本函数
1 数组的键名和值
array_values($arr); 获得数组的值
array_keys($arr);获得数组的键名
array_flip($arr);数组中的值与键名互换(如果有重复前 面的会被后面的覆盖)
in_array("apple",$arr);在数组中检索apple
array_search("apple",$arr); 在数组中检索apple ,如果存在返回键名
array_key_exists("apple",$arr);检索给定的键名是否存在数组中
isset($arr[apple]): 检索给定的键名是否存在数组中
2 数组的内部指针
current($arr);返回数组中的当前单元
pos($arr);返回数组中的当前单元
key($arr);返回数组中 当前单元的键名
prev($arr);将数组中的内部指针倒回一位
next($arr);将数组中的内部指针向前移动一位
end($arr); 将数组中的内部指针指向最后一个单元
reset($arr;将数组中的内部指针指向第一个单元
each($arr);将返回数组当前元素 的一个键名/值的构造数组,并使数组指针向前移动一位
list($key,$value)=each($arr);获得数组当前元素的键名和值
3 数组和变量之间的转换
extract($arr);用 于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值
注:(第二个参数很重要,可以看手册使用)使用 方法 echo $a;
compact(var1,var2,var3);用给定的变量名创建一个数组
4 数组的分段和填充
数组的分段
array_slice($arr,0,3); 可以将数组中的一段取出,此函数忽略键名
array_splice($arr,0,3,array("black","maroon"));可以将数组中的一段取出,与上个函数不同在于返回的序列从原数组中删除
5 分割多个数组
array_chunk($arr,3,TRUE);可以将一个数组分割成多个,TRUE为保留原数 组的键名
6 数组的填充
array_pad($arr,5,'x'); 将一个数组填补到制定长度
7 数组与栈
array_push($arr,"apple","pear"); 将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数
array_pop($arr);将数组栈的最后一个元素弹出(出栈)
8 数组与列队
array_shift($arr);数组中的第一个元素移出并作为结果返回(数组长度减1,其他元素向前移动一位,数字键名改 为从零技术 , 文字键名不变)
array_unshift($arr,"a",array(1,2));在数组的开头插入一个或多个元素
9 回调函数
array_walk($arr,'function','words');使用用户函数对数组中的每个成员进行处理(第三个参数传递给回调函数function)
array_mpa("function",$arr1,$arr2);可以处理多个数组(当使用两个或更多数组时,他们的长度应该相同)
array_filter($arr,"function");使用回调函数过滤数组中的每个元素,如果回调函数为 TRUE,数组的当前元素会被包含在返回的结果数组中,数组的键名保留不变
array_reduce($arr,"function","*"); 转化为单值函数(*为数组的第一个值)
10数组的排序
通过元素值对数组排序
sort($arr);由小到大的顺序排序(第二个参数为按什么 方式排序)忽略键名的数组排序
rsort($arr);由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序
usort($arr,"function"); 使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序
asort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序
arsort($arr); 由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序
uasort($arr,"function");使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序
通过键名对数组排序
ksort($arr);按照键名 正序排序
krsort($arr);按照键名逆序排序
uksort($arr,"function");使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)
自然排序法排序
natsort($arr);自然排序 (忽略键名)
natcasesort($arr);自然排序(忽略大小写,忽略键名)
12 数组的计算
数组元素的求和
array_sum($arr);对数 组内部的所有元素做求和运算
13 数组的合并
array_merge($arr1,$arr2);合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面)
“+”$arr1+$arr2;对于相同的键名只保留后一个
array_merge_recursive($arr1,$arr2); 递归合并操作,如果数组中有相同的字符串键名,这些值将被合并到一个数组中去。如果一个值本身是一个数组,将按照相应的键名把它合并为另一个数组。当数组具有相同的数组键名时,后一个值将不会覆盖原来的值,而是附加到后面
14 数组的差集
array_diff($arr1,$arr2);返回差集结果数组
array_diff_assoc($arr1,$arr2,$arr3); 返回差集结果数组,键名也做比较
数组的交集
array_intersect($arr1,$arr2);返回交集结果数组
array_intersect_assoc($arr1,$arr2); 返回交集结果数组,键名也做比较
其他的数组函数
range(0,12);创建一个包含指 定范围单元的数组
array_unique($arr);移除数组中重复的值,新的数组中会保留原始的键名
array_reverse($arr,TRUE); 返回一个单元顺序与原数组相反的数组,如果第二个参数为TRUE保留原来的键名
//srand((float)microtime()*10000000); 随机种子触发器
array_rand($arr,2);从数组中随机取出一个或 多个元素
shuffle($arr);将数组的顺序打乱
三 php时间函数
1,年-月-日
echo date('Y-m-j');
2009-05-29
echo date('y-n-j');
09-2-29
大写Y表示年四位数字,而小写y表示年的两位数字;
小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。
echo date('Y-M-j');
2009-May-6
echo date('Y-m-d');
2009-05-06
大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);
没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。
echo date('Y-M-j');
2009-Feb-6
echo date('Y-F-jS');
2009-February-6th
大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)
大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。
小结:
表示年可以用大写的Y和小写y;
表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);
表示日可以用小写d和小写j,大写S表示日期的后缀。
2,时:分:秒
默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。
echo date('g:i:s a');
5:56:57 am
echo date('h:i:s A');
05:56:57 AM
小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。
当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。
echo date('G:i:s');
14:02:26
大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数
小结:
字母g表示小时不带前导,字母h表示小时带前导;
小写g、h表示12小时制,大写G、H表示24小时制。
3,闰年、星期、天
echo date('L');
今年是否闰年:0
echo date('l');
今天是:Tuesday
echo date('D');
今天是:Tue
大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;
小写l表示当天是星期几的英文全写(Tuesday);
而使用大写D表示星期几的3个字符缩写(Tue)。
echo date('w');
今天星期:2
echo date('W');
本周是全年中的第 06 周
小写w表示星期几,数字形式表示
大写W表示一年中的星期数
echo date('t');
本月是 28 天
echo date('z');
今天是今年的第 36 天
小写t表示当前月份又多少天
小写z表示今天是本年中第几天
4,其他
echo date('T');
UTC
大写T表示服务器的时间区域设置
echo date('I');
0
大写I表示判断当前是否为夏令时,为真返回1,否则为0
echo date('U');
1170769424
大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。
echo date('c');
2007-02-06T14:24:43+00:00
小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。
echo date('r');
Tue, 06 Feb 2009 14:25:52 +0000
小写r表示RFC822日期。
四文件即目录的操作
1 获得文件名:
basename();
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以 suffix 结束的,那这一部分也会被去掉。
eg:
$file = basename ( $path , " .php " ); // $file is set to "index"
2 得到目录部分:
dirname();
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
eg:
$file = dirname ( $path ); // $file is set to "/etc"
3 得到路径关联数组
pathinfo();
得到一个指定路径中的三个部分:目录名,基本名,扩展名。
eg:
var_dump ( $pathinfo );
// $path['dirname']
$path [ ' basename ' ]
$path [ ' extenssion ' ]
文件类型
1. filetype();
返回文件的类型。可能的值有 fifo,char,dir,block,link,file 和 unknown。
eg:
echo filetype ( ' /etc/ ' ); // dir
得到给定文件有用信息数组(很有用)
1. fstat();
通过已打开的文件指针取得文件信息
获取由文件指针 handle 所打开文件的统计信息。本函数和 stat() 函数相似,除了它是作用于已打开的文件指针而不是文件名。
eg:
$fp = fopen ( " /etc/passwd " , " r " );
// 取得统计信息
$fstat = fstat ( $fp );
// 关闭文件
fclose ( $fp );
// 只显示关联数组部分
print_r ( array_slice ( $fstat , 13 ));
2. stat()
获取由 filename 指定的文件的统计信息(类比fstat())
计算大小
1. filesize()
返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误。
eg:
$filename = ' somefile.txt ' ;
echo $filename . ' : ' . filesize ( $filename ) . ' bytes ' ;
2. disk_free_space()
获得目录所在磁盘分区的可用空间(字节单位)
eg
$df = disk_free_space ( " / " );
// 在 Windows 下:
disk_free_space ( " C: " );
disk_free_space ( " D: " );
3. disk_total_space()
返回一个目录的磁盘总大小
eg:(同上,换掉函数)
另:如需要计算一个目录大小,可以编写一个递归函数来实现
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
$dir_size = 0 ;
if ( $dh = @ opendir ( $dir )){
while (( $filename = readdir ( $dh )) != false ){
if ( $filename != ' . ' and $filename != ' .. ' ){
if ( is_file ( $dir . ' / ' . $filename )){
$dir_size += filesize ( $dir . ' / ' . $filename );
} else if ( is_dir ( $dir . ' / ' . $filename )){
$dir_size += dir_size( $dir . ' / ' . $filename );
}
}
} # end while
} # end opendir
@ closedir ( $dh );
return $dir_size ;
} # end function
访问与修改时间
1. fileatime(): 最后访问时间
2. filectime(): 最后改变时间(任何数据的修改)
3. filemtime(): 最后修改时间(指仅是内容修改)
文件的I/O操作
1. fopen -- 打开文件或者 URL
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE
eg:
2. file -- 把整个文件读入一个数组中(此函数是很有用的)
和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返回 FALSE。
eg:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
// 在数组中循环,显示 HTML 的源文件并加上行号。
foreach ( $lines as $line_num => $line ) {
echo " Line #<b>{ $line_num }</b> : " . htmlspecialchars ( $line ) . " <br />\n " ;
}
// 另一个例子将 web 页面读入字符串。参见 file_get_contents()。
$html = implode ( '' , file ( ' http://www.example.com/ ' ));
3. fgets -- 从文件指针中读取一行
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
eg:
if ( $handle ) {
while ( ! feof ( $handle )) {
$buffer = fgets ( $handle , 4096 );
echo $buffer ;
}
fclose ( $handle );
}
4. fgetss -- 从文件指针中读取一行并过滤掉 HTML 标记
和 fgets() 相同,只除了 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。
1. opendir -- 打开目录句柄,打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。
2. readdir -- 从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
eg:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
if ( $handle = opendir ( ' /path/to/files ' )) {
echo " Directory handle: $handle \n " ;
echo " Files:\n " ;
while ( false !== ( $file = readdir ( $handle ))) {
echo " $file \n " ;
}
while ( $file = readdir ( $handle )) {
echo " $file \n " ;
}
closedir ( $handle );
}
3. scandir -- 列出指定路径中的文件和目录(很有用),返回一个 array,包含有 directory 中的文件和目录。
默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。
eg:
$files1 = scandir ( $dir );
$files2 = scandir ( $dir , 1 );
print_r ( $files1 );
print_r ( $files2 );
另外注:
对文件属性的操作(操作系统环境不同,可能有所不一样,这点要注意)
filename
指定的文件或目录存在并且可读则返回 TRUE。
filename
参数可以是一个允许进行是否可写检查的目录名。
filename
指定的文件或目录存在则返回 TRUE,否则返回 FALSE
目录的操作
□ 适用版本:PHP3, PHP4
□ 函数功能:改变目录
□ 函数语法:int chdir (string directory)
□ 函数说明:改变 PHP 的工作目录到另外一个目录中, 如果没有办法改变目录, 函数会返
回 FALSE, 否则返回 TRUE。
□ 范例程序:
<?php
$o=chdir("/php1");
If($o){
echo "更改路径成功<br>\n";
}
else
{
echo "更改路径失败<br>\n";
}
?>
□ 执行结果:如果路径存在, 则会印出下面的信息:更改路径成功如果路径不存在, 则会印
出下面的信息: Waring: ChDir: No such file or irectory (errno 2) in c:\apache\htdocs\test.php on
line 2 更改路径失败
□ 参考命令:无
dir
□ 适用版本:PHP3, PHP4
□ 函数功能:目录的 class。
□ 函数语法:new dir (string directory)
□ 函数说明:读取一个目录的虚拟面向对象机制, 函数执行以后, directory 参数给定的目录
会被打开, 这个函数可以与其他的目录函数一起使用, 例如: readdir()、 rewinddir()、 closedir()。
□ 范例程序:
<?php
$d=dir("/Downloads"); echo "Handle: ".$d->handle."<br>\n";
echo "Path: ".$d->path."<br>\n";
while($entry=$d->read()){
echo $entry."<br>\n";
}
$d->close();
?>
□ 执行结果:(此结果会因电脑环境而异) Handle: Resource id #1 Path: /Downloads . .. nero
089001D000012.Di manual.rtf 089001D000012.sw gozil35-DownloadPatch.exe
gozil35-DownloadPatch.exe.txt manual_a-1.pdf manual_m-x.pdf
□ 参考命令:无
closedir
□ 适用版本:PHP3, PHP4
□ 函数功能:关闭目录的控制
□ 函数语法:void closedir (int dir_handle)
□ 函数说明:关闭由 dir_handle 所设置的目录控制。这个目录控制必须在之前曾通过
opendir() 打开过。
□ 范例程序:
<?php
$handle=opendir('.');
echo "目录的操作:$handle<br>";
echo "目录下的文件<br>";
while(($file=readdir($handle))!==false){
echo "$file<br>";
}
closedir($handle);
?>
□ 执行结果:(此结果会因电脑环境而异) 目录的操作:Resource id #1 目录下的文件 . . .
test.php
□ 参考命令:无
opendir
□ 适用版本:PHP3, PHP4
□ 函数功能:打开目录的控制。
□ 函数语法:int opendir (string path) 。
□ 函数说明:返回一个目录的控制, 给接下来的 closedir()、readdir() 及 rewinddir() 等函数
使用。在下面的范例中, 打开了一个目前正在工作的目录控制。
□ 范例程序:
<?php
$handle=opendir('.');
echo "目录的操作:$handle<br>";
echo "目录下的文件<br>";
while(($file=readdir($handle))!==false){
echo "$file<br>";
}
closedir($handle);
?>
□ 执行结果:(此结果会因电脑环境而异) 目录的操作:Resource id #1 目录下的文件 . . .
test.php
□ 参考命令:无
readdir
□ 适用版本:PHP3, PHP4
□ 函数功能:从目录中读取文件名的数据。
□ 函数语法:string readdir (int dir_handle)
□ 函数说明:返回目录中下一个文件的文件名。在下面的第一个范例中, 会将工作目录下
的文件名全部取出并且印出。 readdir() 将会返回 . 及 .. 符号, 假如不想要这两个输出, 可
以想办法将他们删去, 如同范例 2 所示。
□ 范例程序 1:
<?php
$handle=opendir('.');
echo "目录的操作:$handle<br>";
echo "目录下的文件<br>";
while(($file=readdir($handle))!==false){
echo "$file<br>";
} closedir($handle);
?>
□ 执行结果:(此结果会因电脑环境而异) 目录的操作:Resource id #1 文件 . . . counter.php
HomePage1.txt index.html manager.php mybbs.html test.php
□ 范例程序:
<?php
$handle=opendir('.');
while($false!==($file=readdir($handle))){
if($file != "." && $file != ".."){
echo "$file\n";
}
closedir($handle);
?>
□ 执行结果:(此结果会因电脑环境而异) test.php
□ 参考命令:无
rewinddir
□ 适用版本:PHP3, PHP4
□ 函数功能:倒转目录的控制。
□ 函数语法:void rewinddir (int dir_handle)
□ 函数说明:重置 dir_handle 的目录指针到目录的开始位置。
□ 范例程序:
<?php
$handle=opendir('/downloads');
echo "目录的操作:$handle<br>";
echo "目录下的文件<br>";
while(($file=readdir($handle))!==false){
echo "$file<br>";
}
rewindir($handle);
echo "目录的操作:$handle<br>";
echo "目录下的文件<br>";
while (($file=readdir($handle))!==false){ echo "$file<br>";
}
closedir($handle);
?>
□ 执行结果:目录的操作:Resource id #1 目录下的文件 . . . adsl_all.doc adsl_faq.doc 申请
表件一(90).xls Gcime1.exe 申请表件二(90).doc 目录的操作:Resource id #1 目录下的文
件 . . . adsl_all.doc adsl_faq.doc 申请表件一(90).xls Gcimel.exe 申请表件二(90).doc
□ 参考命令:无
四: php常用到的sql语句
常规查询
一、查询表内容:
select * from `tablename`
select `nicheng` from `tablename`
select distinct `nicheng` from `tablename`
二、where查询:
select `id` from `tablename` where `id`>10 or (`id`<5)
三、in用法:
select * from `tablename` where `nicheng` in ('萧明', '秦城')
四、between用法:
select * from `tablename` where `id` between '003' and '009'
五、排序查询(ASC由小往大/DESC由大往小):
select id , mima from `tablename`
where `nicheng`='萧明'
order by `id` ASC
limit 0 , 30
六、查询表中数据项数:
select count(*) from `tablename`
七、查询字段中内容数量:
select `nicheng`, count(*) from `tablename` group by `nicheng`
模糊查询
SQL的模式匹配允许使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符):
一、查询以“萧”开头的数据:
select * from `tablename` where `nicheng` like "萧%"
二、查询以“城”结尾的数据:
select * from `tablename` where `nicheng` like "%城"
三、查询包含一个“敬”的数据:
select * from `tablename` where `nicheng` like "%敬%"
四、查询正好包含3个字符的名字,使用“_”模式字符:
select * from `tablename` where `nicheng` like "___"
正则表达式查询:
五、查询以z或Z开头的数据:
select * from `tablename` where `nicheng` regexp "^[zZ]"
select * from `tablename` where `nicheng` regexp "^[a-zA-Z]"
六、查询以g或G结尾的数据:
select * from `tablename` where `nicheng` regexp "g$"
多表查询:
一、多表查询:
$sql=mysql_query("select * from `tb_student`,`tb_sscore` where tb_=tb_ and tb_=$sno",$conn);
二、表的别名查询统计:
$sql=mysql_query("select * from `tb_student` as tb_s,`tb_sscore` as tb_c where tb_=tb_ and tb_=$sno",$conn);
三、合并结果集:
$sql=mysql_query("select `userid`,`username`,`sex`,`age` from `tb_worker1` union select `ygid`,`name`,`sex`,`age` from `tb_worker2`",$conn);
联合查询:
一、多表联合查询:
$sql=mysql_query("
select * from `tablename` where `nicheng` like "%敬%"
union
select * from `info` where `nicheng` like "张%"",$conn);
二、联合查询结果排序:
$sql=mysql_query("select * from `tb_1` union all select * from `tb_2` order by `age` desc",$conn);
三、条件联合查询:
$sql=mysql_query("select `pubname` from `tb_pub` group by `pubname` having `pubname`='人民邮电出版社' or `pubname`='机械工业出版社' union all select `pubname` from `tb_pub` group by `pubname` having `pubname`<>'人民邮电出版社' and `pubname`<>'机械工业出版社'",$conn);
SELECT t1 . * , ,
FROM uchome_tagspace t1
LEFT JOIN uchome_mtag t2 ON =
WHERE =1
多表查询
一、简约嵌套查询:
$sql=mysql_query("select * from `tb_student_score_info` where `sid` in (select `sid` from `tb_student_info` where `sid`=$sno)",$conn);
二、复杂嵌套查询:
$sql=mysql_query("select * from `tb_laborage` where `name` in (select `name` from `tb_dept` where `name` in (select `name` from `tb_personnel` where `knowledge`='本科'))",$conn);
三、嵌套查询应用:
$sql=mysql_query("select * from `tb_laborage` where `jbgz` ".$_POST[tj]." any(select `jbgz` from `tb_laborage` where name='".$_POST[name]."')",$conn);
四、IN子查询:
1、限定范围查询:
$sql=mysql_query("select * from `tb_student_score` where `sid` in (select `sid` from `tb_student_score` where `sid` between $from and $to) ",$conn);
2、查询记录信息:
$sql=mysql_query("select * from `tb_bookinfo` where `bookname` in (select `bookname` from `tb_bookinfo` where `bookname` like '%$bookname%') ",$conn);
排序分组
一、对数据进行降序查询:
$sql=mysql_query("select * from `tb_sp` order by `sl` desc",$conn);
二、对数据进行多条件排序查询:
$sql=mysql_query("select * from `tb_goods` order by `sl` desc,dj asc",$conn);
三、对统计结果进行排序:
$sql=mysql_query("select *,sum(num) as totalnum from `tb_bookinfo` group by `bookname` order by `totalnum` desc",$conn);
四、单列数据分组统计:
$sql=mysql_query("select *,sum(num) as totalnum from `tb_bookinfo` group by `bookname` order by `totalnum` desc",$conn);
五、多列数据分组统计:
$sql=mysql_query("select *,sum(xcsl) as xc,sum(x ssl) as xs from `tb_book1` group by `bookname` ",$conn);
六、多表分组统计:
$sql=mysql_query("select *,sum(tb_xs.x ssl) as xsl,sum(tb_) as kcl from `tb_bk`,`tb_xs` where tb_=tb_ group by `bookname` ",$conn);
聚集函数
一、汇总统计查询:
$sql=mysql_query("select sum(yy) as sumyy,sum(yw) as sumyw,sum(sx) as sumsx,sum(ls) as sumls from `tb_student_score` ",$conn);
二、均值统计查询:
$sql=mysql_query("select avg(yy) as avgyy,avg(yw) as avgyw,avg(sx) as avgsx,avg(ls) as avgls from `tb_student_score` ",$conn);
三、最小值统计查询:
$sql=mysql_query("select * from `tb_gemsell` where `outprice-inprice` in (select min(`outprice-inprice`) as minsell from `tb_gemsell`) ",$conn);
四、最大值统计查询:
$sql=mysql_query("select * from `tb_sale` where `sale` in (select max(sale) from `tb_sale` where month(xdate)=$yue and year(xdate)=2005)",$conn);
五、统计大于某值记录:
$sql=mysql_query("select count(*) as total from `tb_sale` where `sale`>$num",$conn);
五 PHP数据库函数
1、mysql_connect()-建立数据库连接
格式:
resource mysql_connect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]])
例:
$conn = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql Server");
说明:使用该连接必须显示的关闭连接
2、mysql_pconnect()-建立数据库连接
格式:
resource mysql_pconnect([string hostname [:port] [:/path/to/socket] [, string username] [, string password]])
例:
$conn = @mysql_pconnect("localhost", "username", "password") or dir("不能连接到Mysql Server");
说明:使用该连接函数不需要显示的关闭连接,它相当于使用了连接池
3、mysql_close()-关闭数据库连接
例:
$conn = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql Server");
@mysql_select_db("MyDatabase") or die("不能选择这个数据库,或数据库不存在");
echo "你已经连接到MyDatabase数据库";
mysql_close();
4、mysql_select_db()-选择数据库
格式:
boolean mysql_select_db(string db_name [, resource link_id])
例:
$conn = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql Server");
@mysql_select_db("MyDatabase") or die("不能选择这个数据库,或数据库不存在");
5、mysql_query()-查询MySQL
格式:
resource mysql_query (string query, [resource link_id])
例:
$linkId = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql Server");
@mysql_select_db("MyDatabase") or die("不能选择这个数据库,或者数据库不存在");
$query = "select * from MyTable";
$result = mysql_query($query);
mysql_close();
说明:若SQL查询执行成功,则返回资源标识符,失败时返回FALSE。若执行更新成功,则返回TRUE,否则返回FALSE
6、mysql_db_query()-查询MySQL
格式:
resource mysql_db_query(string database, string query [, resource link_id])
例:
$linkId = @mysql_connect("localhost", "username", "password") or die("不能连接到MysqlServer");
$query = "select * from MyTable";
$result = mysql_db_query("MyDatabase", $query);
mysql_close();
说明:为了使代码清晰,不推荐使用这个函数调用
7、mysql_result()-获取和显示数据
格式:
mixed mysql_result (resource result_set, int row [, mixed field])
例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
for($count=0;$count<=mysql_numrows($result);$count++)
{
$c_id = mysql_result($result, 0, "id");
$c_name = mysql_result($result, 0, "name");
echo $c_id,$c_name;
}
说明:最简单、也是效率最低的数据获取函数
8、mysql_fetch_row()-获取和显示数据
格式:
array mysql_fetch_row (resource result_set)
例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
while (list($id, $name) = mysql_fetch_row($result)) {
echo("Name: $name ($id) <br />");
}
说明:函数从result_set中获取整个数据行,将值放在一个索引数组中。通常会结使list()函数使用
9、mysql_fetch_array()-获取和显示数据
格式:
array mysql_fetch_array (resource result_set [, int result_type])
例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id = $row["id"];
$name = $row["name"];
echo "Name: $name ($id) <br />";
}
又例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_NUM)) {
$id = $row[0];
$name = $row[1];
echo "Name: $name ($id) <br />";
}
说明:
result_type的值有:
MYSQL_ASSOC: 字段名表示键,字段内容为值
MYSQL_NUM: 数值索引数组,操作与mysql_fetch_ros()函数一样
MYSQL_BOTH: 即作为关联数组又作为数值索引数组返回。result_type的默认值。
10、mysql_fetch_assoc()-获取和显示数据
格式:
array mysql_fetch_assoc (resource result_set)
相当于调用 mysql_fetch_array(resource, MYSQL_ASSOC);
11、mysql_fetch_object()-获取和显示数据
格式:
object mysql_fetch_object(resource result_set)
例:
$query = "select id, name from MyTable order by name";
while ($row = mysql_fetch_object($result)) {
$id = $row->id;
$name = $row->name;
echo "Name: $name ($id) <br />";
}
说明:返回一个对象,在操作上与mysql_fetch_array()相同
12、mysql_num_rows()-所选择的记录的个数
格式:
int mysql_num_rows(resource result_set)
例:
query = "select id, name from MyTable where id > 65";
$result = mysql_query($query);
echo "有".mysql_num_rows($result)."条记录的ID大于65";
说明:只在确定select查询所获取的记录数时才有用。
13、mysql_affected_rows()-受Insert,update,delete影响的记录的个数
格式:
int mysql_affected_rows([resource link_id])
例:
$query = "update MyTable set name='CheneyFu' where id>=5";
$result = mysql_query($query);
echo "ID大于等于5的名称被更新了的记录数:".mysql_affected_rows();
说明:该函数获取受INSERT,UPDATE或DELETE更新语句影响的行数
14、mysql_list_dbs()-获取数据库列表信息
格式:
resource mysql_list_dbs([resource link_id])
例:
mysql_connect("localhost", "username", "password");
$dbs = mysql_list_dbs();
echo "Databases: <br />";
while (list($db) = mysql_fetch_rows($dbs)) {
echo "$db <br />";
}
说明:显示所有数据库名称
15、mysql_db_name()-获取数据库名
格式:
string mysql_db_name(resource result_set, integer index)
说明:该函数获取在mysql_list_dbs()所返回result_set中位于指定index索引的数据库名
16、mysql_list_tables()-获取数据库表列表
格式:
resource mysql_list_tables(string database [, resource link_id])
例:
mysql_connect("localhost", "username", "password");
$tables = mysql_list_tables("MyDatabase");
while (list($table) = mysql_fetch_row($tables)) {
echo "$table <br />";
}
说明:该函数获取database中所有表的表名
17、mysql_tablename()-获取某个数据库表名
格式:
string mysql_tablename(resource result_set, integer index)
例:
mysql_connect("localhost", "username", "password");
$tables = mysql_list_tables("MyDatabase");
$count = -1;
while (++$count < mysql_numrows($tables)) {
echo mysql_tablename($tables, $count)."<br />";
}
说明:该函数获取mysql_list_tables()所返回result_set中位于指定index索引的表名
18、mysql_fetch_field()-获取字段信息
格式:
object mysql_fetch_field(resource result [, int field_offset])
例:
mysql_connect("localhost", "username", "password");
mysql_select_db("MyDatabase");
$query = "select * from MyTable";
$result = mysql_query($query);
$counts = mysql_num_fields($result);
for($count = 0; $count < $counts; $count++) {
$field = mysql_fetch_field($result, $count);
echo "<p>$field->name $field->type ($field->max_length) </p>";
}
说明:
返回的对象共有12个对象属性:
name: 字段名
table: 字段所在的表
max_length:字段的最大长度
not_null: 如果字段不能为null,则为1,否则0
primary_key: 如果字段为主键,则为1,否则0
unique_key: 如果字段是唯一键,则为1, 否则0
multiple_key: 如果字段为非唯一,则为1,否则0
numeric: 如果字段为数值则为1,否则0
blob: 如果字段为BLOB则为1,否则为0
type: 字段的数据类型
unsigned: 如果字段为无符号数则为1,否则为0
zerofill: 如果字段为“零填充”则为1, 否则为0
19、mysql_num_fields()-获取查询的字段个数
格式:
integer mysql_num_fields(resource result_set)
例:
$query = "select id,name from MyTable order by name";
$result = mysql_query($query);
echo "这个查询的字段数是:".mysql_num_fields($result)."<br />";
20、mysql_list_fields()-获取指定表的所有字段的字段名
格式:
resource mysql_list_fields (string database_name, string table_name [, resource link_id])
例:
$fields =mysql_list_fields("MyDatabase", "MyTable");
echo "数据库MyDatabase中表MyTable的字段数: ".mysql_num_fields($fields)."<br />";
21、mysql_field_flags()-获取指定的字段选项
格式:
string mysql_field_flags (resource result_set, integer field_offset)
例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
$row=mysql_fetch_wor($row);
22、mysql_field_len()-获取指定的字段的最大长度
格式:
integer mysql_field_len (resource result_set, integer field_offset)
例:
$query = "select name from MyTable";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo mysql_field_len($result, 0)."<br />";
说明:
如果mysql_field_len($reseult, 0) = 16777215
那么numer_format(mysql_field_len($result))等于16,777,215
23、mysql_field_name()-获取字段名
格式:
string mysql_field_name (resource result_set, int field_offset)
例:
$query = "select id as PKID, name from MyTable order by name";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo mysql_field_name($result, 0); // Result: PKID
24、mysql_field_type()-获取字段类型
格式:
string mysql_field_type (resource result_set, int field_offset)
例:
$query = "select id, name from MyTable order by name";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo mysql_field_type($result, 0); // Result: int
25、mysql_field_table()-获取字段所在表名
格式:
string mysql_field_table (resource result_set, int field_offset)
例:
$query = "select id as PKID, name from MyTable order by name";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo mysql_field_table($result, 0); // Result: MyTable