PHP知识总结

                       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 = GIF2 = JPG3 = PNG4 = SWF5 = PSD6 = BMP7 = TIFF(intel byte order)8 = TIFF(motorola byte order)9 = JPC10 = JP211 = JPX12 = JB213 = SWC14 = IFF15 = WBMP16 = 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的,则是用&quot;)
<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转义字符 &quot;-ok" type = "button" οnclick="alert( &quot;ok&quot; );" />

</body>
</html>
NO.文字表記10進表記16進表記文字
001&quot;&#34;&#x22;“”"
002&amp;&#38;&#x26;“&”
003&lt;&#60;&#x3C;“<”
004&gt;&#62;&#x3E;“>”
005&nbsp;&#160;&#xA0;" "

JavaScript

  • php的引号的解析方式是与js无关的!
  • 在js中单引号和双引号是没什么区别的。
  • 单引号和双引号混用,但要保证“对应匹配”。(与html差不多,但转义时用\来转)。
  • 一般用+来进行字符串拼接。(html没有字符串拼接的说法,一般都在js中拼接。php以.进行拼接)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值