【问题标题】:how to pass a variable through the require() or include() function of php?如何通过 php 的 require() 或 include() 函数传递变量?
【发布时间】:2017-07-25 22:10:26
【问题描述】:

当我使用这个时:

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

警告是 :failed to open stream: No error in C:\xampp\htdocs\4ajax\gallery_core.php on line 198

错误是:

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() 函数时需要传递变量。

【问题讨论】:

  • @Tomalak Geret'kal,我是新来的。请澄清你所说的。
  • 请阅读常见问题解答 (stackoverflow.com/faq),尤其是“我如何在这里提问?”标题下的部分。

标签: php


【解决方案1】:

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

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

【讨论】:

  • 这仅适用于开启 auto_globals 的代码。通过查询字符串传入的变量位于超全局$_GET 数组中(或$_REQUEST
  • @knitti 你能举个例子吗?谢谢!
  • 谢谢@PascalMARTIN。在内部文件上没有 URL 变量不是一种解决方法,无论如何这是正确的方法。它适用于 $globals 关闭。我不知道为什么 knittl 这么说,因为它使用标准变量范围。 @knittl - 你能详细说明吗?
【解决方案2】:

这应该可行,但它是一个相当肮脏的黑客:

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

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

【讨论】:

  • 1) '重构你的代码'——这是什么意思? 2)'从你的文件中调用它们'-你是什么意思? 3)'spaghetti code alert' - 代码变得笨拙?
  • @sof_user: 1) 重构代码,使其在不改变行为的情况下更好地使用和维护 2) 创建函数,包含它们,然后在需要时从其他文件中调用它们 3) 代码变得不可维护并且巨大的混乱(如意大利面)
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        如果我理解正确,您需要调用文件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
        }
        ?>
        

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

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

            【讨论】:

              【解决方案9】:

              我遇到了这个问题,我注意到如果你在你的 url 中使用 http:// 那么它就不起作用

              【讨论】:

                猜你喜欢
                • 2015-10-25
                • 2012-01-18
                • 1970-01-01
                • 2012-04-20
                • 2011-10-30
                • 1970-01-01
                • 2011-04-12
                • 2016-09-30
                • 2014-03-02
                相关资源
                最近更新 更多