2012-02-27 33 views

Trả lời

42

Bạn có thể sử dụng trình ghi để lưu vào đĩa hoặc lưu vào php: // đầu ra. Nếu sau này, bạn có thể sử dụng đầu ra đệm để nắm bắt đầu ra đó và sau đó lưu trữ trong một biến .... không chắc chắn khá lý do tại sao bạn muốn làm điều này mặc dù.

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
ob_start(); 
$objWriter->save('php://output'); 
$excelOutput = ob_get_clean(); 
+3

Cảm ơn. Nếu tôi đang sử dụng điều này bên trong một khung công tác như symfony, tôi có thể cần truyền nội dung xung quanh từ một dịch vụ excel đến một số loại dịch vụ hoặc bộ điều khiển xuất ra. Tôi thà tránh việc ghi vào đĩa. – Aaron

+5

Bạn nhận ra rằng nó có thể là cực kỳ bộ nhớ đói, giữ toàn bộ tập tin trong bộ nhớ PHP –

+0

Một câu hỏi công bằng. Cảm ơn vì lời khuyên. – Aaron

0

Kể từ PHPExcel viết các tập tin vào đĩa trong mọi trường hợp, nếu bạn chụp stdout, những gì xảy ra trong nội bộ là các tập tin được ghi vào đĩa, sau đó đọc từ đĩa (và xóa), in để stdout và sau đó bị bắt trong bộ đệm đầu ra.

Bạn cũng có thể làm:

$tmpfile = tempnam($tmp_dir, 'phpxltmp'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save($tmpfile); 

$excelOutput = file_get_contents($tmpfile); 
unlink($tmpfile); 
+2

Đây là loại cảm giác thông thường về cách người ta có thể tiếp cận điều này, nhưng có rất nhiều nhược điểm cho phương pháp này .. Việc tạo/sử dụng đĩa của bạn đòi hỏi nhiều hoạt động/thời gian/không gian hơn. Nếu tập lệnh này chạy trong nhiều phiên bản hoặc chồng chéo, bạn cần phải tạo một tệp khác nhau cho mỗi phiên bản. Điều này có thể dẫn đến các vấn đề tham nhũng/acess. OP đã nói trực tiếp với một biến, chứ không phải cho một tệp, sau đó đến một biến. – Mayhem

+0

Câu trả lời đã giải quyết những nhược điểm này. 'tempnam' tạo ra một tệp khác nhau cho mỗi cá thể và vì PHPExcel sử dụng một tệp trong mọi trường hợp, đó là cách tiếp cận" thẳng đến biến "rõ ràng là hiệu quả kém hơn của cả hai. Trong nhiều trường hợp, có thể sử dụng 'readfile' hoặc xử lý luồng để tránh các vấn đề bộ nhớ và tăng thêm hiệu suất. Trong khi câu trả lời được chấp nhận dường như đơn giản hơn, điều đó có giá trị trong chính nó, tôi vẫn cảm thấy rằng * điều này * phải là câu trả lời được chấp nhận, hoặc một sự thay thế đáng tin cậy. – LSerni

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