• ベストアンサー

バイナリファイル内の文字列を検索したい

初心者で恐縮ですがよろしくお願いします。 入力された値でバイナリファイル内検索し、その値がある行を特定したいのですが、file_get_contentsしてみても歯抜けになってしまっていて、そのままの状態で文字列として取得することができません。↓でPHPはバイナリファイルも文字列として検索でいるとあったんですが・・・  http://blog.asial.co.jp/707 バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

> htmlspecialcharsをつけて読み込んだ内容 >Array >( > [0] => * Bootstrap v3.3.7 (http://getbootstrap.com) file_get_contents()で読み込んでいるのという話でしたが、 そこから違っているんですか? file_get_contents() はstringを返す関数なので 上記のようなArray構造 にはなりません。 上記をみると偶数行だけArrayに入っているので、 ファイルを読み込んで、自分で配列に入れる処理を作っていて そのときに、奇数行を抜いてしまうようなアルゴリズムになって いるんじゃないですか? (これ以上はソースをみないとなんとも) >コードがバイナリファイルであることに問題があるのかと思い、 このCSSやや前のarchive.phpは、ただのテキストファイルですね。 バイナリデータなんて含んでいませんよ。

natyo4235
質問者

お礼

回答ありがとうございます。 偶数行しか入っていないことに気づきませんでした。配列に入れるところでおかしなことをしていたようです。お騒がせしました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

「', '' ); the_archive_description( '', '' ); ?>」 で表示されるということですが、twentyfifteen/archive.php の上記の部分は、 実際は '<h1 class="page-title">', '</h1>' ); the_archive_description( '<div class="taxonomy-description">', '</div>' ); ?> です。 (歯抜けと言っている部分が、HTMLタグの部分というのに注目です) つまり、実際には、上記のようにきちんと入手できているのに PHPのソースを そのままecho(またはprint)していているので ブラウザは、それをHTMLタグと認識するので、 結果、その部分が歯抜けに見えているというだけのことでしょう。 つまり、notnotさんが言われている、  「3.確認方法が間違っている」 という可能性が高いです。 HTMLやPHP,JavaScript,CSS等のブラウザにとって意味のある符号を含んだファイル のソースコード自体をブラウザ上で確認したいのなら、 その前にhtmlspecialchars等でエスケープしておく必要があります。 もしくは、ブラウザの「ソース表示」のほうで、生の出力を確認するかです。

natyo4235
質問者

お礼

回答ありがとうございます。 実は問題の発端はエスケープしても歯抜けになってしまったため、コードがバイナリファイルであることに問題があるのかと思い、また、例えばcssファイルなどhtmlファイル以外をhtmlspecialcharsして読むことに問題があるのかと思い、htmlspecialcharsをつけずに質問させていただきました。まどっろこしくてすみません。 問題の箇所は以下です。 ーーーーーーーーーーーーーーーーーーーーーーーーー 読み込みたいファイルの内容 /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } body { margin: 0; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } audio, canvas, progress, video { display: inline-block; vertical-align: baseline; } audio:not([controls]) { display: none; height: 0; } ーーーーーーーーーーーーーーーーーーーーーーーーーーー htmlspecialcharsをつけて読み込んだ内容 Array ( [0] => * Bootstrap v3.3.7 (http://getbootstrap.com) [1] => * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) [2] => /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ [3] => font-family: sans-serif; [4] => -ms-text-size-adjust: 100%; [5] => body { [6] => } [7] => aside, [8] => figcaption, [9] => footer, [10] => hgroup, [11] => menu, [12] => section, [13] => display: block; [14] => audio, [15] => progress, [16] => display: inline-block; [17] => } [18] => display: none; [19] => } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー こちらはエスケープしていますが、最初のコメント部分の/*や margin: 0;など結構多く歯抜けになってしまっています。これが疑問の大元です。 お手すきでしたらご回答いただければ幸いです。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4896/10351)
回答No.3

> 歯抜けと言いますか、下の文字列はwordpressのtwentyfifteen/archive.phpをfile_get_contentsしたものなんですが、よくわからないところから始まってそのあともほとんど取得できてません。途中もはぬけです。 可能性としては、 1.ファイルが壊れている 2.取得方法が間違っている 3.確認方法が間違っている のいずれかです。これだけの情報だとどれか判断付きません。 > PHPもテキストファイルでしょうか? PHPに限らず、プログラムのソースは全部テキストファイルです。 エディタ(メモ帳など)で開いて編集する物は全部テキストファイルです。

natyo4235
質問者

お礼

回答ありがとうございます。 テキスト/バイナリの区別が明確になりました。ありがとうございます。

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? バイナリーファイルという場合は、一般的にはテキストとして読めないファイルのことをいいます。 ですのでphp,javascript,html,cssのファイルはバイナリーファイルとはいいません(テキストエディタで読めますよね)

natyo4235
質問者

お礼

回答ありがとうございます。 >テキストエディタで読めますよね なるほどでした。これで明確に区別がわかりました。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4896/10351)
回答No.1

> 入力された値でバイナリファイル内検索し、その値がある行を特定したいのですが、 バイナリファイルに行の概念はありません。 > file_get_contentsしてみても歯抜けになってしまっていて、 何を見て、「歯抜け」と表現していますか? > バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? コンピューターで扱うデータは全てバイナリーなので、全てのファイルはバイナリーファイルであると言うことも出来ますが、普通に使われる意味ではファイルのうち、テキストファイルでないものをバイナリーファイルと言います。 なので、JavaScriptソースや、HTML、CSSは全てテキストファイルです。

natyo4235
質問者

お礼

回答ありがとうございます。 歯抜けと言いますか、下の文字列はwordpressのtwentyfifteen/archive.phpをfile_get_contentsしたものなんですが、よくわからないところから始まってそのあともほとんど取得できてません。途中もはぬけです。 ', '' ); the_archive_description( ' ', ' ' ); ?> __( 'Previous page', 'twentyfifteen' ), 'next_text' => __( 'Next page', 'twentyfifteen' ), 'before_page_number' => '' . __( 'Page', 'twentyfifteen' ) . ' ', ) ); // If no content, include the "No posts found" template. else : get_template_part( 'content', 'none' ); endif; ?> >JavaScriptソースや、HTML、CSSは全てテキストファイルです。 PHPもテキストファイルでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう