Próbuję przekazać zmienną do pliku dołączanego . Mój host zmienił wersję PHP i teraz każde rozwiązanie, które próbuję, nie działa.
Myślę, że wypróbowałem każdą opcję, jaką mogłem znaleźć. Jestem pewien, że to najprostsza rzecz!
Zmienna musi zostać ustawiona i oceniona z wywołującego pierwszego pliku (w rzeczywistości jest $_SERVER['PHP_SELF']
i musi zwrócić ścieżkę do tego pliku, a nie dołączonego second.php
).
OPCJA PIERWSZA
W pierwszym pliku:
global $variable;
$variable = "apple";
include('second.php');
W drugim pliku:
echo $variable;
OPCJA DRUGA
W pierwszym pliku:
function passvariable(){
$variable = "apple";
return $variable;
}
passvariable();
OPCJA TRZECIA
$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.
$variable = $_GET["var"]
echo $variable
Żadne z nich nie działa dla mnie. Wersja PHP to 5.2.16.
czego mi brakuje?
Dzięki!
global
nie jest konieczny; Twoja pierwsza opcja powinna działać dobrze.Odpowiedzi:
Możesz użyć funkcji extract (), której
Drupal używa w swojej funkcji theme ().
Tutaj jest to funkcja renderująca z
$variables
argumentem.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>
źródło
array( 'title' => &$title )
tytuł $ można zmienić wewnątrz dołączonego pliku .Opcja 3 jest niemożliwa - otrzymasz renderowane wyjście pliku .php, dokładnie tak, jak gdybyś trafił na ten adres URL w przeglądarce. Jeśli zamiast tego dostaniesz surowy kod PHP (jak chcesz), to cały kod źródłowy Twojej witryny zostanie ujawniony, co generalnie nie jest dobrą rzeczą.
Opcja 2 nie ma większego sensu - ukrywałbyś zmienną w funkcji i podlegałbyś zakresowi zmiennych PHP. Będziesz także musiał mieć
$var = passvariable()
gdzieś, aby przenieść zmienną „wewnętrzną” do „zewnętrznej” i wrócisz do punktu wyjścia.opcja 1 jest najbardziej praktyczna.
include()
w zasadzie slurp w określonym pliku i wykona go właśnie tam, tak jakby kod w pliku był dosłownie częścią strony nadrzędnej. Wygląda jak zmienna globalna, na którą większość ludzi patrzy z dezaprobatą, ale dzięki semantyce analizy PHP te dwie są identyczne:$x = 'foo'; include('bar.php');
i
$x = 'foo'; // contents of bar.php pasted here
źródło
Biorąc pod uwagę, że instrukcja include w php na najbardziej podstawowym poziomie pobiera kod z pliku i wkleja go w miejsce, w którym go wywołałeś, oraz fakt, że instrukcja include stwierdza, co następuje:
Te rzeczy sprawiają, że myślę, że istnieje w sumie inny problem. Również opcja nr 3 nigdy nie zadziała, ponieważ nie przekierowujesz do niej
second.php
, po prostu ją dołączasz, a opcja nr 2 jest po prostu dziwnym obejściem. Najbardziej podstawowym przykładem instrukcji include w php jest: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 ?>
Biorąc pod uwagę, że opcja numer jeden jest najbliższa temu przykładowi (chociaż bardziej skomplikowana niż powinna) i nie działa, to sprawia, że myślę, że popełniłeś błąd w instrukcji include (niewłaściwa ścieżka względem katalogu głównego lub podobna kwestia).
źródło
W odniesieniu do pytania OP, w szczególności „Zmienna musi być ustawiona i oceniona z wywołującego pierwszego pliku (w rzeczywistości jest to '$ _SERVER [' PHP_SELF ']' i musi zwrócić ścieżkę do tego pliku, a nie dołączoną drugą. php). ”
Dzięki temu dowiesz się, który plik zawierał plik. Umieść to w załączonym pliku.
$includer = debug_backtrace(); echo $includer[0]['file'];
źródło
Mam tutaj ten sam problem, możesz użyć tablicy $ GLOBALS.
$GLOBALS["variable"] = "123"; include ("my.php");
Powinien również działać w ten sposób:
$myvar = "123"; include ("my.php"); .... echo $GLOBALS["myvar"];
Miłego dnia.
źródło
OPCJA 1 zadziałała dla mnie w PHP 7 i na pewno działa również w PHP 5. A deklaracja zasięgu globalnego nie jest konieczna dla dołączonego pliku w celu uzyskania dostępu do zmiennych, dołączone - lub „wymagane” - pliki są częścią skryptu, tylko upewnij się, że dokonałeś „uwzględnienia” PO deklaracji zmiennej. Może masz jakiś błąd w konfiguracji ze zmiennymi o zasięgu globalnym w swoim PHP.ini?
Spróbuj w pierwszym pliku:
<?php $myvariable="from first file"; include ("./mysecondfile.php"); // in same folder as first file LOLL ?>
mysecondfile.php
<?php echo "this is my variable ". $myvariable; ?>
Powinno działać ... jeśli nie tylko spróbuje ponownie zainstalować PHP.
źródło
Napotkałem ten problem, w którym miałem plik, który ustawia zmienne na podstawie parametrów GET. Tego pliku nie można zaktualizować, ponieważ działał poprawnie w innej części dużego systemu zarządzania treścią. Chciałem jednak uruchomić ten kod za pośrednictwem pliku dołączanego bez parametrów znajdujących się w ciągu adresu URL. Prostym rozwiązaniem jest to, że możesz ustawić zmienne GET w pierwszym pliku, tak jak każdą inną zmienną.
Zamiast:
include "myfile.php?var=apple";
To byłby:
$_GET['var'] = 'apple'; include "myfile.php";
źródło
Zgodnie z dokumentacją php (zobacz $ _SERVER ) $ _SERVER ['PHP_SELF'] jest "nazwą pliku aktualnie wykonywanego skryptu".
Instrukcja INCLUDE „zawiera i ocenia określony„ plik ”, a„ kod, który zawiera, dziedziczy zakres zmiennej wiersza, w którym występuje uwzględnienie ”(zobacz INCLUDE ).
Uważam, że $ _SERVER ['PHP_SELF'] zwróci nazwę pierwszego pliku, nawet jeśli jest używany przez kod w 'second.php'.
Przetestowałem to z następującym kodem i działa zgodnie z oczekiwaniami ($ phpSelf to nazwa pierwszego pliku).
// 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.
źródło
Możesz wykonać wszystko w "second.php" dodając zmienną za pomocą jQuery
<div id="first"></div> <script> $("#first").load("second.php?a=<?php echo $var?>") </scrpt>
źródło
Wiem, że to stare pytanie, ale natknąłem się na nie teraz i nie widziałem, żeby nikt o tym nie mówił. więc pisząc to.
Opcja pierwsza, jeśli zostanie tak zmodyfikowana, powinna również działać.
Oryginalny
DOSTRAJAĆ
W pierwszym pliku:
$variable = "apple"; include('second.php');
W drugim pliku:
global $variable; echo $variable;
źródło
Zauważyłem, że parametr include musi być pełną ścieżką pliku, a nie ścieżką względną lub częściową, aby to zadziałało.
źródło
include
's. Musisz tylko być pewien, że zakładasz właściwy początek „w stosunku do czego”.Zrób to:
$checksum = "my value"; header("Location: recordupdated.php?checksum=$checksum");
źródło
To zadziałało dla mnie: aby zawinąć zawartość drugiego pliku w funkcję, w następujący sposób:
firstFile.php
<?php include("secondFile.php"); echoFunction("message");
secondFile.php
<?php function echoFunction($variable) { echo $variable; }
źródło