PHP跳过foreach循环中未定义的偏移量?

PHP跳过foreach循环中未定义的偏移量?,php,foreach,skip,notice,Php,Foreach,Skip,Notice,我正在尝试扫描数百个文件夹,每个文件夹都包含一个excel文件 这是简化的工作流程 循环扫描文件夹 获取第一个文件夹名称并通过一些正则表达式运行它(从名称中获取一些信息) 打开文件夹并打开其中的excel文件 扫描excel文件以查找信息(使用PHPExcel) 将所有内容保存到数据库 好的,所有这些都很好,除了我遇到一个损坏的excel文件 然后,问题是PHPEXCEL库无法读取它,它通过“通知:未定义的偏移量:”返回,这打破了我的foreach循环 因此,以下是我要寻找的:一种方法,可以

我正在尝试扫描数百个文件夹,每个文件夹都包含一个excel文件

这是简化的工作流程

  • 循环扫描文件夹
  • 获取第一个文件夹名称并通过一些正则表达式运行它(从名称中获取一些信息)
  • 打开文件夹并打开其中的excel文件
  • 扫描excel文件以查找信息(使用PHPExcel)
  • 将所有内容保存到数据库
好的,所有这些都很好,除了我遇到一个损坏的excel文件

然后,问题是PHPEXCEL库无法读取它,它通过“通知:未定义的偏移量:”返回,这打破了我的foreach循环

因此,以下是我要寻找的:一种方法,可以以某种方式跳过错误和注意事项,并继续处理下一个文件夹和文件

有办法吗? 谢谢你的帮助

好的,这里是foreach循环:

foreach ($inputFileName as $key => $fileName) {
$objReader = PHPExcel_IOFactory::load($fileName);

$activeSheet = $objReader->getActiveSheet()->toArray(null,false,true,false);

echo "<pre>";
    echo $key;
echo "</pre>";
}
foreach($inputFileName作为$key=>$fileName){
$objReader=PHPExcel\u IOFactory::load($fileName);
$activeSheet=$objReader->getActiveSheet()->toArray(null、false、true、false);
回声“;
echo$key;
回声“;
}

也许您可以使用脚本开头的“错误报告”功能跳过通知:

error_reporting(-1); //Report all errors
完成治疗后,将其设置回原始值:

foreach ($inputFileName as $key => $fileName) {
    $objReader = PHPExcel_IOFactory::load($fileName);

    if ($objReader) {
        $activeSheet = $objReader->getActiveSheet()->toArray(null,false,true,false);

        echo "<pre>";
            echo $key;
        echo "</pre>";
    }
}
您可以在此处找到更多信息:

只是一个猜测:

foreach($inputFileName作为$key=>$fileName){
$objReader=PHPExcel\u IOFactory::load($fileName);
如果($objReader){
$activeSheet=$objReader->getActiveSheet()->toArray(null、false、true、false);
回声“;
echo$key;
回声“;
}
}

函数在失败时返回
false
是很常见的。

这听起来像是phpexcel库中的一个bug。也许一个
try
/
catch
可以处理这个错误。@Barmar你不能捕捉到通知,只有异常。如果这些只是通知,只需降低错误报告设置。@cbuckley放弃你的想法我去了phpexcel库并在那里解决了问题。所以谢谢你。就像我告诉@Barmar的那样,我试过了,但是循环仍然停止了,没有停止notice@Mr.Sam只需在脚本顶部执行
error\u report(0)
,然后不幸的是,这不起作用,但它给了我一个方向,我不想这样做,但现在我认为我唯一的解决方案是
hack
PHPEXCEL库,如果无法打开excel,则给出一些结果
foreach ($inputFileName as $key => $fileName) {
    $objReader = PHPExcel_IOFactory::load($fileName);

    if ($objReader) {
        $activeSheet = $objReader->getActiveSheet()->toArray(null,false,true,false);

        echo "<pre>";
            echo $key;
        echo "</pre>";
    }
}