PHP极速入门

前言

本人有python和Java的语言基础,本篇学习笔记也是针对我个人情况来写的,其中语言相似部分都忽略了。和我有同样基础的能够参考本篇博客极速入门PHP。其中多处代码来源于菜鸟教程,大家也可选择到菜鸟教程学习。

一. PHP概述

php是超文本预处理器的简称,是一种被广泛应用的开源通用的服务器端脚本语言,适用于Web开发并可嵌入HTML中。

二. PHP运算符

.:并置连接符,可以连接两个字符串。

1. 比较运算符

xy 等于
x
=y 绝对等于 x与y相等,且类型相同。

2. 逻辑运算符

除and,or,&& ,||外,还有
x xor y ,异或 ,如果 x 和 y 有且仅有一个为 true,则返回 true

3. 数组运算符

x == y (相等)——如果 x 和 y 具有相同的键/值对,则返回 true
x === y(恒等)——如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x <> y(不相等)——如果 x 不等于 y,则返回 true

4. 组合比较符

又称太空船操作符
$c = $a <=> $b;
解析如下
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。

三. 条件语句

  • if 语句 - 在条件成立时执行代码
  • if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if…elseif…else 语句 - 在若干条件之一成立时执行一个代码块
  • switch 语句 - 在若干条件之一成立时执行一个代码块

四. 数组

$cars=array(“Volvo”,“BMW”,“Toyota”);
$cars[0]=“Volvo”;
$cars[1]=“BMW”;
$cars[2]=“Toyota”;

获取长度:count(cars)
遍历数组:

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    
    
    echo $cars[$x];
    echo "<br>";
}
?>

1. 关联数组

自定义key-value值

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

等同于

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

遍历:

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    
    
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

2. 数组排序

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排
<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
?>

五. 循环

  • while - 只要指定的条件成立,则循环执行代码块
  • do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块
foreach ($array as $value)
{
    
    
    要执行代码;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

foreach ($array as $key => $value)
{
    
    
    要执行代码;
}

每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。

六. 函数

数组函数库

七. 表单提交

html通过form表单,将用户输入的数据传入welcome.php页面
php页面可得到数据,并将其打印出来。
要带上请求类型

欢迎<?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?>  岁。

八. 多维数组

1. 二维数组

形式一:

<?php
// 二维数组:
$cars = array
(
    array("Volvo",100,96),
    array("BMW",60,59),
    array("Toyota",110,100)
);
echo $cars['0'][0
?>

打印结果为Volvo

形式二:

<?php
$sites = array
(
    "runoob"=>array
    (
        "菜鸟教程",
        "http://www.runoob.com"
    ),
    "google"=>array
    (
        "Google 搜索",
        "http://www.google.com"
    ),
    "taobao"=>array
    (
        "淘宝",
        "http://www.taobao.com"
    )
);
echo $sites['runoob'][0] . '地址为:' . $sites['runoob'][1]
?>

打印结果为:
菜鸟教程地址为:http://www.runoob.com

2.三维数组

<?php
// 创建三维数组
$myarray = array(
    array(
        array(1, 2),
        array(3, 4),
    ),
    array(
        array(5, 6),
        array(7, 8),
    ),
);
     
// 输出数组信息
print_r($myarray);
?>

更多维数组以此类推

九. 包含文件

执行包含文件语句,是其他文件代码执行到当前代码中来,通常解决部分标准的页头页脚等有共同部分的修改繁琐问题。

include和require
两者在处理执行错误时的方法不一样,执行成功的效果相同。

  • require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
  • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

语法 :

<?php include 'header.php'; ?>

十. 文件处理

1. 打开文件

$file=fopen("welcome.txt","r");
$file=fopen("welcome.txt","r") or exit("Unable to open file!");

r 只读。在文件的开头开始。
r+ 读/写。在文件的开头开始。
w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。
a+ 读/追加。通过向文件末尾写内容,来保持文件内容。
x 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

2. 关闭文件

fclose($file);

3. 判断遍历到末尾

if (feof($file)) echo "已经到达文件结尾";

逐行读取:

<?php
$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
    
    
    echo fgets($file). "<br>";
}
fclose($file);
?>

逐字符读取:

<?php
$file=fopen("welcome.txt","r") or exit("无法打开文件!");
while (!feof($file))
{
    
    
    echo fgetc($file);
}
fclose($file);
?>

十一. 文件上传漏洞

允许用户上传文件是一个巨大的安全风险。对于普通用户要慎重使用本功能。

案例:

1.表单上传

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<form action="upload_file.php" 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>

</body>
</html>

enctype 属性规定了在提交表单时要使用哪种内容类型
multipart/form-data表示二进制
type=“file” 属性规定了应该把输入作为文件来处理

2.上传结果

<?php
if ($_FILES["file"]["error"] > 0)
{
    
    
	echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
    
    
	echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
	echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
	echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
	echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?

3.上传限制

限制文件大小、类型等

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);        // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
&& in_array($extension, $allowedExts))
{
    
    
	if ($_FILES["file"]["error"] > 0)
	{
    
    
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
    
    
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
	}
}
else
{
    
    
	echo "非法的文件格式";
}
?>

4.保存上传文件

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
    
    
	if ($_FILES["file"]["error"] > 0)
	{
    
    
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
    
    
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
		
		// 判断当前目录下的 upload 目录是否存在该文件
		// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
		if (file_exists("upload/" . $_FILES["file"]["name"]))
		{
    
    
			echo $_FILES["file"]["name"] . " 文件已经存在。 ";
		}
		else
		{
    
    
			// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
			move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
			echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
		}
	}
}
else
{
    
    
	echo "非法的文件格式";
}

十二. cookie

1. 创建cookie

语法:

setcookie(name, value, expire, path, domain);

一般情况下只需要使用前三个参数

<?php
setcookie("user", "runoob", time()+3600);
?>

依次是cookie的名称,内容,过期时间。

2. 取cookie

<?php
// 输出 cookie 值
echo $_COOKIE["user"];

// 查看所有 cookie
print_r($_COOKIE);
?>

3. 删除cookie

<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>

十三. session

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

1. 创建 session

<?php
session_start();
// 存储 session 数据
$_SESSION['views']=1;
?>

2. 取出session

<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>

3. 销毁session

可以使用 unset() 或 session_destroy() 函数。

  • unset() 函数用于释放指定的 session 变量
  • session_destroy() 函数彻底销毁 session
unset($_SESSION['views'])
session_destroy();

十四. Email

存在邮箱注入风险。

<?php
$to = "[email protected]";         // 邮件接收者
$subject = "参数邮件";                // 邮件标题
$message = "Hello! 这是邮件的内容。";  // 邮件正文
$from = "[email protected]";   // 邮件发送者
$headers = "From:" . $from;         // 头部信息设置
mail($to,$subject,$message,$headers);
echo "邮件已发送";
?>

十五. 错误处理方法

处理程序错误

1. die()

<?php
if(!file_exists("welcome.txt"))
{
    
    
    die("文件不存在");
}
else
{
    
    
    $file=fopen("welcome.txt","r");
}
?>

2. 错误处理器

<?php
// 错误处理函数
function customError($errno, $errstr)
{
    
    
    echo "<b>Error:</b> [$errno] $errstr";
}

// 设置错误处理函数
set_error_handler("customError");

// 触发错误
echo($test);
?>

3. 触发错误

当用户的输入无效时触发错误是很有用的。

<?php
$test=2;
if ($test>1)
{
    
    
    trigger_error("变量值必须小于等于 1");
}
?>

4. 异常处理

每个 throw 必须对应一个 catch

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
    
    
    if($number>1)
    {
    
    
        throw new Exception("变量值必须小于等于 1");
    }
        return true;
}
    
// 在 try 块 触发异常
try
{
    
    
    checkNum(2);
    // 如果抛出异常,以下文本不会输出
    echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
    
    
    echo 'Message: ' .$e->getMessage();
}
?>

5. 顶层异常处理器

<?php
function myException($exception)
{
    
    
    echo "<b>Exception:</b> " , $exception->getMessage();
}
 
set_exception_handler('myException');
 
throw new Exception('Uncaught Exception occurred');
?>

在上面的代码中,不存在 “catch” 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。

十六. 过滤器

通过使用过滤器,确保应用程序获得正确的输入类型。
输入过滤是最重要的应用程序安全课题之一。
Validating 过滤器:对格式和类型过滤。
Sanitizing 过滤器:对字符过滤。
如需过滤变量,请使用下面的过滤器函数之一:

filter_var() - 通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input - 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

十七. JSON

son_encode 对变量进行 JSON 编码
json_decode 对 JSON 格式的字符串进行解码,转换为 PHP 变量
json_last_error 返回最后发生的错误

<?php
   $arr = array('runoob' => '菜鸟教程', 'taobao' => '淘宝网');
   echo json_encode($arr); // 编码中文
   echo PHP_EOL;  // 换行符
   echo json_encode($arr, JSON_UNESCAPED_UNICODE);  // 不编码中文
?>
<?php
   $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

   var_dump(json_decode($json));
   var_dump(json_decode($json, true));
?>

十八. 连接mysql

1. PDO 连接

需要安装PDO

<?php
$servername = "localhost";
$username = "username";
$password = "password";
 
try {
    
    
    $conn = new PDO("mysql:host=$servername;", $username, $password);
    echo "连接成功"; 
}
catch(PDOException $e)
{
    
    
    echo $e->getMessage();
}
?>

2. MySQLi连接

MySQLi 安装

<?php
$servername = "localhost";
$username = "username";
$password = "password";
 
// 创建连接
$conn = new mysqli($servername, $username, $password);
 
// 检测连接
if ($conn->connect_error) {
    
    
    die("连接失败: " . $conn->connect_error);
} 
echo "连接成功";
?>

3. 执行sql语句

$conn=odbc_connect('northwind','','');
if (!$conn)
{
    
    
    exit("连接失败: " . $conn);
}

$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
......

odbc_close($conn)

猜你喜欢

转载自blog.csdn.net/Tom197/article/details/125694173
今日推荐