バイナリファイルを文字列でサーバーへ転送する
バイナリファイルを添付でなく文字列でサーバーへ転送する方法を調べたのでメモ。
バイナリファイルを文字列に変換するのは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#からサーバーへバイナルファイルを転送してみる。
参考: バイナリ データの処理