文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP如何通过CURL上传文件

2023-09-01 20:33

关注

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

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

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

1

2

this is a file for test

hello PythonTab!

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

1

2

3

4

5

6

7

8

9

10

11

12

13

 "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中写了以下代码:

1


upload.php首先使用var_export将$_FILES变量输出到标准输出,然后使用file_get_contents读取$_FILES[‘upload’][‘tmp_name’]所指文件的内容,并输出到标准输出,然后把$_FILES[‘upload’][‘tmp_name’]所指文件自制到当前目录的log_copy.txt文件中。该脚本的标准输出如下:

1

2

3

4

5

6

7

8

9

10

11

12

array(

 'upload' =>

     array(

     'name' => 'log.txt',

     'type' => 'application/octet-stream',

     'tmp_name' => '/tmp/phpLUB59F',

     'error' => 0,

     'size' => 36,

     )

 )

 this is a file for test

 hello PythonTab!

可以看到$_FILES变量中有一个upload数组,对应到上传文件描述信息,其中name和type分别表示名称和类型。tmp_name比较关键,服务端在接收到上传文件之后,会把文件写在一个临时文件中,这个临时文件的名字就是tmp_name的值,这也是为什么我们读取该文件可以获取一log.txt的文件内容。一般在服务端接收到上传文件后都需要立即读取该文件或者把文件复制到别外一个文件中,因为tmp_name所指的临时文件在服务端脚本执行完毕后会被删除掉,upload.php脚本的最后一行就是把临时文件复制到我们的目标文件中。

来源地址:https://blog.csdn.net/weixin_44353800/article/details/130739035

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯