wake-up-neo.com

PHP Variable übergeben, um einzuschließen

Ich versuche, eine Variable in eine Include-Datei zu übergeben. Mein Host hat die PHP Version geändert und jetzt funktioniert die von mir ausgeführte Lösung nicht mehr.

Ich denke, ich habe jede Option ausprobiert, die ich finden konnte. Ich bin sicher, es ist das Einfachste!

Die Variable muss aus der aufrufenden ersten Datei gesetzt und ausgewertet werden (es ist tatsächlich $_SERVER['PHP_SELF'] und muss den Pfad dieser Datei zurückgeben, nicht den eingeschlossenen second.php).

WAHL EINS

In der ersten Datei:

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

In der zweiten Datei:

echo $variable;

ZWEITE OPTION

In der ersten Datei:

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

OPTION DREI

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


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

Nichts davon funktioniert für mich. PHP Version ist 5.2.16.

Was vermisse ich?

Vielen Dank!

69
user1590646

Option 3 ist nicht möglich - Sie erhalten die gerenderte Ausgabe der .php-Datei genau so, als ob Sie diese URL in Ihrem Browser drücken würden. Wenn Sie stattdessen unverarbeiteten PHP) Code erhalten (wie Sie möchten), wird der gesamte Quellcode Ihrer Site angezeigt, was im Allgemeinen keine gute Sache ist.

Option 2 macht nicht viel Sinn - Sie würden die Variable in einer Funktion ausblenden und dem Variablenbereich von PHP unterliegen. Sie müssen auch $var = passvariable() irgendwo haben, um diese Variable 'inside' nach 'outside' zu bringen, und Sie sind zurück zum Quadrat eins.

option 1 ist die praktischste. include() schlürft im Grunde genommen die angegebene Datei und führt sie genau dort aus, als ob der Code in der Datei buchstäblich Teil der übergeordneten Seite wäre. Es sieht aus wie eine globale Variable, über die die meisten Leute hier die Stirn runzeln, aber nach der Parsing-Semantik von PHP sind diese beiden identisch:

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

und

$x = 'foo';
// contents of bar.php pasted here
41
Marc B

Sie können die Funktion extract () verwenden
Drupal verwendet es in seiner theme () - Funktion.

Hier ist es eine Render-Funktion mit einem $variables Streit.

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>
32
thi3rry

Wenn man bedenkt, dass eine include-Anweisung in PHP auf der einfachsten Ebene den Code aus einer Datei entnimmt und an der Stelle einfügt, an der Sie ihn aufgerufen haben, und die Tatsache, dass das Handbuch zu include Folgendes besagt:

Wenn eine Datei enthalten ist, erbt der darin enthaltene Code den Variablenbereich der Zeile, in der das Include auftritt. Alle Variablen, die in dieser Zeile in der aufrufenden Datei verfügbar sind, sind ab diesem Zeitpunkt in der aufgerufenen Datei verfügbar.

Diese Dinge lassen mich denken, dass es insgesamt ein anderes Problem gibt. Auch Option 3 wird niemals funktionieren, da Sie nicht zu second.php Umleiten, sondern nur einschließen, und Option 2 ist nur eine seltsame Lösung. Das grundlegendste Beispiel für die include-Anweisung in PHP ist:

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

?>

In Anbetracht der Tatsache, dass die erste Option diesem Beispiel am nächsten kommt (auch wenn sie komplizierter ist als es sein sollte) und nicht funktioniert, habe ich den Eindruck, dass Sie in der include-Anweisung einen Fehler gemacht haben (der falsche Pfad in Bezug auf die Wurzel oder Ähnliches) Problem).

10

Ich habe hier das gleiche Problem, Sie können das $ GLOBALS-Array verwenden.

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

Es sollte auch so laufen:

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

....

echo $GLOBALS["myvar"];

Einen schönen Tag noch.

5
Daniel

In Bezug auf die Frage des OP, insbesondere "Die Variable muss aus der aufrufenden ersten Datei gesetzt und ausgewertet werden (es ist tatsächlich '$ _SERVER [' PHP_SELF ']') und muss den Pfad dieser Datei zurückgeben, nicht die enthaltene zweite. php). "

Hier erfahren Sie, welche Datei die Datei enthielt. Fügen Sie dies in die mitgelieferte Datei ein.

$includer = debug_backtrace();
echo $includer[0]['file'];
4
Jeremy1026

Ich bin auf dieses Problem gestoßen, bei dem ich eine Datei hatte, die Variablen basierend auf den GET-Parametern festlegt. Und diese Datei konnte nicht aktualisiert werden, da sie in einem anderen Teil eines großen Content-Management-Systems ordnungsgemäß funktioniert hat. Ich wollte diesen Code jedoch über eine Include-Datei ausführen, ohne dass sich die Parameter tatsächlich in der URL-Zeichenfolge befanden. Die einfache Lösung ist, dass Sie die GET-Variablen in der ersten Datei wie jede andere Variable festlegen können.

Anstatt:

include "myfile.php?var=Apple";

Es wäre:

$_GET['var'] = 'Apple';
include "myfile.php";
1
Brian Kosnoff

OPTION 1 funktionierte für mich in PHP 7, und natürlich auch in PHP 5. Und die globale Geltungsbereichserklärung ist für die enthaltene Datei für den Variablenzugriff nicht erforderlich, die enthaltenen - oder "erforderlichen" - Dateien sind Teil des Skripts, stellen Sie jedoch sicher, dass Sie NACH der Variablendeklaration das "include" ausführen. Möglicherweise liegt eine Fehlkonfiguration mit dem globalen Gültigkeitsbereich von Variablen in vor Ihre PHP.ini?

Versuchen Sie es in der ersten Datei:

  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>

mysecondfile.php

  <?php 
  echo "this is my variable ". $myvariable;
  ?>

Es sollte funktionieren ... wenn es nicht nur versucht, PHP neu zu installieren.

0
DrOne

Laut PHP-Dokumenten (siehe $ _ SERVER ) ist $ _SERVER ['PHP_SELF'] der "Dateiname des aktuell ausgeführten Skripts".

Die INCLUDE-Anweisung "enthält und wertet die angegebene" Datei aus und "der darin enthaltene Code erbt den Variablenbereich der Zeile, in der das Include auftritt" (siehe INCLUDE ).

Ich glaube, dass $ _SERVER ['PHP_SELF'] den Dateinamen der ersten Datei zurückgibt, auch wenn er von Code in der 'second.php' verwendet wird.

Ich habe dies mit dem folgenden Code getestet und es funktioniert wie erwartet ($ phpSelf ist der Name der ersten Datei).

// In the first.php file
// get the value of $_SERVER['PHP_SELF'] for the 1st file
$phpSelf = $_SERVER['PHP_SELF'];

// include the second file
// This slurps in the contents of second.php
include_once('second.php');

// execute $phpSelf = $_SERVER['PHP_SELF']; in the secod.php file
// echo the value of $_SERVER['PHP_SELF'] of fist file

echo $phpSelf;  // This echos the name of the First.php file.
0
Jim