PHP知识总结
基本语法
php格式
<?php
语句;
语句;
?>
注释
<?php
//这是单行注释
#这是单行注释
/*
这是多行注释
*/
?>
声明变量
<?php
/*
变量以$符号开头,其后是变量的名称。大小写敏感。
变量名称必须以字母或下划线开头。
变量名可以是中文(不建议)。
声明变量的同时可以同时赋值。
*/
$变量名 = 值;
?>
输出
<?php
//echo 输出字符串或者结果
echo '123';
echo '123' == 123; #结果为1
//输出复杂数据类型。比如数组、对象。
$arr =array(1,2,'3');
print_r($arr); #结果为Array ( [0] => 1 [1] => 2 [2] => 3 )
//输出详细信息。
var_dump('123' == 123); #结果为bool(true)
var_dump($arr); #结果为array(3) { [0]=> int(1) [1]=> int(2) [2]=> string(1) "3" }
?>
获取前端数据
<?php
//万能获取(无论是POST还是GET都可以使用)
$_REQUEST['组件的name值'];
//当表单以GET(参数会在地址栏中显示)方式提交时使用
$_GET['组件的name值'];
//当表单以POST(参数不显示在地址栏中)方式提交时使用
$_POST['组件的name值'];
?>
运算符
算数运算符:+、-、/、*、%
赋值运算符:x = y、x += y、x -= y、x .= y等。
逻辑运算符:&&、||、!
三目运算符: a ? b :c
自操作运算符: ++ 、–
连接运算符:.
错误抑制符:@
这些运算符与其他语言的运算符没什么区别,但要注意在两个数进行操作时,php会自动转化类型;而且结果也会转为正确的类型,具体看下面
<?php
//结果为true,因为会自动类型转化
var_dump(123 == '123');
//结果为false,三个等于号代表不只是值要相等而且类型也要相等
var_dump(123 === '123');
//单引号里的内容,一定是字符串。双引号里的内容,可能会进行解析。
echo "<hr/>";
//结果转为正确的类型
$a = 3;
echo $a / 5; #结果为0.6,也就是说结果不会是int类型
//字符串拼接
$x = 'hello';
$y = 'world';
echo $x.$y; #结果为helloworld
//错误抑制符
$a = 10;
$b = 0;
//0是不能作为除数,会报错,加上@就不会报了
@($a / $b);
@$x = $a/$b;
?>
流程控制
顺序结构
分支结构
- if语句
<?php
if(条件语句){
语句;
}
else if(条件语句){
语句;
}
else{
语句;
}
?>
- switch语句
<?php
$a = '1';
switch($a){
case '1':
语句;
break;
case '3':
语句;
break;
case '2':
语句;
break;
default:
语句;
break;
}
?>
循环结构
- for语句
<?php
for ($x=0; $x<=10; $x++) {
echo "$x <hr/>"; //echo "1 <hr/>";也是可以的
}
?>
- foreach语句
<?php
$num = array("1","2","3","4");
foreach ($num as $value) {
echo "$value <hr/>"; //echo " "1" <hr/>";是不可以的
}
?>
- while语句
<?php
while (条件)
{
要执行的代码;
}
?>
- do-while语句
do
{
要执行的代码;
}
while (条件);
数组
在 PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组(这里不讲)
数值数组
<?php
$test=array("V","B","T");
//运行结果为VBT
echo "I like " . $test[0] . ", " . $test[1] . " and " . $test[2] . ".";
//运行结果为3
echo count($test);
//运行结果为V 换行 B 换行 T换行
for($x=0;$x<count($test);$x++) //可以用一个变量来存储count($test)再使用
{
echo $test[$x];
echo "<br>";
}
?>
关联数组
<?php
$age=array("P"=>"40","B"=>"57","J"=>"70"); //相当于python的字典
echo "P is " . $age['P'] . " years old.";
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
SQL注入遇到的知识点
preg_quote函数
-
preg_quote() 函数用于转义正则表达式字符(使特殊字符失去意义,成为普通字符)。
-
语法
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote() 需要参数 str ,并向str中每个正则表达式语法中的特殊字符前增加一个反斜线。
正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - -
参数说明:
● $str: 输入字符串。
● $delimiter: 如果指定了可选参数 delimiter,它也会被转义(delimiter前加一个反斜线)。
● 返回值:返回转义后的字符串。
<?php
$words = '$ys f sd g/8';
$words = preg_quote($words, '/');
echo $words; //结果为\$ys f sd g\/8
echo preg_quote("//"); //个人感觉是preg_quote("//")之后是"",再转义输出
?>
preg_replace函数
- preg_replace()函数依靠正则表达式,用其他的字符串代换原来的字符串中的某些部分
- 语法
Preg_replace(mixed $pattern, mixed $replacement, mixed $subject [,int $limit = -1 [,int $count ]]);
● $pattern 可以是字符串,字符串数组,或者preg(正则表达式)
● $replace 是用于替换的字符串或字符串数组
● $subject 目标字符串或者目标字符串数组
● $ limit 每个模式在每个$subject上最大的替换次数,默认是-1(无限次)
● $count 返回在目标字符串所替换的次数
注解: mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。 - 人话语法
preg_replace (正则表达式, 用于替换其他字符串的字符串, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)
<?php
//在这个例子中,preg_quote($w) 用于保持星号原文涵义,使其不使用正则表达式中的特殊语义。
//在preg_replace使用preg_quote用法为" . preg_quote(字符串) . "
//下面将v换成斜体vs
$text = "T bo is *v* bad.";
$w = "*vs*";
$text = preg_replace ("/" . preg_quote($w) . "/",
"<i>" . $w . "</i>",
$text);
echo $text;
?>
addslashes函数
- addslashes() 函数返回在预定义字符之前添加反斜杠的字符串
- 预定义字符是:1.单引号(’) 2.双引号(")3,反斜杠(\)4.NULL
- 默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes()
<!DOCTYPE html>
<html>
<body>
//结果为Who\'s Bl aes?
<?php
$str = "Who's Bl aes?";
echo addslashes($str) ;
?>
</body>
</html>
get_magic_quotes_gpc函数
- 在PHP中get_magic_quotes_gpc()函数是内置的函数,这个函数的作用就是得到php.ini设置中magic_quotes_gpc选项的值。
- 当magic_quotes_gpc=On时,函数get_magic_quotes_gpc()就会返回1,则PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序(调用addslashes函数)。
- 当magic_quotes_gpc=On时,函数get_magic_quotes_gpc()就会返回0,则需要我们调用addslashes函数。
注意:在PHP6中删除了这个选项,一切的编程都需要在magic_quotes_gpc=Off下进行了。这样很危险!!!,因为当某天服务器需要更新到PHP6时,会导致你的程序不能正常工作或者被SQL注入。 - 可以不管magic_quotes_gpc是On还是Off,咱添加数据时都用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。
stripslashes函数
- stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
mysql_real_escape_string函数
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
● /x00
● /n
● /r
●/
● ’
● "
● /x1a - 与addslashes类似,但转义的字符不同,还有一些其他的区别(网上自寻)。
文件上传遇到的知识点
$_FILES变量
● $_FILES这个变量用与上传的文件参数设置,是一个多维数组
● 数组的用法就是 $_FILES[‘key1’][‘key2’]
● $_FILES[‘key1’]是你表单上传的文件信息数组。
//$_FILES['key1']包含了以下内容:
$_FILES['key1']['name'] 客户端文件的原名称。
$_FILES['key1']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['key1']['size'] 已上传文件的大小,单位为字节。
$_FILES['key1']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
$_FILES['key1']['error'] 该文件上传相关的错误代码。
file_exists函数
- file_exists(参数) 函数检查文件或目录(文件夹)是否存在。参数为待检查的文件或者目录。
move_uploaded_file函数
- move_uploaded_file() 函数将上传的文件移动到新位置。
- 格式:move_uploaded_file(file,newloc)。其中file规定要移动的文件,newloc规定文件的新位置。
- 注意:newloc包含目录/文件名(这个文件名就是移动文件的新名字了)!!!这个函数会递归删除文件名最后的
/.
。
<?php
move_uploaded_file("test.txt","C:\Users\admin\Desktop\s.html\.");
?>
//下面为真实使用
<?php
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
?>
trim函数
- trim() 函数移除字符串两侧的空白字符或其他预定义字符。
//是移除两侧!
<?php
$str = "Hello World!";
echo $str . "<br>";
echo trim($str,"Hed!");//结果为llo Worl
?>
<?php
$str = "Hello World!";
echo $str . "<br>";
echo trim($str); //结果为Hello World!
?>
deldot函数
- deldot(参数)函数删除参数末尾所有的点,参数为文件名。
strrchr函数
- strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
<?php
echo strrchr("I love you!","you"); //结果为you!
?>
strtolower函数
- strtolower() 函数把字符串转换为小写。
<?php
echo strtolower("Hello WORLD."); //结果为hello world.
?>
str_ireplace函数
- str_ireplace() 函数替换字符串中的一些字符(不区分大小写)。
<?php
echo str_ireplace("WORLD","LIN","Hello world!"); //结果为Hello LIN
?>
in_array函数
- in_array() 函数搜索数组中是否存在指定的值。
- 格式:in_array(指定的值,数组名) 。
substr函数
- substr() 函数返回字符串的一部分
- 格式:substr(string,start,length),其中start规定在字符串的何处开始(字符串下标从0开始);length规定被返回字符串的长度。默认是直到字符串的结尾。
<?php
echo substr("Hello world",6); //结果为 world
?>
strrpos函数
- strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置
- 格式:strrpos(string,find,start),其中string(必需)规定被搜索的字符串;find(必需)规定要查找的字符。start (可选)规定开始搜索的位置。
<?php
echo strrpos("Hello world!","wo"); //6 下标从0开始
?>
getimagesize函数
- getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
<?php
$remote_png_url = 'http://www.runoob.com/wp-content/themes/w3cschool.cc/assets/img/logo-domain-green2.png';
$img_data = getimagesize($remote_png_url);
print_r($img_data );
?>
结果为:
Array
(
[0] => 290
[1] => 69
[2] => 3
[3] => width="290" height="69"
[bits] => 8
[mime] => image/png
)
索引 0 给出的是图像宽度的像素值
索引 1 给出的是图像高度的像素值
索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 <image> 标签
索引 bits 给出的是图像的每种颜色的位数,二进制格式
索引 channels 给出的是图像的通道值,RGB 图像默认是 3
索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如: header("Content-type: image/jpeg");
注:来自https://www.runoob.com/php/php-getimagesize.html
image_type_to_extension函数
- image_type_to_extension 根据指定的图像类型(getimagesize函数的索引2)返回对应的后缀名。
<?php
$remote_png_url = 'http://www.runoob.com/wp-content/themes/w3cschool.cc/assets/img/logo-domain-green2.png';
$img_data = getimagesize($remote_png_url);
print_r(image_type_to_extension($img_data[2] ); //结果为png
?>
exif_imagetype函数
- exif_imagetype是PHP中的内置函数,用于确定图像的类型。
- int exif_imagetype(文件名),其返回值为下列中对应的数值:
IMAGETYPE_GIF(1)
IMAGETYPE_JPEG(2)
IMAGETYPE_PNG(3)
IMAGETYPE_SWF(4)
IMAGETYPE_PSD(5)
IMAGETYPE_BMP(6)
IMAGETYPE_TIFF_II(7)
IMAGETYPE_TIFF_MM(8)
IMAGETYPE_JPC(9)
IMAGETYPE_JP2(10)
IMAGETYPE_JPX(11)
IMAGETYPE_JB2(12)
IMAGETYPE_SWC(13)
IMAGETYPE_IFF(14)
IMAGETYPE_WBMP(15)
IMAGETYPE_XBM(16)
IMAGETYPE_ICO(17)
IMAGETYPE_WEBP(18)
<?php
if (exif_imagetype("image.gif") != IMAGETYPE_GIF) {
echo "The picture is not a gif";
}
?>
imagecreatefrom 系列函数
- imagecreatefrom 系列函数用于从文件(文件路径也行)或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。
- imagecreatefromgif():创建一块画布,并从 GIF 文件(文件路径也行)或 URL 地址载入一副图像。
- imagecreatefromjpeg():创建一块画布,并从 JPEG 文件(文件路径也行)或 URL 地址载入一副图像。
- imagecreatefrompng():创建一块画布,并从 PNG 文件(文件路径也行)或 URL 地址载入一副图像。
unlink函数
- unlink() 函数删除文件。若成功,则返回 true,失败则返回 false。
- 格式:unlink(filename,context),其中filename (必需)规定要删除的文件。
context(可选)规定文件句柄的环境。
输出图像函数
- imagegif():以 GIF 格式将图像输出到浏览器或文件(文件路径也行)
- imagejpeg():以 JPEG 格式将图像输出到浏览器或文件(文件路径也行)
- imagepng():以 PNG 格式将图像输出到浏览器或文件(文件路径也行)
个人理解
- 参数为文件的,给个文件路径应该都是可以的。毕竟文件路径也包含文件。但move_uploaded_file的文件参数,可能就真的只是文件名,因为只针对于上传文件。
引号问题
PHP
- 单引号里的内容,基本上都直接输出。双引号里的内容,可能会进行解析。
- 在单引号串中甚至连反斜杠也失去了它的含义(除了插入反斜杠\和插入单引号’)。所以,当你想在字串中进行变量代换和包含\n(换行符)等转义序列时,应该使用双引号。
<?php
echo 's\' s\\ s\n'; //结果为s' s\ s\n
$a = 123; //结果为$a123
echo '$a';
echo "$a"
echo "\n"; //在php是换行,但在html中仅仅只是个空格而已
$a = 5;
echo '$a'."$a\n";; //在html中的输出为$a5换行
//?test=iu
echo '$a'.$_GET['test']; //输出结果为$aiu,也就是说GET读进来的参数会自动的给予双引号。
?>
- 单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对单引号串的处理方式比较简单,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速度略慢。
- 单引号和双引号混用时,保证“对应匹配”就行。
HTML
- php代码一般为后端程序,通过获得参数以及输出等方法形成html页面返回给前端。
- php的引号的解析方式是与html无关的!
<?php
echo 1; //结果为1 换行 换行 2
echo '<br/>';
echo "<br/>";
echo 2;
?>
- 在html中单引号和双引号是没什么区别的。
- 单引号和双引号混用,但要保证“对应匹配”。("这种做法则是javascript的,而HTML的,则是用")
<html>
<body>
<input value="外双引号内双引号-错误" type="button" οnclick="alert("OK");" /><br />
<input value="外单引号内单引号-错误" type="button" οnclick='alert('OK');' /><br />
<input value="两个双引号-错误" type="button" οnclick="alert(""OK"");" /><br />
<input value="两个单引号-错误" type="button" οnclick="alert(''OK'');" /><br />
<input value="\+双引号-错误" type="button" οnclick="alert(\"OK\");" /><br />
<input value="\+单引号-错误" type="button" οnclick="alert(\'OK\');" /><br />
<input value="外双引号内单引号-OK" type="button" οnclick="alert('OK');" /><br />
<input value="外单引号内双引号-OK" type="button" οnclick='alert("OK");' /><br />
<input value="外部不使用引号-OK" type="button" οnclick=alert('OK'); /><br />
<input value="外部不使用引号-OK" type="button" οnclick=alert("OK"); /><br />
<input value = "HTML转义字符 "-ok" type = "button" οnclick="alert( "ok" );" />
</body>
</html>
NO. | 文字表記 | 10進表記 | 16進表記 | 文字 |
---|---|---|---|---|
001 | " | " | " | “”" |
002 | & | & | & | “&” |
003 | < | < | < | “<” |
004 | > | > | > | “>” |
005 | |   |   | " " |
JavaScript
- php的引号的解析方式是与js无关的!
- 在js中单引号和双引号是没什么区别的。
- 单引号和双引号混用,但要保证“对应匹配”。(与html差不多,但转义时用\来转)。
- 一般用+来进行字符串拼接。(html没有字符串拼接的说法,一般都在js中拼接。php以.进行拼接)