如何使用php从另一个主机服务器检索http页面并检测重定向

如何使用php从另一个主机服务器检索http页面并检测重定向,php,redirect,Php,Redirect,假设我在www.myhost.com上有一个服务器。通过使用php,我想检索php文件www.anotherhost.com/somefile.php生成的html文档。我还想使用php来实现这一点。另一台主机与myhost不在同一台服务器上 我知道像fopen、f_get_contents和file这样的函数可以通过简单的执行来实现 $fp = fopen ("http://www.anotherhost.com/somefile.php") 从那里fp可以用作任何其他文件指针来读取内容 但

假设我在www.myhost.com上有一个服务器。通过使用php,我想检索php文件www.anotherhost.com/somefile.php生成的html文档。我还想使用php来实现这一点。另一台主机与myhost不在同一台服务器上

我知道像fopen、f_get_contents和file这样的函数可以通过简单的执行来实现

$fp = fopen ("http://www.anotherhost.com/somefile.php")
从那里fp可以用作任何其他文件指针来读取内容

但是,出于某种原因,我还想知道,当我试图检索somefile.php生成的html文档时,另一台主机上的somefile.php是否命令了客户端重定向。somefile.php可以通过

header ("Location: http://www.anotherhost.com/extrafile.php")
现在,fopen将检索extrafile.php生成的html文档,而不检测是否执行了客户端重定向

PHP中是否有一些功能使您能够从其他服务器检索html文档,并在发生重定向时通知您?这是可以接受的,如果我必须遵循重定向自己(不是自动完成),只要我被告知什么是新的网址

不建议使用功能系统执行任意命令

另外,如果您打算建议使用fsockopen,那么请解释为什么在我尝试执行时出现错误“找不到套接字传输”http-您在配置PHP时忘记启用它了吗

fsockopen ("http://localhost")
当我这样做的时候,我还得到了“解析地址失败”的localhost

fsockopen ("localhost")

感谢阅读。非常感谢您的帮助。

您可能需要一个完整的HTTP客户端,而不是流包装器和fopen()/file\u get\u contents()。我认为使用流包装器和流包装元数据()可以实现您想要的功能但是你最好使用更全面的实现。

你可以使用from Zend框架。它有检索重定向数量的方法,以及设置要遵循的重定向数量的限制等。如果你只是想知道它是如何实现的,那么你可以查看源代码并尝试找出它。不应该太复杂ard我认为。

如果您不想沿着Zend或stream路线走,您可以始终使用。这些将允许您返回标头,因此您可以分析这些标头以确定是否发出了任何重定向


(您也可以使用'CURLOPT_MAXREDIRS'选项指定它不应遵循重定向。)

我将使用cURL进行此操作。如果重定向是在标头中指定的,而不是在apache mod_rewrite(例如)中指定的,那么您应该能够通过抓取响应发送的所有标头来检测是否存在重定向


(可选)有一个自动跟随重定向()的设置。

从PHP5.2开始,您可以使用流api和

e、 g

印刷品

redirected to http://www.spiegel.de/
len=144446
redirected to http://www.spiegel.de/
len=144446