4

我将使用 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将文件转换为字节表示的方法?

4

2 回答 2

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 是您要发送的文件的路径。

于 2012-06-27T14:08:41.873 回答
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);

In situations like these it helps to make a mock web form and run it through Firefox with firebug enabled or something, and then inspect the request that was sent. From there you can deduce the important things to include.

于 2012-06-27T14:47:04.663 回答