2024-07-23 07:19:05 | 我爱编程网
<?php
class FileUpload{
private $filepath; //指定上传文件保存的路径
private $allowtype=array("gif","jpg","jpeg","png");//允许上传文件的类型
private $maxsize=1000000;//允许上传文件的最大值
private $israndname=true;//是否随机重命名,
private $originName;//源文件名字
private $tmpFileName;//临时文件名字
private $fileType;//上传后的文件类型,主要是文件后缀名
private $fileSize;//文件尺寸
private $newFileName;//新文件名字
private $errorName=0;//错误号
private $errorMess="";//用来提供错误报告
//用于对上传文件初始化
//指定上传路径 2·允许的类型 3·限制大小 4·是否使用随机文件名称
//让用户可以不用换位置传参数,后面参数给值不用按照位置或者必须有值
function __construct($options=array()){
foreach($options as $key=>$val){
$key = strtolower($key);
//查看用户参数中的数组下标是否和成员属性名相同
//get_class_vars(get_class($this))得到类属性的数组
//如果$key下标不在这个类属性的数组中,则退出for循环
if (!in_array($key,get_class_vars(get_class($this)))){
continue;
}
$this -> setOption($key,$val);
}
}
private function setOption($key,$val){
//让实例化后获取过来的数组下标 = 数组下标的值,这里即为构造函数初始化
//构造函数中调用,等于把所有属性初始化,将来可以直接访问
$this -> $key=$val;
}
private function getError(){
$str="上传文件{$this->originName}时出错";
switch($this -> errorNum){
case 4: $str.="没有文件被上传";
break;
case 3: $str.="文件只有部分上传";
break;
case 2: $str.="上传文件超过了表单的值";
break;
case 1: $str.="上传文件超过phpini的值";
break;
case -1: $str.="未允许的类型";
break;
case -2: $str.="文件过大上传文件不能超过{$this->maxsize}字节";
break;
case -3: $str.="上传文件失败";
break;
case -4: $str.="建立存放上传文件目录失效,请重新上传指定目录";
break;
case -5: $str.="必须指定上传文件的路径";
break;
default: $str.="未知错误";
}
return $str.'<br>';
}
//用来检查文件上传路径
private function checkFilePath(){
if(empty($this -> filepath)){
$this -> setOption("errorNum",-5);
return false;
}
if(!file_exists($this -> filepath) || !is_writable($this -> filepath)){
if(!@mkdir($this -> filepath,0755)){
$this -> setOption("errorNum",-4);
return false;
}
}
return true;
}
//用来检查上传文件尺寸大小
private function checkFileSize(){
if($this -> fileSize > $this ->maxsize){
$this -> setOption("errorNum",-2);
return false;
}else{
return true;
}
}
//用来检查文件上传类型
private function checkFileType(){
if(in_array(strtolower($this->fileType),$this -> allowtype)){
return true;
}else{
//如果$this->fileType这个类型 不在$this -> allowtype这个数组中,则把错误号变成-1
$this -> setOption("errorNum",-1);
return false;
}
}
private function setNewFileName(){
if($this -> israndname){
$this -> setOption("newFileName",$this->preRandName());
}else{
$this -> setOption("newFileName",$this -> originName);
}
}
//用于检查文件随机文件名
private function preRandName(){
$fileName=date("Ymdhis").rand(100,999);
return $fileName.".".$this -> fileType;
}
//用来上传一个文件
function uploadFile($fileField){
//检查文件路径
$return = true;
if(!$this -> checkFilePath()){
$this -> errorMess=$this -> getError();
return false;
}//获取文件信息
$name = $_FILES[$fileField]['name'];
$tmp_name = $_FILES[$fileField]['tmp_name'];
$size = $_FILES[$fileField]['size'];
$error = $_FILES[$fileField]['error'];
if(is_array($name)){//判断获取过来的文件名字是否为数组
$errors=array();//如果为数组则设置为一个数组错误号
for($i=0;$i<count($name);$i++){
//循环每个文件即每个类属性赋值或者说初始化属性值 或者初始化构造函数
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->checkFileSize() || !$this->checkFileType()){
//如果上面尺寸或者类型不对,则调用这个错误信息
$errors[$i]=$this->getError();
$return=false;
}
}else{
//这里是
$error[]=$this->getError();
$return=false;
}
if(!$return)
$this->setFiles();
}
if($return){
$fileNames=array();
for($i=0;$i<count($name);$i++){
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
$this->setNewFileName();
if(!$this->copyFile()){
$errors=$this->getError();
$return=false;
}else{
$fileNames[$i]=$this->newFileName;
}
}
}
$this->newFileName=$fileNames;
}
$this->errorMess=$errors;
return $return;
}else{
//看看$name,$tmp_name,$size,$error这些是否赋值成功 否则返回FALSE
if($this -> setFiles($name,$tmp_name,$size,$error)){
//看看文件大小尺寸是否匹配,不匹配返回FALSE
if($this -> checkFileSize() && $this -> checkFileType()){
//获取新文件名
$this->setNewFileName();
if($this->copyFile()){
return true;
}else{
return false;
}
}else{
$return=false;
}
}else{
$return=false;
}
if(!$return){
$this -> errorMess = $this ->getError();
return $return;
}
}
}
function copyFile(){//将文件从临时目录拷贝到目标文件夹
if(!$this->errorNum){
//如果传递来的路径有斜杠,则删除斜杠再加上斜杠
//./upload+./
$filepath=rtrim($this->filepath,'/').'/';
//./upload+./+加上随机后的新文件名和后缀
//这里指创建一个新的$filepath.这个文件 像占位符但是为空的
$filepath.=$this->newFileName;
//尝试着把临时文件$this->tmpFileName移动到$filepath下哪里覆盖原来的这个文件
if(@move_uploaded_file($this->tmpFileName,$filepath)){
return true;
}else{
$this->setOption('errorNum',-3);
return false;
}
}else{
return false;
}
}
//这里是为了其他剩余的属性进行初始化操作!
private function setFiles($name="",$tmp_name="",$size=0,$error=0){
//这里给错误号赋值
$this -> setOption("errorNum",$error);
//如果这里有错误,直接返回错误
if ($error){
return false;
}
$this -> setOption("originName",$name);//复制名字为源文件名
$this -> setOption("tmpFileName",$tmp_name);
$arrstr = explode(".",$name);//按点分割文件名,
//取分割后的字符串数组最后一个 并转换为小写,赋值为文件类型
$this -> setOption("fileType",strtolower($arrstr[count($arrstr)-1]));
$this -> setOption("fileSize",$size);
return true;
}
//用来获取上传后的文件名
function getNewFileName(){
return $this -> newFileName;
}
//上传失败,后则返回这个方法,就可以产看报告
function getErrorMsg(){
return $this -> errorMess;
}
}
?>
============================调用====================================
<?php
require("FileUpload.class.php");
//这里实例化后赋值为数组,数组的下标要对应类中属性的值,否则不能传递值,可以不分先后但是必须一致
$up = new FileUpload(array('israndname'=>'true',"filepath"=>"./upload/",'allowtype'=>array('txt','doc','jpg','gif'),"maxsize"=>1000000));
echo '<pre>';
if($up -> uploadFile("pic")){
print_r($up -> getNewFileName());
} else{
print_r($up -> getErrorMsg());
}
echo '<pre>';
?>
-------------------HTML-------------------------
<html>
<head>
<meta http-quive="content-type" content="text/html;charset=utf-8" ></meta>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
shoppic:<input type="file" name="pic[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="submit" name="sub" value="添加商品">
</form>
</body>
</html>
-------------------或者HTML-------------------------
<html>
<head>
<meta http-quive="content-type" content="text/html;charset=utf-8" ></meta>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
//区别在这里
shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="submit" name="sub" value="添加商品">
</form>
</body>
</html>
=====================================================================
以上是自己总结的 还没有怎么精简加工过,仅供参考
以上不止可以上传图片,可以上自定义任何文件
我爱编程网(https://www.52biancheng.com)小编还为大家带来php 实现上传图片至服务器的函数的相关内容。
<form method=post action="upload.php" ENCTYPE="multipart/form-data">如何用java程序实现上传文件到指定的URL地址参考代码如下:importjava.io.*;/***复制文件夹或文件夹*/publicclassCopyDirectory{//源文件夹staticStringurl1="f:/photos";//目标文件夹staticStringurl2="d:/tempPhotos";publicstaticv
php如何获取文件大小php如何获取文件大小和内容php如何获取文件大小该函数通过头信息获取远程文件大小,代码如下:if($FP=@fsockopen($URL[主持人],空($URL[港口])?80美元:网址[港口],$error)){fputs($FP,路径])?/:$URL[路径])."HTTP/1.1rfputs($FP,r而(!feof($fp)){
php如何传递类参数PHP类中,可能有多个属性参数。当使用new创建一个对象的时候,可能需要完成初始化操作,需要从外边传递参数进来。下面演示具体过程:<?phpclass Test { //定义私有变量name ,age private $name, $age; //构造函数,初始化的时候最先执行 public function __construct($name, $age
php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹最近刚写的,可以遍历指定目录下的所有文件、文件夹、特定后缀的文件:/** * 遍历目录 * @param string $dir 绝对/相对路径 * @param string $filter 默认*返回所有文件及文件夹,*.php仅返回php文件,如果$patten为GLOB_BRACE可实现多文件筛选,如*.{php,ht
php中如何调用JS文件里的一个函数!1.A文件用php的fopen函数读取帐号密码,再用md5加密,再写sql。2.A文件用php的fopen函数读取帐号密码,传给B文件,调用js的md5函数,再用异步传输写数据库。(好像不值得,写一个php函数好了)php怎么执行js的function楼主,首先纠正一下,PHP是不能执行JS的函数的(当然,服务器端的js框架除外)!1楼的
如何运行jar文件1、下载并安装最新版的Java虚拟机。下载网址:java.com/zh_CN/。2、安装好Java虚拟机后,双击需要运行的jar文件或在jar文件上点击鼠标右键,在弹出的菜单中选择“打开方式”→“选择默认程序”。3、在“打开方式”设置窗口中点击选中选项“始终使用选择的程序打开这种文件”前的复选框,再点击旁边的“浏览”按钮。4、选择JAVA虚拟机的安装文件夹,
java如何生成可以在其它电脑上运行的文件?在其他电脑上安装java环境就可以运行了.就是你开发的时候也要安装的那个JDK环境.也叫JAVA虚拟机吧.其实java程序并不是在某个操作系统下运行的,而是在java虚拟机里运行的.所以你想要在别的电脑或者其他设备上运行java程序,必须要有这个java虚拟机环境.在这台电脑装了JDK能运行java程序,在另一台电脑不装JDK怎样运行
java如何调用exe文件?publicclasstransferExe{\x0d\x0apublicstaticvoidmain(String[]args){\x0d\x0aopenWinExe();\x0d\x0aopenExe();\x0d\x0a}\x0d\x0a//用Java调用windows系统的exe文件,比如notepad,calc之类\x0d\x0apublicstatic
2024-06-19 10:52:25
2024-06-18 17:14:42
2024-04-10 07:43:02
2024-07-01 01:27:11
2024-06-02 02:36:32
2023-12-24 20:21:11