おでんはじめました。

required ちくわぶ and 巾着,optional はんぺん.

バイナリファイルを文字列でサーバーへ転送する

バイナリファイルを添付でなく文字列でサーバーへ転送する方法を調べたのでメモ。

バイナリファイルを文字列に変換するのはunpackを使用する。

$str = unpack("H*", $binary);

試しにZIPファイルを読み込んで文字列に変換してみる。

$binary = file_get_contents('sample.zip');
$str = unpack("H*", $binary);
echo $str;

こんな感じ。

504b0304140008000800a6b86a420000000000000000000000000800 10006c6973742e786d6c55580c006fe6a95418933c ...略

これをバイナリに戻すのは、

$binary_string = pack("H*" , $str[1]);  //配列になっているので注意

これをファイルに保存すれば復元される。

if ( !$handle = fopen('new.zip', 'w') ){
  echo "Cannot create file";  //権限注意(777とか)
  exit; 
}
if ( fwrite($handle, $binary_string ) === FALSE ){
  echo "Cannot write file";
  exit;
} 
fclose( $handle );

ここまでできればPOSTでバイナリの文字列を渡せば転送できるはず。

次はこれを使ってC#からサーバーへバイナルファイルを転送してみる。

参考: バイナリ データの処理