2013-03-28 80 views
3

我試圖使用下面的代碼執行curl。當在函數內部使用時,CURL不工作

mainFunction{ 
    . 
    . 
    $url = strtolower($request->get('url', NULL)); 
    $html_output= $this->startURLCheck($url); 
    . 
    . 
} 

function startURLCheck($url) 
{ 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
$html_output = curl_exec($ch); 
} 

當我直接給字符串的URL這工作正常。但後來我通過函數curl傳遞字符串數據沒有執行。 curl_error也顯示沒有錯誤。我嘗試了許多編碼和解碼方法的字符串具有相同的結果。我做錯了什麼?我在Windows上使用XAMPP服務器。

在從另一個函數中的HTML發佈請求獲取URL後,我將URL傳遞給了此函數。

+0

$ url是超出了你的範圍:http://php.net/manual/en/language.variables.scope.php al所以'curl_error()'會給出更多關於curl調用錯誤的啓發信息。 –

+0

你可以添加你用來定義函數的語法嗎? – Stu

+0

確保你的函數si像runCurl($ url){...}然後在你的代碼中,你可以做runCurl('http:// foo/bar'); – chrislondon

回答

1

嘿傢伙我已經找到了problem..Finally ..

當我設置CURLOPT_FOLLOWLOCATION這是工作的罰款捲曲...

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

但STIL目前尚不清楚爲什麼它的工作當我硬編碼的功能內的網址,並沒有工作時,我將url作爲變量傳入功能,沒有設置CURLOPT_FOLLOWLOCATION ...當我設置此選項它是在兩種方式工作..

+1

很高興你找到它。我想你可能需要包含更多的相關代碼,如果你需要關於函數內部的硬編碼URL和傳入參數問題的幫助。最好的辦法是編寫一個自包含的測試用例,其他人在stackoverflow上可以運行自己並進行測試。它不一定是你正在處理的確切代碼,只是一個重現錯誤的例子。 – David

+0

它不適合我 –

1

這很好。

<?php 
function excURL() 
{ 
$ch = curl_init(); 
$url = "http://www.google.com"; 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
$html_output = curl_exec($ch); 
echo $html_output; 
} 

excURL(); 

?> 
+0

是的,這也適用於我。但是,我通過一個變量將URL傳遞到它不起作用的函數 –

2

問題是你的函數startURLCheck實際上並沒有返回主程序使用的值。更改最後一行:

function startURLCheck($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    return curl_exec($ch); 
} 

在調用代碼,拿出 「$這個 - >」

$html_output = startURLCheck($url); 

$ html_output現在包含捲曲調用的結果。

我假設你從某處複製並粘貼了這段代碼,因爲你的「mainFunction」聲明在語法上是不正確的,而你使用了「$ this->」而沒有指定startURLCheck是一個對象的方法。

事實上,如果你打算startURLCheck是一個對象的方法,你想它來設置$ html_output在對象上,這樣做:

<?php 

class Example { 
    private $html_output; 

    function mainFunction() 
    { 
     $url='http://www.ebay.com/itm/Apple-iPhone-5-16GB-Black-Slate-Cricket-intl-UNLOCKED-pleeze-read-ad-/251252227033'; 
     $this->startURLCheck($url); 
     echo "HTML output: " . $this->html_output; 
    } 

    function startURLCheck($url) 
    { 
     $ch = curl_init(); 
     curl_setopt($ch,CURLOPT_URL,$url); 
     curl_setopt($ch, CURLOPT_HEADER, false); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
     $this->html_output = curl_exec($ch); 
    } 
} 

$example = new Example(); 
$example->mainFunction(); 

我已經測試過的命令行代碼(不是在網頁)。如果您將其複製並粘貼到文件中,並使用php -r運行它,您將看到結果。 (注意,我沒有包含結束標籤,當文件只包含PHP代碼而沒有HTML時,結束標籤是可選的,事實上,在這種情況下,建議省略結束標籤,參見http://php.net/manual/en/language.basic-syntax.instruction-separation.php

另請注意,在mainFunction的問題代碼中,在URL的「pleeze」之前有非法空格,並且在$ url賦值結尾缺少分號。

希望這會有所幫助。祝你好運。

+0

在我的事情上,我現在已經注意到,當我使用print_r打印$ html_output時,它會打印出「Please Wait ... Redirecting to」和url ..但是當我在函數內部硬編碼時,它會打印html頁面內容......對不起關於不完整的代碼..我已經給了我的函數的一部分too..later我使用正則表達式分析html_output並返回另一個輸出。 –

相關問題