头像

PHP如何通过CURL上传文件

资源/模板错误反馈 收集员 2018-09-12浏览(911)   

PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息。


下面我们以一个例子来展示这个过程。


假设本地有一个文本文件log.txt,其路径为“/www/test/log.txt”,内容如下:


this is a file for test

hello PythonTab!

为了把这个文件上传给服务端的脚本http://s575.com/upload.php,我们在本地写了一个名为curl_file.php的脚本,内容如下:

<?php
 $url = "http://s575.com/upload.php";
 $post_data = array(
 "foo" => "bar",
 //要上传的本地文件地址
 "upload" = > "@/www/test/log.txt"
  );
  $ch = curl_init();
  curl_setopt($ch , CURLOPT_URL , $url);
 curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch , CURLOPT_POST, 1);
 curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);
 $output = curl_exec($ch);
 curl_close($ch);
 echo $output;
 ?>

curl_file.php的逻辑很简单,设置POST变量$post_data,其中upload指向需要发送的文件。这里要注意,我们之前使用POST都是发送一个字符串,然后在服务器端使用file_get_contents(“php//input”)来获取该字符串,和这里的用法不一样,其实POST也可以像GET一样,发送键值对。在服务端有一个超级全局变量$_POST可以像$_GET一样,获取相应的POST数据的值。需要注意的是,上传文件的变量不是存在着$_POST中,而是在$_FILES中。


为了展示服务端收到上述代码的文件上传请求的逻辑,我们在upload.php中写了以下代码:

<?php
 echo var_export($_FILES,true);
 echo file_get_contents($_FILES['upload']['tmp_name']);
 copy($_FILES['upload']['tmp_name'], "./log_copy.txt");
 ?>


标签:
积分:新注册可得1积分|评论每次可得1积分每天5次[充值1元=10积分]AD:Php/Tp5程序开发二次开发联系QQ839070295
评论1
头像
  • 头像1楼
    10-24 19:34
    建站服务
    [闭嘴]

模板缺失不完整!联系我!