ウェブサイト($ホスト)に文字列($ find)をチェックするスクリプトがあります。文字列が存在する場合は何も起こりません。文字列が見つからない場合は、電子メールがあらかじめ設定された電子メールアドレスに送信されます。PHPスクリプトに配列を追加する
問題は、私はURLの配列を持つ必要があり、私はテキストの2番目の配列を信じています。配列内のテキストは、配列内のURLに一致する必要があります。
おそらくURLファイルとテキストファイルをテキストファイルに保存する方が良い方法でしょう。
これは今のところスクリプトで、単一のドメインで作業しています。
<?php
$host = 'www.my-domain.com';
$find = 'content on my page';
function check($host, $find) {
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
$header = "GET/HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "Connection: close\r\n\r\n";
fputs($fp, $header);
while (!feof($fp)) {
$str.= fgets($fp, 1024);
}
fclose($fp);
return (strpos($str, $find) !== false);
}
}
function alert($host) {
mail('[email protected]', 'Monitoring', $host.' down');
}
if (!check($host, $find)) alert($host);
?>
代わりに配列した新しいコード:
$hostMap = array(
'www.my-domain.com' => 'content on site',
'www.my-domain2.ca' => 'content on second site',
);
foreach ($hostMap as $host => $find)
{
function check($host, $find)
{
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp)
{
echo "$errstr ($errno)\n";
} else {
$header = "GET/HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "Connection: close\r\n\r\n";
fputs($fp, $header);
while (!feof($fp)) {
$str.= fgets($fp, 1024);
}
fclose($fp);
return (strpos($str, $find) !== false);
}
}
function alert($host)
{
mail('[email protected]', 'Website Monitoring', $host.' is down');
}
print $host;
print $find;
//if (!check($host, $find)) alert($host);
if(!check($host, $find))
{
alert($host);
}
}
?>
はここ(のforeachの外
ini_set('display_errors', true);
$hostMap = array(
'www.my-domain.com' => 'content on site',
'www.my-domain2.ca' => 'content on second site',
);
function check($host, $find)
{
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp)
{
echo "$errstr ($errno)\n";
} else {
$header = "GET/HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "Connection: close\r\n\r\n";
fputs($fp, $header);
while (!feof($fp)) {
$str.= fgets($fp, 1024);
}
fclose($fp);
return (strpos($str, $find) !== false);
}
}
function alert($host)
{
mail('[email protected]', 'Website Monitoring', $host.' is down');
}
print $host;
print $find;
//if (!check($host, $find)) alert($host);
foreach ($hostMap as $host => $find)
{
if(!check($host, $find))
{
alert($host);
}
}
?>
を機能を移転誰が望んでいる場合、作業配列を持つ最終的なコードですこのような解決策。
function check($host, $find)
{
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (!$fp)
{
echo "$errstr ($errno)\n";
} else {
$header = "GET/HTTP/1.1\r\n";
$header .= "Host: $host\r\n";
$header .= "Connection: close\r\n\r\n";
fputs($fp, $header);
while (!feof($fp)) {
$str.= fgets($fp, 1024);
}
fclose($fp);
return (strpos($str, $find) !== false);
}
}
function alert($host)
{
$headers = 'From: Set your from address here';
mail('[email protected]', 'Website Monitoring', $host.' is down' $headers);
}
$hostMap = array(
'www.my-domain.com' => 'content on site',
'www.my-domain2.com' => 'content on second site',
);
//if (!check($host, $find)) alert($host);
foreach ($hostMap as $host => $find)
{
if(!check($host, $find))
{
alert($host);
}
}
unset($host);
unset($find);
?>
コードの3番目の反復では、配列を実行していないforeachがあります。配列内の最初のサイトのみがチェックされます。私が得る唯一のメッセージは、 "Undefined variable:str in /srv/www/php/php_testing/monitor.php on line 25"です。 私の間違いはどこにあるのか分かりません。 – Havock