Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向php脚本添加数组_Php_Email - Fatal编程技术网

向php脚本添加数组

向php脚本添加数组,php,email,Php,Email,我有一个脚本,用于检查网站($host)中的字符串($find)。如果该字符串存在,则什么也不会发生,如果未找到该字符串,则会将电子邮件发送到预设的电子邮件地址 我的问题是,我需要一个URL数组,我相信还有第二个文本数组。数组中的文本需要与数组中的URL匹配 也许将URL和文本存储在文本文件中可能是更好的解决方案 这是目前正在处理单个域的脚本 <?php $host = 'www.my-domain.com'; $find = 'content on my page';

我有一个脚本,用于检查网站($host)中的字符串($find)。如果该字符串存在,则什么也不会发生,如果未找到该字符串,则会将电子邮件发送到预设的电子邮件地址

我的问题是,我需要一个URL数组,我相信还有第二个文本数组。数组中的文本需要与数组中的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('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);
    }
}