在PHP中是否可以将curl与相对路径一起使用?

在PHP中是否可以将curl与相对路径一起使用?,php,curl,Php,Curl,我有两个php页面。我想在a.php中获取b.php 在我的a.php中: $ch = curl_init("b.php"); echo(curl_exec($ch)); curl_close($ch); 不起作用 但是: 没关系。我确信a.php在www.site.com下 为什么curl不能使用相对路径?有解决方法吗?cUrl需要一个绝对URI来操作 相对URI不起作用,因为没有给出该相对URI是绝对的基础URI 但是,如果同时具有基本URI和相对URI,则可以创建相对URI的绝对URI并

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

在我的a.php中:

$ch = curl_init("b.php");
echo(curl_exec($ch));
curl_close($ch);
不起作用

但是:

没关系。我确信a.php在www.site.com下


为什么curl不能使用相对路径?有解决方法吗?

cUrl需要一个绝对URI来操作

相对URI不起作用,因为没有给出该相对URI是绝对的基础URI

但是,如果同时具有基本URI和相对URI,则可以创建相对URI的绝对URI并将其与cUrl一起使用


可以基于相对URI构建绝对URI的PHP类,其基础是Pear中的包。

cURL主要用于从外部域检索数据,因此允许相对路径没有太大意义。最简单的方法就是将当前域附加到URL

$domain = $_SERVER['HTTP_HOST'] . "/";
$ch = curl_init($domain . "b.php");
echo(curl_exec($ch));
curl_close($ch);

从HTTP_主机获取域怎么样

$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);

Curl是一个独立的库,它并不真正了解任何关于web服务器的信息,也不知道它从哪里来,也不知道它为什么存在。因此,您可以使用以下两个服务器变量之一“伪造”相对URL:

$_SERVER['SERVER_NAME'] 
当前脚本正在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值

主机的内容:来自当前请求的头(如果有)

见:

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

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

CURL完全不了解其操作环境。它无法知道“b.php”在哪里。它应该把它变成
example.org/b.php
还是
some.wonky.multi.level.domain.co.uk/b.php

即使将其视为本地文件引用也没有用。。。CURL不知道
.php
文件实际上是一个php脚本。即使它进行了本地文件获取,您也只需要获取PHP源代码,而不是PHP运行后的脚本输出。如果你有一个像
arstechnica.com
这样的网站,它的所有页面实际上都是
.ars
脚本呢?是asp吗。aspx。html?PHP脚本?perl?鲁比


所以。。答案很简单:您必须始终指定一个完整的URL(带有协议),以便对其进行CURL操作。

首先对相对路径进行CURL是毫无意义的。你能解释一下为什么你认为它会起作用吗?它将如何工作?作为一种解决方法,只需构造
a.php
的完整URL并将其传递进来。我认为它应该像javascript中的XMLHTTPRequest一样工作,它接受相对路径。javascript中的XMLHTTPRequest知道当前的基本URL。卷曲不会,除非你尽最小的努力告诉它。这就是
curl\u init
的作用。如果某个东西没有相对的点,它怎么可能是相对的呢?检查第3行和第4行中是否缺少$\u SERVER['HTTPS']分号也是有意义的。
$_SERVER['HTTP_HOST']
ob_start();
require "b.php";
$output = ob_get_clean();