首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用CURL和PHP将文件发送到HTTPS URL

使用CURL和PHP将文件发送到HTTPS URL
EN

Stack Overflow用户
提问于 2011-01-21 02:21:47
回答 2查看 15K关注 0票数 2

我正在尝试使用以下代码将文件发送到Https URL:

代码语言:javascript
复制
$file_to_upload = array('file_contents'=>'@'.$target_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSER, FALSE);
curl_setopt($ch, CURLOPT_UPLOAD, TRUE);
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'file='.$file_to_upload); 
$result = curl_exec($ch); 
$error = curl_error($ch);
curl_close ($ch); 
echo " Server response: ".$result; 
echo " Curl Error: ".$error;

但出于某种原因,我得到了这样的回应:

代码语言:javascript
复制
Curl Error: Failed to open/read local data from file/application

任何建议都会有帮助,谢谢!

更新:当我取出CURLOPT_UPLOAD时,我从目标服务器得到一个响应,但它告诉我负载中没有文件

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-21 02:32:28

您正在向CURLOPT_POSTFIELDS传递一个相当奇怪的参数。试试更多像这样的东西:

代码语言:javascript
复制
<?
$postfields = array('file' => '@' . $target_path);
// ...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
?>

此外,您可能希望CURLOPT_RETURNTRANSFERtrue,否则$result将不会获得输出,而是直接将其发送到缓冲区/浏览器。

来自php.net的This example可能也很有用:

代码语言:javascript
复制
<?php

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
票数 8
EN

Stack Overflow用户

发布于 2017-05-09 20:47:35

在coreward的答案之上:

根据how to upload file using curl with php的说法,从PHP5.5开始,你需要使用curl_file_create($path)而不是"@$path"

经过测试:它可以正常工作。

使用@方式不会上传任何文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4750927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档