【转载】兼容php5,php7的cURL文件上传示例
转载来自:
http://www.huanlinna.com/2016/06/25/coding/php5-php7-upload-demo-via-curl.html
https://segmentfault.com/a/1190000000725185
index.html
<html>
<head>
<title>上传示例</title>
</head>
<body>
<div>下面上传文件到中间脚本:</div>
<br />
<form action="upload.php" method="post" enctype="multipart/form-data">
选择文件:
<input type="file" name="file" />
<input type="submit" value="上传" />
</form>
</body>
</html>
upload.php
<?php
/**
* 接收通过浏览器上传的文件
*
* @author Straiway<straiway@qq.com>
* @site http://straiway.sinaapp.com
*/
if (empty($_FILES['file'])) {
exit('没有上传指定名称的文件');
} // 先保存到本地,再上传
$file = $_FILES['file'];
$file_name = __DIR__ . "/{$file['name']}";
move_uploaded_file($_FILES['file']['tmp_name'], $file_name); // 本地测试时,可能需要更改下面的URL
$ch = curl_init('http://localhost/test/upload_via_curl.php'); // 从php5.5开始,反对使用"@"前缀方式上传,可以使用CURLFile替代;
// 据说php5.6开始移除了"@"前缀上传的方式
if (class_exists('CURLFile')) {
$file = new CURLFile($file_name); // 禁用"@"上传方法,这样就可以安全的传输"@"开头的参数值
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
} else {
$file = "@{$file_name}";
} // 从php5.2开始,要上传文件,必须给CURLOPT_POSTFIELDS传递数组,而不是字符串。
// 也只有传递数组,http头部的"Content-Type"才会设置成"multipart/form-data"
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file_via_curl' => $file)); // 将传输结果作为curl_exec的返回值,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch);
$error = curl_error($ch); if ($result) {
$result_array = json_decode($result, true);
if ($result_array) {
if ($result_array['status']) {
exit("上传成功!curl返回图片地址:{$result_array['data']['url']}<br /><img src='{$result_array['data']['url']}' />");
} else {
exit("curl上传失败!错误信息:{$result['info']}");
}
} else {
exit("发生错误,curl返回结果:{$result}");
}
} else {
exit('curl请求发生错误' . var_export($error, true));
}
upload_curl.php
<?php
/**
* 接受通过curl上传的文件。
*
* @author Straiway<straiway@qq.com>
* @site http://straiway.sinaapp.com
*/ if (empty($_FILES['file_via_curl'])) {
$return = array('status' => 0, 'info' => '没有上传指定名称的文件');
} else {
// 保存文件
$file = $_FILES['file_via_curl']; // 重命名文件,便于识别
$base_name = explode('.', $file['name']);
$base_name[0] .= '_upload_var_curl';
$base_name = implode('.', $base_name);
$file_name = __DIR__ . "/{$base_name}"; if (move_uploaded_file($file['tmp_name'], $file_name)) {
// 本地测试时,可能需要更改下面的URL
$url = "http://localhost/test/{$base_name}";
$return = array('status' => 1, 'info' => '上传成功', 'data' => array('url' => $url));
} else {
$return = array('status' => 0, 'info' => '上传失败');
}
} exit(json_encode($return));
【转载】兼容php5,php7的cURL文件上传示例的更多相关文章
- php curl文件上传兼容php5.0~5.6各版本
PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...
- curl文件上传有两种方式,一种是post_fileds,一种是infile
curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...
- php curl文件上传
<?php /** * 这是一个自动化部署的类, 非常简单,思想就是压缩,上传,然后解压覆盖,所以请小心使用. * @author liuchao <249757247@qq.com> ...
- [转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
FROM : https://segmentfault.com/a/1190000000725185 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件. ...
- 兼容ie的jquery ajax文件上传
Ajax文件上传插件很多,但兼容性各不一样,许多是对ie不兼容的,另外项目中是要求将网页内容嵌入到桌面端应用的,这样就不允许带flash的上传插件了,如:jquery uploadify...悲剧 对 ...
- PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cU ...
- 考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件.踩坑若干,够一篇文章了. 重要警告 没事不要读PHP的官方中文文档!版本跟不上坑死你! 不同版本PHP ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- PHP+ExtJS 文件上传示例
xtJS 4 有一个非常方便的文件上传组件,可以用来将文件上传到服务器.本文PHP教程UncleToo将介绍使用PHP和ExtJS实现文件上传功能. 首先,创建文件上传组件Ext.form.Panel ...
随机推荐
- web api9
- 图片懒加载jquery lazyload
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>& ...
- Struts2--属性设置方式
Struts2自动获取/设置数据的方式一共分为两种 属性驱动(FieldDriven) 模型驱动(ModelDriven) 属性驱动 属性又分为两种: |- 基本数据类型 |- JavaBean属性类 ...
- 自制-随机生成不重复的数组 --算法,egret平台下的TS code
感觉这个算法经常会用到,前段时间写过一次,现在push出来.原理是有两个数组,一个数组存放随机数,然后从另一个数组提取相关的数,然后把另一个数组的大小-1,remove掉这个数,unity里也是这个原 ...
- Digester组件
刚认识Digester,记录一下: Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.ja ...
- MFC下打开选择文件夹并获取文件夹的绝对路径
http://blog.csdn.net/w18758879921/article/details/51613382 http://www.cnblogs.com/greatverve/archive ...
- Linq练习
首先在Program.cs的Main()方法下添加如下代码: string[] names = { "heh", "haha", "huahua&qu ...
- eclipse中的classes文件夹同步问题
问题: 在同步项目时,由于误操作将classes文件夹加入到了同步版本中,这样会导致每次更新程序编译后,会有很多class文件显示在同步清单中. 解决方案: 将classes文件不设置为同步. 1. ...
- Linux 下安装JRuby
安装ruby cd git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv ...
- 博客整理——K米测评
K米测评 1.233郑扬涛(orzyt) 博客链接:个人作业--关于K米的产品案例分析 亮点分析: 1.将整个软件各个功能模块的逻辑图都画出来了,而不是只画一个大概. 我做了个缩略图 2.第三部分 建 ...