免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4394 | 回复: 10

32位平台上数组的大整数下标在win和linux下处理不同怎么办 [复制链接]

论坛徽章:
0
发表于 2010-01-08 17:14 |显示全部楼层
比如某个数组有个下标为2,222,222,222,大于32位整数的最大值(2,147,483,647),
在本机调试时正常,用var_export显示该数组,会发觉该下标被自动加上单引号,如下面这个脚本

<?php
$a = array();
$a['222'] = 'small';
$a['2222222222'] = 'OS:'.php_uname('s r m').',PHP:'.phpversion();
$a['222222222222222222222222222222222222'] = 'big!';
var_export($a);
?>


在win下输出
array ( 222 => 'small', '2222222222' => 'OS:Windows NT,PHP:5.2.6', '222222222222222222222222222222222222' => 'big!', )
而在linux下输出
array ( 222 => 'small', -2072745074 => 'OS:Linux,PHP:5.2.10-2ubuntu6', '222222222222222222222222222222222222' => 'big!', )

即,在linux平台下,非常不幸,这个下标被解释一个负数,因为超过了32位整数的最大值,尽管我们已经明确指定下标为字符串.但为什么最大的字符串又没有呢?

怎么办?

补充:
我在另一台也是32位的linux上测试了,却是和win一样的
array ( 222 => 'small', '2222222222' => 'OS:Linux,PHP:5.2.9', '222222222222222222222222222222222222' => 'big!', )

原因在哪?编译的时候要指定什么吗?出错的那台是ubuntu9.10自带的php.会不会与php.ini有关?但实在找不到有哪个选项是管这个的

[ 本帖最后由 gydoesit 于 2010-1-8 19:14 编辑 ]

评分

参与人数 1可用积分 +10 收起 理由
bs + 10 好文

查看全部评分

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
发表于 2010-01-08 22:08 |显示全部楼层
没有遇到过。帮你顶一下。

论坛徽章:
0
发表于 2010-01-10 23:24 |显示全部楼层
存那么多数据?

论坛徽章:
0
发表于 2010-01-11 01:48 |显示全部楼层
楼上,不是那么多数据,不是你想的整数,那个2222222222222什么是一个字符串,如你所见,上面的例子只有三个数据而已.

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
发表于 2010-01-11 09:10 |显示全部楼层
FreeBSD8.0下结果正确:

array (
  222 => 'small',
  '2222222222' => 'OS:FreeBSD,PHP:5.2.11',
  '222222222222222222222222222222222222' => 'big!',
)

论坛徽章:
0
发表于 2010-01-11 09:24 |显示全部楼层
32bit redhat

array ( 222 => 'small', '2222222222' => 'OS:Linux,PHP:5.2.9', '222222222222222222222222222222222222' => 'big!', )

论坛徽章:
0
发表于 2010-01-11 09:36 |显示全部楼层
升级下php看看

我这边debian apt安装的php5.2.6没问题

php
<?php
$a = array();
$a['222'] = 'small';
$a['2222222222'] = 'OS:'.php_uname('s r m').',PHP:'.phpversion();
$a['222222222222222222222222222222222222'] = 'big!';
var_export($a);
array (
  222 => 'small',
  '2222222222' => 'OS:Linux,PHP:5.2.6-1+lenny4',
  '222222222222222222222222222222222222' => 'big!',
)

论坛徽章:
0
发表于 2010-01-17 01:19 |显示全部楼层
我不用系统自带的apache了,我下载并编译安装了apache2.2.14和php5.2.12,结果依然不对

array ( 222 => 'small', -2072745074 => 'OS:Linux,PHP:5.2.12', '222222222222222222222222222222222222' => 'big!', )

在刚装好没修改设置的情况下依然.难道是因为工作模式为worker?

于是我又把apache2编译成prefork模式,然后重编译php,再测试结果依然为负数,我的phpinfo开头部分如下:

System         Linux game 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686
Build Date         Jan 17 2010 01:55:58
Configure Command         './configure' '--prefix=/usr/local/php5.2' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-bz2' '--enable-zip' '--enable-calendar' '--with-mysql=/opt/mysql5.1' '--with-pdo-mysql=/opt/mysql5.1' '--enable-sqlite-utf8' '--with-iconv=/usr/bin/iconv' '--enable-mbstring' '--with-curl' '--enable-exif' '--with-gd' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--with-zlib-dir=/usr' '--with-xpm-dir=/usr' '--with-ttf=/usr' '--with-freetype-dir=/usr' '--enable-gd-native-ttf' '--enable-soap' '--enable-sockets' '--with-mcrypt' '--with-mhash' '--enable-shmop' '--with-mcrypt=/usr/local' '--with-mhash=/usr/local' '--without-xpm-dir' '--with-xmlrpc'

[ 本帖最后由 gydoesit 于 2010-1-17 02:07 编辑 ]

论坛徽章:
0
发表于 2010-01-17 02:33 |显示全部楼层
啊!终于正确了!我又怀疑是php版本高了,要回到5.2.8.但楼上有人用的是5.2.11,比我曾经的5.2.10还高.我只有想,可能是因为5.2.11配的是freebsd,而我是linux吧.不管怎么说,也得试试.于是重编译5.2.8,再试,这下正确了!原因不明,可能是php的bug,有空可以再详细测试下.先用着再说

论坛徽章:
0
发表于 2010-01-19 10:51 |显示全部楼层
可能是var_export的bug
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP