我上传excel文件时显示错误消息“缺少参数”

时间:2013-12-15 04:25:26

标签: php

好吧,我有一个php类,可以处理word,excel和power point文件,并在加载页面后显示它的数据。它完美地显示word文档数据但是当我使用excel文件 $ docObj = new DocxConversion(“test.xlsx”); 时它会显示以下错误消息:

我不明白为什么我会得到这些错误消息。有谁能告诉我?

Warning: Missing argument 1 for DocxConversion::xlsx_to_text(), called in D:\Software 
Installed\xampp\htdocs\evan\toplevel\file.php on line 116 and defined in D:\Software 
Installed\xampp\htdocs\evan\toplevel\file.php on line 58

Notice: Undefined variable: input_file in D:\Software Installed\xampp\htdocs
\evan\toplevel\file.php on line 62

Warning: ZipArchive::open(): Empty string as source in D:\Software Installed\xampp  
\htdocs\evan\toplevel\file.php on line 62

Php类文件

<?php
class DocxConversion{
  private $filename;

  public function __construct($filePath) {
    $this->filename = $filePath;
  }

  private function read_doc() {
    $fileHandle = fopen($this->filename, "r");
    $line = @fread($fileHandle, filesize($this->filename));
    $lines = explode(chr(0x0D),$line);
    $outtext = "";
    foreach($lines as $thisline)
    {
      $pos = strpos($thisline, chr(0x00));
      if (($pos !== FALSE)||(strlen($thisline)==0))
      {
      } else {
        $outtext .= $thisline." ";
      }
    }
    $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);
    return $outtext;
  }

  private function read_docx(){

    $striped_content = '';
    $content = '';

    $zip = zip_open($this->filename);

    if (!$zip || is_numeric($zip)) return false;

    while ($zip_entry = zip_read($zip)) {

      if (zip_entry_open($zip, $zip_entry) == FALSE) continue;

      if (zip_entry_name($zip_entry) != "word/document.xml") continue;

      $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

      zip_entry_close($zip_entry);
    }// end while

    zip_close($zip);

    $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
    $content = str_replace('</w:r></w:p>', "\r\n", $content);
    $striped_content = strip_tags($content);

    return $striped_content;
  }

  /************************excel sheet************************************/

  function xlsx_to_text($input_file){
    $xml_filename = "xl/sharedStrings.xml"; //content file name
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
      if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
        $xml_datas = $zip_handle->getFromIndex($xml_index);
        $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
        $output_text = strip_tags($xml_handle->saveXML());
      }else{
        $output_text .="";
      }
      $zip_handle->close();
    }else{
      $output_text .="";
    }
    return $output_text;

  }

  /*************************power point files*****************************/
  function pptx_to_text($input_file){
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
      $slide_number = 1; //loop through slide files
      while(($xml_index = $zip_handle->locateName("ppt/slides/slide".$slide_number.".xml")) !== false){
        $xml_datas = $zip_handle->getFromIndex($xml_index);
        $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
        $output_text .= strip_tags($xml_handle->saveXML());
        $slide_number++;
      }
      if($slide_number == 1){
        $output_text .="";
      }
      $zip_handle->close();
    }else{
      $output_text .="";
    }
    return $output_text;
  }


  public function convertToText() {

    if(isset($this->filename) && !file_exists($this->filename)) {
      return "File Not exists";
    }

    $fileArray = pathinfo($this->filename);
    $file_ext  = $fileArray['extension'];
    if($file_ext == "doc" || $file_ext == "docx" || $file_ext == "xlsx" || $file_ext == "pptx")
    {
      if($file_ext == "doc") {
        return $this->read_doc();
      } elseif($file_ext == "docx") {
        return $this->read_docx();
      } elseif($file_ext == "xlsx") {
        return $this->xlsx_to_text();
      }elseif($file_ext == "pptx") {
        return $this->pptx_to_text();
      }
    } else {
      return "Invalid File Type";
    }
  }

}

//$docObj = new DocxConversion("test.doc");
//$docObj = new DocxConversion("number.docx");
$docObj = new DocxConversion("test.xlsx");
//$docObj = new DocxConversion("test.pptx");
echo $docText= $docObj->convertToText();
?>

Excel文件数据:

Some text some text 
Some text some text 
Some text some text 

1 个答案:

答案 0 :(得分:0)

这个功能在这里:

function xlsx_to_text($input_file){
    ...
    if(true === $zip_handle->open($input_file)){
        ...
    }else{
        ...
    }
    return $output_text;
}

您在convertToText()功能中调用上述功能如下:

} elseif($file_ext == "xlsx") {
    return $this->xlsx_to_text();
} 

您的xlsx_to_text($input_file)函数需要一个参数,但是当您调用它时,您没有传递一个参数。我不会想你上课的方式,你缩进去传递任何参数。我假设您要在初始化时设置$filename属性的对象上调用该函数。因此,我认为您可以按如下方式更新xlsx_to_text($input_file)函数:

function xlsx_to_text(){ // <---------------- Change here.
    ...
    if(true === $zip_handle->open($this->filename)){  // <---------------- Change here.
        ...
    }else{
        ...
    }
    return $output_text;
}

此外,同样适用于您的function pptx_to_text($input_file){功能。

相关问题