免费注册 查看新帖 |

Chinaunix

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

php如何得到可用内存 [复制链接]

论坛徽章:
0
发表于 2008-09-19 16:20 |显示全部楼层
10可用积分
求教:如果php.ini设置memory_limit=8m
运行某php文件会消耗掉一部分内存,如何得到这个值而确保我能使用剩下的8*1024-x 的内存而不报Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes). 这样的错误

或者说,我怎样做才能保证不出Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes).
谢谢了

最佳答案

查看完整内容

方法一 :中就是 修改 memory_limit 把值修改的特别大,或者直接设置成 -1 php就不会对内存试用限制了!!!方法二: 就是用memory_get_usage() 函数查看当前还有多少内存能用,然后和你要用的内存比较一下。就是避免出现内存不够。

论坛徽章:
0
发表于 2008-09-19 16:20 |显示全部楼层

我有两个方法提供给你试试

方法一 :中就是 修改 memory_limit  把值修改的特别大,或者直接设置成 -1 php就不会对内存试用限制了!!!
方法二: 就是用memory_get_usage()  函数查看当前还有多少内存能用,然后和你要用的内存比较一下。就是避免出现内存不够。

论坛徽章:
0
发表于 2008-09-19 17:01 |显示全部楼层
就算内存够你用,时间上也会超时的
没关注过怎么用PHP查看内存

论坛徽章:
0
发表于 2008-09-19 17:06 |显示全部楼层
原帖由 hiler 于 2008-9-19 17:01 发表
就算内存够你用,时间上也会超时的
没关注过怎么用PHP查看内存


我晕一码归一码他的问题是内存,你怎么说超时啊,超时你设置set_time_limit 啊!!

论坛徽章:
0
发表于 2008-09-19 17:09 |显示全部楼层
原帖由 shitou254 于 2008-9-19 16:51 发表
方法一 :中就是 修改 memory_limit  把值修改的特别大,或者直接设置成 -1 php就不会对内存试用限制了!!!
方法二: 就是用memory_get_usage()  函数查看当前还有多少内存能用,然后和你要用的内存比较一下 ...

非常感谢哥们的回答,方法1对于虚拟主机的设置可能有困难,方法2其实我考虑过,但是有2个问题现在可能还要考虑,1是memory_get_useage版本限制,2是如果缺省编译php的时候该方法无法使用.
不过还是很感谢你的回答,如果没其他人回答,分就给你了,呵呵,不能让费了脑细胞的筒子们失望啊

论坛徽章:
0
发表于 2008-09-19 17:23 |显示全部楼层
如果用的是虚拟主机那就没办法了,限制太多了!!

论坛徽章:
0
发表于 2008-09-19 17:44 |显示全部楼层
  1. if( !function_exists('memory_get_usage') ) {
  2.         function memory_get_usage() {

  3.   if ( substr( PHP_OS, 0, 3 ) == 'WIN' ) {
  4.                                 $output = array();
  5.                                 exec( 'tasklist /FI "PID eq ' . getmypid() . '" /FO LIST', $output );

  6.                                 return preg_replace( '/[\D]/', '', $output[5] ) * 1024;
  7.                         }
  8.                 } else {


  9.   $pid = getmypid();

  10. exec("ps -eo%mem,rss,pid | grep $pid", $output); // Comment this line for MAC OS X 10.4 (Intel)
  11.                         $output = explode("  ", $output[0]);


  12. return $output[1] * 1024;
  13.                 }
  14.         }
  15. }
复制代码

我用这个的时候和用系统自带的 返回值不太一样
另外我还不确定用得到系统进程使用的内存是否合适,我需要的是允许php程序使用的内存大小限制,就是php程序中 $x 这个变量能用的多大的内存

论坛徽章:
0
发表于 2008-09-19 17:51 |显示全部楼层
exec( 'tasklist /FI "PID eq ' . getmypid() . '" /FO LIST', $output );

我觉得getmypid 函数要是用浏览器打开 返回的肯定是 apache的pid 只有你用 cmd 执行 的时候才能返回php的pid 所以 我觉得 那样写肯定不对!不知道你觉得是否有道理

[ 本帖最后由 shitou254 于 2008-9-19 17:59 编辑 ]

论坛徽章:
0
发表于 2008-09-19 18:09 |显示全部楼层
getmypid是得到php的进程id,根据他得到的进程信息应该是php这个进程用的内存,这个值可能是50m ,而我需要php程序中某变量能用的最大内存,诶,头疼

论坛徽章:
0
发表于 2008-09-19 18:11 |显示全部楼层
原帖由 lgmyxbjfu 于 2008-9-19 18:09 发表
getmypid是得到php的进程id,根据他得到的进程信息应该是php这个进程用的内存,这个值可能是50m ,而我需要php程序中某变量能用的最大内存,诶,头疼


我在本地试了返回的确实是 apche的 http的pid  apche 在运行的时候 php是没有独立的pid的吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP