使用PHP读取远程文件

时间:2009-06-09 11:34:24

标签: php

任何人都可以告诉我如何读取最多3个远程文件并将结果编译成查询字符串,现在可以使用标题通过调用脚本将其发送到页面。

让我解释一下:

page1.php

$rs_1 = result from remote page a;
$rs_2 = result from remote page b;
$rs_3 = result from remote page c;

header("Location: page2.php?r1=".$rs_1."&r2=".$rs_2."&r3=".$rs_3)

3 个答案:

答案 0 :(得分:4)

您可以使用file_get_contents,然后确保在构建重定向网址时对数据进行urlencode

$rs_1 =file_get_contents($urlA);
$rs_2 =file_get_contents($urlB);
$rs_3 =file_get_contents($urlC);


header("Location: page2.php?".
  "r1=".urlencode($rs_1).
  "&r2=".urlencode($rs_2).
  "&r3=".urlencode($rs_3));

另请注意URL should be kept under 2000 characters

想发送超过2000个字符?

如果要使用超过2000个字符允许的更多数据,则需要对其进行POST。这里的一种技术是使用包含您的数据的表单将一些HTML发送回客户端,并在页面加载时自动提交javascript。

表单可以有一个默认按钮,上面写着“点击此处继续...”,你的JS会改为“请等待......”。因此没有javascript的用户会手动驱动它。

换句话说,就像这样:

<html>
<head>
<title>Please wait...</title>
<script>

function sendform()
{
   document.getElementById('go').value="Please wait...";
   document.getElementById('autoform').submit();
}
</script>
</head>    
<body onload="sendform()">
<form id="autoform" method="POST" action="targetscript.php">
<input type="hidden" name="r1" value="htmlencoded r1data here">
<input type="hidden" name="r2" value="htmlencoded r2data here">
<input type="hidden" name="r3" value="htmlencoded r3data here">
<input type="submit" name="go" id="go" value="Click here to continue">
</form>

</body>
</html>

答案 1 :(得分:1)

file_get_contents肯定有帮助,但对于远程脚本,CURL是更好的选择。

即使 allow_url_include = On (在您的php.ini中)

,这也能很好地运作
$target = "Location: page2.php?";

$urls = array(1=>'url-1', 2=>'url-2', 3=>'url-3');
foreach($urls as $key=>$url) {
    // get URL contents
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    $target .= "&r".$key."=".urlencode($output));
}
header("Location: ".$target);

答案 2 :(得分:0)

您可以使用file_get_contents函数。 API文档:http://no.php.net/manual/en/function.file-get-contents.php

$file_contents = file_get_contents("http://www.foo.com/bar.txt")

请注意,如果文件包含多行或非常非常长的行,则应考虑使用HTTP post而不是长URL。