如何通过php的require()或include()函数传递变量?

时间:2011-02-26 16:30:37

标签: php

当我使用它时:

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

警告是:无法打开流:第198行的C:\ xampp \ htdocs \ 4ajax \ gallery_core.php没有错误

,错误是:

Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\4ajax\gallery_core.php on line 198

预先收集变量$page_no的值。

但如果我从require函数的参数中省略'?page=$page_no part',则不会显示错误或警告。

我需要在使用require()函数时传递变量。

9 个答案:

答案 0 :(得分:60)

require()include()将打开与其收到的路径/名称相对应的文件。

这意味着,使用您的代码,您必须在磁盘上有一个名为diggstyle_code.php?page=1的文件。显然不是这样,所以它失败了。

引用PHP手册的Variable scope页面:

  

变量的范围是定义它的上下文。在大多数情况下,所有PHP变量只有一个范围。 此单一范围也包含已包含和必需的文件。

在您的情况下,您不需要传递变量。如果您当前脚本中有变量,它也将存在于您包含的脚本中,在函数外部,具有自己的范围

在您的主脚本中,您应该:

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

diggstyle_code.php

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

请记住,包含/要求文件与在其所需行上复制粘贴内容完全相同。

答案 1 :(得分:8)

这应该可行,但这是一个非常糟糕的黑客:

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

您可能希望重构代码以使用函数和/或对象,并从文件中调用它们而不是包含它们(意大利面条代码警报)

答案 2 :(得分:3)

require不从Web服务器提取文件 - 它应该引用文件系统上的文件。

调用includerequire只是告诉PHP将代码文件的内容粘贴到此处的代码中,仅此而已。

答案 3 :(得分:1)

require()不会进行HTTP调用。它只是从磁盘打开文件并将代码包含在调用的位置。如此简单的局部变量就足够了。

答案 4 :(得分:1)

如果您的变量是全局变量,则无需“传递”它,它已存在: PHP variable scope

答案是,不要做任何事情,如果你调用require()的文件中存在$ page_no,它将在包含的文件中可用。

答案 5 :(得分:1)

如果我已经正确理解,你需要的是调用文件diggstyle_code.php传递参数,这样就没有人可以调用该文件并使其工作,而不是你的主文件。我是对的吗?

因此假设你的" main.php"有行

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

意味着: 如果有人打电话给" main.php"让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
}
?>

答案 6 :(得分:1)

虽然这个问题很老,但我使用的另一个选项是该线程中缺少的。您可以从所需文件返回一个函数,该函数接受您要传递的参数:

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

当你require时,用参数调用它:

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

// or:

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

答案 7 :(得分:0)

require,require_once,include和include_once尝试在当前文件中包含文件系统中的文件。

由于没有名为diggstyle_code.php?page = 1的文件,因此PHP无法找到它是完全合乎逻辑的。

您不能以这种方式传递值,但是,当前文件中声明的任何变量都可以在包含的文件中访问。

答案 8 :(得分:-2)

我遇到了这个问题,我注意到你在你的网址中使用http://然后它不起作用