0

なぜこれが機能しないのですか?

// File hosted on `example.com`
// db-con.php
<?php
  define("DB_HOST" , "host");
  define("DB_NAME" , "name");
  define("DB_USER" , "user");
  define("DB_PASS" , "pass");

-

// File hosted on `another-example.com`
// index.php
<?php
  include 'http://example.com/db-con.php';
  echo DB_HOST;

-

// output
Notice: Use of undefined constant DB_HOST - assumed 'DB_HOST' in C:\Users\Alex\Dropbox\Shared\Web\htdocs\BASE_TEMPLATE\index.php on line 14

確かに外部ファイルをインクルードすることで、php が実行され、定数が定義されますか?

4

1 に答える 1

3

表示されているファイルを含めるのではなく、そのファイルが要求されたときのリモート Web サーバーの応答を含めます。

つまり、リモート Web サーバーは のリクエストを見て、db-con.phpそれをロードし、コードを実行し (独自のローカル プロセスで定数を定義)、出力を返します (コードは何もエコーしないため、おそらく空です)。したがって、最終結果は、空のファイルを含めた場合と同じになります。

更新:マニュアルから参照を掘り起こしました:

PHP で「URL fopen ラッパー」が有効になっている場合 (デフォルト設定では)、URL を使用して (HTTP またはその他のサポートされているラッパー経由で) 含めるファイルを指定できます。プロトコルのリストについては、「サポートされているプロトコルとラッパー」を参照してください)。ローカル パス名の代わりに。ターゲット サーバーがターゲット ファイルを PHP コードとして解釈する場合、HTTP GET で使用される URL 要求文字列を使用して、変数をインクルード ファイルに渡すことができます。これは厳密には、ファイルをインクルードして親ファイルの変数スコープを継承させることと同じではありません。スクリプトは実際にリモート サーバーで実行され、その結果がローカル スクリプトに組み込まれます。

では、どうやってそれを行うのですか?

リモート サーバーからコードをインクルードすることは、実際には考えるべきではありません (それを実現する方法はありますが、それは本当に悪い考えです)。いずれにせよ、リモートサーバーの明示的な協力がなければ、それを行うことはできません (そうしないと、誰でも他の人の構成ファイルを含めget_defined_constantsて、パスワードを取得するために使用できます)。そして、それを行うと、他の誰かが同じ手順を実行して、パスワードを入手できるようになります. あなたはそれが起こることを望んでいません。

于 2012-07-04T07:35:01.833 に答える