這篇文章主要介紹了可兼容php5與php7的cURL文件上傳功能,結合實例形式分析了針對php5與php7版本在使用curl進行文件上傳時的相關判定與具體操作技巧,需要的朋友可以參考下
本文實例講述了可相容於php5與php7的cURL檔案上傳功能。分享給大家供大家參考,具體如下:
為啥要寫這個範例
最近修改一個項目,需要透過cURL上傳文件。
記得之前做過類似實作的,於是翻出來之前的程式碼,使用的是「@」前綴方式。
但同樣的方法現在不行了!後來發現,是版本相容問題。
奔著開源分享的精神,同時避免自己遺忘,於是寫了下面的範例程式。
範例程式
特別說明:
共3個文件,都放在web根目錄的test目錄下,同時保證該目錄可寫。上傳的圖片也會儲存在該目錄。
如果要將程式檔案放在其他目錄運行,則必須更改php程式碼中的相關URL,否則範例可能無法運行。
<html> <head> <title>上传示例</title> </head> <body> <p>下面上传文件到中间脚本:</p> <br /> <form action="upload.php" method="post" enctype="multipart/form-data"> 选择文件: <input type="file" name="file" /> <input type="submit" value="上传" /> </form> </body> </html>
<?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)); }
<?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));
#http://php.net/manual/en/function.curl-setopt .php
###PHP折半(二分)查找演算法實例分析php技巧########################################################
以上是可相容於php5與php7的cURL檔案上傳功能實例分析php技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!