как передать переменную через функцию require() или include() php?

когда я использую этот:

require("diggstyle_code.php?page=$page_no");

предупреждение: не удалось открыть поток: нет ошибки в C:xampphtdocs4ajaxgallery_core - ... php on line 198

и ошибка:

Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:xamppphpPEAR') in C:xampphtdocsajaxgallery_core.php on line 198

значение переменной $page_no собирают заранее.

но если я опущу '?page=$page_no part' из аргумента функции require не отображается ошибка или предупреждение.

мне нужно передать переменную, когда я использую функцию require ().

9 ответов


require() и include() откроет файл, соответствующий пути / имени, которое они получают.

что означает, что с вашим кодом у вас должен быть файл с именем diggstyle_code.php?page=1 на диске. Очевидно, что это не так, поэтому он терпит неудачу.

со ссылкой на переменная страница руководства по PHP:

область переменной-это контекст, в котором она определена. По большей части все переменные PHP имеют только одну область. эта область охватывает включенные и необходимые файлы, а также.

в вашем случае, вам не нужно проходить переменной. Если у вас есть переменная в текущем скрипте, она также будет существовать в скрипте, который вы включаете,вне функций, которые имеют свой собственный объем.

в вашем основном скрипте вы должны иметь:

$page_no = 10;
require 'diggstyle_code.php';

и diggstyle_code.php:

echo $page_no;
// Or work with $page_no the way you have to

помните, что включение / требование файла точно так же, как копирование-вставка его содержимого в строку, которая требуется.


это должно работать, но это довольно грязный хак:

$_GET['page'] = $page_no;
require('diggstyle_code.php');

вы, наверное, хотите выполнить рефакторинг кода, чтобы использовать функции и/или объекты и вызывать их из ваших файлов, а не включая их (спагетти код оповещения)


require не извлекает файл с веб-сервера - вместо этого он должен ссылаться на файл в файловой системе.

вызов include или require просто говорит PHP вставить содержимое данного файла в ваш код в этом месте, не более того.


Если ваша переменная является глобальной, нет необходимости "передавать"ее, она уже есть: область переменных PHP.

ответ тогда: ничего не делайте, если $page_no существует в файле, в котором вы вызываете require (), он будет доступен в включенном файле.


require() не делает HTTP-вызов. Все, что он делает, это открыть файл с диска и включить код в положение вызова. Поэтому достаточно простых локальных переменных.


require, require_once, include и include_once попробуйте включить файлы из файловой системы в текущий файл.

Так как нет файлов с именем diggstyle_code.РНР?page=1, вполне логично, что PHP не может его найти.

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


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

таким образом, предположим, что ваш "главный".php " имеет строки

require("diggstyle_code.php?page=$page_no");

это означает, что: если кто-нибудь позвонит "main.РНР" получает diggstyle_code.php работает. Но если кто-нибудь каким-либо образом звонит прямо diggstyle_code.php Он / она ничего не получит.

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

так, например: 'main.на PHP'

<?php
define("_VERIFICATION_", "y");
require("diggstyle_code.php");
?>

и теперь diggstyle_code.php

<?php
if ( _VERIFICATION_ == "y" ) {
//Here the code should be executed
} else {
// Something else
}
?>

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

return function(array $something) {
    print_r($something);
}

и вызовите его с аргументами, когда вы require это:

require('file.php')(['some', 'data']);

// or:

$context = require('file.php');
$context(['some', 'data']);

У меня была эта проблема, и я заметил, что если вы используете http: / / в своем url-адресе, то он не работает