PHP 8.1.24 Released!


(PHP 5, PHP 7, PHP 8)

curl_multi_getcontentReturn the content of a cURL handle if CURLOPT_RETURNTRANSFER is set


curl_multi_getcontent(CurlHandle $handle): ?string

If CURLOPT_RETURNTRANSFER is an option that is set for a specific handle, then this function will return the content of that cURL handle in the form of a string.



A cURL handle returned by curl_init().

Return Values

Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set or null if not set.


Version Description
8.0.0 handle expects a CurlHandle instance now; previously, a resource was expected.

See Also

add a note

User Contributed Notes 3 notes

michael at xendica dot com
9 years ago
This seems to work as expected for me - allowing me to get the content from a curl_multi operation into variables :

(Thanks go to many other notes in related documentation (there is much copy/pasting) all I did was add the relevant line(s))

= array("",""); // array of URLs
$mh = curl_multi_init(); // init the curl Multi

$aCurlHandles = array(); // create an array for the individual curl handles

foreach ($aURLs as $id=>$url) { //add the handles for each url
$ch = curl_setup($url,$socks5_proxy,$usernamepass);
$ch = curl_init(); // init curl, and then setup your options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // returns the result - very important
curl_setopt($ch, CURLOPT_HEADER, 0); // no headers in the output

$aCurlHandles[$url] = $ch;

$active = null;
//execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
while (

while (
$active && $mrc == CURLM_OK) {
if (
curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while (

/* This is the relevant bit */
// iterate through the handles and get your content
foreach ($aCurlHandles as $url=>$ch) {
$html = curl_multi_getcontent($ch); // get the content
// do what you want with the HTML
curl_multi_remove_handle($mh, $ch); // remove the handle (assuming you are done with it);
/* End of the relevant bit */

curl_multi_close($mh); // close the curl multi handler

butesa at freenet dot de
10 years ago
You can use curl_multi_getcontent() on a curl handle that was executed with curl_exec() (and not added to a multi handle).
However, this is not very useful because curl_multi_getcontent() will return the same as curl_exec() then.

= curl_init('');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$a = curl_exec($ch);
$b = curl_multi_getcontent($ch);
var_dump($a === $b);
will return:

5 years ago
It's probably a bug in the curl multi implementation:

In many many cases you keep the curl connection alive after a curl_exec().
With curl_multi that's not possible if you don't do this after every get_content() :

I've not yet tested if this also breaks the keepalive connection but if you don't do this you'll just get the old previous response after each curl_multi_exec()
To Top