PHP基礎知識
Posted 獨行者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP基礎知識相关的知识,希望对你有一定的参考价值。
1、php標記:
①XML風格:<?php 語句; ?>
②腳本風格:<script language=’php’>語句;</script>
③簡短風格:<? 語句; ?>
④ASP風格:<% 語句; %> //默认情况下是被禁止的,需修改 asp_tags 选项,在 PHP.ini 里
PHP注釋:
①c++風格://注釋內容
②c語言風格:/*注釋內容*/
③shell風格:#注釋內容
PHP支持的數據類型:Boolean、integer、float/double、string、array、object、resource、null
向瀏覽器中輸出:echo()、print()、printf()、sprintf()
echo、print、printf 本身是函数,即函数()。但这里的输出函数可以省略括号,用空格+所需显示的字符串或变量。echo 和 print 功能几乎相同,而 echo 运行速度上比 print 稍稍快一点。因为 print 有返回值。
echo 不返回任何值(void),print 返回的是整型(integer),printf 返回的是整型(integer)為字符串的长度,而 sprintf 返回的字符串(string)
printf 可以在浏览器直接输出,而 sprintf 需要 echo 将它输出.
常用类型指示符:
%b //整数,显示为二进制
%c //整数,显示为 ASCII 字符
%d //整数,显示为有符号十进制数
%f //浮点数,显示为浮点数
%o //整数,显示为八进制数
%s //字符串,显示为字符串
%u //整数,显示为无符号十进制数
%x //整数,显示为小写的十六进制数
%X //整数,显示为大写的十六进制数
用法:printf ("吴祁今天买了%d套光盘",5);
2、基本語法
類型轉換:$total=(float)$sum;
變量類型轉換:intval()、floatval()、strval();
類型檢測:gettype()和 settype()
是否存在:isset()和 unset()
是否為空:empty()
特定類型測試:is_array()、is_double()、is_float()、is_real()、is_long()、is_int()、is_integer()、is_string()、is_object()、is_resource()、is_null()、is_numeric()
超级全局变量:
$GLOBALS //所有全局变量数组
$_SERVER //服务器环境变量数组
$_GET //通过 GET 方法传递给该脚本的变量数组
$_POST //通过 POST 方法传递给该脚本的变量数组
$_COOKIE //cookie 变量数组
$_FILES //与文件上载相关的变量数组
$_ENV //环境变量数组
$_REQUEST //所有用户输入的变量数组
$_SESSION //会话变量数组
常量:
define("TOTAL",199); //常量一旦被定义之后,就不能再次更改。常量只可以保存布尔值、整数、浮点数或字符串数据
表單變量:以以 PHP 变量的形式访问每一个表单域,其中 PHP 变量名称必须与表单域的名称一致。
$userName //简短风格:非常方便,但容易引起混淆,不推荐
$_POST["userName"] //中等风格:4.1.0 版后支持,推荐的 $_Get["QQName"];
$HTTP_POST_VARS["userName"] //冗长风格:最详细,但它已经过时,长远角度看,以后会被剔除
字符串连接:使用点就可以连接".";
3、操作符與運算符
双引号:提供了最大的灵活性,原因是变量和转义字符都会得到相应的解析。
echo "虽然他的QQ号有很多女生,\n但一个都不属于他</br>";
中文解析會出現問題:可用.鏈接
echo "他的名字叫".$userName.",他19岁了,已经长大成人了!
转义字符:\n:换行符 \r:回车 \t:水平制表图 \\:反斜杠 \$:美元符 \":双引号
单引号:会按照声明的原样解释,解析字符串时,变量和转义字符都不会进行解析。
运算符:+ - * / %
赋值运算符:+= -= *= /= %= .=
递增/减:$a=++$b; $a=$b++; $a=--$b; $a=$b--;
比较运算符:= = = = = != != = <> < > <= >=
逻辑运算符:! && || and or
三元运算符:A?B:C
错误抑制操作符:[email protected](57/0); //除数不能为0,会出错,所以加上@避免出现错误警告。
数组操作符:+ = = = = = != <> != =
if语句: if (条件判断){語句;}
if (条件判断){語句;}else {語句;}
if (条件判断) {語句;}elseif {語句;}elseif {語句;}else {語句;}
switch语句:
switch (变量) {
case "值1":語句;break;
case "值2":語句;break;
case "值N":語句;break;
default:語句;break;
}
while循环:while (条件) {語句;}
for循环:for (初始值;条件;计数器) {語句;}
do while循环:do {語句;} while(条件);
第一种:break;退出循环;第二种是exit ;退出程序;第三种是continue;退出当前循环;
if (条件){語句;break; //continue}
4、数学运算
PHP是一种松散类型的脚本语言,变量可以根据计算的需求改变数据类型。
is_numeric(); //是否为数值包含int型和float型
is_int()和is_float()用于检查具体的数据类型
生成随机数:rand(0,10)和mt_rand(1,100) //mt_rand()速度更快
获取最大随机数:getrandmax()和mt_getrandmax();
number_format()函数可以把整数和浮点数值转换为一种可读的字符串表示。
abs() 绝对值
floor() 舍去法取整
ceil() 进一法取整
round() 四舍五入
min() 求最小值或数组中最小值
max() 求最大值数组中最大值
5、数组
数组创建:
第一种:
$userNames=array(‘李彦宏‘,‘周鸿祎‘,‘马云‘,‘俞敏洪‘,‘李开复‘,‘吴祁‘);
这是索引数组初始化:
数字索引的初始值是从 0 开始计算的:
userNames[0]---userName s[5],代表这6个人的名字。
第二种:
通过 range()函数自动创建一个数组
$numbers=range(1,10) $letters=range(‘a‘,‘z‘)
可以加第三个参数$numbers=range(1,10,2),第三个参数表示步长
遍历数组:
for ($i=0;$i<10;$i++) {
echo $numbers[$i];
}
也可以使用 foreach循环来遍历数组:
foreach ($numbers as $value) {
echo $value;
}
自定义键值数组:
初始化相关数组
$ages=array(‘吴祁‘=>19,‘李炎恢‘=>27,‘胡心鹏‘=>23);
访问数组元素
$ages["吴祁"];
$ages["李炎恢"];
$ages["胡心鹏"];
追加数组:首先,创建只有一个元素的数组,然后追加两个元素。
$ages=array("吴祁"=>19);
$ages["李炎恢"]=27;
$ages["胡心鹏"]=23;
直接添加数组:无需创建,直接添加,添加第一个元素自动建立数组。
$ages["吴祁"]=19;
$ages["李炎恢"]=27;
$ages["胡心鹏"]=23;
遍历自定义键值数组:
foreach ($ages as $key=>$value) {
echo $key."=>".$value."<br />";
}
while (!!$element=each($ages)) {
echo $element["key"]. "=>";.$element["value"]."<br />";
}
list($name,$age)=each($ages);
如希望在同一脚本中两次使用该数组,就必须使用函数 reset()将当前元素重新设置到数组开始处。
reset($prices);
array_unique();它会删除掉里面相同值的元素。
array_flip();它会对调数组中的 key 和 value;
顯示二維數組:
法一:
echo "|".$products[0][0]."|".$products[0][1]."|".$products[0][2]."|<br />";
echo "|".$products[1][0]."|".$products[1][1]."|".$products[1][2]."|<br />";
echo "|".$products[2][0]."|".$products[2][1]."|".$products[2][2]."|<br />";
法二:使用双重 for 循环来实现同样的效果:
for ($row=0;$row<3;$row++) {
for ($column=0;$column<3;$column++) {
echo "|".$products[$row][$column];
}
echo "|<br />";
}
法三:
for ($row=0;$row<3;$row++) {
echo "|".$products[$row]["产品名"]."|".$products[$row]["数量"]."|".$products[$row]["价格"]."|<br />";
}
法四:
for ($row=0;$row<3;$row++) {
while (!!list($key, $value)=each($products[$row])) {
echo "|".$value;
}
echo "|<br />";
}
排序:
sort()函数将数组按字母升序进行排序。
$products=array("orange","banner","apple");
sort($products);
使用 sort()函数将数字升序进行排序。
$prices=array(100,10,4,23,78);
sort($prices);
sort()函数的第二个参数是可选的。这个可选参数可以传递 SORT_REGULAR(默认值)、SORT_NUMERIC 或 SORT_STRING
正向排序:sort()、asort()和 ksort()
反向排序:rsort()、arsort()和 krsort()
shuffle() //将数组个元素进行随机排序。
array_reverse() //给出一个原来数组的反向排序。
array_unshift()函数将新元素添加到数组头,array_push()函数将每个新元素添加到数组
的末尾。
array_shift()删除数组头第一个元素,与其相反的函数是 array_pop(),删除并返回数组末
尾的一个元素。
array_rand()返回数组中的一个或多个键。
數組指針:each()、current()、reset()、end()、next()、pos()、prev();
调用 next()或 each()将使指针前移一个元素。调用 each($array_name)会在指针前移一个位置之前返回当前元素。调用 next($array_name)是将指针前移,然后再返回新的当前元素。
count()和 sizeof()统计数组下标的个数
array_count_values()统计数组内下标值的个数
$array=array("key1"=>"value1","key2"=>"value2","key3"=>"value3");
extract($array); //非数字索引数组,可以使用函数 extract()将它们转换成一系列的标量变量
echo $key1.$key2.$key3;
6、目录操作
确定绝对路径:realpath()函数将 path 中的所有符号链接和相对路径引用转换为相应的硬链接和绝对路径。
<? $path = ‘../index.php‘;
echo realpath($path); ?>
$path = ‘C:\AppServ\www\Basic6\Demo1.php‘;
echo ‘path:‘.basename($path); //返回路径中の文件名
echo ‘path:‘.dirname($path); //返回路径中の目录
print_r(pathinfo($path)); //pathinfo()函数创建一个关联数组,其中包括:目录名、基本名和扩展名
echo round(filesize($file)/1024,2).‘KB‘; //filesize()函数返回指定文件字节大小
计算磁盘:$drive = ‘C:‘;
echo round(disk_free_space($drive)/1024/1024,2).‘MB‘; //disk_free_space()函数返回指定的目录所在磁盘分区的可用空间
echo round(disk_total_space($drive)/1024/1024,2).‘MB‘; //disk_total_space()函数返回指定的目录所在磁盘分区的总容量。
确定文件时间戳:$file = ‘C:\AppServ\www\Basic6\Demo1.php‘;
date_default_timezone_set(‘Asia/Shanghai‘); //設置時區
echo date("Y-m-d,h:i:s",fileatime($file)); //fileatime()函数返回文件的最后访问时间,采用Unix时间戳格式。
echo date("Y-m-d,h:i:s",filectime($file)); //filectime()函数返回文件的最后改变时间,采用Unix时间戳格式。
echo date("Y-m-d,h:i:s",filemtime($file)); //filemtime()函数返回文件的最后修改时间,采用Unix时间戳格式。
7、文件讀寫
$fp=fopen(文件路径,文件模式 [,是否在 incloude_path 中搜索一个文件][,允许文件名以协议名称开始(如 http://)] )
fopen()函数的文件模式:
r //只读 文件指针置于文件开头
r+ //读写 文件指针置于文件开头
w //只写 在写入前,删除文件内容,将指针返回到文件开头。如果文件不存在,则尝试创建。
w+ //读写 在读取或写入之前,删除文件内容,将指针返回到文件开头。如果文件不存在,则尝试创建。
a //只写 文件指针置于文件末尾。如果文件不存在,则尝试创建。此模式成为追加 (append)。
a+ //读写 文件指针置于文件末尾。如果文件不存在,则尝试创建。此过程称为追加到文件。
b //二进制 二进制模式----用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,你可能会使用它。Windows 系统可以区分;而 UNIX 则不区分。推荐一直使用这个选项,以便获得最大程度的可移植性。二进制模式是默认的模式。
t //文本 用于与其他模式的结合。这个模式只是 Windows 系统下一个选项。它不是推荐选项,除非你曾经在代码中使用 b 选项。
如果 fopen()函数调用失败,函数将返回 false。可以用一种对于用户友好的方式来处理这个错误,可以通过抑制 PHP 的错误信息并且根据自己的方式给出错误信息。
$f=fopen("file.txt",‘ab‘); //ab 追加并且二进制方式
$s = ‘This is a wq!He is 19‘; //
fwrite($f, $s, [int length]); //将$s写入到$f文件中第三个可选参数为最大字符数
fwrite($f, $s, strlen($s)); //strlen()函数获得字符串的长度,寫入定長字串後結束
fclose($f); //關閉文件
file_put_contects($f, $s); //與依次调用 fopen(),fwrite() 以及 fclose() 功能一样。$s可以是 数组(但不能为多维数组)
读出文件
$f = fopen("file.txt","r");
echo fgetc($f) //读出一个字符,并将指针移到下一个字符
echo fgets($f) //读出一行字符,可以指定一行显示的长度
echo fgets($f,3) //读取一行并返回长度最多为 3 - 1 字节的字符串
echo fgetss($f) //从文件指针中读取一行并过滤掉 html 标记
echo fread($f,2) //读取定量(2個)的字符
echo fpassthru($f) //输出文件指针处的所有剩余数据,fpassthru本身还包含了向浏览器输出的功能,所以不需要echo
$array_file = file(‘file.txt‘); //file是按照每行来分组存放在一个数组中
echo $array_file[4]; //打印出的是文件中的第五行。
readfile(‘file.txt‘); //readfile是将整个文件读出来,readfile本身能够直接输入浏览器,所以不需要echo
返回值是文件字节的总长度。
echo file_get_contents(‘file.txt‘); //file_get_contents可以读入数据到缓冲区,然后通过echo来打印将整个文件
while (!feof($f)) { echo fgetc($f); } //feof()测试文件指针是否到了文件结束的位置
file_exists(‘file.txt‘) //檢測文件是否存在
echo filesize(‘file.txt‘); //輸出文件大小
unlink(‘123.txt‘); //刪除文件
rewind($f) //将文件指针复位到文件的开始。
ftell($f) //函数可以以字节为单位报告文件指针当前在文件中的位置。
fseek($f) //将文件指针 fp 从 whence位置移动 offset 字节。
文件鎖定:
$f = fopen("file.txt","ab");
flock($f,LOCK_EX); //锁定
fwrite($f, $outsum);
flock($f, LOCK_UN); //释放
fclose($f);
LOCK_SH(以前为 1) //读锁定。这意味着文件可以共享,其他人可以读该文件
LOCK_EX(以前为 2) //写操作锁定。这是互斥的。该文件不能被共享
LOCK_UN(以前为 3) //释放已有的锁定
LOCK_NB(以前为 4) //防止在请求加锁时发生阻塞
目录句柄操作
$dir = opendir(‘C:\AppServ\www\Basic5‘); //打开路径指定的目录流
while (!!$file = readdir($dir)) { //返回目录中的各个元素
echo $file.‘<br />‘;
}
closedir($dir); //关闭目录流
print_r(scandir(‘C:\AppServ\www\Basic5‘)); //将目录读入数组
rmdir(‘C:\AppServ\www\Basic5\123‘); //删除指定的目录
rename("/tmp/tmp.txt", "/home/user/file.txt"); //重命名文件
8、函數
內置函數:如md5(‘123456‘); //MD5函数对字符串进行加密处理
包含默认参数的函数调用:可以为输入参数指定默认值,在没有提供其他值的情况下,就会把这个默认值自动赋给该参数。
function functionArea($radius=10) {
return $radius * $radius * pi();
}
函数调用将不区分大小写,所以调用 functionname() 、FunctionName() 或FUNCTIOINNAME()都是有效的,而且都将返回相同的结果。为了方便,这里都用小写。
注意到函数名称和变量名称是不同的,这一点很重要。变量名是区分大小写的,所以$Name 和$name 是两个不同的变量,但 Name()和 name()则是同一个函数。
使用 require()和 include()并不影响作用域。如果这两个语句用于函数内部,函数作用域适用。如果它不在函数内部,全局作用域适用。
关键字“global”可以用来手动指定一个在函数中定义或使用的变量具有全局作用域。
通过调用 unset($variable_name)可以手动删除变量。如果变量被删除,它就不在参数所指定的作用域中了。
如:function (){
global $china;
}
include()语句将在其被调用的位置处判断并包含一个文件。包含一个文件与在该语句所在位置复制该文件的数据具有相同的结果。<?include ‘include.php‘;?>
include_once()函数的作用与 include()相同,不过它会首先验证是否已经包含了该文件。如果包含了该文件,则不再执行 include_once()。<?include_once ‘include.php‘;?>
require()在很大程度与 include()相同,都是将一个模板文件包含到 require()调用所在的位置。
<?require(‘require.php‘);?>
require_once()函数的作用与require()相同,不过 require_once()函数确保文件只包含一次。在遇到 require_once()后,后面再试图包含相同的文件时都将被忽略。<?require_once(‘require.php‘);?>
PHP 实现了一些所谓的魔法常量,他们并不真的是常量,因为这些魔法常量会根据使用的场合改变值。
__FILE__ 当前文件名
__LINE__ 当前行号
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
__METHOD__ 当前方法名
9、字符串處理
chop() //移除字符串后面多余的空白,包括新行。
ltrim() //移除字符串起始处多余空白。
rtrim() //移除字符串后面多余的空白,包括新行,此函数是 chop()的别名。
trim() //移除字符串两边多余的空白。
strtoupper() //将字符串转换为大写
strtolower() //将字符串转换成小写
ucfirst() //将第一个字母转换为大写
ucwords() //将每个单词第一个字母转换为大写
nl2br("This is a Teacher!\nThis is a Student!"); //此函數只把\n轉換成<br/>
htmlentities(‘<strong>我是吴祁!</strong>‘); //转换所有字符
htmlspecialchars(‘<strong>我是吴祁!</strong>‘) //转换特殊字符
strip_tags(‘<strong>我是吴祁!</strong>‘) //去掉了<strong>
addslashes(‘This is \a" Teacher! ‘); //返回在预定义字符之前添加反斜杠的字符串。
str_pad(‘Salad‘,10.‘is good.‘); //用10個is good,填充在Salad後面。
explode(‘@‘, ‘[email protected]@[email protected]‘,3); //用@把字串分割成數組,但最多3個元素
最後一個參數:大于 0 ,最多l个元素的数组;小于0 , 除了最后的-l个元素以外的所有元素的数组;0,一个元素的数组
strtok("I,will.be#back",",.#"); //一次从字符串中取出一个单词
substr("abcdef", 1, 3); //从字符串中第一个取到第三個
str_split(‘This is a Teacher!‘,3); //返回一个数组,每個數組元素為3個字符(省略為1)
strrev(‘This is a Teacher!‘); //将一个字符串逆反过来
strcmp(‘a‘,‘b‘) //比較倆個字符串。若相等,该函数返回 0,如果str1大于str2就返回一个正数,如果str1小于str2 就返回一个负数。此函数是区分大小写(按字典順序比較大小)
strcasecmp(‘a‘,‘b‘) //同上,但是此函數不區分大小寫
strnatcmp(‘a‘,‘b‘) //按自然順序比較大小
strspn(string,charlist[,start][,length]); //在字符串中包含 charlist 参数中指定字符的数目
strlen(‘This is a Teacher!‘); //返回字符串的長度
substr_count(string,substring[,start][,length]) //计算子串在字符串中出现的次数
strstr(string,search) //搜索字符串在另一字符串中的第一次出现,區分大小寫
strchr(string,search) //完全同上,返回子字符串
stristr(string,search) //搜索字符串在另一字符串中的第一次出现,不區分大小寫
strpos(string,search) //搜索字符串在另一字符串中的第一次出现,返回位置值。 比strstr要快,PHP手冊推薦使用
str_replace(find,replace,string[,count]) //在string中找find,用replace替換find,替換count次
substr_replace(string,replacement,start[,length]) //在string的start處插入replacement
中文字符處理:
mb_strlen() 对应的函数为 strlen() 求字符串的长度
mb_strstr() 对应的函数为 strstr() 求某字符串到结尾的字符
mb_strpos() 对应的函数为 strpos() 求出字符最先出现处
mb_substr() 对应的函数为 substr() 取出指定的字符串
mb_substr_count() 对应函数为 substr_str() 返回字符串出现的次数
10、正則表達式
+ //匹配任何至少包含一个前导字符串
* //匹配任何包含零个或多个前导字符串
? //匹配任何包含零个或一个前导字符串
. //匹配任意字符串
{x} //匹配任何包含 x 个前导字符串
{x,y} //匹配任何包含 x 到 y 个前导字符串
{x,} //匹配任何包含至少 x 个前导字符串
$ //匹配字符串的行尾
^ //匹配字符串的行首
| //匹配字符串的左边或者右边
() //包围一个字符分组或定义个反引用,可以使用\1\2 提取
[a-z] //匹配任何包含小写字母 a-z 的字符串
[A-Z] //匹配任何包含大写字母 A-Z 的字符串
[0-9] //匹配任何包含数字 0-9 的字符串
[abc] //匹配任何包含小写字母 a、b、c 的字符串
[^abc] //匹配任何不包含小写字母 a、b、c 的字符串
[a-zA-Z0-9_] //匹配任何包含 a-zA-Z0-9 和下划线的字符串
\w //匹配任何包含 a-zA-Z0-9 和下划线的字符串(同上)
\W //匹配任何没有下划线和字母数字的字符串
\d //匹配任何数字字符,和[0-9]相同
\D //匹配任何非数字字符,和[^0-9]相同
\s //匹配任何空白字符
\S //匹配任何非空白字符
\b //匹配是否到达了单词边界
\B //匹配是否没有达到单词边界
\ //匹配正则中的特殊字符
i //完成不区分大小写的搜索
m //在匹配首内容或者尾内容时候采用多行识别匹配
x //忽略正则中的空白
A //强制从头开始匹配
U //禁止贪婪匹配 只跟踪到最近的一个匹配符并结束
Perl風格の函數:
preg_grep((‘/p$/‘,$language) //搜索数组中的所有元素,返回由与某个模式匹配的所有元素组成的数组
preg_match(‘/p$/‘,’php’) //在字符串中匹配结尾为p,如果匹配到返回true
preg_match_all(‘/p$/‘,’php’,$out) //在字符串中匹配模式的所有出现,然后将所有匹配到的全部放入数组。
preg_auote(‘PHP价格:$150‘) //在每个特殊字符前加上\,特殊字符:$ ^ * () + = {} [] | \\ : <>
preg_replace(‘/php[1-6]/‘,‘python‘,‘This is a php5,This is a php4‘);
//搜索到所有匹配,然后替换成想要的字符串返回出来。
preg_replace_callback()
preg_split(‘/[\[email protected]]/‘,‘[email protected]‘); //用来分割字符串
POSIX風格の函數:(用法基本與上重複)
ereg($pattern ,$string [,$array] ) //用法同preg_match(),但效率比其低
ereg_replace()
eregi()
eregi_replace()
split()
spliti()
sql_regcase()
11、日期:
checkdate(月,日,年) //检测日期是否合格,合格返true
date(‘今天的日期和时间为:Y/m/d H:i:sa‘); //格式化日期
gettimeofday() //返回与当前时间有关的元素所组成的一个关联数组
getdate(1184557366); //接受一个时间戳,并返回一个由其各部分组成的关联数组。如果不给参数,那么返回当前的时间和日期。
mktime(时,分,秒,月,日,年[,夏令时]); //转为Unix时间戳,无参数,返回当前时间の时间戳,夏令时,用设置为1,不用设置为0,不确定设置为-1
strtotime(‘2007-10-31 14:31:33‘); //将日期转换为Unix时间戳,可用now();
getlastmod(); //得到当前文件最后修改时间的时间戳
localtime(timestamp,is_assoc); //timestamp时间戳,is_assoc<true/false>返回关联数组(T)还是索引数组(F);二参数皆可选,非必须,若无时间戳,默认为当前的本地时间time();此函数返回本地时间
设置时区和 GMT/UTC:
修改 php.ini 文件中的设置,找到[date]下的;date.timezone = 选项,将该项修改为
date.timezone=Asia/Shanghai,然后重新启动 apache 服务器。
或者:date_default_timezone_set(‘Asia/Shanghai‘);
time(); //获取当前时间
setlocale(constant,location) //设置本地参数,
constant:必须
LC_ALL - 包括下面的所有选项
LC_COLLATE - 排序次序
LC_CTYPE - 字符类别及转换(例如所有字符大写或小写)
LC_MESSAGES - 系统消息格式
LC_MONETARY - 货币格式
LC_NUMERIC - 数字格式
LC_TIME - 日期和时间格式
location:可选
设置地区en_US(美国)、cht(繁中)、chs(简中)
strftime(format,timestamp); //用本地化环境来输出日期和时间
microtime(); //返回当前时间戳和微秒数。返回格式为 msec sec 的字符串,其中 sec 是当前的 UNIX 时间戳,msec 为微秒数。
获取:list($msec, $sec) = explode(‘ ‘, microtime());
12、表头
用于重新导向指定的 URL
<?php header(‘Location:http://www.baidu.com‘); ?>
用于设置页面字符编码
<?php header(‘Content-Type: text/html; charset=gbk‘); ?>
注意:除非启用了输出缓冲,否则这些命令必须在返回任何输出之前执行。
启用输出缓冲:ob_start()
<?php ob_start(); ?>
13、会话
创建cookie:
<?php setcookie(‘name‘,‘Lee‘,time()+(7*24*60*60)); ?>
参1:cookie 名称;参2:cookie 值;参3:cookie 过期时间
读取cookie:<?php echo $_COOKIE[‘name‘]; ?>
删除 cookie:<?php setcookie(‘name‘,‘‘); setcookie(‘name‘,‘Lee‘,time()-1); ?>
session处理:
<?php
session_start();
$_SESSION[‘name‘] = ‘Lee‘; //设置session
echo $_SESSION[‘name‘]; //读取session
if (isset($_SESSION[‘name‘])) { //判断session是否存在
echo $_SESSION[‘name‘];
}
unset($_SESSION[‘name‘]); //删除session
session_destroy(); //销毁所有session
?>
cookie设置session信息:setcookie(session_name() ,session_id(),time()+$time,’/’); //‘/’为根目录
session_cache_limiter(public/private); //设置session(会话)所使用的缓存方法
session_cache_expire (30); //设置缓存时间,单位为分钟
session_save_path("D:/www/session/rrr"); //设置session路径
此三函数必须用在session_start();之前
session_id() //可以用来获取/设置,当前会话 ID
session_name() //返回当前会话名称。如指定name参数, session_name() 函数会更新会话名称,并返回原来的会话名称。
session详细教程:http://php.net/manual/zh/ref.session.php
14、文件上传
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
上传文件: <input type="file" name="userfile" />
<input type="submit" value="上传" />
</form>
ENCTYPE="multipart/form-data",这里是固定写法,否则文件上传失败
$_FILES 超级全局变量,它储存各种与上传有关的信息,这些信息对于通过 PHP 脚本上传到服务器的文件至关重要。
1.存储在$_FILES["userfile"]["tmp_name"] 变量中的值就是文件在 Web 服务器中临时存储的位置。
2.存储在$_FILES["userfile"]["n ame"]变量中的值就是用户系统中的文件名称。
3.存储在$_FILES["userfile"]["size"]变量中的值就是文件的字节大小。
4.存储在$_FILES["userfile"]["type"]变量中的值就是文件的 MIME 类型,例如:text/plain或 image/gif。
5.存储在$_FILES["userfile"]["error"]变量中的值将是任何与文件上载相关的错误代码。
error 分别提供了一些数组常量:0:表示没有发生错误,1:表示上载文件的大小超出了约定值。文件大小的最大值是 PHP 配置文件中指定的,该指令是 upload_max_filesize。2:表示上载文件大小超出了 HTML 表单的 MAX_FILE_SIZE 元素所指定的最大值。3:表示文件只被部分上载。4:表示没有上载任何文件。
is_uploaded_file($_FILES["userfile"]["tmp_name"]) //判断是否上传文件
move_uploaded_file($_FILES["userfile"]["tmp_name"],$_FILES["userfile"]["name"]) //移动文件,成功返回true
15、图像处理
创建图像的流程:
1、设定标头指定 MIME 输出类型
<?php header(‘Content-Type: image/png‘); ?>
2、创建一个空白的图像区域
<?php $im = imagecreatetruecolor(200,200); ?>
3、在空白图像区域绘制填充背景
<?php $blue = imagecolorallocate($im,0,102,255); imagefill($im,0,0,$blue); ?>
4、在背景上绘制图形轮廓输入文本
<?php
$white = imagecolorallocate($im,255,255,255);
imageline($im,0,0,200,200,$white);
imageline($im,200,0,0,200,$white);
imagestring($im, 5, 80, 20, "Mr.Lee", $white);
?>
5、输出最终图形
<?php imagepng($im); ?>
6、清除所有资源
<?php imagedestroy($im); ?>
7、其他页面调用创建的图形
<img src="Demo4.php" alt="PHP 创建的图片" />
案例:
简单验证码
<?php
header(‘Content-type: image/png‘);
for($Tmpa=0;$Tmpa<4;$Tmpa++){
$nmsg.=dechex(rand(0,15));
}
$im = imagecreatetruecolor(75,25);
$blue = imagecolorallocate($im,0,102,255);
$white = imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$blue);
imagestring($im,5,20,4,$nmsg,$white);
imagepng($im);
imagedestroy($im);
?>
加载已有的图像
<?php
header(‘Content-Type:image/png‘);
define(‘__DIR__‘,dirname(__FILE__).‘\\‘);
$im = imagecreatefrompng(__DIR__.‘222.png‘);
$white = imagecolorallocate($im,255,255,255);
imagestring($im,3,5,5,‘http://www.yc60.com‘,$white);
imagepng($im);
imagedestroy($im);
?>
加载已有的系统字体
<?php
$text = iconv("gbk","utf-8","李炎恢");
$font = ‘C:\WINDOWS\Fonts\SIMHEI.TTF‘;
imagettftext($im,20,0,30,30,$white,$font,$text);
?>
图像微缩
<?php
header(‘Content-type: image/png‘);
define(‘__DIR__‘,dirname(__FILE__).‘\\‘);
list($width, $height) = getimagesize(__DIR__.‘222.png‘);
$new_width = $width * 0.7;
$new_height = $height * 0.7;
$im2 = imagecreatetruecolor($new_width, $new_height);
$im = imagecreatefrompng(__DIR__.‘222.png‘);
imagecopyresampled($im2, $im, 0, 0, 0, 0,
$new_width, $new_height, $width, $height);
imagepng($im2);
imagedestroy($im);
Imagedestroy($im2);
?>
16、mysql数据库
MySQL 常规命令
1)显示当前数据库的版本号和日期。
SELECT VERSION(),CURRENT_DATE();
2)通过 AS 关键字设置字段名。
SELECT VERSION() AS version; //可设置中文,通过单引号
3)通过 SELECT 执行返回计算结果
SELECT (20+5)*4;
4)通过多行实现数据库的使用者和日期
>SELECT
>USER()
>,
>NOW()
>;
5)通过一行显示数据库使用者和日期
>SELECT USER();SELECT NOW();
6)命令的取消
>\c
7)MySQL 窗口的退出
>exit;
整数型:TINYINT,SMALLINT,INT,BIGINT
浮点型:FLOAT,DOUBLE,DECIMAL(M,D)
字符型:CHAR,VARCHAR
日期型:DATETIME,DATE,TIMESTAMP
备注型:TINYTEXT,TEXT,LONGTEXT
MySQL 数据库操作
1)显示当前存在的数据库
>SHOW DATABASES;
2)选择你所需要的数据库
>USE guest;
3)查看当前所选择的数据库
>SELECT DATABASE();
4)查看一张表的所有内容
>SELECT * FROM guest; //可以先通过 SHOW TABLES;来查看有多少张表
5)根据数据库设置中文编码
>SET NAMES gbk; //set names utf8;
6)创建一个数据库
>CREATE DATABASE book;
7)在数据库里创建一张表
>CREATE TABLE users (
>username VARCHAR(20), //NOT NULL 设置不允许为空
>sex CHAR(1),
>birth DATETIME);
8)显示表的结构
>DESCIRBE users;
9)给表插入一条数据
>INSERT INTO users (username,sex,birth) VALUES (‘Lee‘,‘x‘,NOW());
10)筛选指定的数据
> SELECT * FROM users WHERE username = ‘Lee‘;
11)修改指定的数据
>UPDATE users SET sex = ‘男‘ WHERE username=‘Lee‘;
12)删除指定的数据
> DELETE FROM users WHERE username=‘Lee‘;
13)按指定的数据排序
> SELECT * FROM users ORDER BY birth DESC; //正序
14)删除指定的表
>DROP TABLE users;
15)删除指定的数据库
>DROP DATABASE book;
文本函数
函数 |
用法 |
描述 |
CONCAT() |
CONCAT(x,y,...) |
创建形如 xy 的新字符串 |
LENGTH() |
LENGTH(column) |
返回列中储存的值的长度 |
LEFT() |
LEFT(column,x) |
从列的值中返回最左边的 x 个字符 |
RIGHT() |
RIGHT(column,x) |
从列的值中返回最右边的 x 个字符 |
TRIM() |
TRIM(column) |
从存储的值删除开头和结尾的空格 |
UPPER() |
UPPER(column) |
把存储的字符串全部大写 |
LOWER() |
LOWER(column) |
把存储的字符串全部小写 |
SUBSTRING() |
SUBSTRING(column, start,length) |
从column中返回开始start的length个字符(索引从0开始) |
MD5() |
MD5(column) |
把储存的字符串用 MD5 加密 |
SHA() |
SHA(column) |
把存储的字符串用 SHA 加密 |
数字函数
函数 |
用法 |
描述 |
ABS() |
ABS(x) |
返回 x 的绝对值 |
CEILING() |
CEILING(x) |
返回 x 的值的最大整数 |
FLOOR() |
FLOOR(x) |
返回 x 的整数 |
ROUND() |
ROUND(x) |
返回 x 的四舍五入整数 |
MOD() |
MOD(x) |
返回 x 的余数 |
RNAD() |
RNAD() |
返回 0-1.0之间随机数 |
FORMAT() |
FORMAT(x,y) |
返回一个格式化后的小数 |
SIGN() |
SIGN(x) |
返回一个值,正数(+1),0,负数 (-1) |
SQRT() |
SQRT(x) |
返回 x 的平方根 |
日期和时间函数
函数 |
用法 |
描述 |
HOUR() |
HOUR(column) |
只返回储存日期的小时值 |
MINUTE() |
MINUTE(column) |
只返回储存日期的分钟值 |
SECOND() |
SECOND(column) |
只返回储存日期的秒值 |
DAYNAME() |
DAYNAME(column) |
返回日期值中天的名称 |
DAYOFMONTH() |
DAYOFMONTH(column) |
返回日期值中当月第几天 |
MONTHNAME() |
MONTHNAME(column) |
返回日期值中月份的名称 |
MONTH() |
MONTH(column) |
返回日期值中月份的数字值 |
YEAR() |
YEAR(column) |
返回日期值中年份的数字值 |
CURDATE() |
CURDATE() |
返回当前日期 |
CURTIME() |
CURTIME() |
返回当前时间 |
NOW() |
NOW() |
返回当前时间和日期 |
格式化日期和时间(DATE_FORMAT()和TIME_FORMAT())
名词 |
用法 |
示例 |
%e |
一月中的某天 |
1~31 |
%d |
一月中的某天,两位 |
01~31 |
%D |
带后缀的天 |
1st~31st |
%W |
周日名称 |
Sunday~Saturday |
%a |
简写的周日名称 |
Sun-Sat |
%c |
月份编号 |
1~12 |
%m |
月份编号,两位 |
01~12 |
%M |
月份名称 |
January~December |
%b |
简写的月份名称 |
Jan~Dec |
%Y |
年份 |
2002 |
%y |
年份,两位 |
02 |
%l |
小时 |
1~12 |
%h |
小时,两位 |
01~12 |
%k |
小时,24 小时制 |
0~23 |
%H |
小时,24 小制度,两位 |
00~23 |
%i |
分钟 |
00~59 |
%S |
秒 |
00~59 |
%r |
时间 |
8:17:02 PM |
%T |
时间,24 小时制 |
20:17:02 PM |
%p |
上午或下午 |
AM 或 PM |
SQL语句详解
创建一个班级数据库 school,里面包含一张班级表 grade,包含编号(id)、姓名(name)、邮件(email)、评分(point)、注册日期(regdate)。
mysql>CREATE DATABASE school; //创建一个数据库
mysql> CREATE TABLE grade (
//UNSIGNED 表示无符号,TINYINT(2) 无符号整数 0-99,NOT NULL 表示不能为空,AUTO_INCREMENT 表示从 1 开始没增加一个字段,累计一位
-> id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
-> name VARCHAR(20) NOT NULL,
-> email VARCHAR(40),
-> point TINYINT(3) UNSIGNED NOT NULL,
-> regdate DATETIME NOT NULL,
-> PRIMARY KEY (id) //表示 id 为主键,让 id 值唯一,不得重复。
-> );
2.给这个班级表 grade 新增 5-10 条学员记录
mysql> INSERT INTO grade (name,email,point,regdate) VALUES(‘Lee‘,‘[email protected]‘,95,NOW());
3.查看班级所有字段的记录,查看班级 id,name,email 的记录
mysql> SELECT * FROM grade;
mysql> SELECT id,name,email FROM grade;
WHERE 表达式的常用运算符
=、<、>、<=、>=、!=、
IS NOT NULL (具有一个值)、IS NULL (没有值)、BETWEEN(在范围内)、NOT BETWEEN(不在范围内)、IN(指定的范围)、OR(两个条件语句之一为真)、AND(两个条件语句都为真)、NOT(条件语句不为真)
姓名等于‘Lee‘的学员,成绩大于 90 分的学员,邮件不为空的成员,70-90 之间的成员
mysql> SELECT * FROM grade WHERE name=‘Lee‘;
mysql> SELECT * FROM grade WHERE point>90;
mysql> SELECT * FROM grade WHERE email IS NOT NULL;
mysql> SELECT * FROM grade WHERE point BETWEEN 70AND 90;
mysql> SELECT * FROM grade WHERE point IN (95,82,78);
查找邮件使用 163 的学员,不包含 yc60.com 字符串的学员
mysql> SELECT * FROM grade WHERE email LIKE ‘%163.com‘;
mysql> SELECT * FROM grade WHERE email NOT LIKE ‘%yc60.com%‘;
按照学员注册日期的倒序排序,按照分数的正序排序
mysql> SELECT * FROM grade ORDER BY regdate DESC;
mysql> SELECT * FROM grade ORDER BY point ASC;
只显示前三条学员的数据,从第 3 条数据开始显示 2 条
mysql> SELECT * FROM grade LIMIT 3;
mysql> SELECT * FROM grade LIMIT 2,2;
修改姓名为‘Lee‘的电子邮件
mysql> UPDATE grade SET email=‘[email protected]‘ WHERE name=‘Lee‘;
删除编号为 4 的学员数据
mysql> DELETE FROM grade WHERE id=4;
MYSQL分组函数
函数 |
用法 |
描述 |
AVG() |
AVG(column) |
返回列的平均值 |
COUNT() |
COUNT(column) |
统计行数 |
MAX() |
MAX(column) |
求列中的最大值 |
MIN() |
MIN(column) |
求列中的最小值 |
SUM() |
SUM(column) |
求列中的和 |
检查这个表的信息
mysql> SHOW TABLE STATUS \G;
优化一张表
mysql> OPTIMIZE TABLE grade;
17、PMA
标头设置,让火狐和 IE 保持编码统一:
<?php header(‘Content-Type:text/html; charset=utf-8‘); ?>
连接 MySQL
<?php $conn = @mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die(‘数据库连接失败!错误信息:‘.mysql_error()); ?>
数据库连接参数,可以用常量存储,这样就不能修改,更加安全。
<?php
define(‘DB_USER‘,‘root‘);
define(‘DB_PASSWORD‘,‘yangfan‘);
define(‘DB_HOST‘,‘localhost‘);
define(‘DB_NAME‘ ,‘school‘);
?>
选择你所需要的数据库
<?php @mysql_select_db(DB_NAME) or die(‘数据库找不到!错误信息:‘.mysql_error()); ?>
设置字符集,如果是 GBK,直接设置 SET NAMES GBK 即可
<?php @mysql_query(‘SET NAMES UTF8‘) or die(‘字符集设置错误‘); ?>
获取记录集
<?php
$query = "SELECT * FROM grade";
$result = @mysql_query($query) or die(‘SQL 语句有误!错误信息:
‘.mysql_error());
?>
输出一条记录
<?php print_r(mysql_fetch_array($result,MYSQL_ASSOC)); ?>
释放结果集资源
<?php mysql_free_result($result); ?>
关闭数据库
<?php mysql_close($conn); ?>
新增数据
<?php
$query = "INSERT INTO grade (name,email,point,regdate) VALUE
(‘李炎恢‘,‘[email protected]‘,,NOW())";
@mysql_query($query) or die(‘添加数据出错:‘.mysql_error());
?>
修改数据
<?php
$query = "UPDATE grade SET name=‘小可爱‘ WHERE id=6";
@mysql_query($query) or die(‘修改出错:‘.mysql_error());
?>
删除数据
<?php
$query = "DELETE FROM grade WHERE id=6";
@mysql_query($query) or die(‘删除错误:‘.mysql_error());
?>
显示数据
<?php
$query = "SELECT id,name,email,point FROM grade";
$result = @mysql_query($query) or die(‘查询语句出错:‘.mysql_error());
while (!!$row = mysql_fetch_array($result)) {
echo $row[‘id‘].‘----‘.$row[‘name‘].‘----‘.$row[‘email‘].‘----‘.$row[‘point‘];
echo ‘<br />‘;
}
?>
其他常用函数
mysql_fetch_row():从结果集中取得一行作为枚举数组
mysql_fetch_assoc(): 从结果集中取得一行作为关联数组
mysql_fetch_array(): 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
mysql_fetch_lengths(): 取得结果集中每个输出的长度
mysql_field_name(): 取得结果中指定字段的字段名
mysql_num_rows(): 取得结果集中行的数目
mysql_num_fields():取得结果集中字段的数目
mysql_get_client_info(): 取得 MySQL 客户端信息
mysql_get_host_info(): 取得 MySQL 主机信息
mysql_get_proto_info(): 取得 MySQL 协议信息
mysql_get_server_info(): 取得 MySQL 服务器信息
以上是关于PHP基礎知識的主要内容,如果未能解决你的问题,请参考以下文章