向php脚本添加数组
我有一个脚本,用于检查网站($host)中的字符串($find)。如果该字符串存在,则什么也不会发生,如果未找到该字符串,则会将电子邮件发送到预设的电子邮件地址 我的问题是,我需要一个URL数组,我相信还有第二个文本数组。数组中的文本需要与数组中的URL匹配 也许将URL和文本存储在文本文件中可能是更好的解决方案 这是目前正在处理单个域的脚本向php脚本添加数组,php,email,Php,Email,我有一个脚本,用于检查网站($host)中的字符串($find)。如果该字符串存在,则什么也不会发生,如果未找到该字符串,则会将电子邮件发送到预设的电子邮件地址 我的问题是,我需要一个URL数组,我相信还有第二个文本数组。数组中的文本需要与数组中的URL匹配 也许将URL和文本存储在文本文件中可能是更好的解决方案 这是目前正在处理单个域的脚本 <?php $host = 'www.my-domain.com'; $find = 'content on my page';
<?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('mail@my-domain.com', 'Monitoring', $host.' down');
}
if (!check($host, $find)) alert($host);
?>
将函数移到foreach之外(
下面是最后一段代码,其中包含一个工作数组,以防其他人需要这样的解决方案
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('my-email@my-domain.com', '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);
?>
您只需将所有内容存储在多维数组中,并在整个代码工作部分放置一个迭代器
$list_of_sites[0]["url"] = blah;
$list_of_sites[0]["text"] = blah;
$list_of_sites[1]["url"] = blah;
$list_of_sites[1]["text"] = blah;
foreach($list_of_sites as $site){
$url = $site["url"];
$text = $site["text"];
check($url, $text);
}
您只需将所有内容存储在多维数组中,并在整个代码工作部分放置一个迭代器
$list_of_sites[0]["url"] = blah;
$list_of_sites[0]["text"] = blah;
$list_of_sites[1]["url"] = blah;
$list_of_sites[1]["text"] = blah;
foreach($list_of_sites as $site){
$url = $site["url"];
$text = $site["text"];
check($url, $text);
}
但是,请注意,根据要检查的域的数量,使用PHP的本机mail()
顺序发送大量邮件不是很有效。您可能需要查找更专门的邮件库,例如
另一方面,看到您正在发送一个相同的电子邮件地址,您也可以简单地将失败的域保存在一个数组中,当然,在完成检查后,将它们全部发送到一封电子邮件中
但是,请注意,根据要检查的域的数量,使用PHP的本机mail()
顺序发送大量邮件不是很有效。您可能需要查找更专门的邮件库,例如
另一方面,看到您正在发送一个相同的电子邮件地址,您也可以简单地将失败的域保存在一个数组中,当然,在完成检查后,将它们全部发送到一封电子邮件中。我一直在尝试使这项功能正常工作,但我提出的方案似乎并没有超出数组中的第一个站点。我添加了以上问题的新代码。@user973661:您应该在
foreach
循环之外定义一次函数(不是在foreach
循环的每次迭代中)。事实上,甚至不允许重新定义函数。这将导致致命错误。我假定您没有在屏幕上显示错误(通过在脚本开头放置ini\u集('display\u errors',true)
),否则您必须已收到此错误的通知。请确保仅在开发机器上使用错误显示,而不是在生产机器上。我添加了display\u错误,并将函数移到了foreach之外(我添加了上面的代码)。我得到了一个未定义的变量,但我仍然只检查了一个站点。我一直在尝试使其正常工作,但我得到的结果似乎没有超出数组中的第一个站点。我已将新代码添加到上述问题中。@user973661:您应该定义一次foreach
循环之外的函数(不是在foreach
循环中的每次迭代中)。事实上,它甚至不允许重新定义函数。这将导致致命错误。我假定您没有在屏幕上显示错误(通过将ini\u集('display\u errors',true)
放在脚本开头),否则您必须已收到此错误的通知。请确保仅在开发计算机上使用错误显示,而不是在生产计算机上使用。我添加了显示错误,并将函数移到了foreach之外(我添加了上面的代码)。我得到了一个未定义的变量,但仍然只检查了一个站点。代码的第三次迭代有一个foreach,似乎没有在数组中运行。数组中的第一个站点是唯一检查的站点。我得到的唯一消息是“undefined variable:str in/srv/www/php/php_testing/monitor.php on line 25”。我不确定我的错误在哪里。代码的第三次迭代有一个foreach,似乎没有在数组中运行。数组中的第一个站点是唯一被检查的站点。我得到的唯一消息是“未定义的变量:str in/srv/www/php/php\u testing/monitor.php,第25行”。我不确定我的错误在哪里。
$list_of_sites[0]["url"] = blah;
$list_of_sites[0]["text"] = blah;
$list_of_sites[1]["url"] = blah;
$list_of_sites[1]["text"] = blah;
foreach($list_of_sites as $site){
$url = $site["url"];
$text = $site["text"];
check($url, $text);
}
$hostMap = array(
'www.my-domain.com' => 'content on my page',
/* etc. */
);
foreach( $hostMap as $host => $find )
{
if( !check( $host, $find ) )
{
alert($host);
}
}