PHP Conference Japan 2024

curl_multi_getcontent

(PHP 5, PHP 7, PHP 8)

curl_multi_getcontent如果設定了 CURLOPT_RETURNTRANSFER,則返回 cURL 控制碼的內容

說明

curl_multi_getcontent(CurlHandle $handle): ?string

如果針對特定控制碼設定了選項 CURLOPT_RETURNTRANSFER,則此函式將以字串形式返回該 cURL 控制碼的內容。

參數

handle

curl_init() 返回的 cURL 控制碼。

返回值

如果設定了 CURLOPT_RETURNTRANSFER,則返回 cURL 控制碼的內容;如果未設定,則返回 null

更新日誌

版本 說明
8.0.0 handle 現在需要一個 CurlHandle 實例;以前需要一個 資源

參見

新增註釋

使用者貢獻的註釋 2 則註釋

23
michael at xendica dot com
10 年前
這對我來說似乎如預期般運作 - 允許我從 curl_multi 操作中獲取內容到變數中

(感謝相關文件中許多其他註釋(有很多複製/貼上),我所做的只是添加了相關的行)

<?
$aURLs = array("https://php.dev.org.tw","http://www.w3cschools.com"); // URL 陣列
$mh = curl_multi_init(); // 初始化 curl Multi

$aCurlHandles = array(); // 為個別的 curl 控制碼建立一個陣列

foreach ($aURLs as $id=>$url) { // 為每個 url 添加控制碼
$ch = curl_setup($url,$socks5_proxy,$usernamepass);
$ch = curl_init(); // 初始化 curl,然後設定您的選項
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // 返回結果 - 非常重要
curl_setopt($ch, CURLOPT_HEADER, 0); // 輸出中沒有標頭

$aCurlHandles[$url] = $ch;
curl_multi_add_handle($mh,$ch);
}

$active = null;
// 執行控制碼
do {
$mrc = curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);

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

/* 這是相關的部分 */
// 遍歷控制碼並獲取您的內容
foreach ($aCurlHandles as $url=>$ch) {
$html = curl_multi_getcontent($ch); // 獲取內容
// 處理 HTML
curl_multi_remove_handle($mh, $ch); // 移除控制碼(假設您已完成);
}
/* 相關部分結束 */

curl_multi_close($mh); // 關閉 curl 多重處理器

?>
-1
butesa at freenet dot de
11 年前
您可以在使用 curl_exec() 執行(且未添加到多重控制碼)的 curl 控制碼上使用 curl_multi_getcontent()。
然而,這並不是很有用,因為 curl_multi_getcontent() 的返回值與 curl_exec() 相同。

<?php
$ch
= curl_init('http://www.example.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$a = curl_exec($ch);
$b = curl_multi_getcontent($ch);
var_dump($a === $b);
curl_close($ch);
?>
會回傳

bool(true)
To Top