2016-04-07 6 views
5

私はいつも、PHP関数file_get_contentsreadfileは、ファイルタイプに関係なく、どのファイルでもPHPコードを実行することを常に確信していました。私はこれを複数の設定で試してみたところ、いつもうまくいきました。file_get_contentsとreadfileはPHPコードを実行しますか?

私はこのhereに関する質問を受け取りましたが、ユーザーはそうではないと思われるようです。

私は関数のPHPドキュメントを見ましたが、コード実行については言及していません(これはセキュリティの深刻な影響があるため、通常はこれが当てはまると思います)。

私もそれを探して、関数がPHPコードを実行しないという多くの主張を見つけました。例:

readfileでは、サーバー上のコードは実行されないため、問題はありません。 「PHPのfile_get_contentsコードの実行」を検索source

も、それは確かに正常に任意のPHPコードを実行するかどう奇妙に思える取り出さPHPコードを実行しようと、様々な質問を返します。

また、PHPコードの実行を尋ねるone questionが見つかりました。他の人にも実行が行われるようです。

だから私の質問は以下のとおりです。

  • 機能file_get_contentsreadfileが取得したファイルにPHPコードを実行しますか?
  • これはphp.iniの設定によって異なりますか?もしそうなら、どんな設定ですか?
  • PHPのバージョンによって異なりますか?その場合、どのバージョンが影響を受けますか?
  • 通常そうでない場合、セットアップでPHPコードを実行する理由は何ですか?コードを実行する機能を«関数リファレンス/プロセス制御拡張»に記載されているが
+0

セキュリティよりもプログラミング上の疑問があるようです。 php.netマニュアルを確認しましたか?私には実行がないようです... –

+0

私は本当に "その作品"のコードのサンプルを見たいと思います... – deceze

答えて

7

file_get_contentsおよびreadfileコードを実行しません。彼らが行うのは、ファイルの生の内容を返すことだけです。テキスト、PHPコード、バイナリ(例:画像ファイル)、または何か他のもの。ファイルの内容の解釈はまったく起こっていません。

実行が起こっているかのようにを出現可能性のある唯一の状況は次のとおりです。HTMLタグとして解釈しようとしているので、

  1. <?php ?>タグはおそらく、ブラウザによって表示されませんので、これはつながる可能性がありPHPが消滅して実行された可能性があるという印象を与える。
  2. は、ソースコードからコードを実行しています。 http://example.com/foo.phpから読むとこの場合、関数はWebブラウザでURLを訪れるのと同じ効果があります。サービングWebサーバーはPHPコードを実行して結果を返していますが、file_get_contentsはその結果を取得して返します。
6

これらの機能は、«関数リファレンス/ファイルシステム関連の拡張/ファイルシステム内のマニュアルの»セクションに記載されています。

誤解は、ファイルシステムとネットワークとの間に何らかの広範な混乱があり、同じ機能を透過的に使用してあらゆる種類のリソースを開くことができるプロトコルラッパーを提供するPHPストリーム機能によって悪化していることは間違いありません。

file_get_contents('http://example.com/inc/database.inc.php'); 

...そして彼は、このデータベース接続を見ることができない理由を不思議:誰かがこのような何かをする場所、ローカルファイル、ネットワークリソース、圧縮アーカイブなどは私がここに無限の記事を参照してください。そして答えは明らかです:ファイルをロードせず、URLを取得しています。その結果、database.inc.phpのコードが効果的に実行されます...むしろ間接的です。

関連する問題