Home>Article>Backend Development> Example analysis of cURL file upload function compatible with php5 and php7 PHP skills
This article mainly introduces the cURL file upload function that is compatible with php5 and php7. It analyzes the relevant judgments and specific operation techniques for php5 and php7 versions when using curl to upload files. Friends in need can refer to it. Next
The example in this article describes the cURL file upload function that is compatible with php5 and php7. Share it with everyone for your reference, the details are as follows:
Why write this example
I recently modified a project and needed to upload files through cURL .
I remembered that I had done a similar implementation before, so I dug out the previous code and used the "@" prefix method.
But the same method doesn’t work now! Later it was discovered that it was a version compatibility issue.
In the spirit of open source sharing and at the same time to prevent myself from forgetting, I wrote the following sample program.
Sample program
Special note:
There are 3 files in total, all placed in the test directory of the web root directory , and ensure that the directory is writable. Uploaded images will also be saved in this directory.
If you want to run the program file in another directory, you must change the relevant URL in the php code, otherwise the example may not run.
上传示例 下面上传文件到中间脚本:
* @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']}
"); } else { exit("curl上传失败!错误信息:{$result['info']}"); } } else { exit("发生错误,curl返回结果:{$result}"); } } else { exit('curl请求发生错误' . var_export($error, true)); }
* @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));
References
http://php.net/manual/en/function.curl-setopt .php
//www.jb51.net/article/139950.htm
PHP block query implementation method analysis php skills
PHP half search algorithm example analysis php skills
##PHP Half (half) search algorithm example analysis PHP skills
The above is the detailed content of Example analysis of cURL file upload function compatible with php5 and php7 PHP skills. For more information, please follow other related articles on the PHP Chinese website!