您现在的位置是:首页 > 技术教程 正文

PHP note

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

目录

  • 一、基本概念
  • 二、语法
    • 1. 变量和常量
      • 规则
      • 变量作用域
      • 超级全局变量
      • 定义常量
    • 2. 数据类型比较
      • ① 类型
      • ② 比较
    • 3. 输出
    • 4. 函数
    • 5. 魔术常量
    • 6. 表单
    • 7. 文件
    • 8. Cookie
    • 9. Session
  • 三、数据库

注:需要有学习过其他编程语言的基础

一、基本概念

PHP(Hypertext Preprocessor) 超文本预处理器:
 通用开源脚本语言,在服务器上执行,结果以纯HTML形式返回给浏览器。PHP文件可包含文本、HTML、JavaScript和PHP代码。默认文件扩展名.php

二、语法

<?php // 每行代码以;结尾 echo "Hello World"; //echo输出 $a = "aaa"; ?>
  • 1
  • 2
  • 3
  • 4
  • 5

1. 变量和常量

弱类型语言,不必声明变量的数据类型

规则

$开头;
区分大小写;
不包含空格;
必须以字母或下划线开始
只能包含字母、数字和下划线

变量作用域

① local(局部作用域): 函数内部声明的变量为局部变量,仅在函数内部访问。
② global(全局作用域):在所有函数外部定义的变量,拥有全局作用域。
注:函数内部不可访问全局变量,外部不能访问局部变量,若想访问,在函数内使用global关键字。
③ static:当某个函数完成时,其所有变量通常都会被删除。若让某个局部变量不要被删除,函数内第一次声明该变量时,使用static关键字
④ parameter(参数作用域):参数是通过调用代码将值传递给函数的局部变量。

<?php $x=5; $y=10; function test(){ //定义函数 global $x,$y,$z; $z=$x+$y; } function Test(){ $GLOBALS['c']=$GLOBALS['a']+$GLOBALS['b']; } //和test一样 test(); Test(); echo $z,$c; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
<?php function add(){ static $x=0; echo $x; $x++; echo PHP_EOL; // 换行符 } //实现累加 function para($x){ echo $x; } add(); add(); add(); para(5); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

超级全局变量

  • $GLOBALS
    一个包含了全部变量的全局组合数组。变量的名字就是数组的键
<?php $x = 10; $y = 20; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • $_SERVER
    一个包含了诸如头信息(header)、路径(path)、和脚本位置(script locations)等等信息的数组。
// 查看数组内容 <?php foreach ($_SERVER as $key => $value) { echo $key.'
'
.$value.'
'
; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
函数名描述
$_SERVER['PHP_SELF']当前执行脚本的文件名,与document root有关。例如:在地址为http://example.com/test.php/foo.bar的脚本中使用$SERVER[‘PHP_SELF’] 将得到/test.php/foo.bar。_FILE常量包含当前文件的完整路径和文件名。从PHP 4.3.0版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用
$_SERVER[‘GATEWAY_INTERFACE’]服务器使用的CGI规范的版本;例如:“CGI/1.1”
$_SERVER[‘SERVER_ADDR’]当前运行脚本所在的服务器的 IP 地址
$_SERVER['SERVER_NAME']当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。
$_SERVER[‘SERVER_SOFTWARE’]服务器标识字符串,在响应请求时的头信息中给出。例如:Apache/2.2.24
$_SERVER[‘SERVER_PROTOCOL’]请求页面时通信协议的名称和版本。例如:“HTTP/1.0”
$_SERVER[‘REQUEST_METHOD’]访问页面使用的请求方法。例如:“GET”,“HEAD”,“POST”,“PUT”
$_SERVER[‘REQUEST_TIME’]请求开始时的时间戳,从 PHP 5.1.0 起可用。 例如:1377687496
$_SERVER[‘QUERY_STRING’]query string(查询字符串),如果有的话,通过它进行页面访问
$_SERVER[‘HTTP_ACCEPT’]当前请求头中(若存在)Accept项的内容
$_SERVER[‘HTTP_ACCEPT_CHARSET’]当前请求头中(若存在)Accept-Charset项的内容。例如:“iso-8859-1,*,utf-8”
$_SERVER['HTTP_HOST']当前请求头中(若存在)Host项的内容
$_SERVER['HTTP_REFERER']引导用户代理到当前页的前一页的地址(如果存在),由user agent设置决定。但不是所有的用户代理都会设置该项,有的还提供了修改HTTP_REFERER的功能。简言之,该值并不可信
$_SERVER['HTTP_USER_AGENT']获取客户端浏览器以及版本号。例如:Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
$_SERVER[‘HTTPS’]如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值
$_SERVER[‘REMOTE_ADDR’]浏览当前页面的用户的 IP 地址
$_SERVER[‘REMOTE_HOST’]浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的REMOTE_ADDR
$_SERVER[‘REMOTE_PORT’]用户机器上连接到 Web 服务器所使用的端口号
$_SERVER[‘SCRIPT_FILENAME’]当前执行脚本的绝对路径
$_SERVER[‘SERVER_ADMIN’]该值指明了Apache服务器配置文件中的SERVER_ADMIN参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值
$_SERVER[‘SERVER_PORT’]Web服务器使用的端口。默认值为 “80”。如果使用SSL安全连接,则这个值为用户设置的 HTTP 端口
$_SERVER[‘SERVER_SIGNATURE’]包含了服务器版本和虚拟主机名的字符串
$_SERVER[‘PATH_TRANSLATED’]当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果
$_SERVER['SCRIPT_NAME']包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE常量包含当前脚本的完整路径和文件名
$_SERVER[‘SCRIPT_URI’]URI用来指定要访问的页面。例如:“/index.html”
  • $_GET
    应用于收集表单数据,在HTML form标签的指定该属性:method=“get”
  • $_POST
    用于收集表单数据,在HTML form标签的指定该属性:method=“post”
<?php $a = $_POST['q']; $b = $_GET['q']; ?>
  • 1
  • 2
  • 3
  • 4

注:
虽然$_REQUEST可以接收GET/POST传值,但基于安全方面考虑,前端用GET/POST,后端也要用GET/POST

定义常量

设置常量,使用define函数,语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
参数:名字,值,大小写是否敏感(默认敏感,可不写)
常量默认是全局的

define("welcome", "Welcome to PHP world!")
  • 1

2. 数据类型比较

① 类型

  • String(字符串)
  • Integer(整型)
    整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)
  • Float(浮点型)
    浮点数是带小数部分的数字,或是指数形式
  • Boolean(布尔型)
    TRUE or FALSE
  • Array(数组)
    数值数组:带有数字 ID 键的数组
    关联数组:带有指定的键的数组,每个键关联一个值
    多维数组:包含一个或多个数组的数组
<?php $sky = array("cloud","sun","star","moon"); echo $sky[0]; $age = array("zhangsan" => 33, "lisi" => "22", "wangwu" => 14); echo age["lisi"]; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • Object(对象)
<?php class Flower { function what_color($color) { return $color; } } $color = new Flower(); echo $color->what_color("white"); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • NULL(空值)
  • Resource(资源类型)
    常见资源数据类型有打开文件、数据库连接、图形画布区域等。使用get_resource_type()函数可以返回资源类型

② 比较

松散比较:==,比较值,不比较类型
严格比较:===,比较值,也比较数据类型和顺序

3. 输出

  • echo
    无返回值,可以输出一个或多个字符串
<?php // 换行 echo PHP_EOL; echo "
"
; // 字符拼接 $t1 = "Hello"; $t2 = "World"; echo $t1." ".$t2; echo $t1," ",$t2; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • print
    返回1,只允许输出一个字符串
  • EOF(heredoc)
    一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
header("content-type:text/html;charset=utf-8"); //保持中文不乱码 <?php // 开始标记和结束标记相同,比如常用大写的EOT\EOD\EOF来表示 $variate = "bianliang" echo <<<EOF "e.g." $variate

标题

段落

EOF;
// 结束需要独立一行且前后不能空格 // 位于开始标记和结束标记之间的变量可以被正常解析,但是函数不可以 ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • print_r
    打印关于变量的易于理解的信息,如果变量数据类型是string、integer或float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素
  • var_dump
    此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值
    注:var_dump返回表达式的类型与值而print_r仅返回结果,调试代码使用var_dump更便于阅读。

4. 函数

<?php fuction add($a) { return $a + 1; } echo add(1); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 内置函数
    strlen() 返回字符串长度(字节数)
    strpos() 在字符串中查找一个字符或一段指定文本。若匹配,返回第一个匹配的位置;否则,返回FALSE
    count() 返回数组的长度(元素的数量)
    sort() 对数组进行升序排列
    rsort() 对数组进行降序排列
    asort() 根据关联数组的值,对数组进行升序排列
    ksort() 根据关联数组的键,对数组进行升序排列
    arsort() 根据关联数组的值,对数组进行降序排列
    krsort() 根据关联数组的键,对数组进行降序排列
    phpinfo() 显示PHP所有相关信息
    eval() 执行一个字符串表达式,返回表达式的值
    system() 用于执行操作系统命令
    explode() 将一个字符串根据指定分隔符拆分成数组
    end() 取数组的最后一个元素
  • 判断
<?php if (条件) { // if 条件成立时执行的代码; } elseif (条件) { // elseif 条件成立时执行的代码; } else { // 条件不成立时执行的代码; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
<?php switch (n) { case label1: // 如果 n=label1,此处代码将执行; break; case label2: // 如果 n=label2,此处代码将执行; break; default: // 如果 n 既不等于 label1 也不等于 label2,此处代码将执行; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 循环
<?php while (条件) { // 要执行的代码; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
<?php do { // 要执行的代码; } while (条件); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
<?php for (初始值; 条件; 增量) { // 要执行的代码; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
<?php // 遍历数组 $age = array("zhangsan" => 33, "lisi" => "22", "wangwu" => 14); asort($age); foreach($age as $x => $x_value) { echo "key=".$x", value=".$x_value."\n"; } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5. 魔术常量

  • __LINE__:返回当前行号的数字
  • __FILE__:返回当前文件的完整路径和文件名
  • __DIR__:返回当前文件所在的目录的路径
  • __FUNCTION__:返回当前函数的名称
  • __CLASS__:返回当前类的名称
  • __METHOD__:返回当前方法(函数)的名称

6. 表单

前端样式用HTML实现

$name=$_REQUEST['name'];
  • 1

直接用$_REQUEST 获取值会存在安全问题(xss)
加固:

$name=htmlspecialchars($_REQUEST['name']);
  • 1

7. 文件

  • 文件包含
    应用:当有大量的文件需要被引用的时候,开发出一个页面,处理调用多个页面的内容
<html> <head> <meta charset="utf-8"> </head> <body> <h1>Welcome</h1> <?php include 'open.php'; ?> </body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

open.php另写,用include\require均可
包含语句包含的文件,最终以主文件的格式打开
例:若包含文件为.txt文件,最终会以.php格式打开

  • 文件上传
<html> <head> <meta charset="utf-8"> </head> <body> <form action="#" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> <?php $file = $_FILES['file']; if (!empty($file)) { foreach($file as $k => $v){ echo $k.": ".$v."
"
; } } ?> </body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

isset和empty是两个常用的函数,用于检查变量是否已设置及是否为空
isset()检查变量是否已设置并且不为null
empty()检查变量是否为空,包括空字符串、空数组、false、0和null
注:如果变量未声明,isset()返回false,而empty()会发出一个警告并且返回true

8. Cookie

Cookie是网站服务器存储在用户计算机上的小型文本文件。当用户访问网站时,服务器会将Cookie发送到用户的浏览器,并在用户下次访问同一网站时读取Cookie(存储在客户端

  • setcookie()
<?php // 设置一个名为 "theme" 的Cookie,值为 "dark",有效期为一年,路径限制为当前目录下的子目录 setcookie("theme", "dark", time() + (365 * 24 * 60 * 60), "/subdirectory"); ?>
  • 1
  • 2
  • 3
  • 4

第一个参数是Cookie的名字
第二个参数是Cookie的值
第三个参数可选,Cookie的有效期,通过计算时间戳的方式设置
最后一个可选参数是Cookie的路径,用于限制Cookie的适用范围
注:setcookie()必须在任何输出到浏览器之前(即该段php代码写在html代码之前)调用,否则无法设置Cookie
在发送cookie时,cookie的值会自动进行URL编码,取回时自动解码。为防止URL编码,可使用setrawcookie()取而代之
将第三个参数(有效期)设置为过去时间(负数),即可删除cookie

  • $_COOKIE
    取回cookie的值,可用isset()判断是否设置cookie
<?php if (isset($_COOKIE["user"])) echo "欢迎 " . $_COOKIE["user"] . "!
"
; else echo "普通访客!
"
; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

9. Session

 Session是一种服务器端的数据存储技术,用于在不同的页面或请求之间共享数据。
 当用户访问一个使用Session的页面时,服务器会为该用户生成一个唯一的Session ID,并将该ID存储在服务器上。同时,服务器会创建一个与Session ID相关联的Session文件,用于保存用户的数据。
 用户在访问其他使用Session的页面时,浏览器会将Session ID发送到服务器,服务器通过Session ID找到对应的Session文件,并读取其中存储的数据,供页面使用。

<?php // 启动Session session_start(); // 存储数据到Session $_SESSION['username'] = 'John'; $_SESSION['age'] = 25; // 读取Session数据 echo "Username: " . $_SESSION['username'] . "
"
; echo "Age: " . $_SESSION['age'] . "
"
; // 清空Session session_unset(); // 销毁Session session_destroy(); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

三、数据库

PHP常用MySQL数据库,建议使用以下方法连接MySQL:

  • MySQLi
  • PDO
  1. MySQLi(面向过程)
<?php $servername = "localhost"; $username = "root"; $password = "root"; // 创建连接 $conn = mysqli_connect($servername, $username, $password); // 检测连接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "连接成功"; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. MySQLi(面向对象)
<?php $servername = "localhost"; $username = "root"; $password = "root"; $conn = new mysqli($servername, $username, $password); if ($conn -> connect_error) { die("Connection failed: " . mysqli_connect_error()); } echo "连接成功"; ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. PDO

connect_sql.php

<?php $servername = "mysql:host=localhost;dbname=dbname"; $username = "root"; $password = "root"; try { $conn = new PDO("mysql:host=$servername;", $username, $password); echo "连接成功"; } catch(PDOException $e) { echo $e->getMessage(); } ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
<head> <meta charset=utf-8> </head> <?php include("connect_sql.php"); $currentDB = $pdo->query('select database()')->fetchColumn(); echo 'Database is '.$currentDB.'
'
; // 先判断表是否存在,不存在创建表 $formName = 'test_injection'; $tableExists = $pdo->query("show tables like '$formName'")->rowCount() > 0; if ($tableExists) { echo "Table already exists.
"
; // 可用下面一行代码删除数据库 // $pdo->query("drop table $formName"); } else { echo "No Table
"
; $createForm = "CREATE TABLE IF NOT EXISTS `$formName`( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(10) NOT NULL, `telephone` VARCHAR(50) NOT NULL )ENGINE=InnoDB DEFAULT CHARSET=utf8;"; $createResult = $pdo->exec($createForm); var_dump($createResult); if ($createResult) { echo 'create '.$formName.' successfully
'
; } else echo 'Failed to create
'
; } $name=$_POST['name']; $telephone=$_POST['telephone']; // 判断传参的值是否为空,表中添加数据 if (!empty($name) && !empty($telephone)) { $insertSql = "insert into $formName(name, telephone) values ('$name', $telephone)"; echo $insertSql; $insertResult = $pdo->exec($insertSql); } // 展示表内数据 $tableData = $pdo->query("select * from $formName"); foreach($tableData->fetchAll(PDO::FETCH_ASSOC) as $row) { foreach($row as $k => $v) { echo $k.": ".$v.", "; } echo "
"
; } ?> <form action="" method="post" enctype="multipart/form-data" > Name: <input type="text" name="name" > <br> Telephone: <input type="text" name="telephone" > <br> <input type="submit" value="submit"> </form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索