2009-07-04 9 views
0

リンクチェッカーのスクリプトを取得しました。リンクが正しく機能していないときにメールを差し上げます。 私は同じリンクについて複数の電子メールを受け取らないように、リンクに関するメールを私に送信することを覚えておく必要があります。リンクチェッカー - 無効なリンクのメール

誰もが私にとって難しいので、私はこれを助けてくれると私は賞賛します。

<? 
function checklink($links) { 
    $working = 0; 
    $link = $links; 
    $links = preg_replace('/\s+/', '', $links); 

    if(strstr($links,"rapidshare.com")){ 
     $var = file_get_contents($links); 
     if(strpos($var,"You want to download the file ")) { 
     $working = 1; 
     } 
    } 
    elseif (strstr($links,"megaupload.com")) { 
     $var1 = file_get_contents($links); 
     if(strpos($var1,"Please enter")) { 
     $working = 1; 
     } 
    } 
    elseif (strstr($links,"megashares.com")) { 
      $var2 = file_get_contents($links); 
      if(strpos($var2,"Filename:")) { 
      $working = 1; 
      } 
    } 
    elseif (strstr($links,"sendspace.com")) { 
     $var3 = file_get_contents($links); 
     if(strpos($var3,"404 Page Not Found")) { 
      $working = 0; 
     } 
     elseif(strpos($var3,"Sorry, the file you requested is not available.")){ 
      $working = 0; 
     } 
     else { 
      $working = 1; 
     } 
     } 
    elseif(strstr($links,"rapidshare.de")) { 
     $var5 = file_get_contents($links); 
     if(strpos($var,"You want to download the file ")){ 
      $working = 1; 
     } 
    } 
    elseif (strstr($links,"mediafire.com")) { 
     $var4 = file_get_contents($links); 
     if(strpos($var4,"Sharing")) { 
     $working = 1; 
     } 
    } 

    if ($working == 1) { 
     echo "<a href=\"". $link . "\" target=\"_blank\">". $link . "</a>"; 
    } 
    else { 
     echo "The link is not working. Please let me know about it and I'll fix it."; 
    } 
} 
?> 
+1

コメント、無回答。 "ブール値"として0と1を使用しないでください。 $ working == 1のようなものはあなたのコードを醜いものにし、読みにくいものにします。さらに、$ var1、$ var2などを宣言することは、自分のコードで迷う最善の方法です。 –

答えて

1

リンクを収集してデータベーステーブルに保存するのが最善の方法だと思います。

リンクとチェックを通過するシステムを作成し、それが動作している場合はそれを作業リンクとしてマークし、そうでなければリンクを破損リンクとマークして電子メールを送信します。

(それは255で限界に達していますので、あなたは、ユニークとしてMySQLのvarchar型を使用するカントとのリンクが長くなることができるので)それならばあなたは、リンクがデータベース内にあるかどうかを確認するためにチェックを行うために

を持っているでしょうがデータベースにある場合、スキャンの結果が何であったかを確認します。

ところで、file_get_contentsを使用するあなたのやり方は、遅いプロセスです。ページ全体をダウンロードするので。 cURL.

+0

私のことを助けてくれませんか? –

1

私はOlafurに同意しますが、データベースにアクセスできない場合は、サーバのファイルシステムを使用して、URLの統計情報をaコンマで区切られたファイル。あなたがこのようなファイルがあるとしましょう:

rapidshare.com,You want to download the file,0,0 
megaupload.com,Please enter,0,0 
megashares.com,Filename:,0,0 

4つのフィールドは「URL」、「チェックするテキスト」、「最後のチェック結果」と「メールが送られてきた」です。今、あなたは、配列を巡回をすることができますし、一緒に行くようにステータス・フィールド「送信済みメール」などの情報を書き戻す、あなたがやりたい

$file = "myfile.txt"; 

// open the file 
$fh = fopen($filename, "r"); 

// read the full file contents into a string 
$contents = fread($fh, filesize($file)); 

// close the file 
fclose($fh); 

// split the string into an array of lines 
$lines = split("\n", $contents); 

// split each line into its fields for processing 
$i = 0; 
foreach ($lines as $line) { 
    $checkarray[$i] = split(",", $line); 
    $i++; 
} 

:コードは次のようなものである可能性があります。 URLには$ fields [0]、確認するテキストには$ fields [1]を使用し、$ fields [2]と$ fields [3]で最後のステータスを 'mail sent'ステータスで読み取ることができます。

foreach($checkarray as $fields) { 
    // insert code to do your checks here 
    ... 

    // write back the results 
    $fh = fopen($filename, "w"); 
    fwrite($fh, $fields[0] . "," . $fields[1] . "," . $working . "," . $mailsent . "\n"; 
    fclose($fh); 

} 

願わくはあなたのお役に立てば幸いです。

0

これはあなたが望むコードです:

function StatusCheck($url) 
{ 
$urlparts=parse_url($url); 
$curl=new CCurl($url); 
$headers=$curl->execute(); 
$headers=$curl->close(); 
$headers=$curl->getHeader(); 
$headers=split("\r\n",$headers); 
$status=$headers[0]; 
print_r($headers); 
if (strpos($status,"HTTP/1.1 200 OK")===FALSE) 
    { 
    echo date("d.m.Y H:i:s").$url,': bad'."\n"; 
    return 0; 
    } 
else 
    { 
    echo date("d.m.Y H:i:s").$url,': good'."\n"; 
    return 1; 
    } 
} 

それはURL(リンク)(ステータス200 OK)を提供し、URLが悪い(動作していない)、または良好であれば、ヘッダー+情報を出力チェック

PS:リダイレクト

EDITを追跡するためにカールのオプションを設定します。これはCCurlクラスです、申し訳ありません、それについて忘れてしまった:

class CCurl { 
    var $m_handle; 
    var $m_header; 
    var $m_body; 

    function CCurl($sUrl) { 
     $this->m_handle = curl_init(); 
     curl_setopt($this->m_handle, CURLOPT_URL, $sUrl); 
     curl_setopt($this->m_handle, CURLOPT_HEADER, 1); 
     curl_setopt($this->m_handle, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($this->m_handle, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($this->m_handle, CURLOPT_USERAGENT, "StatusCheckBot 0.1"); 
     return; 
    } 

    function getHeader() { 
     return $this->m_header; 
    } 

    function execute() { 
     $sResponse = curl_exec($this->m_handle); 
     $this->m_body = substr($sResponse, strpos($sResponse, "\r\n\r\n") + 4); 
     $this->m_header = substr($sResponse, 0, -strlen($this->m_body)); 
     return $this->m_body; 
    } 

    function close() { 
     curl_close($this->m_handle); 
     return; 
    } 
} 
+0

このエラーが発生しました 致命的なエラー:クラス 'CCurl'が/home/pema2201/public_html/downloads/checklinks.php 5行目に見つかりません http:// anitard。org/downloads/hack_legend_of_the_twilight_bracelet.php –

関連する問題