2017-05-16 27 views
1

我正在構建一個腳本,它從/ uploads文件夾中獲取每個xls文件並將其轉換爲CSV。PHP錯誤調用未定義的函數,如何給方法數據使用

但是,我有此錯誤:

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

下面是代碼:

$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); 
    } 
} 

我認爲錯誤來自錯誤的變量的用法,但我真的不能找到一種方法解決這個問題。我只想將te文件的名稱存儲在變量的uploads /文件夾中,並在整個腳本中使用它。

這是沒有LOOP的程序,它的工作原理沒有任何錯誤。也許這有助於更好地理解。

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

你調用該函數的被創建之前。 .. – ThisGuyHasTwoThumbs

+0

您不需要在每個循環迭代中重新定義函數,只需爲整個腳本定義一次。 –

回答

2

創建的foreach之外的功能和內部這樣稱呼它低於之前聲明函數:

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); 

使用它

+0

工作過,謝謝! – Adrianb

相關問題