我有两个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操作。