我有要删除的URL列表。我从html表中获取这些URL,并在控制器函数中将它们置于foreach循环中。我有两个按钮,分别为“开始抓取”和“停止抓取”。
我正在运行一个剪贴函数,该函数编写在控制器中,并在单击开始剪贴按钮的按钮上由ajax函数调用。
现在,我的要求是,当我单击“停止抓取”按钮时,停止当前正在进行的进程。
我在Google上搜索了很多,并尝试使用Gloabal变量,会话等,但是,只有在完成第一个处于网络待定状态的进程后,所有这些工作才有效。
请帮助我,当我单击停止抓取按钮时如何停止当前的php进程。
下面是开始抓取的ajax调用功能
$("#get_data").click(function()
{
var values = new Array();
$.each($("input[name='case[]']:checked"), function()
{
var data = $(this).parents('tr:eq(0)');
values.push({
'weburl':$(data).find('td:eq(3)').text() ,
'id' : $(data).find('td:eq(2)').text() ,
'state':$(data).find('td:eq(6)').text()
});
});
sendmyarray(values);
});
function sendmyarray(values)
{
var location = '<?php echo base_url()?>';
var x = $.ajax({
type: "POST",
url: location+'admin/AdminController/getArrayAndScrap',
data: {myData:JSON.stringify(values)},
beforeSend: function() {
$("#stop_get_data").css("display", "block");
$("#get_data").prop('disabled', true); // disable button
},
success: function (response) {
$("#get_data").prop('disabled', false);
$("#stop_get_data").css("display", "none");
console.log(response);
if(response == 'stop')
{
alert("Process Stopped");
}
if(response == " ends")
{
alert("Process completed. Please check the status of the URLs processed!");
}
}
});
}
//下面是控制器功能// //-获取所选行的url和state的数组的函数;并相应地报废
public function getArrayAndScrap()
{
if(isset($_POST['myData']))
{
$json = $_POST['myData'];
$myDataArray = json_decode($json,true);
foreach ($myDataArray as $url)
{
$status = $this->CommonModel->getSingleData('dtl_scrap_status','ws_detail',array('dtl_scrap_id' => $url['id']));
if( $status['dtl_scrap_status'] != 'Scrapped')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12); // 12 seconds
curl_setopt($ch, CURLOPT_URL, $url['weburl']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
if($html === false)
{
$this->CommonModel->addData('ws_detail' , array('dtl_scrap_status' => curl_error($ch) , 'dtl_scrap_id' => $url['id'] , 'dtl_state' => $url['state'] , 'dtl_website' => $url['weburl']));
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
}
else
{
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title'); // TITLE
$metas = $doc->getElementsByTagName('meta'); // Meta
$head = $doc->getElementsByTagName('h1'); // H1
if(isset($nodes->item(0)->nodeValue))
{
$title = $nodes->item(0)->nodeValue;
}
if(isset($head->item(0)->nodeValue))
{
$heading = $head->item(0)->nodeValue;
}
if(isset($metas))
{
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'keywords') // Keyword
$keywords = $meta->getAttribute('content');
if($meta->getAttribute('name') != '')
{
if($meta->getAttribute('name') == 'description') // meta description
{
$description = $meta->getAttribute('content');
}
}elseif($meta->getAttribute('property') != '')
{
if($meta->getAttribute('property') == 'og:description') // meta Og:description
{
$OgDescription = $meta->getAttribute('content');
}
}
}
}
curl_close($ch);
if(isset($url['state']))
{
$addDtl['dtl_state'] = $url['state'];
}
if(isset($heading))
{
$addDtl['dtl_program_name'] = $heading;
}
if(isset($title))
{
$addDtl['dtl_program_provider'] = $title;
}
if(isset($description))
{
$addDtl['dtl_program_description'] = $description;
}elseif(isset($OgDescription))
{
$addDtl['dtl_program_description'] = $OgDescription;
}
if(isset($keywords))
{
$addDtl['dtl_program_keywords'] = $keywords;
}
if(isset($url['weburl']))
{
$addDtl['dtl_website'] = $url['weburl'];
}
if(isset($url['id']))
{
$addDtl['dtl_scrap_id'] = $url['id'];
}
$addDtl['dtl_scrap_status'] = 'Scrapped';
if($this->CommonModel->addData('ws_detail' , $addDtl))
{
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
}else
{
// echo "Error";exit();
}
} // End of else
} // End of status check
else
{
$this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
// echo "alscrapped";exit();
}
} // End of foreach
echo "ends";
} // End of if(isset)
}
///我在场景下想要的东西(AJAX CALL)//
$('#stop_get_data').click(function()
{
return false (from the function which is in running state after click event of start scrapping);
});
任何帮助对我来说都很重要。 谢谢
答案 0 :(得分:0)
不可能用javascript终止php脚本。 PHP脚本将继续运行其循环,直到完成为止。 PHP在服务器端执行,而javascript在浏览器中执行。也许有一种方法可以对套接字进行此类操作,但我对它们的了解还不足以为您提供有关如何使用套接字的建议。
您可以做的是在javascript端运行循环,并为每次迭代单独调用php函数。这样一来,您就可以随时使用javascript停止该过程。