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

如何通过php的require()或include()函数传递变量?,php,Php,当我使用此选项时: require("diggstyle_code.php?page=$page_no"); 警告是:无法打开流:第198行的C:\xampp\htdocs\4ajax\gallery\u core.php中没有错误 错误是: Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\4ajax\gallery_core.

当我使用此选项时:

require("diggstyle_code.php?page=$page_no");
警告是:无法打开流:第198行的C:\xampp\htdocs\4ajax\gallery\u 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\u no
的值

但是,如果我从require函数的参数中省略了
“?page=$page\u no part”
,则不会显示错误或警告


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

这应该行得通,但这是一个相当肮脏的黑客行为:

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

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

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


调用
include
require
只是告诉PHP将给定文件的内容粘贴到您的代码中的这个位置,仅此而已。

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

require、require\u once、include和include\u once尝试将文件系统中的文件包含在当前文件中

因为没有名为diggstyle_code.php?page=1的文件,所以php找不到它完全合乎逻辑

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

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

这意味着,对于代码,您必须在磁盘上有一个名为
diggstyle\u code.php?page=1
的文件。显然情况并非如此,因此它失败了

引用PHP手册的页面:

变量的范围是定义变量的上下文。大多数情况下,所有PHP变量都只有一个作用域此单一作用域还包括所包含的文件和所需的文件。

在您的情况下,不需要传递变量。如果当前脚本中有一个变量,那么它也将存在于脚本中,在函数之外,函数有自己的作用域

在主脚本中,您应该具有:

$page_no = 10;
require 'diggstyle_code.php';
diggstyle\u code.php
中:

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


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

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


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

我遇到了这个问题,我注意到如果您在url中使用http://则它不起作用。

如果我理解正确,您需要调用传递参数的文件
diggstyle\u code.php
,这样就没有人可以调用该文件并使其工作,而不是主文件。我说得对吗

因此,假设您的“main.php”具有以下行

require("diggstyle_code.php?page=$page_no");
这意味着: 如果有人调用“main.php”,就会运行
diggstyle\u code.php
。 但是如果任何人以任何方式直接调用
diggstyle\u code.php
他/她应该什么也得不到

如果我的理解正确,实现这一点的一种方法是在主文件中包含一个变量或常量,其范围将由
diggstyle\u code.php

<?php
if ( _VERIFICATION_ == "y" ) {
//Here the code should be executed
} else {
// Something else
}
?>
例如:“main.php”

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

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

return function(array $something) {
    print_r($something);
}
并在
需要时使用参数调用它:

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

// or:

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

@托马拉克·格雷特·卡尔,我是新来的。请澄清你所说的。请阅读FAQ(),特别是标题“我如何在这里提问?”下的部分。1)“重构你的代码”-这是什么意思?2) “从你的档案中给他们打电话”——你是什么意思?3) “意大利面代码警报”-代码变得笨拙?@sof_user:1)重新构造代码,使其在不改变行为的情况下更好地可用和可维护2)创建函数,包括它们,然后在需要时从其他文件调用它们3)代码变得无法维护和混乱(如意大利面)这只适用于启用自动全局的代码。通过查询字符串传入的变量位于superglobal
$\u GET
数组(或
$\u REQUEST
数组)中@knitti您能举个例子吗?谢谢谢谢@PascalMARTIN。这不是在内部文件上没有URL变量的解决方法,这是正确的方法。它可以在关闭
$globals
的情况下工作。我不知道knittl为什么这么说,因为它使用标准变量范围@你能详细说明一下吗?