Переменная PHP pass для включения
Я пытаюсь передать переменную в файл include. Мой хост изменил версию PHP, и теперь любое решение, которое я пытаюсь сделать, не работает.
Думаю, я пробовал все, что мог найти. Я уверен, что это самая простая вещь!
Переменная должна быть задана и оценена из первого вызывающего файла (это фактически $_SERVER['PHP_SELF']
, и ему нужно вернуть путь к этому файлу, а не включенный second.php
).
OPTION ONE
В первом файле:
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.
Что мне не хватает?
Спасибо!
Ответы
Ответ 1
Вариант 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
Ответ 2
Вы можете использовать функцию 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>
Ответ 3
Учитывая, что включенный statment в php на самом базовом уровне берет код из файла и вставляет его туда, где вы его назвали, и тот факт, что в руководстве on включено следующее:
Когда файл включен, код, который он содержит, наследует область изменения строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед.
Эти вещи заставляют меня думать, что существует многообразная проблема. Также вариант № 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 (неправильный путь относительно корня или аналогичная проблема).
Ответ 4
У меня такая же проблема, вы можете использовать массив $GLOBALS.
$GLOBALS["variable"] = "123";
include ("my.php");
Он также должен запустить это:
$myvar = "123";
include ("my.php");
....
echo $GLOBALS["myvar"];
Хороший день.
Ответ 5
В отношении вопроса OP, в частности: "Эта переменная должна быть задана и оценена из первого вызывающего файла (это фактически" $_SERVER ['PHP_SELF "], и ему необходимо вернуть путь к этому файлу, а не включая second.php)."
Это скажет вам, какой файл включен в файл. Поместите это во включенный файл.
$includer = debug_backtrace();
echo $includer[0]['file'];
Ответ 6
В соответствии с php docs (см. $_ SERVER) $_SERVER ['PHP_SELF'] - это имя файла текущего исполняемого script.
Оператор INCLUDE включает и оценивает указанный "файл" и "содержащийся в нем код наследует область переменной строки, на которой происходит включение" (см. 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.
Ответ 7
Я столкнулся с этой проблемой, когда у меня был файл, который устанавливает переменные на основе параметров GET. И этот файл не смог обновиться, потому что он работал правильно в другой части большой системы управления контентом. Тем не менее, я хотел запустить этот код через файл include без параметров, которые действительно находятся в строке URL. Простое решение - вы можете установить переменные GET в первый файл, как и любую другую переменную.
Вместо:
include "myfile.php?var=apple";
Это было бы:
$_GET['var'] = 'apple';
include "myfile.php";
Ответ 8
ВАРИАНТ 1 работал для меня, в PHP 7, и наверняка это работает и в PHP 5. И объявление глобальной области не требуется для включенного файла для доступа к переменным, включенные - или "обязательные" - файлы являются частью сценария, только убедитесь, что вы включили "include" ПОСЛЕ объявления переменной. Может быть, у вас есть какая-то неверная конфигурация с глобальной переменной в вашем PHP.ini?
Попробуйте в первом файле:
<?php
$myvariable="from first file";
include ("./mysecondfile.php"); // in same folder as first file LOLL
?>
mysecondfile.php
<?php
echo "this is my variable ". $myvariable;
?>
Это должно работать... если он не просто пытается переустановить PHP.
Ответ 9
Я обнаружил, что параметр include должен быть целым файловым путем, а не относительным путем или частичным путем для этого.
Ответ 10
Это сработало для меня: Чтобы обернуть содержимое второго файла в функцию, выполните следующие действия:
firstFile.php
<?php
include("secondFile.php");
echoFunction("message");
secondFile.php
<?php
function echoFunction($variable)
{
echo $variable;
}
Ответ 11
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']
и применить его к выходу.
Ответ 12
Сделайте это:
$checksum = "my value";
header("Location: recordupdated.php?checksum=$checksum");