是否可以在PHP中使用具有相对路径的curl?

2022-08-30 22:50:30

我有两个php页面。我想在a.php中获取b.php。

在我的a.php:

$ch = curl_init("b.php");
echo(curl_exec($ch));
curl_close($ch);

不起作用;

但:

$ch = curl_init("www.site.com/b.php");
echo(curl_exec($ch));
curl_close($ch);

还可以。我敢肯定a.php正在 www.site.com。

为什么 curl 不能与相对路径一起工作?是否有解决方法?


答案 1

Curl是一个独立的库,它对Web服务器一无所知,也不知道它来自哪里或(哲学上)为什么它在那里。因此,您可以使用以下两个_SERVER变量之一“伪造”相对URL:

$_SERVER['SERVER_NAME'] 

执行当前脚本所使用的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值。

$_SERVER['HTTP_HOST']

Host 的内容:来自当前请求的标头(如果有)。

请参见: http://php.net/manual/en/reserved.variables.server.php

编辑更新:我想了一会儿:你真的需要用curl来获取它吗?您通常还可以获取另一个脚本的任何输出,如下所示,并节省通过新的http请求加载它的开销:

ob_start();
require "b.php";
$output = ob_get_clean();

答案 2

从HTTP_HOST获取域名怎么样?

$domain = $_SERVER['HTTP_HOST'];
$prefix = $_SERVER['HTTPS'] ? 'https://' : 'http://';
$relative = '/b.php';
$ch = curl_init($prefix.$domain.$relative);
echo(curl_exec($ch));
curl_close($ch);

推荐