PHP学习笔记(三)
多维数组
一个数组中的值可以是另一个数组,此数组的值也可以是一个数组,照此,可以创建二维或者三维数组
<?php
$arr1=array(
$arrch1=array('1','2','3'),
$arrch2=array('1','2','3'),
$arrch3=array('1','2','3')
);
print_r($arr1);//print_r array,将会按照一定格式显示键和元素
?>
输出结果:
Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [1] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [2] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
日期
date() 函数用于格式化时间/日期
string date ( string $format [, int $timestamp ] )
参数 | 描述 |
---|---|
format | 必需。规定时间戳的格式 |
timestamp | 必需。规定时间戳的格式 |
<?php
echo date("y/m/d",strtotime("2012-5-6"))."<br />";//strtotime为获取时间戳
echo date("y-m-d")."<br />";//默认为当前时间戳 time()
?>
输出结果
19/05/06
19-06-02
文件
打开文件
file_exists()
检查文件和目录是否存在,返回布尔值
fopen()
第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件
无法打开文件则返回false
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始 |
r+ | 读/写。在文件的开头开始 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件 |
a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容 |
x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误 |
x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误 |
关闭文件
fclose()
<?php
$file = fopen("test.txt","r")
fclose($file);
?>
文件操作
函数 | 说明 |
---|---|
fgets() | 函数用于从文件中逐行读取文件,在调用该函数之后,文件指针会移动到下一行 |
getc() | 函数用于从文件中逐字符地读取文件,在调用该函数之后,文件指针会移动到下一个字符 |
feof() | 函数检测是否已到达文件末尾(EOF),写状态下不可用 |
fwrite()/fput() | 写入文件,可选length参数,出现错误返回false |
<?php
$filename="test.txt";
if(file_exists($filename)){
$file=fopen($filename,'r+');
if($file){
fwrite($file,"Hello World",5);
}else{
echo "文件无法打开";
}
}else{
echo "文件不存在";
}
?>
test.txt内容:Hello
文件上传
前端代码
1.form的enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 “multipart/form-data”
2.input 标签的 type=“file” 属性规定了应该把输入作为文件来处理
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label>文件名:</label>
<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html
后端代码
1.创建上传脚本
全局数组 $_FILES,第一个参数是表单的 input name,第二个下标
全局数组 | 含义 |
---|---|
$_FILES[“file”][“name”] | 上传文件的名称 |
$_FILES[“file”][“type”] | 上传文件的类型 |
$_FILES[“file”][“size”] | 上传文件的大小,以字节计 |
$_FILES[“file”][“tmp_name”] | 存储在服务器的文件的临时副本的名称 |
$_FILES[“file”][“error”] | 由文件上传导致的错误代码 |
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"];
}
2.上传限制
用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB
$allowedExts = array("gif", "jpeg", "jpg", "png");//设置允许上传的扩展名
$temp = explode(".", $_FILES["file"]["name"]);//explode()将字符串分解成数组
$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) // 判断文件大小
&& in_array($extension, $allowedExts)) //判断拆分的字符串能不能在允许的字符串中找到
{
/*上传代码*/
}
else
{
echo "非法的文件格式";
}
3.保存上传文件
服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本,这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置
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"];
}
完整代码
<?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"] . "<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 "非法的文件格式";
}
?>
文件上传错误码
值 | 错误 | 错误原因 |
---|---|---|
0 | UPLOAD_ERR_OK | 没有错误发生,文件上传成功 |
1 | UPLOAD_ERR_INI_SIZE | 上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值 |
2 | UPLOAD_ERR_FORM_SIZE | 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值 |
3 | UPLOAD_ERR_PARTIAL | 文件只有部分被上传 |
4 | UPLOAD_ERR_NO_FILE | 没有文件被上传 |
6 | UPLOAD_ERR_NO_TMP_DIR | 找不到临时文件夹 |
7 | UPLOAD_ERR_CANT_WRITE | 文件写入失败 |
Cookie
创建Cookie
setcookie(name, value, expire, path, domain);
setcookie() 函数必须位于 标签之前
<?php
$expire=time()+60*60*24;//设置过期时间1天
setcookie("name", "bob", $expire);
?>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
if(isset($_COOKIE["name"])){
echo "欢迎 " . $_COOKIE["name"] . "!<br>";
// 查看所有 cookie
print_r($_COOKIE);
}
else
echo "普通访客!<br>";
?>
</body>
</html>
输出结果
欢迎 bob!
Array ([name] => bob )
删除Cookie
将时间设置过期
<?php
setcookie("name", "", time()-60);
?>
Session
1.工作机制:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导
2.会话信息是临时的,在用户离开网站后将被删除
创建 Session
session_start()
session_start() 函数必须位于 标签之前
储存 Session
键值对形式存储
$_SESSION[‘key’]=value
销毁 Session
销毁指定键
unset()
销毁所有Session
session_destroy()
电子邮件
需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义
mail(to,subject,message,headers,parameters)
参数 | 描述 |
---|---|
to | 必需。规定 email 接收者 |
subject | 必需。规定 email 的主题 |
message | 必需。定义要发送的消息 |
headers | 可选。规定附加的标题 |
parameters | 可选。对邮件发送程序规定额外的参数 |
JSON
json_encode
json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE
string json_encode ( $value [, $options = 0 ] )
参数 | 含义 |
---|---|
value | 要编码的值。该函数只对 UTF-8 编码的数据有效 |
options | 由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT |
<?php
$arr = array('a'=>1,'b'=>2,'c'=>3);
echo json_encode($arr)."<br />";
class person{
public $name;
public $age;
public $sex;
public function __construct($name,$age,$sex){
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
}
$p=new person("bob",18,"man");
echo json_encode($p);
?>
输出结果
{"a":1,"b":2,"c":3}
{"name":"bob","age":18,"sex":"man"}
json_decode
json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量
json_decode ( $ json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数 | 含义 |
---|---|
json_string | 待解码的 JSON 字符串,必须是 UTF-8 编码数 |
assoc | 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象 |
depth | 整数类型的参数,它指定递归深 |
options | 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING |
<?php
$json = '{"a":1,"b":2,"c":3}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
输出结果
object(stdClass)[1]
public 'a' => int 1
public 'b' => int 2
public 'c' => int 3
array (size=3)
'a' => int 1
'b' => int 2
'c' => int 3