mirror of https://github.com/YGGverse/YGGo.git
ghost
2 years ago
1 changed files with 83 additions and 0 deletions
@ -0,0 +1,83 @@
@@ -0,0 +1,83 @@
|
||||
<?php |
||||
|
||||
class Robots { |
||||
|
||||
private $_index = []; |
||||
|
||||
public function __construct(string $data) { |
||||
|
||||
$read = false; |
||||
|
||||
foreach ((array) explode(PHP_EOL, $data) as $row) { |
||||
|
||||
$row = strtolower(trim($row)); |
||||
|
||||
// User-agent * begin |
||||
if (preg_match('!^user-agent:\s?\*!', $row)) { |
||||
$read = true; |
||||
continue; |
||||
} |
||||
|
||||
if ($read) { |
||||
$part = explode(' ', $row); |
||||
|
||||
if (isset($part[0]) && isset($part[1])) { |
||||
|
||||
if (false !== strpos($part[0], 'allow')) { |
||||
$this->_index[$this->_regex(trim($part[1]))] = true; |
||||
} |
||||
|
||||
if (false !== strpos($part[0], 'disallow')) { |
||||
$this->_index[$this->_regex(trim($part[1]))] = false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
// User-agent * end |
||||
if ($read && preg_match('!^user-agent:!', $row)) { |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function indexURL(string $url) { |
||||
|
||||
// Unify case match |
||||
$url = strtolower(trim($url)); |
||||
|
||||
// Convert to URI |
||||
$url = str_replace(parse_url($url, PHP_URL_SCHEME) . '://' . |
||||
parse_url($url, PHP_URL_HOST) . |
||||
parse_url($url, PHP_URL_PORT), |
||||
'', $url); |
||||
|
||||
// Index by default |
||||
$result = true; |
||||
|
||||
// Begin index rules by ASC priority |
||||
foreach ($this->_index as $rule => $index) { |
||||
|
||||
if (preg_match('!^' . $rule . '!', $url)) { |
||||
|
||||
$result = $index; |
||||
} |
||||
} |
||||
|
||||
return $result; |
||||
} |
||||
|
||||
private function _regex(string $string) { |
||||
|
||||
return str_replace( |
||||
[ |
||||
'*', |
||||
'?' |
||||
], |
||||
[ |
||||
'.*', |
||||
'\?' |
||||
], |
||||
$string |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue