0828作业
<!-- 创建一个文件上传表单 -->
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST" enctype="multipart/form-data">
<!-- 用隐藏域设置允许上传的文件大小,仅考参考 -->
<input type="hidden" name="MAX_FILE_SIZE" value="542488">
<fieldset>
<legend align="center">文件上传</legend>
<p><strong>选择文件:</strong><input type="file" name="upload"></p>
</fieldset>
<p align="center"><button type="submit" name="submit" >上传</button></p>
</form>
<?php
//检测请求类型是否POST,如果不是应该提示用户类型不对
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
//检测是否有文件被上传,在php目录下面创建一个upload目录文件
if (isset($_FILES['upload']))
{
//设置允许上传的文件类型
$allow = ['image/jpg', 'image/jpeg', 'image/png'];
//in_array() 函数搜索数组中是否存在指定的值,全局数组 $_FILES,
if (in_array($_FILES['upload']['type'], $allow))
{
// $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$tmpFile=$_FILES['upload']['tmp_name'];//临时文件
$destFile=$_FILES['upload']['name'];//目标文件
//move_uploaded_file() 函数将上传的文件移动到新位置/临时目录。
//move_uploaded_file(file,newloc)file必需,规定要移动的文件。newloc必需,规定文件的新位置。
if (move_uploaded_file( $tmpFile, "upload/$destFile"))
{
//上传成功
echo "<script>alert('文件上传成功')</script>";
}
}
else {
//提示格式不对
echo "<script>alert('仅允许上传jpg和png格式的图片')</script>";
}
}
//对上传错误进行处理
if ($_FILES['upload']['error'] > 0) {
echo '<p>错误原因是:<strong>';
switch ($_FILES['upload']['error']) {
case 1:
echo '文件超过了php.ini配置中设置的大小';
break;
case 2:
echo '文件超过了表单中常量设置的大小';
break;
case 3:
echo '仅有部分文件被上传';
break;
case 4:
echo '没有文件被上传';
break;
case 6:
echo '没有可用的临时文件夹';
break;
case 7:
echo '磁盘已满,写入失败';
break;
case 8:
echo '上传意外中止';
break;
default:
echo '系统未知错误';
break;
}
echo '</strong></p>';
//保险起见,最好把创建的临时文件删除,当然系统也会在结束会话时自动清空
//file_exists() 函数检查文件或目录是否存在。file_exists(path) path检查的路径。
//is_file() 函数检查指定的文件名是否是正常的文件
if (file_exists($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name']))
{ //unlink() 函数删除文件。
unlink($_FILES['upload']['tmp_name']);
}
}
}
else
{
echo '1';
}
?>点击 "运行实例" 按钮查看在线实例


<?php
echo '<h2>目录遍历操作: </h2>';
echo '<h4>方法1: 传统目录函数opendir(),readdir(),closedir()</h4>';
echo '<h6>(1)传统目录遍历切换到与当前父目录同级的目录</h6>';
// 1.opendir('目录')打开目录,成功返回资源,失败返回false
$dir = opendir('../static') or die('打开失败');
//2.readdir($dir)读取目录内容,成功返回文件名,失败返回false
while (false != ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
print $file."<br>";
}
}
//3.closedir($dir)关闭当前目录
closedir($dir);
echo '<hr>';
echo '<h6>(2)传统目录遍历打开到当前目录</h6>';
// 1.opendir('目录')打开目录,成功返回资源,失败返回false
$dir=opendir("./") or die('打开失败');//.或./当前目录
//2.readdir($dir)读取目录成功且文件不为.或..时,输出$file
while(false !=($file=readdir())){
if($file!="."&&$file!="..") {
print $file.'<br>';
}
}
//3.closedir($dir)关闭当前目录
closedir($dir);
echo '<hr>';
//第二种方式:将目录内容保存到数组中进行遍历
echo '<h4>方法2:目录扫描器: scandir()</h4>';
echo '<h6>(1)目录扫描器遍历切换到与当前父目录同级的目录</h6>';
//1.读到一个目录内容到数组中:
$fileArr = scandir('../static/');
// print_r($fileArr);
//2.遍历目录数组
foreach ($fileArr as $file) {
if ($file != "." && $file != "..") {
echo "$file.<br>";
}
}
echo '<h6>(2)目录扫描器遍历打开到当前目录</h6>';
$fileArr=scandir(".");
foreach($fileArr as $file){
if($file!="."&&$file!=".."){
print $file.'<br>';
}
}点击 "运行实例" 按钮查看在线实例

总结:其实我不知道总结是啥,我要写点儿什么?是要写我对代码的理解还是哪里掌握的不好要反馈!!!
以下是我对文件上传的个人理解步骤:
1.首先需要建一个文件上传表单
2.检测用户类型,其实就是使用post来获取表单内容,因为表单使用的method="POST"
,所以需要使用post来获取表单内容,并且post所能够传输的数据量较大
3.我们要上传文件,需要先创建一个保存文件的临时目录upload,$_FILES是一个超全局文件数组,所以每上传一个文件,$_FILES就会有其相关的信息,文件名,文件类型,等等,通过isset检测文件能否被上传,如果可以再对文件类型进行设置,从而将我要上传的文件移动到我创建的目录里面
4对于move_uploaded_file($_FILES['upload']['tmp_name'], "upload/{$_FILES['upload']['name']}"的理解
$_FILES['upload']['tmp_name']就是我要上传的临时文件,$_FILES['upload']['name']目标文件:其实就是要上传的文件名,所以每次上传成功的文件名会不一样,是根据$_FILES里面的name的而变化
"upload/{$_FILES['upload']['name'] 文件的新位置,就是在自己创建的临时目录upload下面的一个文件名,也就是我要上传文件所需要移动的新位置
move_uploaded_file() 函数将上传的文件移动到新位置/临时目录
5.文件上传成功或者不成功,以及不成功的原因进行判断
6.对上传错误进行处理_FILES['upload']['error']再使用switch()进行判断
7.将创建的临时文件删除,当然系统也会在结束会话时自动清空,通过检查文件目录,文件名是否正常再使用unlink()将其删除
对于目录遍历:这个可以掌握,难点就是文件上传吧,文件上传仅仅是个人理解,有可能有不到位的地方
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号