Is it possible to use curl with relative path in PHP?

cUrl needs an absolute URI to operate on.

A relative URI does not work because there is no base URI given to which that relative URI is absolute to.

You can however, if you have both the base URI and the relative URI, create the absolute URI of the relative URI and use it with cUrl.

See 12.4.1 Resolving relative URIs.

A PHP class that can build an absolute URI based on a relative URI and it's base is the Net_URL2 package in Pear.


How about taking the domain from 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);

Curl is a seperate library which does not really know anything about webservers and where it's coming from or (philosophicaly) why it is there. So you may 'fake' relative urls using one of the two _SERVER variables:

$_SERVER['SERVER_NAME'] 

The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host.

$_SERVER['HTTP_HOST']

Contents of the Host: header from the current request, if there is one.

See: http://php.net/manual/en/reserved.variables.server.php

Edit update: I thought a moment longer about this: do you really need to fetch it with curl? You usually may also fetch any output of another script like this and save the overhead of loading it through a new http request:

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

Tags:

Php

Curl