PHP文件类-上传,样图,文件夹内容浏览删除

如何处理PHP中的文件上传错误 文件上传是Web开发中常见的功能,但也容易遇到各种错误。通过合理设置文件大小限制、验证文件类型、处理临时文件以及提供友好的错误提示,可以有效地处理PHP中的文件上传错误,确保用户能够顺利上传文件。希望本文的内容能够帮助开发者更好地理解和处理文件上传过程中的错误。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<?php    
/*   
* 文件操作类,create by linyupark,   
*/   
class File    
{    
    
protected $path; //根目录例如 ./upload    
   
    
function __construct($path)    
    {    
        
if(!is_dir($path))    
        
mkdir($path,0777);    
        
$this->path = $path;    
    }    
   
    
/*   
    * # 文件上传函数   
    * @ input_name 为表单中type为file的name值   
    * @ ext_arr 为允许使用的扩展名数组,请用小写,例array('jpg','gif')   
    * @ max_size 文件大小,单位b,上限请修改php.ini中的post上限和upload上限   
    * @ rand 是否把上传的文件改为随机数,避免相同文件名上传   
    * @ sample 如果文件为图象可以给该参数指定宽或高(x,y),比如array(100,'auto')   
    
*/   
    
public function upload($input_name,$ext_arr,$max_size,$rand=0,$sample=null)    
    {    
        
//基本错误    
        if ($_FILES[$input_name]['error'] > 0)    
        {    
            
switch ($_FILES[$input_name]['error'])    
            {    
                
case 3: return "只上传了部分文件"; break;    
                
case 4: return "没有文件上传"; break;    
                
default: return "文件大小超标";    
            }    
            
exit();    
        }    
   
        
//文件大小    
        if($_FILES[$input_name]['size'] > $max_size)    
        {    
            
return "文件大小超标";    
            
exit();    
        }    
   
        
//文件类型    
        $type = array_shift(explode("/",$_FILES[$input_name]['type']));    
   
        
if(!is_dir("{$this->path}/{$type}"))    
        
mkdir("{$this->path}/{$type}");    
   
        
//扩展名    
        $file_ext = strtolower(array_pop(explode(".",$_FILES[$input_name]['name'])));    
   
        
if(!in_array($file_ext,$ext_arr))    
        {    
            
return "文件扩展名不符合要求";    
            
exit();    
        }    
   
        
//文件名    
        if($rand==1)    
        
$file_name = time().rand(1000,9999).".".$file_ext;    
        
else   
        
$file_name = strtolower($_FILES[$input_name]['name']);    
   
        
//临时文件转移    
        if(is_uploaded_file($_FILES[$input_name]['tmp_name']))    
        {    
            
if(!move_uploaded_file($_FILES[$input_name]['tmp_name'],    
            
"{$this->path}/{$type}/{$file_name}"))    
            {    
                
return "上传的文件移动过程中失败";    
                
exit();    
            }    
   
        }    
        
else   
        {    
            
return "无法找到上传的临时文件";    
            
exit();    
        }    
   
        
//样图    
        if($type == "image" && $sample!=null)    
        {    
            
list($width,$height) = getimagesize("{$this->path}/{$type}/{$file_name}");    
            
list($x,$y) = $sample;    
            
if($x != "auto") $s_width = $x;    
            
else $s_width = ($y/$height)*$width;    
            
if($y != "auto") $s_height = $y;    
            
else $s_height = ($x/$width)*$height;    
            
$dst_img = imagecreatetruecolor($s_width,$s_height);    
            
switch ($file_ext)    
            {    
                
case 'gif':    
                    
$image = imagecreatefromgif("{$this->path}/{$type}/{$file_name}");    
                    
break;    
                
case 'png':    
                    
$image = imagecreatefrompng("{$this->path}/{$type}/{$file_name}");    
                    
break;    
                
case 'bmp':    
                    
$image = imagecreatefromwbmp("{$this->path}/{$type}/{$file_name}");    
                    
break;    
                
default:    
                    
$image = imagecreatefromjpeg("{$this->path}/{$type}/{$file_name}");    
            }    
            imagecopyresampled(
$dst_img,$image,0,0,0,0,$s_width,$s_height,$width,$height);    
            
//统一输出为jpg    
            if(!is_dir("{$this->path}/sample"))    
            
mkdir("{$this->path}/sample");    
            
$sample_name = array_shift(explode(".",$file_name)).".jpg";    
            imagejpeg(
$dst_img,"{$this->path}/sample/{$sample_name}",100);    
        }    
   
        
return "上传任务完成";    
    }    
   
    
/*   
    * # 文件浏览功能函数   
    * @ url 执行函数的路径   
    * @ dir_arg 切换目录的参数变量   
    * @ value 切换目录的值,目录名不能为中文   
    * @ del_arg 删除参数变量   
    
*/   
    
public function browser($url,$dir_arg,$del_arg=null)    
    {    
        
//是否有参数值    
        if(!isset($_GET[$dir_arg]))    
        
$value = $this->path;    
        
else $value = $_GET[$dir_arg];    
   
        
//有删除操作    
        if(isset($_GET[$del_arg]))    
        {    
            
if(is_dir($_GET[$del_arg]))    
            
$this->rmdir($_GET[$del_arg]);    
            
else unlink($_GET[$del_arg]);    
        }    
   
        
$dir = dir($value);    
        
$pre_value = $this->path; //初始父目录    
        $str = "<dl>";    
        
//是否有上一级目录    
        if($value!=$this->path)    
        {    
            
$pre_value = explode("/",$value);    
            
array_pop($pre_value);    
            
$pre_value = implode("/",$pre_value);    
            
$str.= "<dt><a href='{$url}?{$dir_arg}={$pre_value}'>父目录</a></dt>";    
        }    
        
while (false!==($unit=$dir->read()))    
        {    
            
if($unit!="." && $unit!="..")    
            {    
                
//是否为目录    
                if(is_dir("{$value}/{$unit}"))    
                {    
                    
if($del_arg!=null)    
                    
$str.= "<dt><a href='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a>    
                            <a href='{$url}?{$dir_arg}={$pre_value}&{$del_arg}={$value}/{$unit}'>删除</a></dt>
";    
                    
else   
                    
$str.= "<dt><a href='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a></dt>";    
                }    
   
                
else   
                {    
                    
$file = substr($value,1)."/".$unit;    
                    
if($del_arg!=null)    
                    
$str.= "<dd><a href='{$file}'>{$unit}</a>    
                            <a href='{$url}?{$dir_arg}={$value}&{$del_arg}={$value}/{$unit}'>删除</a></dd>
";    
                    
else   
                    
$str.= "<dd><a href='{$file}'>{$unit}</a></dd>";    
                }    
            }    
        }    
        
$dir->close();    
        
$str.= "</dl>";    
        
return $str;    
    }    
   
    
/*   
    * 内部函数,删除目录以及里面的所有文件   
    
*/   
    
protected function rmdir($path)    
    {    
        
$dir = dir($path);    
        
while (false!==($unit=$dir->read()))    
        {    
            
if($unit!="."&&$unit!="..")    
            {    
                
if(is_dir($path."/".$unit))    
                {    
                    
$this->rmdir($path."/".$unit);    
                }    
                
else unlink($path."/".$unit);    
            }    
        }    
        
$dir->close();    
        
rmdir($path);    
    }    
}    
   
?> 

 
SBM与超效率SBM模型实战:从原始面板数据到MATLAB高效实现 本文详细介绍了SBM模型与超效率SBM模型的核心原理,并提供了从原始面板数据预处理到MATLAB高效实现的完整实战指南。通过具体代码解析,帮助研究者掌握如何利用MATLAB进行数据标准化、模型构建、效率求解及结果可视化,从而精准评估决策单元的相对效率,尤其适用于在高效单元中进一步精细排名的场景。 阅读详情

相关推荐

告别复杂配置!5分钟在Vue/React项目中集成讯飞语音听写WebSocket API

本文详细介绍了如何在Vue/React项目中快速集成讯飞语音听写WebSocket API,实现高效语音识别功能。通过对比不同通信方案,突出WebSocket在实时语音交互中的优势,并提供框架适配、音频处理及性能优化等关键技术点,帮助开发者5分钟内完成专业级语音听写功能集成。

weixin_28730353的博客 274

简单粗暴的文件上传漏洞

文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接。但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识。俗话说,知己知彼方能百战不殆,因此想要研究怎么防护漏洞,就要了解怎么去利用。 特点 1、利用简单 2、危害大 产生原因 缺少必要的校验 代码审计 基础 关于 PHP 中 $_FILES 数组的使用方法 $_FILES[‘file’][‘name’] 客户端文件名称 $_FILES[‘file’][‘type’] 文件的

hl1293348082的专栏 2106

BUCK降压电路设计实战:从理论到PCB的完整指南

本文详细介绍了BUCK降压电路的设计实战,从基础原理到PCB布局的完整指南。通过关键部件选型、PCB布局黄金法则和调试技巧,帮助工程师高效设计稳定可靠的开关电源。特别针对电感、MOSFET和电容选型提供实用公式和避坑指南,并分享高温环境下的工程经验与测试方法。

weixin_33744141的博客 450

[PHP] Evoluted Directory Listing(改进版):支持上传/删除等操作的PHP目录列表

本文介绍了一款支持上传/删除等操作的PHP目录列表:Evoluted Directory Listing,并在原版本上予以了改进。

Deng's Blog 1万+

从零构建EtherCAT从站:SSC工具配置与TwinCAT3 PDO/SDO调试实战

本文详细介绍了从零构建EtherCAT从站的完整流程,重点讲解SSC工具配置与TwinCAT3 PDO/SDO调试实战。通过解析EtherCAT通信机制、PDO与SDO的核心概念,提供SSC工具配置技巧、XML文件生成与校验方法,以及TwinCAT3环境下的调试经验,帮助开发者高效完成EtherCAT从站开发与优化。

weixin_42520573的博客 339

篮球比赛24秒计时器改造指南:用Multisim实现可调式倒计时系统

本文详细介绍了如何使用Multisim软件改造篮球比赛24秒计时器,实现可调式倒计时系统。从脉冲信号发生器到声光报警模块,提供了完整的电路设计方案和调试技巧,帮助开发者快速掌握数字电路设计的核心原理,提升体育电子设备开发效率。

wood5的博客 211

php文件上传,下载,删除及预览

1.单文件上传 1.单文件上传 #$fileInfo = $_FILES['myFile']; #$allowExt = array('jpeg', 'jpg', 'png', 'gif'); #$allowExt 为支持的上传的文件类型,不传为所有类型 #$uploadPath 文件夹位置 function up($fileInfo,$allowExt,$uploadPath) { ...

weixin_38617363的博客 2103

ST MotorControl Workbench 6.2.1 自定义硬件配置避坑指南

本文详细介绍了ST MotorControl Workbench 6.2.1在自定义硬件配置中的常见问题与解决方案,涵盖功率板配置、采样电路校准、电机参数设置及代码生成避坑指南,帮助开发者高效完成电机控制项目开发。

red88的博客 1023

php相册上传和删除吗,php如何删除上传图片

php删除上传图片的方法:首先提取文件域内容名称,并判断;然后获取图片的完整路径以及图片名称;最后通过“unlink(“uppic/”.$img);”方法删除上传的图片即可。简单PHP上传图片、删除图片实现代码PHP上传图片、删除图片实现代码,需要的朋友可以参考下。上传图片:代码如下:if (!empty($_FILES["img"]["name"])) { //提取文件域内容名称,并判断$pat...

weixin_30269407的博客 169

EBS开发_创建AP付款

--以下代码于20181002在Tony环境测试通过 /* BEGIN   --mo_global.init('SQLAP');   apps.fnd_global.apps_initialize(user_id =&gt; 1110, resp_id =&gt; 50597, resp_appl_id =&gt; 20003);   --mo_global.set_policy_context(...

蜗牛先生快跑的博客 4766

uniapp - 应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准(uniApp开发安卓APP上架应用市场审核被拒绝驳回,详细解决方案)

uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。uniapp vue2 vue3解决软件在运行时,未见向用户告知权限申请的目的,华为等上架被拒问题,关于华为应用市场上架需要同步告知使用权限的解决方案,uniApp应用软件在运行时,不符合华为应用市场审核标准。解决方案合集!app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。华为应用市场审核新规(未同步告知权限申请的使用目

🏆 前端领域优质创作者 4163

php相册上传和删除吗,php怎么实现上传图片的删除

php上传图片删除的实现方法:首先提取文件域内容名称,并判断;然后将“$img”的值写入到数据库中对应的字段;接着从数据库中读取图片;最后通过unlink函数删除图片即可。PHP上传图片、删除图片实现代码,需要的朋友可以参考下。上传图片:代码如下:if (!empty($_FILES["img"]["name"])) { //提取文件域内容名称,并判断$path=”uppic/”; //上传路径i...

weixin_36427002的博客 172

YOLO11全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 560

PHP文件上传,预览和删除

2.创建preview.php负责文件的预览。1.创建index.php负责文件的首页。

A2106008248的博客 455

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

php删除上传图片,PHP上传图片、删除图片的简单示例代码

本节内容:PHP上传图片、删除图片1,php上传图片:复制代码 代码示例:if (!empty($_FILES["img"]["name"])) { //提取文件域内容名称,并判断$path=”uppic/”; //上传路径if(!file_exists($path)){//检查是否有该文件夹,如果没有就创建,并给予最高权限mkdir(“$path”, 0700);}//END IF//允许上传的...

weixin_42365401的博客 166

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

PHP(文件上传、下载、删除、读取&写入)

文件上传

fainpo的博客 4098

php 图片无法删除,php如何删除上传的图片

php删除上传的图片的方法:首先检查上传文件是否在允许上传的类型;然后获取图片的完整路径;最后通过“unlink(“uppic/”.$img);”方法删除图片即可。简单的PHP上传图片和删除图片示例代码分享一例简单的PHP上传图片和删除图片示例代码,很简单,适合初学的朋友参考,用来研究php上传图片还是不错的。1、php上传图片:...

weixin_36374105的博客 230

Unity上传图片到服务器指定的文件夹中

程序需要用到一个拍照保存到云端的功能,数据可以保存到数据库和服务器,首先不建议保存到数据库,原因就是太慢了,所以就选择了保存到服务器。 一、Unity端: 1、获取图片的数据,一般传送图片的时候都会先把图片转换成二进制数据。 2、使用WWWForm类创建表单。 3、最后使用WWW类上传到服务器即可。 using System.Collections; using UnityEngine...

海洋深处鱼儿肥 8150

如何删除图片php,php如何删除上传的图片

php如何删除上传的图片,图片,上传图片,上传,路径,方法php如何删除上传的图片易采站长站,站长之家为您整理了php如何删除上传的图片的相关内容。php删除上传的图片的方法:首先检查上传文件是否在允许上传的类型;然后获取图片的完整路径;最后通过“unlink(“uppic/”.$img);”方法删除图片即可。推荐:《PHP视频教程》简单的PHP上传图片和删除图片示例代码分享一例简单的PHP上传图...

weixin_35991292的博客 326

上传图片类型限制和防止反复提交,php递归删除空文件夹

html代码 <html> <meta charset="utf-8"> <?php session_start(); $bmcode = mt_rand(0,10000); $_SESSION["bmcode"] = $bmcode; ?> <form action="ha.php" method="post" enctype="multipart/form-data

qq_26495107的博客 451

php上传png_PHP实现上传、删除图片范例

今天,小编将和大家分享一例简单的PHP上传图片和删除图片示例代码,很简单,适合初学的朋友参考,用来研究php上传图片还是不错的,感兴趣的朋友可以了解一下。1、php上传图片:...

weixin_29725791的博客 156

php 图片上传与删除,PHP实现上传、删除图片范例

今天,小编将和大家分享一例简单的PHP上传图片和删除图片示例代码,很简单,适合初学的朋友参考,用来研究php上传图片还是不错的,感兴趣的朋友可以了解一下。1、php上传图片:...

weixin_39747341的博客 288

php上传文件的步骤

通过上述步骤,我们不仅学会了如何使用PHP实现基础的文件上传功能,也了解到了围绕这项技术的一些最佳实践。记得始终把用户体验放在首位,并且时刻关注安全性和效率方面的问题。希望这篇教程能够帮助大家构建出既强大又可靠的文件上传系统!

x3088的博客 1109
上一篇: [技术讨论]iTSP组04年关于知识库构建的对话
下一篇: [杂言]慢性咽炎的治疗药物
piperzero
博客等级 码龄21年 1377粉丝 504原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值