php-codeigniterphpexcelエラーZipArchive::getFromName():無効または初期化されていないZipオブジェクト
Excelファイル(.xlsx)からOracleにデータをインポートしようとしています。codeigniterとphpexcelを使用しています。これが私のコントローラーです:
private $filename;
public function form(){
$data = array();
if(isset($_POST['preview'])){
$upload = $this->RoadmapModel->upload_file($this->filename);
$upload_data = $this->upload->data();
$this->filename = $upload_data['file_name'];
if($upload['result'] == "success"){
include APPPATH.'third_party/PHPExcel/PHPExcel.php';
$excelreader = new PHPExcel_Reader_Excel2007();
$loadexcel = $excelreader->load('excel/'.$this->filename);
$sheet = $loadexcel->getActiveSheet()->toArray(null, true, true ,true);
$data['sheet'] = $sheet;
}else{ // Jika proses upload gagal
$data['upload_error'] = $upload['error'];
}
}
$this->load->view('form', $data);
}
public function import(){
include APPPATH.'third_party/PHPExcel/PHPExcel.php';
$excelreader = new PHPExcel_Reader_Excel2007();
$loadexcel = $excelreader->load('excel/'.$this->filename = $this -> form());
$sheet = $loadexcel->getActiveSheet()->toArray(null, true, true ,true);
$data = [];
$numrow = 1;
foreach($sheet as $row){
if($numrow > 1){
// Kita push (add) array data ke variabel data
array_push($data, [
'TAHUN'=>$row['A'],
'PROVINCEID'=>$row['B'],
'PROVINSI'=>$row['C'],
'PLAN_DESAB'=>$row['D'],
'ACTUAL_DESAB'=>$row['E'],
'PLAN_ELEKTRIFIKASI'=>$row['F'],
'ACTUAL_ELEKTRIFIKASI'=>$row['G'],
'PLAN_LISDES'=>$row['H'],
'ACTUAL_LISDES'=>$row['I'],
]);
}
$numrow++;
}
$this->RoadmapModel->insert_multiple($data);
redirect("Roadmap");
}
これが私のモデルです:
public $tablename = "X";
function upload_file($filename){
$this->load->library('upload');
$config['upload_path'] = './excel/';
$config['allowed_types'] = 'xlsx';
$config['max_size'] = '2048';
$config['overwrite'] = true;
$config['file_name'] = $filename;
$this->upload->initialize($config);
if($this->upload->do_upload('file')){
$return = array('result' => 'success', 'file' => $upload_data = $this->upload->data(), 'error' => '');
return $return;
}else{
$return = array('result' => 'failed', 'file' => '', 'error' => $this->upload->display_errors());
return $return;
}
}
function insert_multiple($data){
$p_tablename= $this->tablename;
$this->db->insert_batch($p_tablename, $data);
}
インポート機能を使用すると、これはエラーメッセージです:
メッセージ:ZipArchive :: getFromName():無効または初期化されていないZipオブジェクト
ファイル名:Reader / Excel2007.php
行番号:327
バックトレース:
ファイル:C:\ xampp \ htdocs \ web_excel_ci \ application \ controllers \ Roadmap.php
行:82
機能:ロード
行:82は関数import()の
$loadexcel = $excelreader->load('excel/'.$this->filename = $this -> form());
ですこれは、Excelファイルがインポートするロード用です。
$this->filename = $this->form()
を使用して関数form()からファイル名を取得しようとしましたが、エラーが発生します私がそこに積み重ねてきた解決策を手伝ってください
どうもありがとう...
答え :
解決策:
デフォルトでは、PHPWordはZip拡張機能を使用して、ZIP圧縮されたアーカイブとその中のファイルを処理します。サーバーにZip拡張機能をインストールできない場合は、PHPWordに含まれている純粋なPHPライブラリの代替であるPclZipを使用できます。
\PhpOffice\PhpWord\Settings::setZipClass(\PhpOffice\PhpWord\Settings::PCLZIP);
これは私にとってはうまくいきました。
答え :
解決策:
このスタックオーバーフローで何時間も検索した後、このケースを修正するための解決策があります。
1つの関数で値を取得するために$this->session->set_flashdata('fileName',$fileName);
を使用します
そして$fileName = $this->session->flashdata('fileName');
を使用して、その値を別の関数に入れます
そしてそれは機能しました。
ご清聴ありがとうございました...
答え :
解決策:
回線に間違いなく問題があります
$loadexcel = $excelreader->load('excel/'.$this->filename = $this->form());
$this->form()
からの戻り値で$this->filename
を設定しようとしているようです。ただし、 $this->form()
は値を返しません。ビューをロードします。
したがって、 $excelreader->load()
に渡される引数は、おそらく文字列「excel/」です。確かにそれは有効なzipオブジェクトではありません。
このシーケンスは、 excelreader->load()
の正しい文字列を生成する必要があります。
$this->form();
$ loadexcel = $ excelreader-> load('excel /'。$this->filename);
ただし、ビューも読み込まれることを受け入れる必要があります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。