PHP include()带有GET属性(include file.php?q=1)


PHP include() with GET attributes (include file.php?q=1)

我想要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');

您不希望这样做:您必须执行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);       

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

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

尝试重写$_GET变量

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

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

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

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

效果很好!谢谢你

在include语句前设置var

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

可能是另一种选择,尽管它有自己的局限性,使用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>

如果像我一样,你需要永久地在'include'链接中,它可以用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支持的浏览器