【问题标题】:PHP include() with GET attributes (include file.php?q=1)带有 GET 属性的 PHP include() (include file.php?q=1)
【发布时间】:2011-08-06 05:48:33
【问题描述】:

我想include() 一个位于我服务器上的 php 文件,带有额外的 GET 属性。 但它不起作用:

include('search.php?q=1');

它给出的错误:

PHP Warning:  include(): Failed opening './search.php?q=1' for inclusion

似乎它试图打开一个字面上名为“search.php?q=1”的文件,而不是打开“search.php”文件并向其发送 GET 属性。

*请注意,如果我不放置任何 GET 属性,它确实有效:

include('search.php');

【问题讨论】:

  • 它不能工作。你不能在那里使用查询参数。
  • 是什么让您认为它应该有效? GET 是一种 HTTP 方法,即它由 HTTP 协议使用,由您的 Web 服务器处理。另一方面,include 只是直接从文件系统读取和解释文件,不涉及 Web 服务器。这是两个不同的过程。
  • 如果启用了allow_url_includeallow_url_fopen@Felix include 可以使用 URI。
  • @Felix 当然是的,出于安全原因,它在大多数共享主机上都被禁用了

标签: php include get


【解决方案1】:

咨询安全

虽然远程文件可以在远程服务器上处理(取决于文件扩展名以及远程服务器是否运行 PHP),但它仍然必须创建有效的 PHP 脚本,因为它将在本地处理。如果来自远程服务器的文件必须在此处单独处理和输出,则 Readfile() 是一种更可取的方法。否则,应更加谨慎,以确保远程脚本生成有效且理想的代码。

我建议你这样做:

//$q variable will be shown on your included webpage and it can be changed differently in any included page (undoubtedly).
 $q = 1;
include("search.php");

这样你就可以轻松地传递你的变量

【讨论】:

    【解决方案2】:

    效果很好!!谢谢

    在“include”语句之前设置var

    $q=1;
    include("search.php");
    

    【讨论】:

      【解决方案3】:

      尝试重写 $_GET 变量。

      $oldget=$_GET;
      $_GET=array('q'=>'1');
      include('search.php');
      $_GET=$oldget;
      

      【讨论】:

        【解决方案4】:

        如果您像我一样需要将其永久包含在“包含”链接中,则可以使用 jQuery 来完成。

        我最近使用的解决方案如下:

        首先,声明要被包含文件填充的 div 的位置:

        <div id="imgdiv"> </div>
        

        然后添加一个 jQuery 调用来填充它,但是用 PHP 插入你的 GET 变量:

        <script>                
        window.onload = function(){     
                $("#imgdiv").load('php/show-img.php?id=<?php echo $i; ?>&name=<?php echo $name; ?>');           
        }
        </script>
        

        希望这足以让它正常工作,当然前提是使用支持 java 的浏览器。

        【讨论】:

          【解决方案5】:

          实际上,写入$_GET 数组有点脏,没有必要。 您可以简单地在您的页面中在 include 语句之前设置一个变量:

          $q=1;
          include("search.php");
          

          这样,$q 变量将在您包含的页面中可见,并且可以(显然)在任何包含页面中进行不同的设置。

          【讨论】:

            【解决方案6】:

            也许是另一种选择,虽然它有其自身的局限性,但使用 AJAX 注入到 div 中.. 最简单的方法是使用 jQuery:

            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script>
            <script>$('#box').load('search.php?q=1');</script>
            
            <div ID="box"></div>
            

            【讨论】:

              【解决方案7】:

              您不想这样做:您必须执行 http 请求才能传递 GET 参数。您以这种方式调用的 PHP 脚本将在单独的 PHP 进程中运行。

              最佳方法是在本地包含文件:

              include('search.php');
              

              并手动将任何参数传递给它,例如

              $q = "1";
              include('search.php');  // expects `$q` parameter
              

              或者,更简洁地说,将 search.php 中的所有内容放入可以使用参数调用的函数或类中:

              include('search.php');  // defines function my_search($q)  
              my_search(1);       
              

              【讨论】:

              • 甚至更好地使用类结构。 include('search.php'); $search = new Search($q);
              • @JonathonWisnoski 因为加入一些课程只会让一切神奇地变得更好,对吧?对吗?
              • 是的,封装很重要。在文件之间共享全局变量只是要求非常难以诊断错误和通常无法维护的代码。
              【解决方案8】:

              简单的解决方案是在包含文件之前设置 GET 值。

              $_GET['q'] = 1;
              include('search.php);
              

              【讨论】:

              • 写入 GET 数组感觉有点脏。但它会工作
              • 我同意,这只是一种快速而肮脏的方式。
              • 提示:检查您的脚本是否无法访问 $_GET['q'],否则写入此超全局可能会导致不需要的结果。
              猜你喜欢
              • 1970-01-01
              • 2017-10-23
              • 2012-03-11
              • 1970-01-01
              • 2019-02-17
              • 1970-01-01
              • 1970-01-01
              • 2012-06-13
              • 1970-01-01
              相关资源
              最近更新 更多