浏览模式: 描述 | 列表 全部文章

PHP浮点数要注意的问题

作者: 我不是鱼 (2009-09-28 22:06)分类: PHP   标签: 浮点数 转整  

PHP代码
  1. <?php   
  2. $a = 8.45*100;   
  3. var_dump($a);   
  4. var_dump(intval($a));   
  5.   
  6. $a = 845*1.00;   
  7. var_dump($a);   
  8. var_dump(intval($a));   
  9. ?>   
  10.   


这段程序,我以为输入4个都是845。不过结果出乎意料。php 5.29输入的结果是

float(845)
int(844)
float(845)
int(845)

为什么两个都是845的浮点数,转整时一个事845一个是844?php手册上的说法是:
显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

不过仍然很费解

PHP代码
  1. <?php   
  2. var_dump(floor((0.1+0.7)*10));   
  3. var_dump(floor((0.1+0.6)*10));   
  4. ?>   


两个都是 fl...

查看原文评论 (0) | 浏览 (5538)


POST的原始数据获得方法

作者: 我不是鱼 (2009-07-30 17:52)分类: PHP   标签: POST 原始数据  

之前要保存flash POST 过来的图片数据。一开始以为这个数据在 $_POST 数组里,但事实并不是。后来才知道在 $GLOBALS['HTTP_RAW_POST_DATA'] 里。所以备忘下。
在网上找了一下两者的区别:

$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

并且如果 $GLOBALS['HTTP_RAW_POST_DATA'] 不存在时,可以通过 file_get_contents('php://input'); 获...

查看原文评论 (3) | 浏览 (9861)


ip“伪造”

作者: 我不是鱼 (2009-07-30 17:33)分类: PHP   标签: IP伪造  

发现有些程序,如discuz。在取ip的先判断 $_SERVER['HTTP_CLIENT_IP'] 再判断 $_SERVER['HTTP_X_FORWARDED_FOR'] 最后 $_SERVER['REMOTE_ADDR']。测试了一下发现 $_SERVER['HTTP_CLIENT_IP'] 和 $_SERVER['HTTP_X_FORWARDED_FOR'] 都可以伪造过来。getenv('HTTP_CLIENT_IP') 和getenv('HTTP_X_FORWARDED_FOR') 也是一样的情况。

PHP代码
  1. <?php    
  2. $fp = fsockopen("localhost", 80, $errno$errstr, 30);   
  3. if (!$fp) {   
  4.    echo "{$errstr} ({$errno})<br />\n";   
  5.    exit;   
  6. }   
  7.   
  8. $out = "GET /xuance/tttt.php HTTP/1.1\r\n";   
  9. $out .= "...

查看原文评论 (0) | 浏览 (11950)


种菠萝得菠萝

作者: 我不是鱼 (2009-07-12 22:04)分类: 其他   标签: 菠萝 高州  

昨天妈妈寄了菠萝上来,虽然不是很大个,不过有3个。从车站搬回来几乎把我累坏。今天心血来潮,发几个图片上来。

3个菠萝


菠萝是家乡高州对这种水果的一种称呼吧,书名叫菠萝蜜。在茂名,湛江比较多。又分干包和湿包,其中干包最为好吃。可能很多人没有吃过,甚至也没有见过菠萝。和榴莲有点相似,不过我不怎么喜欢吃榴莲,菠萝是我比较喜欢的水果之一。

家里的两颗菠萝树都是我种的,俗话说“种瓜得瓜,种豆得豆”,种了菠萝可以品尝收获的喜悦。我还记得那是很小的时候,有天晚上村里的仙达大叔送给我家一个菠萝,吃完菠萝后我就把一颗菠萝核种到一个小盘子上,发芽后就移栽到地堂边。地堂边原本是种了两棵秋芒,后来都被牛放倒了。第二棵是之后一年种的,本来是两棵小苗,本希望他们可以长合在一起。不过事与愿违,后来就砍掉了相对小的那棵。第一次结果是高一的时候,只结了两个。不过尝过之后就每年都会惦记着。高三那年是大丰收。后来到广州读书之后每年都比较少回去,不过有果实的话爸爸,妈妈都会寄上来。

妈妈说今年结二三十个,也算是大丰收。不过自从搬上高州之后,乡下就没有一个人看着,之所以每年都有菠萝吃,是因为村里的人大多的比较好。但这么好吃的菠萝,肯定...

查看原文评论 (7) | 浏览 (9489)


IE中document.createElement的iframe无法设置属性name问题

作者: 我不是鱼 (2009-06-30 13:55)分类: Javascript   标签: iframe name  

iframe 的name可以是link或者form的target,将link或form打开到这个iframe上。
之前在IE遇到过设置不了iframe的name属性

JavaScript代码
  1. var iframe = document.createElement('iframe');   
  2. iframe.name = 'ifr';   
  3. //iframe.setAttribute('name', 'ifr'); //这样也不行  

上面两种方式都无法设置。后来找到原来也可以这样创建

JavaScript代码
  1. var iframe = document.createElement('<iframe name="ifr"></iframe>');  

这样在IE中就没问题了,但这种方式在firefox中是无办法通过的。所以最后

JavaScript代码
  1. try{   
  2.         var iframe = document.createElement('<iframe name="ifr"></iframe>');   
  3.  ...

查看原文评论 (3) | 浏览 (7472)


js数组赋值要注意的问题

作者: 我不是鱼 (2009-06-20 21:24)分类: Javascript   标签: js 数组 引用  

举个例子说明下

JavaScript代码
  1. <script type="text/javascript">   
  2. var pic = thumb = new Array();   
  3. for(var i=0; i<2; i++){   
  4.     pic[pic.length] = i;   
  5.     thumb[thumb.length] = i;   
  6. }   
  7. </script>  

这样赋值后原以为 pic和thumb的值都是 [0, 1]。其实不然,它们两个的值都是[0, 0, 1, 1].
原因是这种复制方式引起的 var pic = thumb = new Array(); js数组是引用传递的。
但如果是字符串,这样:var pic = thumb = ''; 又不会有这个问题。
数组改成这种方式就没有问题了
var pic = new Array(), thumb = new Array();

查看原文评论 (1) | 浏览 (8821)


Dean Edwards 的php版的 JavaScript Packer 压缩JavaScript后无法运行的问题

作者: 我不是鱼 (2009-03-10 18:40)分类: Javascript   标签: JavaScript 压缩  

Dean Edwards 的php版的 JavaScript Packer 是一个非常好用的JavaScript压缩工具。支持几个级别的压缩。不过我用来压缩一些程序后发现跑不起来,未压缩前语法的没问题的,而且换行结束的地方都有分好。压缩后反而语法有错。于是找了一下原因终于发现,原来是一正则出了问题。打开
class.JavaScriptPacker.php
查找

PHP代码
  1. $parser->add('/;+\\s*([};])/''$2');  
注释掉此行,即改成:
PHP代码
  1. //$parser->add('/;+\\s*([};])/', '$2');  

为什么这个会出错呢?举个例子说明一下
JavaScript代码
  1. function aa(){   
  2.     for(var i=0; i<4; bb(i++));   
  3. }  
不注释那一句的话压缩后变成
JavaScript代码
  1. function aa(){for(var i=0; i<4; bb(i++))}   

没有逗号自然就语法出错了。

查看原文评论 (0) | 浏览 (4945)


htmlarea编辑器redo 和 undo 在ie下没反应的解决方法

作者: 我不是鱼 (2009-03-04 12:05)分类: Javascript   标签: htmlarea 编辑器 redo undo  

htmlarea编辑器速度还是挺快的,我比较喜欢用。但htmlarea编辑器的redo 和 undo 在ie下一点反应也没有,但在firefox下正常。原来是ie下默认是关闭了undo功能的。打开htmlarea.js,查找

JavaScript代码
  1. this._customUndo = false;  


改成

JavaScript代码
  1. this._customUndo = true;  


redo,undo就可以用了。

另外如果出现 'HTMLArea.I18N.tooltips' is null or not an object 的错误。则lang下的语言包问题。而且这个错误很无厘头。后来我直接用json_encode把中文全部转成类似于这样的形式 \u9760\u5de6 就好了。

查看原文评论 (2) | 浏览 (4450)


博主


« 2020年-12月 »
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2

分类


热门标签


最近留言


概要

  • 文章数量: 41
  • 分类数量: 9
  • 标签数量: 73
  • 评论数量: 159
  • 浏览次数: 3236422

友情链接