Php 处理foreach循环中的警告和通知
我有一个数组Php 处理foreach循环中的警告和通知,php,arrays,foreach,Php,Arrays,Foreach,我有一个数组 $array = [$element1,$element2,$element3...]; 我有一个php脚本,它对数组的每个元素执行特定的任务(抓取) foreach($array as $element){ //scrape data for each element } 这个脚本会抛出很多错误,我想知道它是针对数组的哪个特定元素抛出这些错误的 如果我在浏览器中运行脚本,我可以简单地回显元素名,类似这样 foreach($array as $element){
$array = [$element1,$element2,$element3...];
我有一个php脚本,它对数组的每个元素执行特定的任务(抓取)
foreach($array as $element){
//scrape data for each element
}
这个脚本会抛出很多错误,我想知道它是针对数组的哪个特定元素抛出这些错误的
如果我在浏览器中运行脚本,我可以简单地回显元素名,类似这样
foreach($array as $element){
echo $element;
//scrape data for element
}
通过上面的方法,我可以知道哪个元素抛出了错误,因为元素名将在错误发生之前打印在屏幕上
但是我想通过cron运行脚本,所以我认为跟踪错误的唯一可能方法是在脚本末尾返回一个错误数组(并通过电子邮件以JSON格式发送)
例如:如果脚本为element3和element5抛出错误。。它应该在脚本末尾返回一个数组
$errors_array = [element3=> ['warning:...','notice:...'], element5=>['warning:...']]
我想我可以使用此数组通过电子邮件获得有关错误的通知(或将这些错误转储到某个文件中)
谢谢您可以在PHP中启用错误报告
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
并发送错误日志,您可以使用它们
否则,如果要自定义错误日志
您可以使用error\u get\u last()
这会给出最后一个错误
foreach($array as $element){
$error_arr = error_get_last();
//log error in the file and flush on next iterator
error_clear_last();
}
或者使用错误报告工具,例如将错误+当前var值发送到您的电子邮件
如果我在浏览器中运行脚本,我可以简单地回显元素名称。。。但是我想通过cron运行脚本,所以我认为跟踪错误的唯一可能方法是在脚本末尾返回一个错误数组
$errors_array = [element3=> ['warning:...','notice:...'], element5=>['warning:...']]
在cron下运行时,您可以非常轻松地将发送到浏览器的输出捕获到文件中。诀窍是您需要将“标准错误”和“标准输出”重定向到同一个文件。该命令(您可以通过在命令行上手动运行来测试)将如下所示:
php /path/to/my/script.php some args 2>&1 >/path/to/my/output.log
>文件
部分正在重定向标准输出;2>&1
将标准错误添加到同一输出文件中。什么样的错误?应该修复错误而不是邮寄错误检查元素!空的
它修复了所有通知errors@Thamaraiselvam这是一个很长的脚本,很难手动检查每个错误,在这种情况下会有太多的“如果”条件。好的,在php中启用错误,这将创建错误日志,如果每个cron上的错误日志不是空的,则将其发送到电子邮件request@Thamaraiselvam我们怎么知道这些错误是针对哪个元素抛出的呢?我假设我需要在脚本末尾编写这段代码,但在这种情况下,它只会捕获最后一个错误,如果脚本抛出多个错误呢?是的,它将捕获最后一个错误!因此最好启用错误报告,它将记录所有错误。感谢您的回答,但我不明白,我们如何知道脚本抛出这些错误的元素?感谢您的回答,我将尝试此方法,顺便说一句,有时候foreach循环不会回显所有元素,因此我正在考虑更好的解决方案,无论如何,这看起来是一个很好的解决方案,谢谢