PHP cURL 上传文件兼容模式

传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传。这与命令行直接调用cURL程序的语法是一致的。

PHP从5.5开始引入了新的CURLFile类用来指向文件。CURLFile类也可以详细定义MIME类型、文件名等可能出现在multipart/form-data数据中的附加信息。PHP推荐使用CURLFile替代旧的@语法。

PHP 5.5另外引入了CURL_SAFE_UPLOAD选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件。5.5的默认值为false,5.6的默认值为true。

代码如下:

<?php

/* 
 * http://localhost/upload.php:
 * print_r($_POST);
 * print_r($_FILES);
 */

$ch = curl_init();

$filePath = '/home/vagrant/test.png';
$data     = array('name' => 'Foo', 'file' => '@' . $filePath);

//兼容5.0-5.6版本的curl
if (class_exists('\CURLFile')) {
    $data['file'] = new \CURLFile(realpath($filePath));
} else {
    if (defined('CURLOPT_SAFE_UPLOAD')) {
        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, FALSE);
    }
}

curl_setopt($ch, CURLOPT_URL, 'http://localhost/test/curl/load_file.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
喜欢就支持一下吧
点赞0
分享
评论 抢沙发
Comming的头像-零碎遇见

昵称

取消
昵称表情