適用於 php < 5.5 的技巧
function curl_reset(&$ch){
$ch = curl_init();
}
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
curl_reset — 重置 libcurl 工作階段控制碼的所有選項
handle
由 curl_init() 返回的 cURL 控制碼。
不返回任何值。
版本 | 說明 |
---|---|
8.0.0 |
handle 現在需要 CurlHandle 實例;先前需要的是 resource。 |
範例 #1 curl_reset() 範例
<?php
// 建立一個 cURL 句柄
$ch = curl_init();
// 設定 CURLOPT_USERAGENT 選項
curl_setopt($ch, CURLOPT_USERAGENT, "My test user-agent");
// 重設所有先前設定的選項
curl_reset($ch);
// 發送 HTTP 請求
curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
curl_exec($ch); // 先前設定的 user-agent 不會被發送,它已被 curl_reset 重設
// 關閉句柄
curl_close($ch);
?>
注意事項:
curl_reset() 也會重設以 curl_init() 參數指定的 URL。
如果您重複使用 cURL 句柄,並且想要確保沒有先前選項的殘留值,但又不想重設每次 cURL 呼叫所需的基礎設定(例如 FTP 詳細資訊),那麼這裡有一個簡單的模式可以解決這個問題
<?php
類別 cUrlicue {
保護的 $curl;
/* 建立 cURL 句柄 */
函式 __construct() {
$this->curl = curl_init();
$this->curl_init_opts();
curl_exec($this->curl);
}
/* 重新載入您的基本選項 */
函式 curl_init_opts() {
$opts[CURLOPT_PROTOCOLS] = CURLPROTO_FTP;
$opts[CURLOPT_RETURNTRANSFER] = true;
$opts[CURLOPT_USERPWD] = 'user:pass';
//...
curl_setopt_array($this->curl, $opts);
}
/* 在進行新的 cURL 呼叫時使用 */
函式 curl_exec($opts) {
curl_reset($this->curl); // 清除所有舊選項
$this->curl_init_opts(); // 再次設定基本選項
curl_setopt_array($this->curl, $opts); // 設定您的新選項
回傳 curl_exec($this->curl);
}
/* 您的任何 cURL 方法 */
函式 curl_get_whatever() {
$opts[CURLOPT_URL] = 'ftp://.../whatever';
//...
$result = $this->curl_exec($opts);
// ...
}
}
?>
然後:每次從您的任何方法呼叫 $this->curl_exec() 都會重置先前的選項、重新載入基本選項、新增您的新選項,並返回結果。或者,如果沒有定義任何動態內容,也可以將您的基本選項放入類別屬性中,而不是在方法中。祝您使用愉快。 =^_^=