[PHP-users 2609] Re: fsockopen() でマルチパート

岡本 晃一 php-users@php.gr.jp
Wed, 10 Oct 2001 02:24:13 +0900


こんばんは、岡本です。
SMTPがおかしくって、自分でHP上にWEBメーラーを作り置きしたスクリプトで投稿し
たのですが、
その後SMTPが復活。複数投稿となってしまいました・・・申し訳ありません。

ところで、マルチパートの件ですが、実はMySQLにBLOBで保存した画像データを直接
ヘッダに乗せて
サーバーに渡そうとしているんですが、画像のデータの終わりのところで改行コード
が誤認識されているようなのです。
---
  $images = tep_db_query("SELECT * FROM images WHERE image_id= '" .
$HTTP_GET_VARS['image_id'] . "'");
  $images_values = tep_db_fetch_array($images);

$request = "-----------------------------7d112c38800\n";
$request .= "Content-Disposition: form-data; name=\"upfile\";
filename=\"D:\My Pictures\a.gif\"\n";
$request .= "Content-Type: " . $images_values['image_type'] . "\n\n";
$request .= $images_values['image_data'];
$request .= "-----------------------------7d112c38800\n";

$header = "POST /image HTTP/1.1 \n";
$header .= "Content-type: multipart/form-data;
boundary=---------------------------7d112c38800";

$fp = fsockopen(kaigono.net, 80, &$err_num, &$err_msg, 30);
if ($fp)
{
fputs($fp, $header . $request);
while (!feof($fp))
$response .= fgets($fp, 10240);
}
---
文字コードは送信・受信ともにEUC-JPです。

ちなみに普通にHTML表示するときは以下のスクリプトで表示できます。
<?
    $images = tep_db_query("SELECT * FROM images WHERE image_id= '" .
$HTTP_GET_VARS['image_id'] . "'");
    WHILE ($row = tep_db_fetch_array($images))
    {
 $image_type = $row['image_type'];
 $image_data = $row['image_data'];
 }
   header('Content-type: ' . $image_type);
   print $image_data;
   exit();
?>

---
岡本 / info@kaigono.net

FreeBSD 4.4R + Apache1.3.20 + PHP 4.0.6 with MySQL