gpt4 book ai didi

php - 测试 100 多个域的最快方法

转载 作者:行者123 更新时间:2023-11-30 22:51:46 26 4
gpt4 key购买 nike

我的 MySQL 数据库中有 1 亿多个域,我想检查每个域是否处于事件状态。我是使用 PHP CURL 完成的,我执行脚本,如果响应返回,我将域标记为事件域,如果它不返回响应,我将其标记为非事件域。

代码如下:

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 调用运行此脚本,以便它不断更新 UI 以确保脚本正在运行以及它当前位于哪个记录:

这是 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 上运行 for 循环,url 上的每个请求返回 50 个域,当数据返回另一个 AJAX 调用时,将请求发送到我在上面发布的脚本,该脚本测试域并在成功或失败时返回响应,以及然后脚本更新 UI 以显示它已完成检查,这是测试域的网页的屏幕截图

enter image description here

此脚本的问题是运行速度非常慢,因为它在过去 10 小时内仅测试了 4000 个域我需要一种最快的方法来测试域PHP 不是必需的。如果有任何适用于 Python 的解决方案,请分享

最佳答案

为什么是 JavaScript 和 AJAX?全部用 PHP 完成。

代替 if (!$response) 使用

if (curl_errno($curlInit)){
errorMessage(curl_error($curlInit));
}

关于php - 测试 100 多个域的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com