Отправить файл Excel без сохранения на сервере

1

Мне нужно отправить по электронной почте файл excell после его создания, но, к счастью, php не имеет прав на запись на сервере, поэтому мне нужно отправить его без сохранения файла. И через браузер это невозможно, потому что вам нужно подождать создания excell, и поиск базы данных происходит очень медленно, поэтому я задаюсь вопросом, есть ли способ отправить его прямо по электронной почте. Я давно искал поисковые запросы и не нашел решения, спасибо большое!

изменить, чтобы добавить код:

<?php

/** Include path **/
ini_set('include_path', ini_get('include_path').';../Classes/');
/** PHPExcel */
include (dirname(__FILE__)."/../../lib/PHPExcel.php");
/** PHPExcel_Writer_Excel2007 */
include (dirname(__FILE__)."/../../lib/PHPExcel/Writer/Excel2007.php");
/** Php Mailer */
require (dirname(__FILE__).'/../PHPMailer/class.phpmailer.php');

require '../mysqlvars.php';
require '../lib/db.php';
require '../lib/form_functions.php';
require 'includes/session.php';
require("classes.php");
$dbConn = connectDB($dbHost, $dbUser, $dbPass, $dbDB);
if (!$dbConn) {
    die ('Cannot connect to database');
}

require 'includes/session.php';
require '../init.php';
require '../licence.php';


require("classes.php");
// Create new PHPExcel object
echo date('H:i:s') . " Create new PHPExcel object\n";
$objPHPExcel = new PHPExcel();

// Set properties
echo date('H:i:s') . " Set properties\n";
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");


// Add some data
echo date('H:i:s') . " Add some data\n";
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');

// Rename sheet
echo date('H:i:s') . " Rename sheet\n";
$objPHPExcel->getActiveSheet()->setTitle('Simple');


// Save Excel 2007 file
echo date('H:i:s') . " Write to Excel2007 format\n";
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save();
print_r('ok');die; //never prints nothing
?>
  • 0
    где твой код?
  • 0
    Какую почтовую библиотеку / функцию вы используете?
Показать ещё 8 комментариев
Теги:
phpexcel

2 ответа

3
Лучший ответ

Поскольку вы не представили свой полный фрагмент кода, вот мое предположение:

1-й вы должны сохранить файл как/в переменную, и вот пример:

qaru.site/questions/225417/...

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

после этого вы должны прикрепить этот файл как строку с кодировкой BASE64:

qaru.site/questions/732259/...

2

На основе кода PHP_Excel на Github вы можете использовать php://stdout для записи файла на стандартный вывод.

Поэтому теоретически вы можете использовать буферизацию вывода для захвата выходного файла в буфер.

например

ob_start();
$objWriter->save('php://stdout');
$excelFileContents = ob_get_clean();

Обратите внимание, что далее в методе save() он использует методы файловой системы для zip'ed части файла. Это не проверено.

Затем вы можете выводить это в браузер с правильными заголовками. Согласно [MSDN MIME reference] (http://blogs.msdn.com/b/vsofficedeveloper/archive/2008/05/08/office-2007-open-xml-mime-types.aspx) для Office 2007 этот код может выглядят следующим образом:

header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
echo $excelFileContents;
exit; // Exit here to prevent trailing echo/debug output from being appended to the file.

Если вы используете этот подход, вы будете ограничены лимитом памяти, так что это может быть проблемой для больших файлов.

Редактирование. Вместо того, чтобы эхом отдавать файл напрямую, поскольку вы добавляете его в электронную почту, вам нужно будет работать с phpmailer аналогично добавлению содержимого файла в виде многостраничного/смешанного письма.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню