文章目录
文件包含
require
直接在代码里演示一下它是怎么包含的,我们先定义一个关联数组:
t1.php
<?php
$conn = array(
'host' => 'localhost',
'mysql' => 'localhost',
'port' => 3306,
'database' => 'testdb'
);
现在用require包含一下这个文件中port的值:
t2.php
<?php
echo "www.x.com<br>";
require "t1.php";
$host = $conn["port"];
echo "$host";
成功包含:
include
代码我们不换,把require换成include试一下:
<?php
echo "www.x.com<br>";
include "t1.php";
$host = $conn["port"];
echo "$host";
一样可以包含出来:
include跟require的区别就是,使用include时,当程序中间代码出错后,后面的代码依然会执行,require就不会执行后续的代码:
<?php
echo "www.x.com<br>";
include "t7.php";
$host = $conn["port"];
echo 1;
echo "$host";
<?php
echo "www.x.com<br>";
require "t7.php";
$host = $conn["port"];
echo 1;
echo "$host";
文档是这么说的:
文件上传
先构造一个上传页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="file.php" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="上传">
</form>
</body>
</html>
构造一个接收页面:
<meta charset="utf-8">
<?php
if (empty($_FILES)){
echo "<script>alert('上传格式不正确!')</script>";
}else{
echo $_FILES["pic"]["size"].'<br>';
echo $_FILES["pic"]["tmp_name"];
}
上传:
查看返回页面:
现在我们的上传并不完整,因为并没有获取到文件,要想完整的实现上传,要用到一个函数move_uploaded_file(),先来看一下这个函数:
dir_name
这里涉及到路径,先来一个函数dirname()
这个函数的功能就是返回上级目录的路径:
<?php
echo dirname(__DIR__);
这里先实现一个目录创建的操作,目录名随时间的变化而变化:
<meta charset="utf-8">
<?php
define("PATH",dirname(__DIR__));
$path = PATH."/upload/img";
date_default_timezone_set('UTC');
$dir1 = date("Ym");
$dir2 = date("d");
$fullpath = $path.'/'.$dir1.'/'.$dir2;
if (is_dir($fullpath))
{
echo "yes";
}else{
// echo "no";
mkdir($fullpath,0777,true);
}
实现文件上传
这个文件上传只是走个流程,中间没有加任何验证,过滤什么的:
update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="pic.php" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="上传">
</form>
</body>
</html>
pic.php
<meta charset="utf-8">
<?php
# 如果传过来的文件的大小等于0
if ($_FILES["pic"]["size"] === 0){
# 弹出请上传文件并返回之前的页面
echo "<script>alert('请上传文件!');location.href='".$_SERVER["HTTP_REFERER"]."';</script>";
}else {
# 定义常量PATH,常量的值为当前目录的上级目录
define("PATH", dirname(__DIR__));
# 构造新的路径
$path = PATH . "/upload/img";
# 设置默认时区
date_default_timezone_set('UTC');
# 设置文件夹日期以年月日命名
$dir1 = date("Ym");
$dir2 = date("d");
# 生成新的文件路径赋值给fullpath
$fullpath = $path . '/' . $dir1 . '/' . $dir2;
# 如果fullpath是一个文件
if (is_dir($fullpath)) {
# 弹出上传成功并跳回上传页面
echo "<script>alert('上传成功!');location.href='".$_SERVER["HTTP_REFERER"]."'</script>";
# 否则生成以fullpath命名的文件夹
} else {
mkdir($fullpath, 0777, true);
}
# 随机命名文件名
$filename = rand(10000,99999);
# 用strrchr()函数获取上传文件的后缀名,赋值给filetype
$filetype = strrchr($_FILES["pic"]["name"],'.');
# 重新命名文件名为:随机数字+固定文件后缀
$filename = $filename.$filetype;
# 将上传的文件上传到指定的文件夹中,并重新命名
move_uploaded_file($_FILES["pic"]["tmp_name"],$fullpath.'/'.$filename);
}
文件管理的基本函数
realpath()
返回绝对路径,我们来试一下:
<?php
echo realpath('.').'<br>';
echo realpath('../').'<br>';
echo realpath('../../').'<br>';
运行结果:
opdir()和readdir()
opendir()打开目录句柄,readdir()是读取句柄中的目录:
<?php
$filenames = opendir('.');
while ($row = readdir($filenames)){
echo $row.'<br>';
}
运行结果:
is_dir()
判断给定文件是否是一个目录:
<?php
if (is_dir("pic.php"))
{
echo 'yes';
}else{
echo 'no';
}
运行结果:
unlink()
删除文件
<meta charset="utf-8">
<?php
# 此时文件夹中的aaa.txt会被删除
unlink("aaa.txt");
file_get_contents()和file_put_contents()
这两个函数,get是把整个文件内容处理成一个字符串,而put是将一串字符串写入文件,我们来实现一下:
<meta charset="utf-8">
<?php
$str1 = file_get_contents("session1.php");
var_dump($str1);
file_put_contents("session1.php","<?php phpinfo();?>");
var_dump($str1);
?>
运行结果: