在PHP中可以使用curl和相对路径吗?



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

在我的a.p 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);

就可以了。我确信。php在www.site.com下面。

为什么旋度不能与相对路径一起工作?有解决办法吗?

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

如何从HTTP_HOST获取域?

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

cUrl需要一个绝对URI来操作。

相对URI不能工作,因为没有给出相对URI绝对指向的基URI。

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

参见12.4.1解析相对uri。

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

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

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

CURL绝对不了解其操作环境。它没有办法知道'b.p p'在哪里。它应该把它变成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吗?ruby ?

. .简单的回答:您必须始终指定一个完整的URL,带协议,以便CURL操作。