2012-06-12 43 views
1

我一直想这样做,因为我的网站每页加载大约3个HTTP请求,因为每个PHP的输出都用cURL检索。这太慢了,我想避免使用cURL。我发现堆栈溢出this question,它基本上做我想要的。接受的答案建议是使用ob_start();开始获取输出,然后使用ob_get_clean();将输出放入一个变量。我现在的问题是我试图捕获的PHP脚本输出需要使用HTTP Get传递给它们的变量。访问这样的变量:如何捕获PHP输出到变量

$term = $_GET['term']; 

而且我不想改变这种状况,因为虽然我会从另一个PHP脚本访问这些PHP脚本的输出,我还访问它们计划从其他地方。那么,有没有办法将这些PHP脚本通过Get来接受一些参数,然后用上面提到的方法捕获它们的输出?

回答

1

而且我不想改变这种状况,因为虽然我要访问这些PHP脚本的输出来自另一个PHP脚本,我也计划从别处访问它们。那么,有没有办法将这些PHP脚本通过Get来接受一些参数,然后用上面提到的方法捕获它们的输出?

你的问题有点不清楚为为什么你在第一时间使用卷曲。如果你的脚本是在同一台服务器上,你可以简单地设置正确的$_GET变量和使用:

<?php 
ob_start(); 
// include the file. 
$_GET['foo'] = 'bar'; 
include 'the_file.php'; 

$output = ob_get_clean(); 

如果你的脚本位于另一台服务器,其中包括是不可行的,你会总是要做一个HTTP请求来获得他们的内容,不管你是用cURL还是Ajax,还是我关心的所有套接字。

+0

这正是我所需要的,谢谢。 – Hassan

+0

最受欢迎。 :) –

0

你可以从任何加载的脚本访问$ _GET,只要它在URI中,变量$ term可以用在任何脚本中。您也可以包含脚本。

当您包含脚本时,您可以在包含之后访问其中的一些内容。

+0

获取参数被发送到特定的PHP文件。试图从另一个文件访问它们是*不*我想要做的。 – Hassan

+0

从表单提交? – Eli

+0

不,来自另一个PHP文件。 – Hassan

2

你可以从任何php脚本中获取$ _GET变量,如果它设置了(使用isset来检查)。然后只是卷曲到这样的网址将工作。

如果您之前已将方法更改为POST,则可以使用CURLOPT_HTTPGET。有关更多详细信息,请参阅curl_setopt函数页面(http://www.php.net/manual/en/function.curl-setopt.php)。

对于非cURL方法,请使用jQuery ajax。使用起来相当简单,只需阅读文档here

编辑:这是你想要的东西(还没有检查虽然代码)

<?php 

function get_include_contents($filename, $get) { 
if (is_file($filename)) { 
    ob_start(); 
    $_GET = array(); 
    while (list($key, $val) = each($get)) { 
     $_GET[$key]=$val; 
    } 
    include $filename; 
    return ob_get_clean(); 
} 
return false; 
} 

$string = get_include_contents('somefile.php', array('param1'=>'x', 'param2'=>'y')); 

?> 
+0

其实我试图避免使用cURL,因为它很慢。这是我的问题的重点。 – Hassan

+0

@Hassan你其实说你在你的问题的第一行使用cURL。无论如何,你可以使用'jQuery ajax'。只需将您想要发送的值作为'get'值发送到$ .ajax的'data'参数中,您的输出将在成功函数中接收。 – gopi1410

+0

是的,我正在使用cURL,但这正是我的问题。 – Hassan