冬天地上扑的是雪,厚厚的,软软的;房上落的是雪,白皑皑的,又松又软;树上盖的是雪,积雪把树枝压弯了腰。太阳照在雪山上,发出耀眼的光芒。
前几天刚给Z-blog的用户中心插件加入了导出邀请码并以文件的形式进行下载的功能,用户们反馈过来的使用效果不错,所以今天无事,就把部份代码发出来,做个笔记。代码已进行测试,安全可用,有需要的小伙伴可以直接拿去用就可以。
PHP生成文件并下载的代码
代码如下:
<?php header("Content-Type: application/octet-stream"); $center= '这里是需要生成文件的内容'; $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "mochu.txt";//生成的文件名 $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20", $encoded_filename); if (preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']) ) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } elseif (preg_match("/Firefox/", $_SERVER['HTTP_USER_AGENT'])) { // header('Content-Disposition: attachment; filename*="utf8' . $filename . '"'); header('Content-Disposition: attachment; filename*="' . $filename . '"'); } else { header('Content-Disposition: attachment; filename="' . $filename . '"'); } echo $center; ?>
以上就是PHP代码生成文件并下载的功能代码,在火狐,谷歌,IE10以上的浏览器内测试正常。
可以更改成下载其它格式文件
其中下载的文件后缀名可以更改,比如下载CSV格式的文件,
代码如下
$filename = "mochu.txt";//生成的文件名
更改后的代码
$filename = "mochu.csv";//生成的文件名
拦截下载
如果没有内容可供用户下载,我们可以在执行下载功能前进行拦截操作,上面的代码可以修改一下,具体代码如下
代码
<?php if($center == ''){ echo '无内容,无法下载' exit; //如果没有内容可供下载,这里可以写入判断代码,比如打开一个提示页等 }else{ $center= '这里是需要生成文件的内容'; } header("Content-Type: application/octet-stream"); $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "mochu.txt";//生成的文件名 $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20", $encoded_filename); if (preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']) ) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } elseif (preg_match("/Firefox/", $_SERVER['HTTP_USER_AGENT'])) { // header('Content-Disposition: attachment; filename*="utf8' . $filename . '"'); header('Content-Disposition: attachment; filename*="' . $filename . '"'); } else { header('Content-Disposition: attachment; filename="' . $filename . '"'); } echo $center; ?>
如果没有内容可供下载,你可以判断内容是否为空的代码里面加入美化后的HTML代码进行提示,也可以加载提示页面的形式展示给用户。
注意事项
注意:由于以上代码是在后台进行,下载文件的时候需要打开一个新的页面才执行下载,所以在前端请求的时候,不能以AJAX的方式进行请求,要以A链接新开页打开方式,或form提交的方式请求。