php - 获取 favicon.ico 时出现 504 网关超时错误
问题描述
我在一个虚拟主机共享帐户中,max_execution_time 默认为 120。我将它设置为 set_time_limit(0),而 phpinfo() 中没有任何反应。有没有办法在网关超时错误出现之前防止或停止它?就像在 504 网关错误弹出窗口之前立即停止该过程一样。我正在获取 50 到 100 个网址中的图标。这是我的代码行。
<?php
set_time_limit(0);
error_reporting(E_ERROR | E_PARSE);
include_once('../simplehtmldom_1_9_1/simple_html_dom.php');
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
function getfavicon($filename) {
libxml_use_internal_errors(false);
header('Content-type: text/html; charset=utf-8');
$file = file_get_contents($filename);
$dom = new DOMDocument;
$fav = array();
@$dom->loadHTML($file);
foreach($dom->getElementsByTagName('link') as $lnk)
{
if(($lnk->getAttribute("rel") == "icon")||($lnk->getAttribute("rel") == "shortcut icon"))
{
$fav[] = $lnk->getAttribute("href");
}
}
return $fav;
}
$servername = "localhost:3306";
$username = "topswis7_user";
$password = "J75vsHs8p6";
$database = "topswis7_scrape";
$conn = new mysqli($servername, $username, $password, $database);
$site = $_POST['favurl'];
$ids = explode("\n", str_replace("\r", "", $site));
$chunk = array_chunk($ids, 100);
$count = count($chunk);
$ficon = array();
foreach($ids as $key=>$value){
$result = parse_url($value);
$url = $result['scheme']."://".$result['host'];
// $url = 'http://example.com/';
$ch = curl_init($url);
// curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, '-');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
$content = curl_exec($ch);
curl_close($ch);
// $datenbank = "proxy_work.php";
// $datei = fopen($datenbank,"w+");
// fwrite($datei, $content);
// fwrite ($datei,"\r\n");
// fclose($datei);
// echo $content;
$html = getfavicon($url);
$http = 'http';
// var_dump($html);
foreach($html as $key => $value){
$favinfo = pathinfo($value);
$check = strpos($value, $http);
// var_dump($favinfo)."<br >";
switch($favinfo['extension']){
case "ico";
if($check === false){
$value = $url."".$value;
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}else{
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}
break 2;
case "png";
if($check === false){
$value = $url."".$value;
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}else{
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}
break 2;
case "jpg";
if($check === false){
$value = $url."".$value;
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}else{
$sql = "INSERT INTO tbl_favicon(faviconLink)
VALUES ('".$value."')";
$conn->query($sql);
}
break 2;
}
}
}
$wordquery = "SELECT * FROM tbl_favicon";
$result = $conn->query($wordquery);
while($row = $result->fetch_assoc()) {
echo $row['faviconLink']."<br />";
}
echo '<br /><a href="../index.php">Back Home</a><br />
</body></html>';
// var_dump($ficon);
?>
解决方案
推荐阅读
- c++ - 为什么空 IP 地址将计算机名称解析为 204.204.204.204?
- c# - Azure AD b2b "Read all users' basic profiles" permission
- docker - 使用 DOCKER 设置 Pebble SDK
- powerbi - 使用 Power Query 加载保存为 .xls 的 *.htm 文件(从第 5 行开始)
- git - 在 git 中更改源分支
- javascript - 将活动类添加到导航项
- cassandra - OpsCenter:过滤掉不相关的磁盘
- javascript - 在循环内使用 Promise
- google-sheets - 涉及百分比范围的 Google 表格中的条件格式
- angular - ngrx - 合并数据