2017-05-16 1 views
1

Je construis un script qui prend chaque fichier xls du dossier/uploads et le convertit au format CSV.Erreur PHP Appel à une fonction indéfinie, comment donner une donnée de méthode à utiliser

Mais, j'ai cette erreur:

Fatal error:
Uncaught Error: Call to undefined function convertXLStoCSV() in C:\xampp\htdocs\Technocripa-php\scandir.php:46 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Technocripa-php\scandir.php on line 46

Voici le code:

$dir = "uploads/*"; 
foreach(glob($dir) as $file) 
{ 
    if(!is_dir($file)) { echo basename($file)."\n";} 
    //-------------------------- 

    $nameAsString = (string)$file; 

    require_once('Classes/PHPExcel.php'); 

    $inputfilename = $nameAsString; 
    $outputfilename = 'convert.csv'; 

    //Usage: 
    convertXLStoCSV($inputfilename, $outputfilename); 

    function convertXLStoCSV($infile, $outfile) 
    { 
     $fileType = PHPExcel_IOFactory::identify($infile); 
     $objReader = PHPExcel_IOFactory::createReader($fileType); 

     $objReader->setReadDataOnly(true); 
     $objPHPExcel = $objReader->load($infile); 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
     $objWriter->save($outfile); 
    } 
} 

Je pense que l'erreur provient de mauvaise utilisation des variables, mais je ne peux pas trouver un moyen réparer ça. Tout ce que je veux c'est stocker le nom du fichier te dans le dossier uploads/dans une variable et l'utiliser tout au long de mon script.

Voici le programme sans la boucle, il fonctionne sans aucune erreur. Peut-être que ça aide à mieux comprendre.

require_once('Classes/PHPExcel.php'); 

    $inputfilename = 'test2.xls'; 
    $outputfilename = 'convert.csv'; 

    //Usage: 
    convertXLStoCSV($inputfilename, $outputfilename); 

    function convertXLStoCSV($infile, $outfile) 
    { 
     $fileType = PHPExcel_IOFactory::identify($infile); 
     $objReader = PHPExcel_IOFactory::createReader($fileType); 

     $objReader->setReadDataOnly(true); 
     $objPHPExcel = $objReader->load($infile); 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
     $objWriter->save($outfile); 
    } 
+0

vous appelez la fonction avant qu'il ne soit en cours de création. – ThisGuyHasTwoThumbs

+0

Vous n'avez pas besoin de redéfinir la fonction à chaque itération de la boucle, définissez-la une seule fois pour l'ensemble du script. –

Répondre

2

Créer la fonction en dehors de foreach et appeler à l'intérieur comme ci-dessous:

function convertXLStoCSV($infile, $outfile) 
{ 
    $fileType = PHPExcel_IOFactory::identify($infile); 
    $objReader = PHPExcel_IOFactory::createReader($fileType); 

    $objReader->setReadDataOnly(true); 
    $objPHPExcel = $objReader->load($infile); 

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
    $objWriter->save($outfile); 
} 

$dir = "uploads/*"; 
foreach(glob($dir) as $file) 
{ 
    if(!is_dir($file)) { echo basename($file)."\n";} 
    //-------------------------- 

    $nameAsString = (string)$file; 

    require_once('Classes/PHPExcel.php'); 

    $inputfilename = $nameAsString; 
    $outputfilename = 'convert.csv'; 

    //Usage: 
    convertXLStoCSV($inputfilename, $outputfilename); 


} 
1
function convertXLStoCSV($infile, $outfile) 
    { 
     $fileType = PHPExcel_IOFactory::identify($infile); 
     $objReader = PHPExcel_IOFactory::createReader($fileType); 

     $objReader->setReadDataOnly(true); 
     $objPHPExcel = $objReader->load($infile); 

     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV'); 
     $objWriter->save($outfile); 
    } 

convertXLStoCSV($inputfilename, $outputfilename); 

déclarer la fonction avant de l'utiliser

+0

A travaillé, merci! – Adrianb