2014-12-31 8 views
6

Mój bieżący projekt CI obsługuje teraz pliki. Chcę przesłać xls | pliki xlsx na serwer, a następnie zaimportuj dane pliku excela do tabeli bazy danych.PHP - Codeigniter: Uncaught wyjątek "PHPExcel_Reader_Exception" z komunikatem "Nie można otworzyć do odczytu, plik nie istnieje

jak w pierwszej części, plik przesłany był udany, a ja wgrać pliki do folderuprzesłane w takim samym poziomie aplikacji, systemu, aktywa. teraz chcę załadować ten plik i zaimportować jego zawartość do DB. Używam PHPExcel wykonywania tej operacji

Oto mój kontroler

$this->load->library('phpexcel'); 
$this->load->library('PHPExcel/iofactory'); 

$objPHPExcel = new PHPExcel(); 

$objReader= IOFactory::createReader('Excel2007'); 
$objReader->setReadDataOnly(true); 

$objPHPExcel=$objReader->load(BASE_URL().'uploads/Data_Report.xls'); 

$objWorksheet=$objPHPExcel->setActiveSheetIndex(0); 

$this->load->model('datas_model'); 

for($i=2;$i<=77;$i++) { 

    $client_name= $objWorksheet->getCellByColumnAndRow(0,$i)->getValue(); 
    $client_address= $objWorksheet->getCellByColumnAndRow(1,$i)->getValue(); 
    $data_inp=array('name'=>$client_name, 'address'=>$client_address); 
    $this->datas_model->add_data($data_inp); 
    } 

i tu jest moim zdaniem

<?php echo form_open_multipart('../settings_controller/upload_data/do_upload');?> 

    <div class="custom-file-upload"> 
     <input type="file" id="file" name="userfile" multiple/> 
    </div> 
    <div class="button-container-2"> 
     <button class="btn btn-primary" id="updown-btn" type="submit" style="height:45px;">Upload </button> 
    </div> 

<?php echo "</form>"?> 

kiedy biegnę to pokazuje mi błąd Uncaught exception 'PHPExcel_Reader_Exception' with message 'Could not open http://localhost/myproject/uploads/Data_Report.xls for reading! File does not exist.'

kiedy umieszczam ten plik Data_Report.xls wewnątrz htdocs, to wo rks z powodzeniem.

Problem występuje, gdy używam BASE_URL(). 'Uploads/Data_Report.xls'. ale plik fizycznie istnieje i został zweryfikowany przez wklejenie pliku localhost/myproject/uploads/Data_Report.xls na adres url i został pomyślnie pobrany.

Każda pomoc zostanie bardzo doceniona.

Odpowiedz

4

Nie jestem pewien, czy tak jest, ale powinieneś spróbować dodać absolutną ścieżkę w systemie plików, a nie ścieżkę adresu URL.

jak:

/var/www/YourProject/public/uploads/Data_Report.xls 

i nie

yourUrl.com/uploads/Data_Report.xls 

jak uzyskać ścieżkę bezwzględną (! Nie hardcoding) z CodeIgniter można użyć:

FCPATH -> '/' 
BASEPATH -> '/system/' 
APPPATH -> '/application/' 

więc nie zapamiętaj strukturę codeigniter, ale dostałem to od google, coś takiego:

APPPATH.'public/uploads/what_ever.xls'; 
+0

teraz otrzymuję rozwiązanie, gdy poda się względną ścieżkę, usuwając element base_url.ale czy jest to właściwa metoda rozwiązania tego problemu? ponieważ nie używa base_url.? więc jest jakikolwiek problem w przyszłości (hosting) –

+0

zaktualizowałem moją odpowiedź na nie hardcoding absolutną ścieżkę, i powiedz mi, czy to działa –

+0

tak to już działa po wypróbowaniu ./myproject/uploads/Data_Report.xls bez BASE_URL() –

1

Czy robisz kopię pliku Xls do swojego katalogu "upload" na formularzu?

To będzie coś jak poniżej: (! Move_uploaded_file ( $ _FILES [ 'plik'] [ 'tmp_name'], $ target_path ) )

jeśli { rzut nowy RuntimeException ("Nie udało się przenieść przesłany plik. "); }

domyślnie Plik jest wgrywany w katalogu tymczasowym (w twoim przypadku wydaje się być htdocs) i musi zostać przeniesiony na docelową ścieżkę wyboru przed wykonaniem Excela otwartego przez bibliotekę PHP Excel.

Powiązane problemy