2013-09-20 2 views
0

Я использую PHP для генерации файла Excel через CSV. Я использую очень простой фрагмент кода для подготовки всей функции до заполнения ее собственными данными:PHP показать диалог «открыть/сохранить»

$list = array (
    array('#', 'Registrar', 'Country', 'Website', 'Email Address'), 
    array('123', '456', '789', 'aaa', 'bbb'), 
    array('123', '456', '789', 'aaa', 'bbb'), 
); 

$fp = fopen('myfile.xls', 'w'); 

foreach ($list as $fields) { 
    fputcsv($fp, $fields, "\t", '"'); 
} 

fclose($fp); 

Код работает нормально. Однако он автоматически сохраняет «myfile.xls» в каталог, в котором выполняется файл PHP. Я хочу, чтобы страница отображала диалог «открыть/сохранить», чтобы позволить пользователю выбрать, где он хочет сохранить файл. Я пробовал некоторые трюки заголовка, подобные этим:

header ("Content-Type: application/download"); 
header ("Content-Disposition: attachment; filename=myfile.xls"); 
header("Content-Length: " . filesize(myfile.xls)); 

Однако при использовании этого экспортируемый файл отображает содержимое страницы (которая включает в себя заголовок с названием, меню, колонтитул и т.д.) вместо данные в переменной «list» ... Я не могу запретить заголовок или нижний колонтитул быть включенным в PHP-страницу, поскольку это часть структуры, поэтому я просто хочу выбрать, где «myfile.xls» генерируется через сохраняется CSV-функция PHP.

Я также рассмотрел и попытался использовать PHPExcel и другие пакеты, предназначенные для генерации Excel, но я не могу заставить их работать нормально. Я потерял слишком много дней, пытаясь это, поэтому я решил просто создать CSV-файл, который подходит для моих целей. Единственное, что мне нужно сейчас - это диалог «открыть/сохранить», и это будет идеально для меня.

Заранее благодарим за ваше время и усилия! :)

+0

Большинство фреймворков обеспечивают некоторый механизм, позволяющий вам подавлять свои собственные заголовки и использовать свои собственные вместо этого, так какие рамки вы используете? –

+0

Привет, Марк! Я использую Yii Framework, который всегда «внедряет» свои страницы внутри фреймворка, показывая заголовок, меню и нижний колонтитул ... – Johanovski

+1

Я не эксперт в области фреймворков, но обязательно должен быть встроен метод Yii который подавляет свои собственные заголовки, позволяя вам переопределять их с помощью пользовательских заголовков: например для обслуживания не-html-данных (http://www.yiiframework.com/forum/index.php?/topic/7522-http-headers-simple-question/) –

ответ

0

попытка ниже кода

$file = "location of file to download" 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
+0

Привет, Вишал! Я пробовал свой код, но я не могу заставить его работать ... Я вставил его до и после моего кода (меняя «$ file» для «$ fp», который является моей файловой переменной), но он ведет себя странно: на странице отображается некоторая ошибка 404, как будто она не может найти файл ... Комментируя две строки, в которых появляется переменная $ file, открывается страница открытия диалогового окна загрузки файла PHP. Тем не менее, я не могу заставить код загружать мой XLS-файл, так как он показывает, что ошибка «не удается найти страницу PHP, которую вы выполняете» ... Strange ...: S – Johanovski

+0

попробуйте дать полный путь к скачиваемому файлу –

+0

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

Смежные вопросы