php强制下载TXT文档到手机及背后的故事

不懂PHP语言也不愿学只爱临时Google一下的我断断续续用了半年写了个内外行都会觉得垃圾的但自己有点满足感的适用于各类手机的小聊天程序 ,期间遇到各类问题,其中困扰最久却不重要的问题是PHP强制下载TXT文档。昨晚终于让我的山寨机也能下载TXT文档了。代码如下

1
2
3
4
5
6
7
<?php
/***php强制下载txt文件***电脑手机浏览器均有效***/
header("Content-Type: text/plain");//告诉浏览器这是一个纯文本文件
header("Content-Type: application/force-download");//文件得强制下载,文本不可以直接显示在浏览器里
header("Content-Disposition: attachment; filename=".$_GET['filename']); //这文本文档作为附件下载 文件名为获得的文件名
readfile($filename);//读取并输出文本文件
?>

没有第4行代码电脑上所有浏览器以及较新的手机浏览器都能因第5行代码而自动下载文档,但较旧的手机会直接在浏览器里显示文本,比如我08年买的山寨机。
半年前就纠结于php强制下载TXT文件的代码在我那山寨机上不能用,修改了多次都不行。今天这个思路以前也想到过,只不过,把第3,4行代码顺序搞反了,结果浏览器里直接显示出文本了。

手机文件MIME类型真是烦人,手机上网直接访问http://domani.com/filename.amr音频文件却以文本形式直接显示在浏览器里了,甚至电脑上各大注流浏览器也是这样,一屏乱乱。
MIME类型可以参考关于WAP下载的手机文件MIME类型,但因手机品牌繁多,可能设置并不生效,比如.3gp文章说content-type是video/3gpp但这样设置后我的山寨机下载下来会变成.dat格式,修改成audio/3gpp就能识别了。更多相关资料如Content-Disposition,可参见Content-Disposition的使用和注意事项

//文章本应该在此结束,可很久没有更新了,碎碎不算,突然想到了许多与这个PHP强制下载有关联的事,一件连一件,最近六个多月的情况也就多多少少扯了些出来,纯水,恶心,欲看先免疫//

半年前本该写论文的那段时间里突然觉得什么都无聊,觉得微博甚至自己坚持了二年多的碎碎都好麻烦,好复杂,也好虚假,因为这些都可能会被别人看到的,不自觉中虚了假了,有些烦心烦事不好意思也没有个地方发泄。于是想着自己写个最最简单的记事本。在网上看到了PHP最简单留言本才几行代码,于是就修改下给自己当记事本。不错,但那个程序只能记录不能看啊。我是一个怀旧的人,无人恋便自怜着,于是添加了查看日记功能,又怕太省流量导致自己口水话太多,页面过大导致山寨机内存不足不能显示笔记,于是加了分页查看功能。demo:http://littlebar.tk/app/wap-chat/post.php

在二辩前一天论文出初稿,立马卖了二手电脑480,贴370买了“神器”i8320,可立马发现它是最不智能的智能机,安卓模拟器上玩过的应用没有一个能移植过来(愤怒的小鸡纯属意外),但想想小八那强大的硬件,用它5mp CAM拍了不少照片(毕业聚餐上喝得烂醉还能拍到了BASA的经典画面),这钱还值,于是想着如何开发它的价值。那个时候KIKI,米聊,微信,群群热火了。五月末开始在FYT上班,得常挂Q,发现那些以前常隐身的人由IPNONE或者QQforPad在线现在全变成了微信在线。微信有什么了不起,不就是录个音发给对方吗,我的小八有上传功能录音录像上传到邮箱发你139邮箱,邮件到达短信提醒,顺着PUSH链接把音视频下载下来不比那些语音软件强吗?你微信我还微视了呢。无心工作一个个地试邮件服务商,他们也太不给力了,首先WAP/3G版邮箱上传文件大小限制得太小了却也常上传失败,其次也是最不能容忍的,手机下载.txt,.doc,.3gp,.amr,.mp4,.avi……附件常常变成.dat格式,虽然小八可以通过邮件客户端正常下载附件,可中国众多山寨机却没有这功能的,能上网才是它们的标配。于是思量着把那聊天室程序添加文件分享功能。

上班很闲,文件分享功能进展似乎很顺利,加了个WAP的DTD后小八大屏幕再也不会出现小字了,抄了个文件上传代码,上传的图片音视频文档等能分享到聊天室里,可以下载,但在下载这块出了许多问题,首先是因为分页是按字数来分的,常常把链接给断了,其次是中文文件路径乱码问题,第三是下载后后缀名变成.dat等。费了几天总算可以按消息条数来分页了,iconv几下中文文件乱码问题也解决了,设置了header Content-Type之后用手机下载 .amr 3gp mp4等多数文件后缀名不会变了(TXT等除外)。于是这个程序可以是山寨机上的极简单的个人记事本也可以是能HTML能语音视频能漫游还超省流量的强大聊天室。兴奋地找了几个童鞋测试,结果木有人有兴趣,就连我姐都木有,于是它还是我个人的最真实笔记本,七夕的孤单,大运天空的湛蓝,小八初次同步360的喜悦,INFP 的无奈都记着(an extract)。demo:http://littlebar.tk/app/wap-chat/post-hr.php

9月这个可怜的月份,刚好那天通过PP代付买了两个.me米,但小八身上发生了最让人伤心的事,触屏失灵了,那天用怀着复杂的心情用老旧的山寨机把这事记了上去。10多天后,一切的不爽因新买的电脑可蹭的WIFI全散去了,却也因这电脑发现与公司某人相处压力太大,想开了,买了个二手车骑,骑到小八导航地图一片纯色之中,于是等着被老板炒的我炒了老板。浑浑噩噩到现在发现“寒假”宅了快一个月了,本打算回校还钱拿证的,怎想听闻SB辅导员竟然大会上以我“不升旗事后苦苦哀求他”警示师弟学妹们,以前本不恶心或许应该还有点感激他,突然发现他已虚伪至此,实在不想再与他有任何联系。奈何爹娘要我把证拿到,且也快没饭吃了,于是明天(应该是今天了)要回学校了。

早上前FYT同事YJ过来找人帮他安装系统,除了WIN7安装太费时来一切还好,突然发现好久没有说人话了,想起那个太久不说话人成哑巴的旧闻后点害怕了,想想这浑噩一个月躺着看电影玩RPG游戏,ACT,FTG游戏都懒得玩,我退化了!!!NO!Then prove it!好,我来配置个WAMP给你看看。看着迅雷蜗牛的速度,回想着wamp配置的锁碎麻烦,我想GiVE UP了,不行,Then?记得有集成环境的,搜到了Xampp。哈多简单啊,解压就能用了。可我不自信,于是想到了修改那个记事本程序,是不是运气太好了,两行代码换个位置我那山寨机竟然也可以在聊天室里下载TXT文档了,这都解决了其它,其它格式还不是瓮中捉鳖啊!小八刷了能按键解锁加虚拟鼠标的ROM后用它上网进入聊天室测试,没想到,移动把小站GFW了,唉,留着这个漫游靓号(0086)月末了才来用点流量包里的资源,你,你,你却……我这又是何必呢?两相情愿(一段时间不打字了,五笔笔误,应为‘一厢情愿’,要是彻底忘记了重新用拼音会不会好一点?)地用着移动,却每月只贡献9RMB,不觉得丢人吗?我移动的脸都让你丢光了,你这种用户让我的ARPU这两年一直降降降,现在都快不到70了。Demo http://littlebar.tk/chat

Sadly, I know little HTML!

Related posts:

  1. Hi Msg 精小聊天程序
  2. PHP加Flash调用谷歌图片搜索
  3. PHP电子邮件追踪小程序
  4. ImageVue 2.1.7flash相册 简体中文版以及英文破解版本下载
  5. Test the wordpress for android application
  6. 三星i8320使用心得
  7. wordpress同步指定文章的评论到新浪微博
  8. 这些空白的日子
  9. 艾文英语实习总结
  10. 联通2.5元30M

One Comment

  1. IchILLY viaChrome
    Posted 2012/01/15 at 23:08 | Permalink

    前面说错了
    用下面两行:
    header(“Content-Type: application/force-download”);//强制下载,用application/octet-stream和application/x-octet-stream效果一样
    header(“Content-Disposition: attachment;filename=”.$_GET['file']);
    山寨机用CMNET上网的话可以下载正确识别并下载文件,但CMWAP上网下载的文件后缀名都是.DAT,用三星I8320的话下载的文件后缀名全都会成为.DAT

    如果不用强制下载得先申明文件类型:
    header(“Content-Type: text/plain”);//这里以.TXT为例
    header(“Content-Disposition: attachment;filename=”.$_GET['file']);//以附件形式下载
    如果是山寨机浏览器支持的文件如TXT,CMNET/CMWAP网络下都是直接显示在浏览器里,如果是浏览器不支持的格式则会下载文件,后缀名也不会出错。
    但如果是I8320,则都大部份能正确识别并下载,不会直接显示在浏览器里。(少数不支持,如header(“Content-Type: video/x-msvideo”);也变成.DAT了)

    但上面两种办法电脑端浏览器都能正确识别并下载的。

    一些手机TXT小说下载站点,没有发生上述问题,为什么呢?因为人家服务器设置了.TXT类型的文件只允许下载,不能直接显示在浏览器里,是通过服务器设置实现的,不是网页程序实现的。

    总算是明白了,浪费太多时间,各种不兼容!

    [回复]

Post a Comment

Your email is never shared.