phpcurlexec
Ⅰ php curl_exec無法返回結果
你要顯示是不是需要這個參數,你試試
// 設置curl 參數,要求結果保存到變數中還是輸出到屏幕上,false直接輸出到屏幕上。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return_data = curl_exec($ch);
curl_close($ch);
var_mp($return_data);
Ⅱ php 中 怎麼讓curl_exec 以數組形式返回
可以先看看PHP中的 curl_exec函數的說明
(PHP 4 >= 4.0.2, PHP 5)
curl_exec—執行一個cURL會話
說明
mixedcurl_exec(resource$ch)
執行給定的cURL會話。
這個函數應該在初始化一個cURL會話並且全部的選項都被設置後被調用。
參數
ch
由curl_init()返回的 cURL 句柄。
返回值
成功時返回TRUE, 或者在失敗時返回FALSE。 然而,如果CURLOPT_RETURNTRANSFER選項被設置,函數執行成功時會返回執行的結果,失敗時返回FALSE。
我前兩天剛好用到過的兩種情況
//從返回結果中獲取指定的值
$res=curl_exec($ch);
$pa='%<ulclass="ul1"><li>本站主數據:(.*?)</li>%si';
preg_match($pa,$res,$r);
return$r[1];
//第二種的返回結果是以json形式。
$res=json_decode(curl_exec($ch),true);
print_r($res);
Ⅲ php 中curl_exec如何返回數組
返回json,轉換成array就可以了。
Ⅳ 在php中,curl_exec響應速度非常慢
最簡便的方法是用ip地址代替域名進行測試,如果有改進就是說明網路域名伺服器配置有問題,多換幾個DNS來嘗試。
php 有個非常非常重要的函數叫做curl_getinfo ,請查一下這個函數的手冊說明,能夠有效地把每一步操作所消耗的時間都分析出來,幫助你鎖定瓶頸,縮小問題范圍
永遠都不要用windows當伺服器。LAMP 就是指的 Linux + Apache + Mysql + PHP,黃金組合,非常穩定非常可靠。
Ⅳ 請問下php中如何處理這個curl_exec()的結果
可以使用 empty() 函數,
if ( empty( $data ) ) {
// 為空
} else {
// 不為空
}
如果是其他某種不明原因導致報錯,可以用異常機制,
try {
if ( !$data ) { // 這里的條件也可以用其他
throw new Exception ( 'error' );
} else {
echo ' success ';
}
} catch (Exception $e) {
echo ' error ';
}
Ⅵ php如何使用CURL復用連接
HTTP1.0與HTTP1.1的一個很大的差別是HTTP1.1支持長連接。現實中有很多這個場景,就是請求了一個頁面,然後這個頁面的其他內容,例如CSS文件,JS文件都要從同一個服務(相同伺服器,相同埠)上面獲取。這些向相同伺服器的請求如果能夠復用連接,是很有利於提供網路性能。
總的來說,復用HTTP連接有兩個好處:
1.節省系統埠資源(每一次連接都要使用埠,埠的資源是有限的)
2.節省創建socket連接的時間。
下面講講在PHP下面,如何使用CURL來復用連接:
curl是在一個handle裡面復用連接的,所以這樣就可以復用連接了:
$ch=curl_init();
$ret=curl_exec($ch);
......
$ret2=curl_exec($ch);
....
curl_close($ch);
在初始化跟關閉$ch資源時即可復用連接。
我這里寫了兩個函數,可以支持GET跟POST的請求,大家感興趣可以看看。
functioncurl_get($url,$timeout=5){
global$g_handle;
if(empty($g_handle))$ch=curl_init();
$options=array(
CURLOPT_URL=>$url,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FRESH_CONNECT=>false,
CURLOPT_FORBID_REUSE=>false,
CURLOPT_TIMEOUT=>$timeout
);
curl_setopt_array($g_handle,$options);
$ret=curl_exec($g_handle);
return$ret;
}
//可以支持POST數據,$post是一個數組,$timeout是超時時間。
functioncurl_post($url,$post=array(),$timeout=10){
global$g_handle;
if(empty($g_handle))$g_handle=curl_init();
$options=array(
CURLOPT_URL=>$url,
CURLOPT_POST=>true,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_FRESH_CONNECT=>false,
CURLOPT_FORBID_REUSE=>false,
CURLOPT_TIMEOUT=>$timeout,
CURLOPT_POSTFIELDS=>http_build_query($post)
);
if(empty($post))$options[CURLOPT_POST]=false;
curl_setopt_array($g_handle,$options);
$ret=curl_exec($g_handle);
return$ret;
}
Ⅶ PHP中的curl_exec
curl_exec
(PHP 4 >= 4.0.2, PHP 5) curl_exec—執行一個cURL會話
可以參考官方網站範例:http://www.php.net/manual/en/function.curl-exec.php
你要用CURL,就跟Session一樣,要先初始化 curl_init(),不然PHP部會知道該怎麼運作。初始化完成之後就要開始設定參數,就像是要不要顯示出來。當你參數設定完畢,就要開始執行這個CURL。最後就要關閉這個CURL。這就算是一個簡單的CURL運用,當然還有更多變化。
實際例子:
<?php
//創建一個cURL資源
$ch=curl_init();
//設置URL和相應的選項
curl_setopt($ch,CURLOPT_URL,"
);
curl_setopt($ch,CURLOPT_HEADER,0);
//抓取URL並把它傳遞給瀏覽器
curl_exec($ch);
//關閉cURL資源,並且釋放系統資源
curl_close($ch);
?>
如使用mysql一樣,首先,我們必須先建立一個「curl」的連線,也因此,必須使用到 curl_init() 這個函式。而為了怕建立連線忘了關閉。因此,必須先寫好關閉的函式,curl_close($ch)。
不過大部分HTML標簽都可以抓下來,並且顯示,可是有部分可能與資料加密性或是轉址的部分,就無法正常顯示。
/建立CURL連線
$ch=curl_init();
//設定擷取的URL網址
curl_setopt($ch,CURLOPT_URL,"
);
curl_setopt($ch,CURLOPT_HEADER,false);
//將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//執行
$temp=curl_exec($ch);
//關閉CURL連線
curl_close($ch)
加上curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);之後,他會將curl_exec()獲取的訊息以文件流的形式返回傳給$temp,而不是直接輸出。如果要顯示出畫面的話就加上 echo $temp;就可以了。
下面先分享一個比較常用的,傳遞參數的部分。
簡易的使用語法(GET):
//建立CURL連線
$ch=curl_init();
//設定擷取的URL網址
curl_setopt($ch,CURLOPT_URL,"
);
curl_setopt($ch,CURLOPT_HEADER,false);
//將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//執行
$temp=curl_exec($ch);
//關閉CURL連線
curl_close($ch)
Get參數可以直接在網址傳遞例如網址後面加的?SomeVar=test,但是一旦資料量很大,用POST送還是比較適合。
簡易的使用語法(POST):
//建立CURL連線
$ch=curl_init();
//設定擷取的URL網址
curl_setopt($ch,CURLOPT_URL,"
);
curl_setopt($ch,CURLOPT_HEADER,false);
//將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//設定要傳的變數A=值A&變數B=值B(中間要用&符號串接)
$PostData="a=abc&b=def";
//設定CURLOPT_POST為1或true,表示要用POST方式傳遞
curl_setopt($ch,CURLOPT_POST,1);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料。
curl_setopt($ch,CURLOPT_POSTFIELDS,$PostData);
//執行
$temp=curl_exec($ch);
//關閉CURL連線
curl_close($ch)
以上的傳遞方式在某些狀況下很好用,譬如說,沒有設計完整的會員申請系統,就可以利用上面這些程式碼,做一個自動注冊申請機
Ⅷ 求指點PHP里的curl_exec問題
Header("Content-type: application/octet-stream");//文件類型
//提示瀏覽器將要下載文件
Header("Content-Disposition: attachment; filename=隨便起個文件名");//提示給用戶的文件名
echo $content; 輸出
//試一下吧
Ⅸ php curl_exec,伺服器上開啟了這個功能,但是提示無法載入
提示頁面無法載入不是curl沒有打開,而是代碼中有錯,如果是curl沒有打開的話會報curl_exec這個函數找不到等類似的錯誤,而不是無法載入的500錯誤。
你看看狀態碼,如果是500找找代碼哪裡有錯。