2013-10-10 2 views
0

Я пытаюсь сканировать сотни папок, каждый из которых содержит файл excel.PHP пропускает неопределенное смещение в цикле foreach?

Вот упрощенному Workflow

  • папки сканирования в цикле
  • получить первое имя папки и запустить его корыто некоторого регулярного выражения (чтобы получить некоторую информацию от имени)
  • открыть папку и откройте Excel файл внутри
  • сканирования первенствует файл для Инфо-х (с PHPExcel)
  • сохранить все в базу данных

Итак, все это работает отлично, за исключением случаев, когда я сталкиваюсь с файлом Excel, который поврежден.

Проблема в том, что библиотека PHPEXCEL не читала ее, и она прошла через «Уведомление: Неопределенное смещение:», и это разбивает мой цикл foreach.

Так вот то, что я ищу:таким образом, чтобы как-то пропустить или что-то в erros и уведомления и продолжить следующую папку и файл.

Есть ли способ? Спасибо за любую помощь.

Ok так вот цикл Еогеасп:

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

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

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

Это звучит как ошибка в библиотеке phpexcel. – cmbuckley

+0

Возможно, попытка 'try' /' catch' может обрабатывать ошибку. – Barmar

+0

@Barmar Вы не можете поймать уведомление, только исключения. –

ответ

0

Может быть, вы можете использовать функцию error_reporting в начале вашего скрипта, чтобы пропустить уведомления:

error_reporting(E_ERROR | E_WARNING | E_PARSE); 

И поставил его обратно на оригинал когда вы закончите с вашей обработкой:

error_reporting(-1); //Report all errors 

Дополнительную информацию можно найти здесь : http://php.net/manual/fr/function.error-reporting.php

+0

как я сказал @Barmar, я пробовал это, но цикл все равно останавливается, без уведомления –

+0

@ Mr.Sam просто делает 'error_reporing (0)' в верхней части скрипта, то – Yang

1

Только предположение:

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>"; 
    } 
} 

Это довольно общие для функции вернуть false, когда они терпят неудачу.

+0

к сожалению это не сработало, но это как-то дало мне направление, я не хотел этого делать, но теперь я думаю, что мое единственное решение - «взломать» библиотеку PHPEXCEL, чтобы дать какой-то результат, если он не сможет открыть excel –