2014-12-31 16 views
6

Dự án CI hiện tại của tôi hiện đang xử lý với tệp. tôi muốn tải lên một xls | xlsx tệp vào máy chủ và sau đó nhập dữ liệu tệp excel vào bảng Cơ sở dữ liệu.PHP - Trình viết mã: Ngoại lệ không bắt buộc 'PHPExcel_Reader_Exception' với thông báo 'Không thể mở để đọc, Tệp không tồn tại

như phần đầu tiên, các tập tin được tải lên thành công, và tôi tải lên các tập tin vào cập thư mục trong cùng một mức độ ứng dụng, hệ thống, tài sản. bây giờ tôi muốn tải tệp này và nhập các nội dung đó vào DB. Tôi đang sử dụng PHPExcel thực hiện hành động này

Đây là điều khiển của tôi

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

và đây là quan điểm của tôi

<?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>"?> 

khi tôi đang chạy nó chỉ cho tôi một lỗi Uncaught exception 'PHPExcel_Reader_Exception' with message 'Could not open http://localhost/myproject/uploads/Data_Report.xls for reading! File does not exist.'

khi tôi đặt tệp Data_Report.xls đó bên trong htdocs, nó sẽ rks thành công.

Vấn đề là khi im sử dụng BASE_URL(). 'Uploads/Data_Report.xls'. nhưng các tập tin là thể chất ở đó và tôi xác minh bằng cách dán localhost/myproject/uploads/Data_Report.xls trên url và nó tải về thành công.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

4

Tôi không chắc chắn nếu đó là trường hợp, nhưng bạn nên cố gắng thêm đường dẫn tuyệt đối trong hệ thống tập tin và không phải là con đường của url.

như:

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

và không

yourUrl.com/uploads/Data_Report.xls 

làm thế nào để có được đường dẫn tuyệt đối (! Không hardcoding) với CodeIgniter bạn có thể sử dụng:

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

vì vậy tôi không nhớ cấu trúc của codeigniter nhưng tôi nhận được điều này từ google, một cái gì đó như thế này:

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

bây giờ tôi nhận được giải pháp khi cung cấp đường dẫn tương đối bằng cách xóa base_url.nhưng đây là phương pháp chính xác để giải quyết vấn đề này.? bởi vì nó không sử dụng base_url.? Vì vậy, có bất kỳ vấn đề trong tương lai (lưu trữ) –

+0

cập nhật câu trả lời của tôi cho không hardcoding đường dẫn tuyệt đối, và cho tôi biết nếu nó hoạt động –

+0

có nó đã được làm việc khi cố gắng ./myproject/uploads/Data_Report.xls mà không BASE_URL() –

1

Bạn đang sao chép tệp xls vào thư mục "tải lên" của bạn khi gửi biểu mẫu?

Nó sẽ là một cái gì đó như dưới đây: (! Move_uploaded_file ( $ _FILES [ 'file'] [ 'tmp_name'], $ target_path ) )

nếu { ném RuntimeException mới ('Không thể di chuyển tệp đã tải lên. '); }

theo mặc định Tệp được tải lên trong thư mục tạm thời (trong trường hợp của bạn có vẻ là htdocs) và cần được di chuyển đến đường dẫn đích trước khi thực hiện Excel mở thông qua PHP Excel lib.

Các vấn đề liên quan