一、需求:
将file_get_contents读取到的文件内容通过一个链接访问可以按照文件内容格式展示到浏览器或下载到用户手机或电脑桌面
二、解决思路:
首先将读取到的内容放到数组中使用
json_encoode
转化成json字符串存储到数据库中,然后再用户下载或通过浏览器查看时通过preg_match
正则匹配$_SERVER['HTTP_USER_AGENT']
来判断用来源,此次用户下载是通过Wget
下载如果$_SERVER['HTTP_USER_AGENT']
包含Wget
则视为下载其他视为浏览器。
浏览器展示:
- 获取用户要查看的内容唯一标识读取到内容需要注意的是换行和回车的识别其中有
\r、\n、\r\n
。
- 使用
json_decode
将json字符串转成数组,使用str_replace
将\r、\n、\r\n
替换成HTML标签<br />
。
- 替换成功后输出到浏览器。
下载到用户设备:
获取用户要查看的内容唯一标识读取到内容,使用
json_decode
将json字符串转成数组,通过下标直接输出即可,因为数据库中存储的就是原本的文件没有做任何处理。
二、解决过程:
<?php
//读取内容存入数据库
//file_get_contents获取的内容定义成数据
$str['content'] = '
1qwe
2qqwe
3ww
4qq
5qqasd
6
7asd
';
//将读取到的内容转成json字符串
$jsonStr = json_encode($str);
//存入数据库todo
....此处代码省略
//用户访问或下载
//获取要要下载或要查看的数据todo
....此处代码省略
//获取到的内容转成数组
$str = json_decode($jsonStr,true);
//判断用户来源
if(preg_match( "/Wget/i", $_SERVER["HTTP_USER_AGENT"])){
echo $str;
}else{
$replaceArr = ["\n","\r","\r\n"];
$htmlStr = str_replace($replaceArr,'<br />',$str); //显示在浏览器的
echo $htmlStr;
}
三、注意事项和结果:
同一个链接达到将文本内容展示到浏览器和下载到本地的目的,需要注意的是
文本内容的换行/回车和浏览器识别的换行和回车是不同的
,其实是需要通过$_SERVER
里面的HTTP_USER_AGENT
来判断用户是通过什么方式访问的从而达到目的
四、感言:
通过此次案例可以学习和巩固,正则表达式
、PHP的预定义变量
以及文本回车换行和浏览器换行回车的区别
感谢此次阅读,如有不理解的地方请在下方留言或进行私信,如果对你产生了帮助还请给予点赞
、收藏
、或打赏
、以及分享
给需要的伙伴
。谢谢!!!
网友评论