• 締切済み

PHPでのビット演算、バイナリファイル操作

cdsdasdsの回答

  • cdsdasds
  • ベストアンサー率52% (114/217)
回答No.2

>PHP外で処理をする場合、ビット演算に適した言語というと、一般的にはCなどになるのでしょうか? 処理の内容によるでしょうね。汎用性ならC、perl、処理がパターン化していて、ある程度単純ならsed、awk等もよいかもしれません。 >こちらの「加工」とはどういった加工でしょうか? おやりになりたい内容によって異なりますが、基本は望まれない実行命令が発行されないように、命令文の文字列をチェックし、あるいは強制的にパスを付加したり、記号とかがファイル名に入っていたら、エラーを返すなり、文字を置き換えるなりといった処理をするということです。

ozawachev
質問者

補足

あ、渡す引数などのサニタイズのことですね。 ありがとうございます。 ちょっとperlでやってみようかと思います。

関連するQ&A

  • バイナリファイルをバイト単位でアクセスするには?

     大サイズのバイナリファイルに対して、perlでチェックサムを調べたりCRCチェックをかけるプログラムを作成したいと考えています。従って、そのバイナリファイルからバイト単位でデータを取り出して、計算するということをしなければならないのですが、いちばん基本的なところの、『バイナリファイルからバイト単位で順番にデータを取り出す方法』がわかりません。  よろしくお願いします。

    • ベストアンサー
    • Perl
  • バイナリファイルとバイナリ文字列の違い

    がわかりません。 例えば >http://e-words.jp/w/E38390E382A4E3838AE383AAE58897.html をみるとバイナリ列は1バイトを連ねたものだというらしいです。 つまり【文】という文字列を文字コードUTF-8でバイト配列化すると [1] => 230 [2] => 150 [3] => 135 となります。 (これはPHPでunpackかけましたが他の言語のGetBytes()などでも同じバイト値がでました。) この【文】という文字列はバイナリ列になるわけですよね? 例えばこの【文】という文字だけを保存したbun.txtというファイルはバイナリーファイルに なるのでしょうか? バイナリファイルの定義をみると >http://e-words.jp/w/E38390E382A4E3838AE383AAE38395E382A1E382A4E383AB.html 上記URLだと >文字コードの範囲などを考慮せずに作成されたファイル というのがバイナリファイルであるとあります。 つまりバイナリファイルとは 1バイト・・つまり8ビット(0~255)までの数値で表したものを連ねたもので なおかつ、文字コードなどの解釈を一切行わなずに、バイト値のみが記述されたデータと おもってもよいのでしょうか?

  • php のバイナリデータ操作について

    php のバイナリデータ操作で詰まっています。 やりたいことは、バイナリファイルから読み込んだ2byteのデータを 4bitずつに取り出して、データをチェックしたいです。 マスクして、シフトしてと考えたのですが マスクの時点で意図するデータではなくなっています。 良い方法はありますでしょうか。 以下、試してみた結果です。 //2byteづつ読む $bin_data = fread( $handle, 2 );  ■bin2hex()の後にマスク $dataStr = bin2hex($bin_data); print ( $dataStr ); →結果 ABCD $mask = ($dataStr & "FFFF") ; print ( $dataStr ); →結果 @BBD $mask = ($dataStr & 0xFFFF) ; print ( $dataStr ); →結果 0  ■bin2hex()の後にマスク $mask_data = ( $bin_data & 0xFFFF ) ; $dataStr = bin2hex($mask_data); print ( $mask_data ); →結果 0 $mask_data = ( $bin_data & "FFFF" ) ; $dataStr = bin2hex($mask_data); print ( $mask_data ); →結果 文字ばけ

    • ベストアンサー
    • PHP
  • バイナリファイルの特定のバイナリ値をカウントする方法は?

    お世話になります。 質問です。 バイナリファイルから特定のバイナリ値を抽出して、 1バイト単位でカウントする方法はありますか? (例) バイナリファイル"FileA"のバイナリ値0xffをカウントする。 <FileAの中身> 0xfe 0xff 0xff 0x12 0x00 0x00 0xff 0x01 0x00 ↑のファイルから0xffを3カウントした。 $ hexdump -v <ファイル> | grep <ターゲットの値> | wc -w (質問を書いてる現在、linux環境が無いので記憶を頼りに書いてますので間違ってると思います) ↑のようにのような方法は思いつきましたが 「一度テキストにして~grepにパイプして~wcにパイプする」となると、 ファイルサイズに依っては処理に数時間費やしてしまいます。 なので、以下の条件を満たす方法を探しています。 (1)処理の無駄が少ない(バイナリを直接探す方法等) (2)できるだけシンプルにコマンドライン一行で実現 (3)スクリプトファイルを含むソースファイルを作る作業無し よろしくお願いします。

  • PHPでテキストファイルかどうかを判定する方法

    基本的なことですが、PHPでテキストファイルかバイナリーファイかを判定する方法がわかりません。以下のperlコードをphpで書く方法を教えてください。 if( -T $filename ){ テキストファイルの処理 }else{ バイナリーファイルの処理 } マニュアル見ましたがよくわかりませんでした。よろしくお願いします。

    • 締切済み
    • PHP
  • バイナリファイルの通信について

    Webシステムの開発を検討しています。 サーバはJavaで開発し、クライアントはIEなどのWebブラウザではなく、VBのクライアントアプリケーションで構築しようと考えいます。 その際、問題となっている事は、バイナリファイルの通信方法です。 例えば、クライアントが起動した際にサーバからイメージファイルを送信する方法など。 バイナリファイルをテキスト文字列に変換して送信することはできると思うのですが、他には、クライアントとサーバで言語が異なる場合、一般にどのようなバイナリファイルの送信方法があるのか、色々比較した上で決めたいと思っています。 色々な送信方法や、参考Webサイトなど、ご存知の方がいらっしゃいましたらご教授願います。

  • バイナリファイルの出力

    「test.dat」というファイルをブラウザから ダウロードさせるためにバイナリ出力をしたいのですが、 空ファイルばかりできて上手くいきません。 以下のようなコードなのですが、どこが悪いでしょうか? ご教授ください。お願いします。 症状:ブラウザからダウンロードすると、ファイル名は正しいが 空のファイルになっている 環境:perl 5.8.7 windows server2003 ----------------------------------------------------------- #!/usr/local/bin/perl print "Content-Disposition: attachment; filename=\"test.dat\"\n"; print "Content-Type: application/octet-stream\n\n"; open(IN, "test.dat"); binmode(IN); binmode(STDOUT); print while (<IN>); close(IN); -----------------------------------------------------------

    • ベストアンサー
    • Perl
  • バイナリデータ処理

    VC++6.0初心者です。 バイナリファイルの加工を行いたいのですが、テキスト系のプログラムしか作ったことが無いのでどうすればよいのか分かりません。 やりたいことは、 1、バイナリファイルを開いて2バイトずつ読み込む。 2、"FFD8"がきたら別ファイルにコピー開始。 3、"FFD9"がきたらコピー終了。 です。 大まかな手順がわかりません。 普段、テキストですとCStdioFileを使っていますが、これを使って開いてもよいのかどうかも分かりません(いろいろ調べはしましたがわかりませんでした)。 解決の手がかりやヒントをお教えいただければと思います。よろしくお願いいたします。

  • VisualBasic6.0 バイナリでの読み書き

    VisualBasic6.0(AccessVBA)でバイナリ形式(EBICDIC)のファイルを読み書きしようとしています。 その際に以下の問題が発生してしまい原因が分からずに悩んでおります。 ■問題  ファイルの読み込みはファイルのサイズ(バイト数)分を一気に読込ます。  その後、VB側で1レコード(128バイト)単位に分割してファイル出力(PUT)しています。  このPUTを行うと、ファイルの先頭4バイトに(08001200)と出力されてしまいます。  この4バイトが出力される原因が分からず悩んでおります。 どなたかご存知の方がいらっしゃいましたらご回答いただけると助かります。 参考にバイナリエディタのキャプチャを添付いたします。 以上です。

  • PHPをcgiとして使う方法がもしあったら教えて下さい!

    PHPをサーバーサイド言語でなくて、 一行目に #!/usr/bin/php などと書いて、 Perlと同じようにcgiとしてブラウザから使える方法 がもしあったら教えて下さい!

    • ベストアンサー
    • PHP