怎么在PHP7项目中使用curl实现一个图片上传功能

php5.5之前

$curl = curl_init();
if (defined('CURLOPT_SAFE_UPLOAD')) {
  curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
$data = array('file' => '@' . realpath($path));//‘@' 符号告诉服务器为上传资源
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

php5.5之后,到php7

$curl = curl_init();
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('file' => new \CURLFile(realpath($path)));
url_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

下面提供一个兼容的方法:

$curl = curl_init();
if (class_exists('\CURLFile')) {
 curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('file' => new \CURLFile(realpath($path)));//>=5.5
} else {
 if (defined('CURLOPT_SAFE_UPLOAD')) {
  curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
 }
 $data = array('file' => '@' . realpath($path));//<=5.5
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT,"TEST");
$result = curl_exec($curl);
$error = curl_error($curl);

其中:

$path:为待上传的图片地址

$url:目标服务器地址

例如

$url="img/202501/bg_right.jpg"

upload.php示例:

<?php
  file_put_contents(time().".json", json_encode($_FILES));
  $tmp_name = $_FILES['file']['tmp_name'];
  $name = $_FILES['file']['name'];
  move_uploaded_file($tmp_name,'audit/'.$name);
?>

原创文章,作者:ZZYCE,如若转载,请注明出处:http://www.wangzhanshi.com/n/9444.html

(0)
ZZYCE的头像ZZYCE
上一篇 2025年1月1日 16:46:37
下一篇 2025年1月1日 16:46:39

相关推荐

  • 浅谈laravel5.X安装centos6.5系统

    由于工作需要特去从零学习laravel。 真的是如laravel中文网所说的样子:一开始接触laravel最好是一键安装集成包,省得开头就被(composer)难住以至于未开始已经…

    2025年1月1日
  • phpstudy中MySQL数据库无法启动的解决方法

    phpstudy数据库无法启动有以下几个原因。 一、自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成ph…

    2024年12月17日
  • PHP5权威编程的示例分析

    PHP4中,不使用__construct()作为构造函数的名字,必须使用类的名字定义一个方法,就像在C++中一样。 PHP5中,使用新的统一的构造函数命名方式:__construc…

    php 2025年1月2日
  • php7中类型约束的作用

    在PHP7之前,函数和类方法不需要声明变量类型,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。 为了解决这个问题,PHP7引入了类型声明。 目…

    php 2025年1月1日
  • PHP7与PHP5有区别吗

      PHP 的生命周期 / 启动流程   完整的生命周期为模块初始化、请求初始化、请求处理、请求关闭、模块关闭五大阶段。   cli 模式下,每个脚本都会完整的执行上面的五大阶段;…

    php 2025年1月1日
  • 解决编译安装php5328报“zendparse”错误故障

    今天安编绎安装php5328在make时报以下错误: php-5.3.28/Zend/zend_language_parser.h:317: error: co…

    php 2025年1月2日
  • PHP5中怎么实现多态性

    一、 PHP 5和多态性 本文想讨论面向对象编程中最为重要的部分之一–多态性的设计。为了说明问题,我使用了PHP 5。在你继续阅读之前,请首先明确本文并不是完全有关于P…

    php 2025年1月2日
  • CentOS上如何搭建PHP7开发测试环境

    Step.1 准备服务器 那第一步,我们先搞个服务器吧,搞啥服务器呢,既然是测试用那就搞点不要钱的,或者方便的吧,这里就推荐大家试试用 AWS 或者自己机器上搭建虚拟机,比如 Va…

    php 2025年1月1日
  • php怎么安装amqp扩展

    当前使用Centos7.x系统,php使用7.1版本,wlnmp一键包已支持该扩展 php7安装amqp扩展(基于Centos6.x)参考:https://www.php.cn/t…

    2025年1月1日
  • PHP7留言板之MYSQL数据库怎么设计

    本步骤纲目:1、超全局变量$_GET $_POST2、MYSQL数据库设计3、mysqli相关数据库操作,连接及增删改查(select insert delete update)操…

    php 2025年1月1日

发表回复

登录后才能评论