2016-07-18 6 views
0

Ich lade eine sehr kleine Excel-Datei mit einer Größe von 10 KB (40 Zeilen & 18 Spalten) mit PHPExcel, aber es gibt mir immer Speichergröße Fehler. Ich weiß, dass die Dateigröße sehr klein ist, daher ist etwas im Code falsch, aber nicht in der Lage, herauszufinden.PHP Excel Fehler - Erlaubte Speichergröße von 134217728 Bytes erschöpft

ini_set('memory_limit', '-1'); 
$this->load->library('PHPExcel'); 
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; 
$cacheSettings = array(' memoryCacheSize ' => '8MB'); 
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 

$data = excelToArray($upload_filename); 

habe ich eine Funktion, um den Dateiinhalt in ein Array zu laden und konvertieren:

function excelToArray($filePath, $header=true){ 
     //Create excel reader after determining the file type 
     $inputFileName = $filePath; 
     /** Identify the type of $inputFileName **/ 
     $inputFileType = PHPExcel_IOFactory::identify($inputFileName); 
     /** Create a new Reader of the type that has been identified **/ 
     $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
     /** Set read type to read cell data onl **/ 
     $objReader->setReadDataOnly(true); 
     /** Load $inputFileName to a PHPExcel Object **/ 
     $objPHPExcel = $objReader->load($inputFileName); 
     //Get worksheet and built array with first row as header 
     $objWorksheet = $objPHPExcel->getActiveSheet(); 
     //excel with first row header, use header as key 
     if($header){ 
      $highestRow = $objWorksheet->getHighestDataRow(); 
      $highestColumn = $objWorksheet->getHighestDataColumn(); 
      $headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true); 
      $headingsArray = $headingsArray[1]; 
      $r = -1; 
      $namedDataArray = array(); 
      for ($row = 3; $row <= $highestRow; ++$row) { 
       $dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true); 
       if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) { 
        ++$r; 
        foreach($headingsArray as $columnKey => $columnHeading) { 
         $namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey]; 
        } 
       } 
      } 
     } 
     else{ 
      //excel sheet with no header 
      $namedDataArray = $objWorksheet->toArray(null,true,true,true); 
     } 
     return $namedDataArray; 
} 

ich es verengt haben versucht, folgende Zeile nach unten, wo das Skript fehlschlägt:

$objPHPExcel = $objReader->load($inputFileName); 

Ein weiterer wichtiger Punkt, Dieser Code funktioniert gut auf localhost, aber Fehler auf godaddy Server geben.

+0

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und ** den kürzesten Code ** enthalten, um ihn in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels.] (Http://stackoverflow.com/help/mcve) – Farside

Antwort

0

1) Sie können die memory_limit Zeile in der php.ini bearbeiten (wenn Sie den Zugriff auf diese Datei haben) Speicher 64M zu erhöhen:

memory_limit = 64M;

2) Wenn Sie nicht auf die php.ini-Datei zu bekommen, fügen Sie am Anfang Ihrer .htaccess-Datei die folgende Zeile:

php_value memory_limit 64M

Wenn das nicht funktioniert oder wirft einen "500 Internal Server Error", löschen Sie die Zeile aus .htaccess.