引言

最近在尝试基于 PHP 做一个反向代理 HTTP 的程序,其中一个需求是将程序收到的HTTP请求还原回 RFC2616 的原始格式。

在处理的过程中遇到的问题主要在请求体的处理上。利用PHP的封装协议机制,我们可以通过读取 php://input 访问原始的POST信息。但这种方式有一个局限,对于 multipart/form-data 的请求来说,为了支持文件上传的操作,PHP会预先把请求体中的文件暂存到临时文件夹,并把参数解析到变量 $_POST$_FILES 中, php://input 获取原始请求的功能也随之失效。

Stack Overflow 上的相关问题给出的 解决办法 是修改服务器配置,把发到 PHP 脚本的 Content-Type: multipart/form-data; boundary=xxxx 修改为其它格式,使其不经过PHP的 form-data 解析;或是把 php.ini 配置关于POST数据解析的 enable_post_data_reading = Off 选项关闭。然而这两种方法并不非常具有普遍性,在某些PHP配置文件不可控的共享主机的环境下并不适用。

于是引出了本文讨论的话题 — 如何重新组装 multipart/form-data 格式的原始 POST 请求体。

阅读全文 »

写完作业逛PT站发现 Beyond 专辑合集的 CD,想到网易云音乐里面没有一直很喜欢的 Beyond 的《长城》,遂让树莓派花了半个小时时间把它拖到了本地。

然后用VLC播放,发现歌曲列表中文全是乱码??但播放一切正常,猜测是编码问题,搜索发现是因为GBK编码的文本在Linux下不被VLC识别,需要有一个编码转换的操作。

想起 PHP 有个 iconv 扩展,似乎内部是通过 iconv 类库实现的,大胆地猜测一下, Linux 下是否也有个调用 iconv 的程序呢?

尝试了一下,发现还真有!

查询了一下命令的使用方式,试着执行了 iconv -f gbk -t utf-8 CDImage.cue

阅读全文 »

最近有折腾小程序的意向,但微信的开发者工具只提供了 Windows 和 Mac 两个版本,对于我这样的 Linux 用户来说不是那么地友好。

经过观察发现,那个开发者工具实际上是基于nw.js开发的,天然地具有跨平台的属性,搜索Github的时候刚好发现这个项目:
cytle/wechat_web_devtools: 微信开发者工具(微信小程序)linux完美支持

于是我按照README的教程装好 Wine,运行脚本配置安装。装好后发现功能基本正常,唯独不能正常编译小程序代码,提示

run-detectors: unable to find an interpreter xxxxxxx

文档给出的解决办法是,安装一个 wine-binfmt 包,当我敲下 sudo apt install 之后尴尬的发现, Ubuntu 16.04 LTS 缺失了这个包,想到配置各种下载源,也是挺让人绝望的。


阅读全文 »

上上周的某天,我在网上偶然遇到这本书,豆瓣的简介是这样子的:

在这个飞速发展的信息时代,程序员仅仅掌握甚至精通一门语言是远远不够的。了解多门语言蕴涵的思维方式,在编码中互相借鉴,再挑出一两门对自己口味的语言深入学习,这些已经成为在软件行业中安身立命之本。从这个意义上说,每个程序员都应该看看这本《七周七语言》。

想起了王垠大神的 如何掌握所有的程序语言 ,心中还是挺赞同他“不管是初学者还是资深程序员,应该专注于语言特性”的观点的。仔细想想,这应该是一个了解更多的语言特性的不错的方式,所以我在图书馆找到了这本书。

看了第一章,感觉十分合我胃口,就把它带回来了。

然后鸽子了一个星期才开始这本书...

阅读全文 »

上完上午的课,时间尚早,不想去赶人流高峰挤食堂,遂留在教室刷刷网页,读读文章,打算11点半下一波下课高峰之前再去解决午饭问题。

登录许久没有打理过的博客后台,在众多未回复的留言之中,一条指向博客的归档页面的 PingBack 映入眼帘:

PingBack

想到自己写的东西能带来价值,心中还是有些小激动。我也想试试,能不能 PingBack 回去日记-20180310 | 鲁工技,这大概也是 WordPress 之类的动态 Blog 程序的特色之一吧。

激动之余,回顾过去写的东西。也发现一个问题:过去的我在这里留下了许多高中时期关于学习的探索,大学以后,虽然还在探索着,但关于学习的尝试与折腾,我却没有做一个很好的记录和总结,也没有去回顾,渐渐地开始淡忘。除了一些技术上的折腾记录外,我也很久没有写过像这篇文章一样的日记了。

阅读全文 »