PHP实现文件上传
PHP使用curl模拟post上传及接收文件的方法

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文件上传(支持批量)

【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上传及接收⽂件的⽅法本⽂实例讲述了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实例代码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等格式,以方便进行数据分析或其他用途。
ThinkPHP5.1教程66.上传功能

<input type="file" name="image[]">
<input type="file" name="image[]"> <input type="file" name="image[]"> <input type="submit" value="确定"> </form>
public function uploads() {
66. 上传功能
学习要点: 1.上传功能
本节课我们来学习一下系统提供的上传方法,如何使用这个方法进行文件上传。
一.上传功能 1. 如果要实现上传功能,首先需要建立一个上传表单,具体如下:
<form action="http://localhost/tp5.1test3/public/upload" enctype="multipart/form-data" method="post">
//获取表单的上传数据 $files = Request::file('image'); foreach ($files as $file) {
PHP教程-文件上传

<html> <head><title>浏览上传目录</title></head> <body> <h1>浏览</h1> <?php $current_dir = './uploads/'; $dir = opendir($current_dir); echo "<p>上传目录是: $current_dir</p>"; echo '<p>上传列表:</p><ul>'; while ($file = readdir($dir)) { echo "<li>$file</li>"; } echo '</ul>'; closedir($dir); ?> </body></html>
当需要上传多个文件的情况,有两种实现的 解决方法:
使用不同的表单元素
<input type=file name=file_a>
<input type=file name=file_b>
使用数组格式的表单元素
<input type=file name=file[1]>
<input type=file name=file[2]>
创建和修改目录
mkdir -- 新建目录
bool mkdir ( string pathname [, int mode] ) 如:mkdir("/path/to/my/dir", 0700);
Thinkphp框架+Layui实现图片文件上传功能分析

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⽅式上传图⽚⽂件功能⽰例本⽂实例讲述了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内置的系统函数,如果使⽤过程中出现问题,建议查看是否启⽤相应的系统函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
upload.php
><?php echo $_FILES['photoFile']['tmp_name']."<br>"; echo $_FILES['photoFile']['name']."<br>"; echo $_FILES['photoFile']['size']."<br>"; echo $_FILES['photoFile']['type']."<br>"; $type=$_FILES['photoFile']['type']; echo $type; if($type!="image/pjpeg" || $type!="image/jpg" || $type!="image/gif") {echo "上传文件类型错误";//exit(); } if(is_uploaded_file($_FILES['photoFile']['tmp_name'])) if(move_uploaded_file($_FILES[„photoFile‟][„tmp_name‟],$_SERVER[“DO CUMENT_ROOT”].“www\\ch5/files\\".$_FILES['photoFile']['name'])) echo "上传成功"; else echo "上传失败";?>
上传文件的函数
•move_uploaded_file(file,newloc) 函数将上传的文件 移动到新位置。若成功,则返回 true,否则返回 false。file:要移动的文件;newloc:移动的目标位置
•is_uploaded_file(file) 函数判断指定的文件是否是通 过 HTTP POST 上传的。是的话返回true,否则返回 false。
php.ini文件的设置
file_uploads on 是否允许通过HTTP上传文件的开关。默认为ON即 是开 upload_tmp_dir -- 文件上传至服务器上存储临时文件的地方,如果 没指定就会用系统默认的临时文件夹 upload_max_filesize 即允许上传文件大小的最大值。默认为2M post_max_size 指通过表单POST给PHP的所能接收的最大值,包括 表单里的所有值。默认为8M 如果要上传>8M的大体积文件,只设置上述四项还不一定能行的通。 还得继续设置下面的参数。
max_execution_time 每个PHP页面运行的最大时间值(秒),默认30秒 max_input_time 每个PHP页面接收数据所需的最大时间,默认60秒 memory_limit 每个PHP页面所吃掉的最大内存,默认8M
注意
文件上传到服务器上后,会被存放到某个 临时位置 脚本代码执行完毕前,这个临时文件会被 服务器删除 所以要保留上传文件,需要将其重命名或 移动
常见问题
不应该允许任何人上传文件,需要用户通 过身份验证 对上传文件进行重命名 基于Windows系统,把文件路径中的”\”改 为”\\”。 如果无法上传,查看php.ini中的配置信息 。
名字必须是MAX_FILE_SIZE 值的单位是Byte字节,针对个人的应用程序更改大小。
使用$_FILES超级全局数组获取上传 文件信息
假设表单的文件框名字为photoFile,则: $_FILES[„photoFile‟][„tmp_name‟]
文件在Web服务器中临时存储的位置
与文件上传有关的错误代码 值:0; 没有错误发生,文件上传成功。 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 。 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定 的值。 值:3; 文件只有部分被上传。 值:4; 没有文件被上传。
$_FILES[„photoFile‟][„name‟]
客户端上传时的文件名
$_FILES[„photoFile‟][„size‟]
文件的大小,单位字节
$_FILES[„photoFile‟][„type‟]
文件的MIME类型,如text/plain、imag/gif等
$_FILES[„photoFile‟][„error‟]
课堂练习——上传照片
需要两个文件
uploadphoto.html:设计上传页面 upload.php:完成上传功能
uploadphoto.html
<form method="post" enctype="multipart/form-data" action="upload.php"> 请上传你的照片:<input type="file" name="photoFile"> <input type="hidden" name="MAX_FILE_SIZE" value="10240000"> <input type="submit" value="提交"> </form>
PHP实现HTTP文件上传
文件上传
使用HTTP协议将文件从客户端浏览器传递 到服务器。
文件上传的HTML表单要求
表单<form>的提交方式:method=post 表单<form>设置enctype=“multipart/form-data”属性 在表单中加入文件框<input type=“file” name=“xxx”> 在表单中必须有一个设置上传文件最大长度的隐藏 域。<input type=“hidden” name=“MAX_FILE_SIZE” value=“10000”>