手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

伤不起的程序猿


果然是伤不起啊,轮回,又是一个轮回。
这张图是从这个微博而来:http://t.qq.com/p/t/78616014604612
可以围观。。。

【科普贴】话说回车和换行

有意思的文章,大多数时候,我们都是知道\r,\n,\r\n,但为什么是这样的呢,居然找到了一篇科普贴。
来吧,看看为什么吧。
原文来自:【科普贴】话说回车和换行
看xml的时候发现这样的一段话:

XML 以 LF 存储换行

在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。

让我对这三个(win,unix,mac)苦逼的主产生了兴趣,为啥你们不一样呢,难道你们认识“回车”和“换行”的时间有先有后吗?为啥没统一或者说为啥产生了CR和LF这两个玩意?说说历史吧!

为什么会有两个貌似一样功能的东西?

潜台词:很多时候敲击enter就是换行了呀,还回啥个车,回车就是换行吗?

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

-http://www.ruanyifeng.com/blog/2006/04/post_213.html

 

为啥windows,unix,mac不统一呢?

可能是基于成本和效率的考虑,我认为都统一成一个“回车”就够了,可是当年正是这种想法导致了现在的问题,至于这三家互不相同,我也不知道,各有各的考虑吧,反正蛋疼的是用户,比起现在浏览器的兼容性问题,这算不上问题。

以下是他们表示“下一行”的方式:

    OS          表示                              C语言表示    16进制表示

    windows  回车+换行(CR/LF)        \r\n             0x0d0a

    UNIX       换行符(LF)                   \n               0x0a

    MAC        回车符(CR)                   \r               0x0d

 

看一下在一份xml文件里的情况吧,我没钱买苹果,所以下面不包括MAC OS,果粉别砍我!

抱怨之余,我们还能干啥呢?

至少你知道这是怎么回事了,至少在不同平台之间传送文件时别傻傻的骂别人没整理文件格式,至少...,这还不够吗?

-------------
在用PHP写文件的时候,一般我们都是用\n来解决断行。但这时候,如果用windows下的记事本打开这个文件,你会发现一堆黑框,并且处在一行里。
因此,看了上面的文章后,你会知道怎么办了。突然想到以前的str_replace(array("\r\n","\r","\n"),"<br />",$str), 这种烂代码。当然nl2br就解决这样的功能了。然后再转回来?哎。纠结啊。。

Tags: 回车, 换行, windows, linux, mac

解决图片防盗链接问题

在直接引用外部图片的时候,经常会出现,该图片来自于XXX网站,请勿盗链
找了一下资料,发现只有几种方法可以解决
1、JS,HTML里嵌入iframe,然后类似地打开一个网页的形式,使得页面认为已经访问过主体网站,所以可以解决防盗链
2、如果页面中的图片是:/xxljaslkdjf/xxx.jpg,而这个图片事实上来自于:xxx.xxx.com网站,这时候在页面的<base >TAG里设置一下,就不需要全文正则替换图片了。灰常方便。。。
3、设置HTTP_REFERER,这个有点麻烦,不是每个站都支持。。。
4、在页面中放置一iframe,地址就是主体网站。然后等访问完成后302跳转到真正的页面,图片就能正常了
5、用URL转发的形式,如:image.php?url=image.path.jpg,通过这种方式,几乎解决了很多问题(但,不能走CDN了。真可惜啊。怎么办呢??生成本地图片后,再由CDN转发?不太现实)

基本上就上述的方法了,如果你还有新方法,请告知

Tags: 盗链

Yii for SAE 提交到google code

Yii for sae终于提交到了google code了。

yii framework for sina sae platform. 初步实现将yii framework 移植到 sina SAE云平台。 assets目录生成到storage中,runtime则是用memcached来实现, 也因此需要激活storage和memcached。 几乎不需要改原来的代码,如果需要设置主从数据库,请另外加一个components节点:sdb,配置信息与db一样,但需增加一个 'isSlave'=>true,即OK。不过在这种情况下,所有的model都请继承SaeActiveRecord?

配置信息中,在params里增加 'params'=>array(

'sae'=>array(
'storage' => array(
'assets' => 'assets', 'runtime'=>'runtime',
), 'db'=>array(
'slave'=>'sdb', 'master'=>'db',
)
),

);
----
配置起来是不是很简单?
当前目前还是有一点问题的

  1. 比如对于文件的LOG暂时无法实现,准备使用memcache存储部分,等到了一定大小后,扔到storage中存储。
  2. GII暂时还不能在线上使用,这个有点纠结,因为GII是需要生成文件 ,而sae平台不支持生成文件。如果扔到storage中,效率又不能保存。如果扔到memcache中。include之类的又不知道是否能够完美实现?纠结中。。(生成到storage?然后下载?扔到models目录中?这多没意思,与其这样,还不如本地建好model,然后SVN上传呢)
  3. 好象cdbcache是用了sqlite,原本看代码里是能够自动生成的,但在线上,怎么搞呢?存到storage中又没有效率?哎。。。

不过,暂时基本功能都实现了,嗯项目地址是:http://code.google.com/p/yiiforsae/

Tags: yii, sae

Yii for SAE

这两天在实现Yii for SAE,之所以想实现这样的功能,主要还是YII相对比较深入开发人员的人心吧?
这一定是我的个人偏见,因此不要打口水仗。
开发的时候,遇到的问题大多是runtime目录下的存储,以及主从数据库的问题,因此大部分的精力都是在解决这些。
所幸,还是可以利用yii的一些特性来搞定它。
嗯。70%已经完成了。如果差不多了,到时候会扔到google code上,这样想用的人就直接可以使用啦。

目前还在测试中,可以访问 http://ixyz.sinaapp.com进行测试。

Tags: yii, sae