【问题标题】:How to use in cURL a posted file in PHP?如何在 cURL 中使用 PHP 中的已发布文件?
【发布时间】:2016-02-20 08:14:21
【问题描述】:

我正在编写一种 php 代理,用于内部服务。

我正在做一个非常简单的 curl 用法,如下所示:

$ch = curl_init( $url );
//set timeout to infinit 
set_time_limit(0);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);

if ( strtolower($_SERVER['REQUEST_METHOD']) == 'post' ) {
    curl_setopt( $ch, CURLOPT_POST, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $_POST) );
}

curl_setopt($ch, CURLOPT_HTTPHEADER, getallheaders());

curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_HEADER, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

//Request
list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );
$status = curl_getinfo( $ch );  
curl_close( $ch );

我还需要在该 curl exec 中包含传入文件。我不知道文件名,只知道表单输入名称。

问题

1) 如何在 CURLOPT_POSTFIELDS 中包含 $_FILES 的内容? 2) 是否需要指定是否为二进制文件?

谢谢

【问题讨论】:

    标签: php file curl


    【解决方案1】:

    这是一个如何通过 cURL 发送文件的简单示例。二进制文件就不用说了。

    $tmp = $_FILES['image']['tmp_name'];
    $filename = basename($_FILES['image']['name']);
    
    $data = array(
        'uploaded_file' => $tmp.';filename='.$filename,
    );
    
    $ch = curl_init();   
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    // set other cURL options here.
    
    curl_exec($ch);
    

    现在,在另一边,您可以在$_FILES 中收到详细信息。

    receiver.php(假设这是 cURL 调用的对象)。

    var_dump($_FILES)
    

    【讨论】:

    • 感谢您的回复,但这不起作用。我正在接收 tmp 文件路径。这是原始请求: Content-Disposition: form-data;名称=“updoaded_file”/tmp/phphga6Mb;文件名=Jellyfish.jpg。 $_FILES 为空
    • 我在这里找到了解决方案:stackoverflow.com/questions/27228367/…
    猜你喜欢
    • 2012-12-27
    • 2011-03-06
    • 2021-12-12
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多