PHP文件上传的具体思路及实现

PHP基础之在Dreamweaver下使用PHP实现文件上传 最近遇到很多赶交期末作业的大学生求助,问Dreamweave怎么上传图片啊二哥,本着让你渡过大学美好时光的最后时光, 二哥这个忙帮定了。 阅读详情

最近一段时间对PHP文件处理方面很感兴趣,因此在许多站点上看了许多的文件处理的文章,但是国内许多的站点上的PHP 文件处理方面的知识大多数是你抄我的我抄你的,用baidu.com或者是google.com搜索出来的东西多是重复的。最近在国外一个站点上盾了一篇文章感觉很不错,因此推荐给大家阅读。

首先我们有必要说明一下文件上传的操作流程及用到的知识点:

文件上传我们需要用到HTML里面表单的type="file"类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。

也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括 文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。

当然出错的预处理也是我们不容忽视的!如果再深一步的讨论我们还可以对文件的操作起用事件日志的记录。

下面我们通过一段程序来实现这些功能:
--------------------------------------------------------------------------------------------

首先是我们预设的变量值,它包括文件大小,文件扩展名类型,MIMI类型,及是否删除的开关变量

$MAX_SIZE = 2000000;
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
         ,'image/png','application/msword');

$FILE_EXTS = array('.zip','.jpg','.png','.gif');

$DELETABLE = true;               


下一部就是设置浏览器访问变量及目录访问变量:

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";


建立上传目录并相应改变权限:

if (!is_dir("files")) {
if (!mkdir($upload_dir))
 die ("upload_files directory doesn't exist and creation failed");
if (!chmod($upload_dir,0755))
 die ("change permission to 755 failed.");
}


用户请求的处理:

if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]/n");
fclose($resource);

if (strpos($_REQUEST[del],"/.")>0);         //possible hacking
else if (strpos($_REQUEST[del],"files/") === false); //possible hacking
else if (substr($_REQUEST[del],0,6)=="files/") {
  unlink($_REQUEST[del]);
  print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
      .$_FILES['userfile']['name']." "
      .$_FILES['userfile']['type']."/n");
fclose($resource);

$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));

//文件大小的检查:


if ( $_FILES['userfile']['size'] > $MAX_SIZE)
  $message = "The file size is over 2MB.";
//File Type/Extension Check
else if (!in_array($file_type, $FILE_MIMES)
     && !in_array($file_ext, $FILE_EXTS) )
  $message = "Sorry, $file_name($file_type) is not allowed to be uploaded.";
else
  $message = do_upload($upload_dir, $upload_url);

print "<script>window.location.href='$url_this?message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
$message = "Invalid File Specified.";

列出我们上传的文件:

$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
 if(!is_dir($file) && !is_link($file)) {
   $filelist .= "<a href='$upload_dir$file'>".$file."</a>";
   if ($DELETABLE)
    $filelist .= " <a href='http://www.heibai.net/article/info/?del=$upload_dir$file' title='delete'>x</a>";
   $filelist .= "<sub><small><small><font color=grey> ".date("d-m H:i", filemtime($upload_dir.$file))
         ."</font></small></small></sub>";
   $filelist .="<br>";
 }
}

function do_upload($upload_dir, $upload_url) {

$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_name = str_replace("//","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;

//File Name Check
if ( $file_name =="") {
 $message = "Invalid File Name Specified";
 return $message;
}

$result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0777))
  $message = "change permission to 777 failed.";
else
  $message = ($result)?"$file_name uploaded successfully." :
      "Somthing is wrong with uploading a file.";
return $message;
}

?>

<center>
 <font color=red><?=$_REQUEST[message]?></font>
 <br>
 <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  Upload File <input type="file" id="userfile" name="userfile">
  <input type="submit" name="upload" value="Upload">
 </form>
 
 <br><b>My Files</b>
 <hr width=70%>
 <?=$filelist?>
 <hr width=70%>
 <small><sup>Developed By
 <a style="text-decoration:none" href="http://tech.citypost.ca">CityPost.ca</a>
 </sup></small>
</center>

layui+php上传文件 的思路讲解 代码编辑软件看个人习惯,首先我们先写前端部分代码 1.laiyui官网:https://www.layui.com/ 下载代码包 2.把下载好的代码包放入新建好的的项目中 3.引用layui的css跟js文件 <!-- 引入layui样式 --> <link rel="stylesheet" href="layui/css/layui.css"> &lt... 阅读详情

相关推荐

ajax+php文件上传带进度条

理论上来说此类的文件/图片上传插件已经很多了,但是在使用的过程中还是会遇到各种各样的问题,,兼容问题、后台问题~~等等,所以既然别人的轮子我用不好,那就自己动手造一个吧。本文中使用jq.ajax和php实现上传功能,前端代码一般无差,有的小伙伴后台不是php的,请参考贵语言的文档进行操作即可。先看一下效果图,整个上传界面大概是这样的:查看demo  整体思路:1、创建input设置type=fil...

徐向博 6975

简述PHP上传文件的思路,PHP文件上传的具体思路及实现

首先达内php培训老师有必要说明一下文件上传的操作流程及用到的知识点:文件上传我们需要用到HTML里面表单的type="file"类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括文件类型,文件大小,扩展名,以及上传目录的...

weixin_33127399的博客 487

比Synergy更轻量!Barrier鼠标共享工具实测:5分钟实现Win/Mac/Linux三设备无缝切换

本文实测了开源免费的Barrier鼠标共享工具,详细指导用户如何在5分钟内于Windows、macOS和Linux三台设备间实现一套键鼠的无缝切换。文章对比了其与Synergy的优势,提供了分平台安装、核心服务端-客户端配置、防火墙设置等完整教程,并分享了解决连接问题的关键技巧,是提升多设备办公效率的实用指南。

weixin_29304021的博客 601

详细描述php文件上传流程,简单php文件上传详细说明-PHP源码

关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等。《script》ec(2);《script》1 如果实现小文件的上传(2mb)一下是不需要对php教程.ini 中的配置进行修改的,如果要是大文件的上传就必须进行配置的修改2 修改php.ini 中的内容有:post_m...

weixin_42356340的博客 343

Cadence Allegro实战:如何精准导入结构DXF文件避免安装偏差(附图层配置技巧)

本文详细讲解了在Cadence Allegro中精准导入结构DXF文件以避免安装偏差的实战技巧。核心在于导入前的单位校准、创建专用图层结构,以及基于坐标基准点的精确对齐方法。文章还分享了将DXF图形转化为正式板框和禁布区、高效管理图层以及向结构工程师导出DXF的完整流程,帮助PCB工程师确保设计与机械结构完美契合。

1a2s3d4f5g的博客 510

Ubuntu20.04安装Ceres库

ceres真难安装。

little_white138的博客 8382

用PHP文件上传的具体思路及实现

 

李高峰的博客 793

离心泵级间导叶的设计计算

离心泵级间导叶的设计计算高速离心泵级间流道的作用是将第一级复合叶轮流出的高速液流收集起来并送入第二级复合叶轮。级间流道的设计应考虑降低液体的流速,实现动能向压力能转化,减小液体的水力损失。级间流道主要有蜗壳形流道和导叶两种结构形...

cqzc55322的博客 2566

原生php实现文件上传方法

用tp的框架上传文件,方便是方便了,但是知其然而不知其所以然。 想要知其所以然,还是要脱离开框架,用原生php来做实现。<?php function upFile(){ if(empty($_FILES)){ $status = 1; $info = '没有文件上传'; } if($_FILES['myFile']['error'] ===

梁吉林的博客 4629

堆内存管理核心逻辑 超详细复习笔记

本文详细解析了堆内存管理的核心逻辑,包括初始化、分配和释放三个关键环节。系统通过全局堆管理结构体和链表机制实现动态内存管理:初始化时标记整块内存为空闲;分配时遍历链表查找合适空闲块并进行分割;释放时定位内存块头并重新标记为空闲,支持相邻块合并以减少碎片。文章对比了链表式管理和线性分配的优缺点,指出链表式更灵活但实现复杂,线性分配简单但无法释放。最后总结了常见错误(如指针回推错误、碎片问题)和扩展知识(不同内存管理算法)。这套机制是理解嵌入式系统和RTOS内存管理的基础。

2502_92009732的博客 1204

【CANoe16安装教程】亲测安装成功

CANoe16安装教程

qq_45302638的博客 2万+

php版大文件上传设计思路(二)

在上一篇文章中讲到分片思路,那么这篇文章着重讲述怎么进行操作。 本技术大文件分片上传流程会调用1个api,包含: uploadShard  单独的分片上传接口。 服务端通过uploadShard  接口接收的file_md5值去redis里面查找当前文件片上传的信息: 如果未查到信息,初始化未上传文件片索引值列表。计算方法:total_shard =ceil(total_size  /  s...

lchmyhua88的博客 581

用Python爬取公众号历史所有文章,看这篇就够了

手把手教你爬取公众号历史所有文章

u010522887的专栏 1万+

php商品上传思路,PHP文件上传的具体思路及实现

最近一段时间对PHP文件处理方面很感爱好,因此在许多站点上看了许多的文件处理的文章,但是国内许多的站点上的PHP文件处理方面的知识大多数是你抄我的我抄你的,用baidu.com或者是google.com搜索出来的东西多是重复的。最近在国外一个站点上盾了一篇文章感觉很不错,因此推荐给大家阅读。首先我们有必要说明一下文件上传的操作流程及用到的知识点:文件上传我们需要用到HTML里面表单的type="f...

weixin_31075273的博客 233

ubuntu20.04中配置Pyrep和CoppeliaSim

在Ubuntu20.04中配置 Pyrep ,实现应用Python语言的机器人在 Vrep(CoppeliaSim)中的虚拟仿真。

加斯顿工程师的博客 3375

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php商品上传思路,用PHP文件上传的具体思路及实现

if ($_REQUEST[del] && $DELETABLE) {$resource = fopen(log.txt,a);fwrite($resource,date(Ymd h:i:s).DELETE - $_SERVER[REMOTE_ADDR].$_REQUEST[del]\\n);fclose($resource);if (strpos($_REQUEST[del],/...

weixin_34329874的博客 190

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

php文件上传参数细节

1:error类型:    1)其值为 0,没有错误发生,文件上传成功。 2)其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 3)其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 4)其值为 3,文件只有部分被上传。 5)其值为 4,没有文件被上传。 6)其值...

weixin_30367169的博客 132

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

PHP 实现文件上传 【很简单三步就搞定】

PHP 实现文件上传 【只需三步就搞定】 什么是文件上传?       可以从客户计算机向远程服务器上传文件。 实现思路: 第一步:       传文件 第二步:       取文件 第三步:       移动文件 必备知识: $_FILES : 【超全局变量二位数组】

渣渣旭的博客 8080

php文件上传思路,php文件上传处理流程及多文件上传的思路

1,判断文件是否为空 empty($_FILES[表单名][name])php2,判断文件上传是否成功 $_FILES[表单名][error]数组3,判断文件上传类型$_FILES[表单名][type]函数4,判断文件是否是上传文件,is_uploaded_filecode5,移动上传的文件,move_uploaded_fileorm6,若是写成方法,须要返回文件路径文件上传多文件上传string...

weixin_39533659的博客 158

php文件上传相关的函数,PHP文件上传-单文件上传函数思路

单文件上传思路----------------------------------------1.需要一个上传文件的表单页面表单页面需要设置POST方式提交 method="POST",并设置以附件类型上传enctype="multipart/form-data"表单中需要一个文件域type="file" 说明是文件域name="file" 用于接收上传文件2.需要一个上传函数①首先需要把上传...

weixin_28881575的博客 365

php 上传数据,PHP文件上传之多文件上传的实现思路

这篇文章主要介绍了PHP文件上传之多文件上传的实现思路的相关资料,需要的朋友可以参考下多文件上传的两种情况①使用多个name值a.点击提交之后接收到的数据格式Array([file1] => Array([name] => 8.png[type] => image/png[tmp_name] => G:\wamp\tmp\php737.tmp[error] => 0[...

weixin_29291573的博客 125

php文件上传代码_PHP 文件上传功能实现代码

经过了几个小时的苦苦搜索,终于把这个问题给解决了.php文件上传对于高手来说确实是小菜,可是对我新手来说就显得手足无措了.个人认为PHP文件的上传和下载的思路差不多一样.也就是在代码中多了一个header语句以下是详细的代码.仅供参考.入口文件enctype="multipart/form-data">Filename:" />php写的处理文件if( empty($_GET['Fil...

weixin_35437233的博客 199

php 删除上传文件,php实现文件上传、下载和删除的方法

这篇文章主要为大家详细介绍了php文件上传、下载和删除示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下php文件上传、下载和删除示例大体思路如下,具体内容如下一.文件上传1.把上传文件的区域做出来p12.把显示文件的区域做出来p23.提交表单,上传文件4.服务器接收文件数据用$_FILE[name]接收5.处理数据,看上传文件是否有错误错误有如下几种:1).上传的文件超过了 php.ini ...

weixin_30015183的博客 356

PHP-文件上传优化

1.7 优化文件上传 1.7.1 更改文件名 方法一:通过时间戳做文件名 <?php $path='face.stu.jpg'; //echo strrchr($path,'.'); //从最后一个点开始截取,一直截取到最后 echo time().rand(100,999).strrchr($path,'.'); 方法二:通过uniqid()实现 $path='face.stu...

逍遥云恋 780

php实现文件上传下载功能

参考文章:http://blog.ncmem.com/wordpress/2023/09/10/php%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd/文件的上传与下载是项目中必不可少的模块,也是php最基础的模块之一,大多数php框架中都封装了关于上传和下载的功能,不过对于原生的上传下载还是需要了解一下的。

weixin_52041354的博客 162
上一篇: PHP程序开发中的模板选择
下一篇: 生活让我明白了什么
老伊万
博客等级 码龄21年 31粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值