0

重複の可能性:
php変数でinclude_onceを使用するとエラーが発生します

私のコードは次のようなものです:

<?php   // file location: include/config.php
    $CONFIG["DIRECTORY"]["HTMLINC"] = "http://127.0.0.1/mysite/html_include";
?>

<?php   // file location: ./template.php
    require_once("include/config.php");
    // ...
    require($CONFIG["DIRECTORY"]["HTMLINC"] . "/anotherpage.php"); // Doesn't work
?>

次の警告メッセージが表示されます。

警告:require():http://ラッパーは、サーバー構成でallow_url_include=0によって無効にされています...

現在、ローカルサーバーでコードをテストしているので、の値を簡単に変更できますallow_url_include。ただし、最終的にはこのコードをリモートサーバーにアップロードします。allow_url_include常にに設定されることを保証することはできません1

この警告メッセージを防ぎ、このコードを機能させるにはどうすればよいですか?

4

3 に答える 3

3

それは絶対的な道ではありません。それはURLです。絶対パスは、ディスク上のファイルへのパスになります。ファイルに/var/www/mysite/html_includeアクセスして編集する場合は、それが絶対パスです。$CONFIG["DIRECTORY"]["HTMLINC"]その絶対パスに設定する必要があります。を使用$_SERVER['DOCUMENT_ROOT']して、apacheによって提供されるWebルートを取得し、を追加し/mysite/html_includeて正しいパスを生成できます。理想的には、ドキュメントルート+ / mysite(アプリケーションへの絶対パス)であるAPP_ROOTのような別の構成変数があるでしょう。何かのようなもの:

<?php
$CONFIG["DIRECTORY"]["APP_ROOT"] = $_SERVER['DOCUMENT_ROOT'].'/mysite';
$CONFIG["DIRECTORY"]["HTMLINC"] = $CONFIG["DIRECTORY"]["APP_ROOT"].'/html_include';

これにより、他の変数にもAPP_ROOTを使用できるようになります。

$CONFIG["DIRECTORY"]["UPLOADS"] = $CONFIG["DIRECTORY"]["APP_ROOT"].'/uploads';
$CONFIG["DIRECTORY"]["IMAGES"] = $CONFIG["DIRECTORY"]["APP_ROOT"].'/images';
$CONFIG["DIRECTORY"]["THUMBNAILS"] = $CONFIG["DIRECTORY"]["APP_ROOT"].'/thumbs';

于 2012-10-19T21:17:22.483 に答える
2

インクルードとしてhttpURLを使用しないでください。とにかく期待どおりに機能しません。

それらが有効になっている場合、それらは外部URLとして扱われるため、インクルードページに提供される前にPHPによって解析されます。したがって、結果の出力には、すでに実行されているため、PHPコードは含まれません。

ローカルファイルを含める場合は、URLではなく(ローカルホストURLでも)、ローカルディスクにディレクトリパスを指定する必要があります。

いずれにせよ、URLからインクルードを実行する機能は、コードがサードパーティのサイトから入ってシステム上で直接実行されることを許可することは大きなセキュリティリスクであるため、ほとんどの場合、健全なホスティング会社によって無効にされます。

Webサイトのローカルファイルを含める場合は$_SERVER['DOCUMENT_ROOT']、サイトのルートを参照するか__DIR__、現在のファイルのディレクトリを参照するために使用できます。前者があなたの場合に最適だと思うので、これが必要です:

$CONFIG["DIRECTORY"]["HTMLINC"] = $_SERVER['DOCUMENT_ROOT']."/mysite/html_include";

それがお役に立てば幸いです。

于 2012-10-19T21:22:22.103 に答える
1

「http://127.0.0.1」を使用してURLを入力します。ローカルIPではなく、ファイルシステムから参照する必要があります。だからあなたは設定する必要があります$CONFIG["DIRECTORY"]["HTMLINC"] = '/path/from/root/html_include'

ファイルシステムの「絶対パス」は、HTMLの絶対パス(プロトコルで始まる「http://」)とは異なります。

于 2012-10-19T21:17:21.283 に答える