PHP - 将文件转换为二进制文件并使用HTTP POST发送它

时间:2012-06-27 13:57:45

标签: php http post

我将使用php转换一些文件并将其作为HTTP POST请求的一部分发送。 我的部分代码是:

        $context = stream_context_create(array(
        'http' => array(
            'method' => 'POST',
            'header' => "Content-type: " . $this->contentType."",
            'content' => "file=".$file
        )
            ));
    $data = file_get_contents($this->url, false, $context);

变量$file必须是我要发送的文件的字节表示吗?

这是在不使用表单的情况下在PHP中发送文件的正确方法吗?你有线索吗?

使用PHP将文件转换为字节表示的方法是什么?

2 个答案:

答案 0 :(得分:2)

您可能会发现使用CURL要容易得多,例如:

function curlPost($url,$file) {
  $ch = curl_init();
  if (!is_resource($ch)) return false;
  curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER , 0 );
  curl_setopt( $ch , CURLOPT_FOLLOWLOCATION , 0 );
  curl_setopt( $ch , CURLOPT_URL , $url );
  curl_setopt( $ch , CURLOPT_POST , 1 );
  curl_setopt( $ch , CURLOPT_POSTFIELDS , '@' . $file );
  curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );
  curl_setopt( $ch , CURLOPT_VERBOSE , 0 );
  $response = curl_exec($ch);
  curl_close($ch);
  return $response;
}

其中$ url是您要发布到的位置,$ file是您要发送的文件的路径。

答案 1 :(得分:1)

奇怪的是,我刚刚写了一篇文章并说明了同样的情况。 (phpmaster.com/5-inspiring-and-useful-php-snippets)。但是为了让你开始,这里的代码应该有效:

<?php
$context = stream_context_create(array(
        "http" => array(
            "method" => "POST",
            "header" => "Content-Type: multipart/form-data; boundary=--foo\r\n",
            "content" => "--foo\r\n"
                . "Content-Disposition: form-data; name=\"myFile\"; filename=\"image.jpg\"\r\n"
                . "Content-Type: image/jpeg\r\n\r\n"
                . file_get_contents("image.jpg") . "\r\n"
                . "--foo--"
        )
    ));

    $html = file_get_contents("http://example.com/upload.php", false, $context);

在这些情况下,有助于制作模拟Web表单并通过启用了firebug的Firefox运行它,然后检查已发送的请求。从那里你可以推断出要包含的重要事项。