У меня есть скрипт, который я использую, который проверяет IP-адрес, хранящийся в моем файле hosts.allow, на соответствие того, какой IP-адрес сопоставлен с моим именем хоста dyndns, чтобы я мог войти на свои серверы после того, как синхронизировал свой текущий IP-адрес с этим именем хоста. По какой-то причине, похоже, что скрипт вызывает действительно периодические проблемы.
в моем файле hosts.allow у меня есть такой раздел:
#SOme.gotdns.com
sshd : 192.168.0.1
#EOme.gotdns.com
#SOme2.gotdns.com
sshd : 192.168.0.2
#EOme2.gotdns.com
У меня есть скрипт, работающий на cron (каждую минуту), который выглядит так:
#!/usr/bin/php
<?php
$hosts = array('me.gotdns.com','me2.gotdns.com');
foreach($hosts as $host)
{
$ip = gethostbyname($host);
$replaceWith = "#SO".$host."\nsshd : ".$ip."\n#EO".$host;
$filename = '/etc/hosts.allow';
$handle = fopen($filename,'r');
$contents = fread($handle, filesize($filename));
fclose($handle);
if (preg_match('/#SO'.$host.'(.*?)#EO'.$host.'/si', $contents, $regs))
{
$result = $regs[0];
}
if($result != $replaceWith)
{
$newcontents = str_replace($result,$replaceWith,$contents);
$handle = fopen($filename,'w');
if (fwrite($handle, $newcontents) === FALSE) {
}
fclose($handle);
}
}
?>
Проблема, с которой я сталкиваюсь, заключается в том, что символы периодически удаляются (я предполагаю, что во время замены), что приводит к сбою будущих обновлений, когда он вставляет что-то вроде:
#SOme.gotdns.com
sshd : 192.168.0.1
#EOme.gotdn
обратите внимание на отсутствующий "s.com"
Это, конечно, означает, что я теряю доступ к серверу, есть идеи, почему это происходит?
Спасибо.