传统上,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); ?>
© 版权声明
特别声明:该文观点仅代表作者本人,"遇见科技圈"仅提供信息存储空间服务,如需转载、摘编请取得原作者授权。
THE END