Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于编码错误,从PHPExcel下载文件时出错_Php_Html_Phpexcel - Fatal编程技术网

由于编码错误,从PHPExcel下载文件时出错

由于编码错误,从PHPExcel下载文件时出错,php,html,phpexcel,Php,Html,Phpexcel,我对PHPExcel库有一个问题,它正在正确生成文件并保存在服务器上,但是它没有以任何方式直接在站点上下载,而且它似乎编码错误,这是在服务器更改后开始造成的。 我已经更改了一些标题,但没有成功。 我正在使用Excel5和xls扩展 public function export(){ $dir = "download"; $dh = opendir($dir); $now = new DateTime(); while (false !== ($filen

我对PHPExcel库有一个问题,它正在正确生成文件并保存在服务器上,但是它没有以任何方式直接在站点上下载,而且它似乎编码错误,这是在服务器更改后开始造成的。 我已经更改了一些标题,但没有成功。 我正在使用Excel5和xls扩展

    public function export(){
    $dir = "download";
    $dh  = opendir($dir);
    $now = new DateTime();
    while (false !== ($filename = readdir($dh))){
        if(preg_match("/^filiadas\-[nacional|ac|al|am|ap|ba|ce|df|es|go|ma|mg|ms|mt|pa|pb|pe|pi|pr|rj|rn|ro|rr|rs|sc|sp|to].*\d{4}\-\d{2}\-\d{2}\.xls$/", $filename, $matches)){
            //exclui arquivo criado a mais de 12 horas atrás
            if(($now->getTimestamp() - filemtime($dir . "/" . $filename))>(60*60*12)){
                $path_file = dirname(dirname(dirname(dirname(__FILE__)))) . "/download/" . $filename;

                if(file_exists($path_file)){
                    unlink($path_file);
                }
            }
        }
    }

    set_time_limit(0);
    ini_set('memory_limit', '-1');



    $data = array();
    $fields = $this->filiadas->getFields();
    $options = $this->filiadas->getOptions();
    if(isset($_GET["unidas_uf"])){
        $this->filiadas->setData(
            array("unidas_uf" => strtoupper($_GET["unidas_uf"]))
        );
    }

    $this->filiadas->get();
    $this->aObjData->filiadas = $this->filiadas->get();

    //load our new PHPExcel library
    $this->load->library('excel');
    //activate worksheet number 1
    $this->excel->setActiveSheetIndex(0);
    //name the worksheet
    $this->excel->getActiveSheet()->setTitle('Filiadas');
    //set cell A1 content with some text
    //$this->excel->getActiveSheet()->setCellValue('A1', 'Filiadas');
    //change the font size
    //$this->excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
    //make the font become bold
    //$this->excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
    //merge cell A1 until D1
    //$this->excel->getActiveSheet()->mergeCells('A1:AD1');

    //$this->excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

    $pColumn=0;
    $pRow=1;

    foreach($fields as $field){

        $this->excel->getActiveSheet()->setCellValueByColumnAndRow($pColumn,$pRow,$field);
        $this->excel->getActiveSheet()->getColumnDimensionByColumn($pColumn)->setAutoSize(true);

        $this->excel->getActiveSheet()->getStyleByColumnAndRow( $pColumn, $pRow )->getFont()->setBold(true);
        $pColumn++;
    }

    //$this->excel->getActiveSheet()->fromArray($this->aObjData->filiadas, ' ', 'A2');
    foreach( $this->aObjData->filiadas as $filiada ){
        $pColumn=0;
        $pRow++;
        //$aFiliada = "";//get_object_vars($filiada);

        //nat_juridica_sub
        if ( array_key_exists( $filiada[ 'nat_juridica_sub' ], $options[ 'nat_juridica_sub1' ] ) )
            $filiada[ 'nat_juridica_sub' ] = $options[ 'nat_juridica_sub1' ][ $filiada[ 'nat_juridica_sub' ] ];
        else if ( array_key_exists( $filiada[ 'nat_juridica_sub' ], $options[ 'nat_juridica_sub2' ] ) )
            $filiada[ 'nat_juridica_sub' ] = $options[ 'nat_juridica_sub2' ][ $filiada[ 'nat_juridica_sub' ] ];

        //nat_juridica
        if( isset( $filiada[ 'nat_juridica' ] ) && array_key_exists( $filiada[ 'nat_juridica' ], $options[ 'nat_juridica' ] ) )
            $filiada[ 'nat_juridica' ] = $options[ 'nat_juridica' ][ $filiada[ 'nat_juridica' ] ];

        //tipo_plano
        if( isset( $filiada[ 'tipo_plano' ] ) && array_key_exists( $filiada[ 'tipo_plano' ], $options[ 'tipo_plano' ] ) )
            $filiada[ 'tipo_plano' ] = $options[ 'tipo_plano' ][ $filiada[ 'tipo_plano' ] ];

        //segmento
        if( isset( $filiada[ 'segmento' ] ) && array_key_exists( $filiada[ 'segmento' ], $options[ 'segmento' ] ) )
            $filiada[ 'segmento' ] = $options[ 'segmento' ][ $filiada[ 'segmento' ] ];

        //especie
        if( isset( $filiada[ 'especie' ] ) && array_key_exists( $filiada[ 'especie' ], $options[ 'especie' ] ) )
            $filiada[ 'especie' ] = $options[ 'especie' ][ $filiada[ 'especie' ] ];

        //rede_credenciada
        if( isset( $filiada[ 'rede_credenciada' ] ) )
        {
            $rede_credenciada = '';
            $indexes = explode( ',', $filiada[ 'rede_credenciada' ]);
            foreach($indexes as $index)
            {
                if ( array_key_exists( $index, $options[ 'rede_credenciada' ] ) )
                $rede_credenciada.= $options[ 'rede_credenciada' ][ $index ] . ',';
            }
            $filiada[ 'rede_credenciada' ] = trim($rede_credenciada, ",");
        }
        //custeio
        if( isset( $filiada[ 'custeio' ] ) )
        {
            $custeio = '';
            $indexes = explode( ',', $filiada[ 'custeio' ]);
            foreach($indexes as $index)
            {
                if ( array_key_exists( $index, $options[ 'custeio' ] ) )
                $custeio.= $options[ 'custeio' ][ $index ] . ',';
            }
            $filiada[ 'custeio' ] = trim($custeio, ",");
        }

        //contribuicao
        if( isset( $filiada[ 'contribuicao' ] ) )
        {
            $contribuicao = '';
            $indexes = explode( ',', $filiada[ 'contribuicao' ]);
            foreach($indexes as $index)
            {
                if ( array_key_exists( $index, $options[ 'contribuicao' ] ) )
                $contribuicao.= $options[ 'contribuicao' ][ $index ] . ',';
            }
            $filiada[ 'contribuicao' ] = trim($contribuicao, ",");
        }


        foreach($fields as $field){
            $this->excel->getActiveSheet()->setCellValueByColumnAndRow($pColumn,$pRow,$filiada[$field]);

            if(!empty($filiada["filiada_data_desfiliacao"]) && $filiada["filiada_data_desfiliacao"]!="0000-00-00"){
                $this->excel->getActiveSheet()->getStyleByColumnAndRow($pColumn,$pRow)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('FF9999');
            }

            $pColumn++;
        }

    }

    $this->excel->getActiveSheet()->calculateColumnWidths();


    $filename = "filiadas-" . (isset($_GET["unidas_uf"])?(empty($_GET["unidas_uf"])?"nacional":strtolower($_GET["unidas_uf"]))."-":"") . date("Y-m-d"). ".xls"; //save our workbook as this file name
    //save it to Excel5 format (excel 2003 .XLS file), change this to 'Excel2007' (and adjust the filename extension, also the header mime type)
    //if you want to save it as .XLSX Excel 2007 format
    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
    $objWriter->save("download/".$filename);
    //$this->excel->getActiveSheet()->unfreezePane();
    //force user to download the Excel file without writing it to server's HD
    //$objWriter->save('php://output');

    /*
    $cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
    $cacheSettings = array( 'memoryCacheSize' => '8MB');

    if (!PHPExcel_Settings::setCacheStorageMethod($cacheMethod,$cacheSettings))
    die('CACHEING ERROR');
    */

    header('Content-Type: application/vnd.ms-excel'); //mime type
    header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
    header('Cache-Control: max-age=0'); //no cache
    readfile("download/".$filename);
    exit();
}
只需在$objWriter->save之前使用ob_end_clean()即可(“下载/”$filename)

只需在$objWriter->save之前使用ob_end_clean()即可(“下载/”$filename)


目录中是否存在excel文件?当您转到实际目录并手动下载它时,它是否工作?在设置标题之前是否有任何输出?@Ibu是的,文件在下载目录中,我可以通过cpanel正常完成下载。给readfile一个绝对路径,并确保页面上没有打印其他内容。@ibu,当我删除readfile时,页面将变为白色,但不会下载。excel文件是否存在于目录中?当您转到实际目录并手动下载时,它是否工作?在设置标题之前是否有任何输出?@ibu是,该文件位于下载目录中,我可以通过cpanel正常完成下载。请为readfile指定一个绝对路径,并确保页面上没有打印其他内容。@ibu,当我删除readfile时,页面会变为白色,但不会下载。
$objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');
ob_end_clean();
$objWriter->save("download/".$filename);