- ベストアンサー
バイナリファイル内の文字列を検索したい
初心者で恐縮ですがよろしくお願いします。 入力された値でバイナリファイル内検索し、その値がある行を特定したいのですが、file_get_contentsしてみても歯抜けになってしまっていて、そのままの状態で文字列として取得することができません。↓でPHPはバイナリファイルも文字列として検索でいるとあったんですが・・・ http://blog.asial.co.jp/707 バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> htmlspecialcharsをつけて読み込んだ内容 >Array >( > [0] => * Bootstrap v3.3.7 (http://getbootstrap.com) file_get_contents()で読み込んでいるのという話でしたが、 そこから違っているんですか? file_get_contents() はstringを返す関数なので 上記のようなArray構造 にはなりません。 上記をみると偶数行だけArrayに入っているので、 ファイルを読み込んで、自分で配列に入れる処理を作っていて そのときに、奇数行を抜いてしまうようなアルゴリズムになって いるんじゃないですか? (これ以上はソースをみないとなんとも) >コードがバイナリファイルであることに問題があるのかと思い、 このCSSやや前のarchive.phpは、ただのテキストファイルですね。 バイナリデータなんて含んでいませんよ。
その他の回答 (4)
- superside0
- ベストアンサー率64% (461/711)
「', '' ); 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等でエスケープしておく必要があります。 もしくは、ブラウザの「ソース表示」のほうで、生の出力を確認するかです。
お礼
回答ありがとうございます。 実は問題の発端はエスケープしても歯抜けになってしまったため、コードがバイナリファイルであることに問題があるのかと思い、また、例えば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% (4900/10358)
> 歯抜けと言いますか、下の文字列はwordpressのtwentyfifteen/archive.phpをfile_get_contentsしたものなんですが、よくわからないところから始まってそのあともほとんど取得できてません。途中もはぬけです。 可能性としては、 1.ファイルが壊れている 2.取得方法が間違っている 3.確認方法が間違っている のいずれかです。これだけの情報だとどれか判断付きません。 > PHPもテキストファイルでしょうか? PHPに限らず、プログラムのソースは全部テキストファイルです。 エディタ(メモ帳など)で開いて編集する物は全部テキストファイルです。
お礼
回答ありがとうございます。 テキスト/バイナリの区別が明確になりました。ありがとうございます。
- wormhole
- ベストアンサー率28% (1626/5665)
>バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? バイナリーファイルという場合は、一般的にはテキストとして読めないファイルのことをいいます。 ですのでphp,javascript,html,cssのファイルはバイナリーファイルとはいいません(テキストエディタで読めますよね)
お礼
回答ありがとうございます。 >テキストエディタで読めますよね なるほどでした。これで明確に区別がわかりました。
- notnot
- ベストアンサー率47% (4900/10358)
> 入力された値でバイナリファイル内検索し、その値がある行を特定したいのですが、 バイナリファイルに行の概念はありません。 > file_get_contentsしてみても歯抜けになってしまっていて、 何を見て、「歯抜け」と表現していますか? > バイナリファイルはphpやjavascriptが該当すると認識しているんですが、正しいでしょうか?htmlゃcssファイルもバイナリファイルと言っていいんでしょうか? コンピューターで扱うデータは全てバイナリーなので、全てのファイルはバイナリーファイルであると言うことも出来ますが、普通に使われる意味ではファイルのうち、テキストファイルでないものをバイナリーファイルと言います。 なので、JavaScriptソースや、HTML、CSSは全てテキストファイルです。
お礼
回答ありがとうございます。 歯抜けと言いますか、下の文字列は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もテキストファイルでしょうか? よろしくお願いします。
お礼
回答ありがとうございます。 偶数行しか入っていないことに気づきませんでした。配列に入れるところでおかしなことをしていたようです。お騒がせしました。