4

phpを使用してファイルを変換し、HTTPPOSTリクエストの一部として送信します。私のコードの一部があります:

        $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);

このような状況では、モック Web フォームを作成し、firebug を有効にした Firefox などで実行してから、送信されたリクエストを検査すると役立ちます。そこから、含める重要なものを推測できます。

于 2012-06-27T14:47:04.663 に答える