PHP生成vCard文件后缀为.php.vcf而非.vcf的问题如何解决
解决方案
当前出现.php.vcf后缀是因为你没有显式指定下载文件名,浏览器会默认使用当前执行的PHP脚本文件名作为基础拼接后缀,导致异常。只需在原有Content-Type头下新增Content-Disposition头,指定下载文件名即可解决问题,修改后完整代码如下:
function generate_vcard($fn,$ln){ $text = 'BEGIN:VCARD' . "\r\n"; $text .= 'VERSION:3' . "\r\n"; $text .= 'Firstname:'.$fn . "\r\n"; // 原代码重复的Firstname改为Lastname,可按需调整字段 $text .= 'Lastname:'.$ln . "\r\n"; $text .= "END:VCARD"."\r\n"; return $text; } $generated_text = generate_vcard('John', 'Smith'); header('Content-Type: text/vcard'); // 新增下行指定下载文件名,可按需自定义名称,支持动态拼接变量 header('Content-Disposition: attachment; filename="John_Smith.vcf"'); echo $generated_text;
- 如果需要动态生成文件名,比如用员工姓名作为文件名,可将文件名部分改为变量拼接:
header('Content-Disposition: attachment; filename="'.$fn.'_'.$ln.'.vcf"'); - 若需要兼容低版本浏览器,可额外添加
header('Content-Length: ' . strlen($generated_text));确保下载流程正常,无特殊兼容需求可省略。
内容的提问来源于stack exchange,提问作者Vatsal245
相关产品推荐
相关产品推荐

