89

変数をインクルードファイルに渡そうとしています。私のホストは PHP のバージョンを変更しました。

見つけられるあらゆるオプションを試したと思います。それが一番簡単だと思います!

変数は、呼び出し元の最初のファイルから設定および評価する必要があります (実際に$_SERVER['PHP_SELF']は であり、含まれている ではなく、そのファイルのパスを返す必要がありますsecond.php)。

オプション 1

最初のファイルで:

global $variable;
$variable = "apple";
include('second.php');

2 番目のファイル:

echo $variable;

オプション 2

最初のファイルで:

function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();

オプション 3

$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.


$variable = $_GET["var"]
echo $variable

これらのどれも私にとってはうまくいきません。PHP のバージョンは 5.2.16 です。

私は何が欠けていますか?

ありがとう!

4

13 に答える 13

58

Extract () 関数を
Drupal の theme() 関数で使用できます。

ここでは、引数付きの render 関数$variablesです。

function includeWithVariables($filePath, $variables = array(), $print = true)
{
    $output = NULL;
    if(file_exists($filePath)){
        // Extract the variables to a local namespace
        extract($variables);

        // Start output buffering
        ob_start();

        // Include the template file
        include $filePath;

        // End buffering and return its contents
        $output = ob_get_clean();
    }
    if ($print) {
        print $output;
    }
    return $output;

}


./index.php :

includeWithVariables('header.php', array('title' => 'Header Title'));

./header.php :

<h1><?php echo $title; ?></h1>
于 2017-08-08T08:48:26.293 に答える
50

オプション 3 は不可能です。ブラウザーでその URL にアクセスした場合とまったく同じように、.php ファイルのレンダリングされた出力が得られます。代わりに生の PHP コードを入手した場合 (お好みで)、サイトのソース コードがすべて公開されてしまいますが、これは一般的には良いことではありません。

オプション 2 はあまり意味がありません。変数を関数内に隠し、PHP の変数スコープに従うことになります。また$var = passvariable()、その「内部」変数を「外部」に取得する場所が必要であり、振り出しに戻ります。

オプション 1 が最も実用的です。include()基本的に、ファイル内のコードが文字通り親ページの一部であるかのように、指定されたファイルを丸呑みしてその場で実行します。ここではほとんどの人が眉をひそめているグローバル変数のように見えますが、PHP の解析セマンティクスでは、これら 2 つは同一です。

$x = 'foo';
include('bar.php');

$x = 'foo';
// contents of bar.php pasted here
于 2012-08-10T15:55:11.473 に答える
12

最も基本的なレベルの php の include ステートメントは、ファイルからコードを取得し、それを呼び出した場所に貼り付けます。また、include に関するマニュアルには次のように記載されています。

ファイルがインクルードされると、そこに含まれるコードは、インクルードが発生した行の変数スコープを継承します。呼び出しファイルのその行で使用可能な変数は、その時点以降、呼び出されたファイル内で使用できます。

これらのことは、まったく別の問題があると私に思わせます。また、オプション番号 3 は、リダイレクトしていないため機能しません。これはsecond.php、それを含めるだけであり、オプション番号 2 は奇妙な回避策です。PHP の include ステートメントの最も基本的な例は次のとおりです。

vars.php
<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "A $color $fruit"; // A

include 'vars.php';

echo "A $color $fruit"; // A green apple

?>

オプション番号 1 がこの例に最も近く (より複雑である必要があります)、それが機能していないことを考えると、インクルード ステートメントで間違いを犯したと思います (ルートまたは類似のパスに対するパスが間違っている)。問題)。

于 2012-08-10T15:59:13.370 に答える
6

ここでも同じ問題があります。$GLOBALS 配列を使用できます。

$GLOBALS["variable"] = "123";
include ("my.php");

これも実行する必要があります。

$myvar = "123";
include ("my.php");

....

echo $GLOBALS["myvar"];

良い1日を。

于 2015-11-24T09:17:05.497 に答える
5

OPの質問に関しては、具体的には「変数は呼び出し元の最初のファイルから設定および評価する必要があります(実際には '$_SERVER['PHP_SELF']' であり、含まれている2番目のファイルではなく、そのファイルのパスを返す必要があります。 php)」。

これにより、どのファイルにそのファイルが含まれていたかがわかります。これを同梱ファイルに配置します。

$includer = debug_backtrace();
echo $includer[0]['file'];
于 2012-08-10T15:57:51.577 に答える