Подтвердить что ты не робот

Переменная 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.

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

Спасибо!

4b9b3361

Ответ 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");