我在我的MySQL數據庫中有100多萬個域名,我想檢查每個域名是否有效。我做了使用PHP CURL,我執行腳本,如果響應返回我標記該域作爲活動,如果它不返回響應我標記它不活動。測試100多萬個域名的最快方法
這裏是代碼:
function isDomainAvailable(){
$domain = "http://www.".$this->input->post('url');
$id = $this->input->post('id');
$this->load->model('urls');
if(!filter_var($domain, FILTER_VALIDATE_URL)){
$this->urls->setActive($id,0);
errorMessage('Invalid url');
}
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($curlInit);
curl_close($curlInit);
if ($response){
$this->urls->setActive($id,1);
successMessage('url is active');
}
$this->urls->setActive($id,0);
errorMessage('url is not active');
}
,我運行此腳本以同步AJAX調用,使其不斷更新的用戶界面,以確保腳本運行,目前它是在哪個記錄:
這裏是JQuery的代碼:
$(document).ready(function(){
$("#startCheck").click(function(){
pages = 2313744;
for(i=1;i<=pages;i++){
url = "<?php echo base_url() ?>main/getDomains/"+i+"/1";
$.ajax({
type: "POST",
url:url,
data: $("#form").serialize(),
dataType: 'json',
timeout:30000,
async: false,
success: function (data) {
if(data.data){
$(".recordstable").find("tr:gt(0)").remove();
$.each(data.data, function(i,v) {
row = '<tr>';
row += '<td>'+v.id+'</td>';
row += '<td>'+v.url+'</td>';
row += '<td class="active'+v.id+'">';
row += '<img src="<?php echo base_url(); ?>images/loading.gif" width="16" height="16" alt="Loading"></td>';
row += '</tr>';
$('.recordstable tr:last').after(row);
$.ajax({
type: "POST",
url:'<?php echo base_url() ?>main/isDomainAvailable',
data: {url:v.url,id:v.id},
dataType: 'json',
timeout:10000,
async: false,
success: function (data) {
if(data.success){
$('.active'+v.id).html('<span class="label label-success">Yes</span>');
}else{
$('.active'+v.id).html('<span class="label label-danger">No</span>');
}
},
error:function(data){
$('.active'+v.id).html('<span class="label label-warning">Failed</span>');
//alert("something went wrong, please try again.");
$(".loader").hide();
}
});
});
}
},
error:function(data){
alert("something went wrong, please try again.");
$(".loader").hide();
}
});
//break;
}
return false;
});
});
第一腳本運行一個有關URL循環,上網址的每個請求返回50個域,並且當數據返回另一個AJA X呼叫發送請求到我上面發佈的腳本,其中測試域併成功或失敗返回響應,然後腳本更新UI以顯示它已完成檢查,這裏是測試域的網頁的屏幕截圖
這個腳本的問題是運行速度很慢,因爲它僅僅測試了4000的最後10小時 域我需要測試爲此所需的域 PHP心不是一個最快的方法。 如果有任何可用於Python的解決方案請分享
線程可能是一個爲你尋找到。如果您使用10個線程,10個小時內的4000個可能會在10個小時內變爲4000 * 10個。 – TehTris
是啊這就是我打算做...你認爲代碼可以以任何方式進行優化,或者它只是很好嗎? –
使用python,你可以使用[grequests](https://github.com/kennethreitz/grequests)。這個問題的例子。 http://stackoverflow.com/questions/9110593/asynchronous-requests-with-python-requests –