在進行PHP編程中,經常會涉及到對遠程URL的訪問和傳參,此時php curl就顯得尤為重要。其中,setdooutput是curl函數中常用的一種方法。
通過對setdooutput方法的應用,我們可以控制curl向遠程URL的輸出流中寫入什么信息,從而實現多種功能,比如模擬表單提交、寫數據到遠程文件、發送SOAP請求等。下面我們就具體的來看看setdooutput的使用方法及相關知識點。
setdooutput的使用方法
setdooutput方法的用法非常簡單,它只有一種參數類型:bool類型。這個參數表示是否開啟輸出流,默認為false。我們只需要一個簡單的代碼就可以看出這個方法的處理過程。
$ch = curl_init(); // 初始化curl curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/submit.php'); // 設置URL curl_setopt($ch, CURLOPT_POST, true); // 開啟POST傳參 curl_setopt($ch, CURLOPT_POSTFIELDS, 'foo=bar&bar=baz'); // 設置表單參數 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回結果不輸出 curl_setopt($ch, CURLOPT_HEADER, false); // 不返回header信息 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟隨重定向 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不驗證證書 // 這里是重點 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 60); $response = curl_exec($ch);上述代碼中,我們使用curl_init函數初始化一個curl對象,然后通過curl_setopt函數來設置一系列參數,包括URL、POST方法、表單參數、返回結果、關閉header信息以及跟隨重定向。這些設置在之前的文章中已經詳細講解過了,這里不再講述。 具體到setdooutput方法,我們首先需要在第二次調用curl_setopt的時候開啟輸出流:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 60);在第二次調用curl_setopt時,我們使用curl_setopt函數設置了參數CURLOPT_RETURNTRANSFER為true,這個參數實際上是告訴curl,我們需要將遠程URL的返回信息存儲到一個變量中,而不是直接輸出到瀏覽器中。因為這次請求需要寫入數據,所以需要發送POST請求,通過設置CURLOPT_POSTFIELD參數為$post_data就可以實現,其中,$post_data為存放表單數據的變量。 在多個傳遞方式中,我們需要自定義傳遞方式,這時候就可以使用setdooutput方法,打開輸出流,從而將數據寫入到遠程文件或某個地址。 需要注意的是,setdooutput方法只有在CURLOPT_POST與CURLOPT_CUSTOMREQUEST參數都為POST時才生效。 setdooutput的一些注意事項 1. setdooutput和CURLOPT_POSTFIELD同時使用時,post數據會被寫入到輸出流中。需要設置好data_length選項,否則服務器無法處理數據。 2. setdooutput和CURLOPT_UPLOAD同時使用時,post數據會被寫入到輸出流中。需要設置好data_length選項,否則服務器無法處理數據。 3. setdooutput僅在HTTP請求時使用。 結語 通過上面的簡單示例,我們可以看到,setdooutput是curl函數中非常重要的方法。通過打開輸出流,我們可以控制curl向遠程URL的輸出流中寫入什么信息,從而實現多種功能。雖然setdooutput在使用時操作相對簡單,但還是需要注意一些相關的注意事項。仔細掌握setdooutput的使用方法,可以更好的發揮curl函數的優勢和功能,幫助我們更好的進行編程。