Ich versuche, eine Variable in eine Include- Datei zu übergeben. Mein Host hat die PHP-Version geändert und jetzt funktioniert jede Lösung, die ich versuche, nicht mehr.
Ich glaube, ich habe jede Option ausprobiert, die ich finden konnte. Ich bin sicher, es ist das Einfachste!
Die Variable muss aus der aufrufenden ersten Datei festgelegt und ausgewertet werden (tatsächlich $_SERVER['PHP_SELF']
und muss den Pfad dieser Datei zurückgeben, nicht den enthaltenen second.php
).
OPTION EINS
In der ersten Datei:
global $variable;
$variable = "apple";
include('second.php');
In der zweiten Datei:
echo $variable;
OPTION ZWEI
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!
global
ist daher nicht erforderlich. Ihre erste Option sollte einwandfrei funktionieren.Antworten:
Sie können die Funktion extract () verwenden.
Drupal verwendet sie in der Funktion theme ().
Hier ist es eine Renderfunktion mit einem
$variables
Argument.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>
quelle
array( 'title' => &$title )
der $ title in der enthaltenen Datei geändert werden kann .Option 3 ist nicht möglich - Sie erhalten die gerenderte Ausgabe der .php-Datei genau so, als würden Sie diese URL in Ihrem Browser drücken. Wenn Sie stattdessen rohen 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 verstecken und dem Variablenbereich von PHP unterliegen. Sie müssen auch
$var = passvariable()
irgendwo sein, um diese ' Innen' -Variable nach' Außen 'zu bringen, und Sie sind wieder auf dem ersten Platz.Option 1 ist am praktischsten.
include()
schlürft im Grunde genommen in der angegebenen 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, die die meisten Leute hier missbilligen, 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
quelle
In Anbetracht der Tatsache, dass eine Include-Anweisung in PHP auf der grundlegendsten Ebene den Code aus einer Datei entnimmt und dort einfügt, wo Sie ihn aufgerufen haben, und dass das Handbuch zu Include Folgendes enthält:
Diese Dinge lassen mich denken, dass es insgesamt ein anderes Problem gibt. Auch Option 3 wird niemals funktionieren, da Sie nicht umleiten, sondern
second.php
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 ?>
Wenn man bedenkt, dass Option Nummer eins diesem Beispiel am nächsten kommt (obwohl es komplizierter ist als es sein sollte) und es nicht funktioniert, denke ich, dass Sie einen Fehler in der include-Anweisung gemacht haben (der falsche Pfad relativ zur Wurzel oder ähnlichem) Problem).
quelle
In Bezug auf die Frage des OP, insbesondere "Die Variable muss aus der aufrufenden ersten Datei festgelegt und ausgewertet werden (es ist tatsächlich '$ _SERVER [' PHP_SELF ']'" und muss den Pfad dieser Datei zurückgeben, nicht die eingeschlossene zweite. php). "
Hier erfahren Sie, welche Datei die Datei enthält. Platzieren Sie dies in der enthaltenen Datei.
$includer = debug_backtrace(); echo $includer[0]['file'];
quelle
Ich habe hier das gleiche Problem, Sie können das Array $ GLOBALS 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.
quelle
OPTION 1 hat für mich in PHP 7 funktioniert, und sicher auch in PHP 5. Und die globale Bereichsdeklaration ist für die enthaltene Datei für den Variablenzugriff nicht erforderlich. Die enthaltenen oder "erforderlichen" Dateien sind Teil des Skripts. Stellen Sie nur sicher, dass Sie das "Einschließen" NACH der Variablendeklaration vornehmen. Möglicherweise haben Sie eine Fehlkonfiguration mit Variablen im globalen Bereich in Ihrer 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.
quelle
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 auf einem anderen Teil eines großen Content-Management-Systems ordnungsgemäß funktionierte. Ich wollte diesen Code jedoch über eine Include-Datei ausführen, ohne dass sich die Parameter tatsächlich in der URL-Zeichenfolge befinden. Die einfache Lösung besteht darin, 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";
quelle
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 variablen Bereich der Zeile, in der das Include auftritt" (siehe INCLUDE ).
Ich glaube, $ _SERVER ['PHP_SELF'] gibt den Dateinamen der 1. Datei zurück, selbst wenn er vom 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.
quelle
Sie können alles in "second.php" ausführen und mit jQuery eine Variable hinzufügen
<div id="first"></div> <script> $("#first").load("second.php?a=<?php echo $var?>") </scrpt>
quelle
Ich habe festgestellt, dass der include-Parameter der gesamte Dateipfad sein muss, kein relativer Pfad oder Teilpfad, damit dies funktioniert.
quelle
include
's einwandfrei. Sie müssen nur sicher sein, dass Sie einen korrekten "relativ zu was" -Anfang annehmen.Das hat bei mir funktioniert: Um den Inhalt der zweiten Datei wie folgt in eine Funktion zu verpacken:
firstFile.php
<?php include("secondFile.php"); echoFunction("message");
secondFile.php
<?php function echoFunction($variable) { echo $variable; }
quelle
Mach das:
$checksum = "my value"; header("Location: recordupdated.php?checksum=$checksum");
quelle