浏览模式: 描述 | 列表 分类: PHP

phpmyadmin 打开数据表较多,数据量较大的数据库时出现超时的解决办法

作者: 我不是鱼 (2010-03-03 21:11)分类: PHP   标签: phpMyAdmin 超时  

用phpmyadmin打开数据表较多,数据量较大的数据库时,会出现超时,或者等半天打开了说数据库没有表。并且即便打开了,再进行其他浏览,编辑,sql等操作,页面也是相当慢的,慢等几乎无法忍受。这里慢也就慢在取得表状态的 SHOW TABLE STATUS 语句。SHOW TABLE STATUS 返回表的名字,类型,列数,大小,时间等相关信息。这些信息不要也罢。下面着手改以下两个地方就可以了。

以 phpMyAdmin 3.1.2 为例(不同版本可能会有差异):

打开 libraries/Table.class.php
查找

PHP代码
  1. if (! isset(PMA_Table::$cache[$db][$table][$info]) || $force_read) {   

可以看到

PHP代码
  1. if (! isset(PMA_Table::$cache[$db][$table][$info]) || $force_read) {   
  2.             PMA_Table::$cache[$db][$table] = PMA_DBI_fetch_single_row('SHOW TABLE...

查看原文评论 (11) | 浏览 (98950)


使用$_REQUEST 要留意的地方

作者: 我不是鱼 (2010-02-26 10:02)分类: PHP   标签: $_REQUEST 键值相同  

做大相册接口的时候,要传递图片的host过来,程序这边用 $_REQUEST['host'] 获得。在浏览器测试了一下,发现得到的并非是url参数传过来的host。测试发现时cookie存在键为host的值,才醒起是cookie中的host覆盖了get中的host。

$_REQUEST 包含 GET/POST/Cookie 。在键值相同时默认是 POST覆盖GET,COOKIE覆盖POST或GET。

这个默认的顺序也可以改,在 php.ini 中查找variables_order,会看到类似

variables_order = "EGPCS"

这就是php注册变量的顺序,E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SERVER。在register_globals为on时,新的值会覆盖之前的值。例如在register_globals为on时,可以直接用$key代替$_GET['key']。同样这个顺序的gpc也作用在$_REQUEST中。

如果你禁止了 register_globals,但又想用到一些全局变量,可以用 extract...

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


foreach 使用&引用赋值要注意的问题

作者: 我不是鱼 (2010-01-19 16:25)分类: PHP   标签: foreach 引用  

foreach 通过在 $value 之前加上 & 很容易就能修改数组的单元,如:

PHP代码
  1. foreach($arr as &$value){   
  2.  $value .= '4';   
  3. }  

但这个用法也很容易造成错误,而且也不容易找。
看例子更直截了当:

PHP代码
  1. <?php   
  2. $arr = array('a','b','c');   
  3. $arr2 = array('d''e''f');   
  4.   
  5. foreach($arr as &$value){//习惯用$value或$val   
  6.  $value .= '4';   
  7. }   
  8.   
  9. //都处理完毕我们在页面模版输出,首先输出$arr2   
  10. foreach($arr2 as $value){//习惯用$value或$val   
  11.  //echo $value;   
  12. }   
  13. //然后再这样输出 $arr;   
  14. foreach($arr as $value){//习惯用$value或$val   
  15.  echo $value"\n";   
  16. }   
  17. ?>  

大家看看输出的结果是否和期望的一...

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


再说php大整数问题

作者: 我不是鱼 (2009-12-29 13:37)分类: PHP   标签: php 大整数  

之前有说过大整数问题。http://www.phpfans.net/blog/2/article/33.html
在工作中又遇到了这个问题。

做相册时,falsh为了区分上传相片,传递一个微妙为单位的时间戳过去给php。参考相册视频的程序,将这个时间戳intval一个。不intval倒没问题,intval问题就来了:

时间戳类似于下面的id

PHP代码
  1. <?php    
  2. $id = '1259916810671';   
  3. $id2 = '1261993839812';   
  4. var_dump(intval($id));   
  5. var_dump(intval($id2));   
  6. ?>  


在 PHP 5.2.0 中输出结果是:(不同版本会有差异)

int(2147483647)
int(2147483647)

都是同一整数,所以后面在上传的相片用这个id去取的时候都是返回第一张。
又是超出了php integer 的范围。

还有就是,相册的相片是保存在100个表中,用通过用户id(之前的相册程序用户id是用整数而不是现在我们用的user_id)求模100得出。由于注册量比较多,用户id也是相当大

以下的程...

查看原文评论 (4) | 浏览 (9690)


phpMyAdmin查看latin1编码的表中文显示乱码的问题

作者: 我不是鱼 (2009-12-12 22:14)分类: PHP   标签: phpMyAdmin 中文乱码 mysql乱码  

mysql表默认是用latin1编码。像phpbb那样,虽然表是latin1编码,但内容一般都是gb2312编码插入的。直接在phpmyadmin上 语言:中文 - Chinese simplified 下查看是乱码

看起来乱码倒也没什么,有时想直接在上面修改一下就麻烦了。不知有无其他更好的方法,这里通过修改一下配置便可以正常显示
以 phpMyAdmin - 2.11.9.5 版本为例
打开 libraries/select_lang.lib.php 查找 PMA_langList() 可以看到返回一个数组,而数组中编码后面都紧接着utf-8。无论哪种编码,phpmyadmin在输出内容到页面时都是用 utf-8编码。现在要增加一个gb2312的编码,在数组最后加上

'zh-gb2312-utf-8' => array('zh|chinese simplified latin1', 'chinese_simplified-gb2312', 'zh', '中文'),

然后将gb2312输出对应的mysql字符集改成 latin1,查找 $GLOBALS['mysql_charset_map...

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


PHP大整数输出成科学计数法问题

作者: 我不是鱼 (2009-10-30 14:15)分类: PHP   标签: 大整数 科学计数法  

有个硕大的整数,如

PHP代码
  1. <?php   
  2. $a = 2749826833580000000;   
  3. echo $a;   
  4. ?>   

输出的时候是一个浮点数的科学计数法。 2.74982683358E+18 (不同机器,不同操作系统会有差异)
想要按原形输出 2749826833580000000 。即便

PHP代码
  1. <?php   
  2. $a = 2749826833580000000;   
  3. echo ''.$a;   
  4. echo strval($a);   
  5. ?>   

也无济于事。用 strlen 返回的也是科学计数法的长度。可以这样输出

PHP代码
  1. < ?php   
  2. $a = 2749826833580000000;   
  3. echo sprintf("%.0f"$a);   
  4. ?>  
也有一个 number_format 的函数可用,不过每3位用逗号隔开。

查看原文评论 (4) | 浏览 (21581)


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)


博主


« 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
  • 浏览次数: 3236430

友情链接