Переменная PHP pass для включения

Я пытаюсь передать переменную в файл include . Мой хост изменил версию PHP, и теперь любое решение, которое я пытаюсь сделать, не работает.

Кажется, я пробовал все, что мог найти. Я уверен, что это самая простая вещь!

Переменная должна быть установлена ​​и оценена из первого вызывающего файла (это фактически $_SERVER['PHP_SELF'] , и ему нужно вернуть путь к этому файлу, а не включенному second.php ).

ОПЦИЯ ОДИН

В первом файле:

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

Во втором файле:

 echo $variable; 

ВАРИАНТ ДВА

В первом файле:

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

ВАРИАНТ ТРЕХ

 $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.

Что мне не хватает?

Благодаря!

Solutions Collecting From Web of "Переменная PHP pass для включения"

Вариант 3 невозможен – вы получите обработанный вывод файла .php, точно так же, как если бы вы набрали этот URL-адрес в своем браузере. Если вместо этого вы получили необработанный PHP-код (как вам хотелось бы), тогда будет открыт весь исходный код вашего сайта, что, как правило, не очень хорошо.

Вариант 2 не имеет большого смысла – вы бы скрывали переменную в функции и подвергались переменной области PHP. У вас также должно быть $var = passvariable() где-то, чтобы получить эту переменную «внутри» для «снаружи», и вы вернетесь к квадрату.

Вариант 1 является наиболее практичным. include() будет в основном slurp в указанном файле и выполнить его прямо там, как если бы код в файле был буквально частью родительской страницы. Это похоже на глобальную переменную, которую большинство людей здесь нахмуривают, но с помощью семантики синтаксического анализа PHP эти два идентичны:

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

а также

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

Вы можете использовать функцию extract ()
Drupal использует его в своей функции theme ().

Здесь это функция рендеринга с аргументом $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> 

Учитывая, что включенный statment в php на самом базовом уровне берет код из файла и вставляет его туда, где вы его назвали, и тот факт, что в руководстве по включению указывается следующее:

Когда файл включен, код, который он содержит, наследует область изменения строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед.

Эти вещи заставляют меня думать, что существует многообразная проблема. Также вариант № 3 никогда не будет работать, потому что вы не перенаправляете на second.php вы просто включаете его, а опция номер 2 – это просто странная работа. Самый простой пример включения stat в php:

 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 ?> 

Учитывая, что вариант номер один является самым близким к этому примеру (хотя и более сложным он должен быть), и он не работает, это заставляет меня думать, что вы допустили ошибку в заявлении include (неправильный путь относительно корня или аналогичного выпуск).

Что касается вопроса OP, в частности «Переменная должна быть задана и оценена из первого вызывающего файла (это фактически« $ _SERVER ['PHP_SELF'] », и ему необходимо вернуть путь к этому файлу, а не второй. PHP) «.

Это скажет вам, какой файл включен в файл. Поместите это во включенный файл.

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

У меня такая же проблема, вы можете использовать массив $ GLOBALS.

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

Он также должен выполнить это:

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

Хорошего дня.

Согласно php docs (см. $ _SERVER ) $ _SERVER ['PHP_SELF'] является «именем текущего исполняемого скрипта».

Оператор INCLUDE включает и оценивает указанный «файл» и «содержащийся в нем код наследует область переменной строки, на которой происходит включение» (см. ВКЛЮЧЕНИЕ ).

Я полагаю, что $ _SERVER ['PHP_SELF'] вернет имя файла 1-го файла, даже если он используется кодом в 'second.php'.

Я проверил это со следующим кодом, и он работает как ожидалось ($ phpSelf – это имя первого файла).

 // 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. 

Я обнаружил, что параметром include должен быть весь путь к файлу, а не относительный путь или частичный путь для этого.

Это сработало для меня. Чтобы обернуть содержимое второго файла в функцию, выполните следующие действия:

firstFile.php

 <?php include("secondFile.php"); echoFunction("message"); в <?php include("secondFile.php"); echoFunction("message"); 

secondFile.php

 <?php function echoFunction($variable) { echo $variable; } 

PHP 5.2.0 добавляет директиву allow-url-include (по умолчанию 0 , необходимо изменить на 1 в php.ini ), что означает, что вы можете передать полный http: URL-адрес в оператор include .

Добавляя переменную как строку запроса к этому URL-адресу, вы можете передать переменную во включенный файл, хотя и с некоторой потерей производительности:

 include 'http://www.myservername.com/includes/second.php?variable=apple'; 

Конечно, вам также нужно настроить second.php для обработки $_GET['variable'] и применить его к выходу.

Сделай это:

 $checksum = "my value"; header("Location: recordupdated.php?checksum=$checksum");