2012-01-09 2 views
4

У меня есть сценарий, который создает визитную карточку для сотрудников, когда нажата кнопка «Добавить контакт». У меня есть vCard в переменной, но я не совсем уверен, что с ним делать дальше.PHP save file to users computer

Я полагаю, что мой шаг frist должен состоять в том, чтобы сохранить этот файл на сервере?

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

Любые указатели здесь будут указаны.

Спасибо.

+0

PHP может быть использован для вывода вещи, отличные от html для пользователей. Отправьте правильные заголовки файлов, и пользователям будет предложено загрузить файл вместо получения HTML-страницы. – DampeS8N

+0

Более общая версия этого вопроса - [Force File Download] (http://stackoverflow.com/questions/3718962/force-file-download-in-php). Он не затрагивает все ваши конкретные вопросы, поэтому я не буду использовать его как можно дублирующее, хотя это действительно граничит. – Gordon

+0

Спасибо, Гордон, я не был уверен, что искал, потому что раньше этого не делал. То есть Я знаю, что мне нужно было скачать файл, но на самом деле я не думал, что мне удастся сделать то, что я хочу, без сохранения на сервере сначала и загрузки, поэтому бит «force» даже не входил в мои мысли. –

ответ

7

Если вы хотите файл Сохранить диалог всплывал, когда кто-то просит экспорт URL, вы должны использовать

header("Content-type:text/vcard; charset=utf-8"); 
header("Content-Disposition: attachment; filename=vcardexport.vcf"); 
echo $vCardData; 

Так нет, вы не должны сохранить его в виде файла на сервере в первую очередь. Вы можете обслуживать его из переменной. Обратите внимание, что этот подход можно использовать для любых других данных, если вы указали правильное значение MIME Type для Content-Type.

Также см https://en.wikipedia.org/wiki/VCard и https://www.ietf.org/rfc/rfc2183.txt

+1

Спасибо, это помогло мне разобраться с проблемой, и документация также очень полезна. –

1

Попробуйте взглянуть на заголовок Content-Disposition :)

Это может заставить загрузки файла на клиенте :)

0

Если у вас есть файл на сервере, вы можете просто иметь ссылку на кнопку который указывает на файл

<a href="location of the vcard file"><img src="button.jpg"></a> 

или вы ищете другой способ доставки?

+0

vCard создается динамически, когда пользователи нажимают ссылку «Добавить контент» в профиле сотрудников. В настоящее время обновление страницы не происходит, все делается через AJAX. –

1

Вы можете просто вывести vCard с PHP, установив правильный тип содержимого с заголовком ответа. Это должно принудительно загрузить в браузере пользователя. Я искал его и нашел this example.

+0

Спасибо, этот пример помог многим и не чем-то странным с постоянными ссылками на моем сайте, это, похоже, работает. –

2

Если у вас есть визитка в переменном, то вы можете легко заставить его как загрузить на клиент с этим кодом:

<?php 

header('Content-type: text/vcard'); 
header('Content-disposition: attachment;filename=vcard.vcf'); 
echo $vcard_variable; 

?> 
+0

Да, это то, на что я уже ответил;) – Gordon

+0

, что было из какого-то старого RFC. Теперь я изменил его до правильного типа контента. –

+0

Спасибо, я использовал эти заголовки в сочетании с моим выходом, и теперь этот процесс работает. –