Bağlantı ekose desenli - geçersiz bağlantılar için mail [kapalı]

3 Cevap php

Hey! I got this link checker script and i would like it to give me a mail when a link doesnt work. I need it to remember that it send me an email about a link so i dont get multiple emails about the same link.

Bu benim için çok zordu çünkü kimse bu konuda bana yardımcı olursanız ben appeciate olacaktır.

<?
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.";
    }
}
?>

3 Cevap

Ben iyi yolu bağlantıları toplamak ve bir veritabanı tablosunda bunları saklamak için olacağını düşünüyorum.

Sonra eğer çalışırsa çalışan bir link olarak işaretler ve yoksa, o zaman bir kırık link olarak işaretler ve size bir e-posta gönderir, bağlantıları ve kontrolleri geçer bir sistem var.

Daha sonra (benzersiz olarak mysql'in varchar cant kullanmak bu yana 255 maxed oluyor ve bağlantılar daha uzun olabilir, çünkü) bir bağlantı bir veritabanında olup olmadığını görmek için bir kontrol yapmak gerekir

Bu veritabanında ise, taramanın sonucu ne kontrol edin.

BTW file_get_contents kullanarak yolunuzu yavaş bir süreçtir. Bu sayfanın tamamını indirir beri. Ben kullanıyorum tavsiye ederim cURL.

Ben Olafur katılıyorum, ama bir veritabanına erişimi var değil eğer alternatif bir virgülle ayrılmış dosya gibi, kombine bir config / günlük dosyasında bir URL istatistikleri kaydetmek için sunucunun dosya sistemi kullanabilirsiniz. Diyelim ki böyle bir dosya var diyelim:

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

Dört alan 'URL', 'kontrol etmek için metin', 'son kontrol sonucu' ve 'posta gönderildi' vardır. Kod böyle bir şey olabilir:

$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++;
}

Şimdi dizi üzerinden döngüsü can ve istediğini yapmak, birlikte gitmek gibi durumu alanını 'gönderilen mail' dahil bilgileri geri yazma. [0] URL, $ alanlar [1] metin kontrol etmek için, ve [2] $ alanları ile durumu 'gönderilen mail' tr $ alanları ile son durumunu okuyabilir $ alanları kullanın [3].

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);

}

Bu yolda size yardımcı olur umarım.

Bu istediğiniz kodu:

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;
   }
}

Bu sağlanan URL (bağlantı) denetler ve URL (çalışmıyor) veya iyi (durum 200 OK) kötü ise başlıkları + bilgi yazdırır

PS: yönlendirmeyi izleyin kıvırmak seçeneklerini ayarlamak

EDIT: Bu CCurl sınıf, bu konuda unuttum üzgünüm:

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;
   }
}