2017-07-17 164 views
1

以下代碼正在檢查頁面內的鏈接,然後嘗試處理這些鏈接並通過返回標題代碼來檢查它們是否工作。 我基本上需要使用第二個函數中第一個函數的返回值$ links。可能嗎?PHP在另一個函數中使用函數的返回值

這裏是我的代碼

function checkPage ($content){ 
    $textLen = strlen($content); 
    $links = array(); 
    if ($textLen > 5){ 
     $startPos = 0; 
     $valid = true; 

     while ($valid){ 
     $spos = strpos($content,'<a ',$startPos); 
     if ($spos < $startPos) $valid = false; 
     $spos  = strpos($content,'href',$spos); 
     $spos  = strpos($content,'"',$spos)+1; 
     $epos  = strpos($content,'"',$spos); 
     $startPos = $epos; 
     $link = substr($content,$spos,$epos-$spos); 
     if (strpos($link,'https://') !== false) $links[] = $link; 
     if (strpos($link,'http://') !== false) $links[] = $link; 
     } 
    } 
    return **$links**; 
}; 

print_r(checkPage($content)); 

foreach ($links as &$link) { 
$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $link); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1); 
    $data = curl_exec($ch); 
    $headers = curl_getinfo($ch); 
    if(curl_error($ch)) 
{ 
    echo 'error:' . curl_error($ch); 
} 
    curl_close($ch); 
    echo $link." returns code ".$headers['http_code']."<br />"; 
}; 
+0

'return ** $ links **;'?你的意思是你只是想存儲'checkPage()'函數的值?這是PHP101 ...'$ links = checkPage($ content);'。 –

+0

你只需要'$ links = checkPage($ content);'?這看起來是從你的代碼中遺失的,但這是非常基本的PHP考慮你已經擁有的。 – iainn

+0

是的,我忘了複製包含一段HTML標記的變量「content」。返回** $ links **;應該在沒有星號的情況下顯示,因爲我試圖在頁面編輯器中加粗這個詞。 – gcerni

回答

2

要打印的返回值,但此後會忽略它:

print_r(checkPage($content)); 

商店中的一個變量返回的值。它不需要是相同的變量名稱。在這種情況下,可能不應該使用相同的變量名來保持概念清晰。因此,像這樣:

$returnedLinks = checkPage($content); 
print_r($returnedLinks); 

foreach ($returnedLinks as $link) { 
    // do something with $link 
} 

從函數返回值不作變量本身提供的功能之外。它只是意味着當你調用該函數時,那個函數調用會對結果進行求值,就像你在內部定義結果而不是調用函數一樣。您只需將該結果存儲在一個變量中即可使用它,就像任何其他值一樣。

+0

謝謝,我仍然是新的編碼。 – gcerni