libCURL でこの奇妙な動作が発生しています。(libCURL の man ページに記載されているように) ファイル名の先頭に「@」を追加してファイルをアップロードしようとすると、ファイルの内容がアップロードされる代わりに、libCURL はファイル名自体を送信します (先頭に @ を付けます)。
これは、Windows 2008 R2 で実行されており、xampp バージョン 5.6.8 では、curl がコンパイルされています (curl バージョン 7.40.0)。
関連するコードフラグメントは次のとおりです。
$post['pic'] = "@C:\\image.png";
$ret = curl_setopt( $ch, CURLOPT_POST, TRUE );
if (!$ret) die("curl_setopt CURLOPT_POST failed");
$ret = curl_setopt( $ch, CURLOPT_POSTFIELDS, $post );
if (!$ret) die("curl_setopt CURLOPT_POSTFIELDS failed");
$response = curl_exec( $ch );
このコードは Linux では機能しますが、Windows Server 2008 では機能しません。
取得したフォームデータは次のとおりです。
Content-Type: multipart/form-data; \\
boundary=------------------------c74a6af8b52d997a
--------------------------c74a6af8b52d997a
Content-Disposition: form-data; name="pic"
@C:\image.png
--------------------------c74a6af8b52d997a--
ご覧@C:\image.png
の通り中身ではなく受け取ります。
libCURL がファイルの内容をアップロードしない理由を知っている人はいますか?