当我使用它时:
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()函数时传递变量。
答案 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服务器提取文件 - 它应该引用文件系统上的文件。
调用include
或require
只是告诉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://然后它不起作用