访问php时提示内存位置访问无效的解决办法和思路分析

我们就需要找到是哪一个DLL文件加载出现了问题。排查方法是:

将php.ini中 display_startup_errors = Off 改为display_startup_errors = On 。
这是访问php页面,服务器上会弹出php错误的提示对话框,你就可以明确看到是哪一个dll文件加载失败,有时会有多个dll文件加载失败,需要你先分号(;)注释掉php.ini中提示那个dll后继续访问如此反复排查。
把出问题的dll都用分号(;)注释掉后,php就可以正常运行了。

如果加载失败的dll是你必须使用的扩展库文件,那么就要从版本是否对应、文件是否齐全、文件是否已损坏等等方面去排查加载失败的原因了。不同的扩展具有不同的情况,这里就无法一一罗列了,记住:搜索引擎是你最好的帮手,针对单个dll去搜索解决的方法吧。

另外:新版本的Windows版本PHP,在出现错误时,会将详细的错误信息自动存储到Windows系统的TEMP临时目录,文件名为:php-errors.log。在Windows2003系统中路径一般是:C:\WINDOWS\Temp\php-errors.log。用记事本打开这个文件,就可以看到详细的php错误记录了。

此处往下是从网上转载的内容:

客户一个PHP网站每天早上都访问不了,提示“内存位置访问无效”,重启IIS无效,要重启服务器才能暂时正常,过一会儿又是出现这个“内存位置访问无效”的提示。
到百度上搜索了一下,找到解决方法,在此记录一下:
打开c:\windows\php.ini文件,搜索下面的字段
extension=php_exif.dll
找到后在前面加一个;分号注释掉
如下:
;extension=php_exif.dll
保存重启iis再访问一下php文件看看能否打开了,没有出现内存位置访问无效了。

以上操作实际上是把php_exif.dll组件禁用了。如果一定要用到这个组件可以试试下面这个方法:
一、将IIS的错误显示打开,未发现错误原因
二、检查IIS扩展,ISAPI、php.ini与Mysql配置以及相应的安装目录ACLs权限,均无误。
三、回收IIS进程,错误仍然出现”内存位置访问无效”….
四、将php.ini中 display_startup_errors = On 打开,问题所在终于发现了… (注:如果将php.ini的display_startup_errors打开,如果php有错误出理,就会提示,而且 在事件查看器中有记录。如果设置为display_startup_errors = Off,则不会有任何提示)
五、Warning Cannot load module ‘SQLite' because required module ‘pdo' is no loaded
六、根据以上错误提示,解决办法就很简单了,因为加载php_sqlite.dll时未加载到php_pdo.dll文件,所以运行phpinfo()函数时提示内存 位置访问无效。
找到php.ini配置文件,然后去掉”;extension=php_pdo.dll”前面的分号,extension=php_sqlite.dll
然后再回收一下IIS应用程序池进程,问题彻底解决….

(0)

相关推荐

  • php出现内存位置访问无效错误问题解决方法

    配置环境如下: Win2003SP2+IIS6+php5.26+mysql5.0.51a+zend3.3a+PhpMyAdmin2.11.7.1 PHP执行方式:isapi.Mysql为手动安装. 关于"内存位置访问无效"的 错误解决办法与步骤:(一些部份无效的调试步骤略过..) 一.将IIS的错误显示打开,未发现错误原因! 二.检查IIS扩展,ISAPI.php.ini与Mysql配置以及相应的安装目录ACLs权限,均无误. 三.回收IIS进程,错误仍然出现"内存位置访问无

  • php实现读取内存顺序号

    只是做记录,osc本站应该有重复的 semWrapper.class.php /* * 信号量(Semaphore). * 这是一个包装类,用于解决不同平台下对"信号量"的不同实现方式. * 目前这个类只是象征性的,在 Windows 平台下实际是空跑(并没有真的实现互斥). */ class SemWrapper { private $hasSemSupport; private $sem; const SEM_KEY = 1; public function __construct

  • 解析PHP中的unset究竟会不会释放内存

    首先让我们看一个例子 复制代码 代码如下: var_dump(memory_get_usage());    $a = "laruence";    var_dump(memory_get_usage());    unset($a);    var_dump(memory_get_usage()); 输出(在我的个人电脑上, 可能会因为系统,PHP版本,载入的扩展不同而不同):    int(90440)    int(90640)    int(90472 注意到 90472-90

  • PHP数组内存耗用太多问题的解决方法

    因为这个是语言的问题,常规方案比较难以解决.下面是一种通过string 解决的方案. 复制代码 代码如下: $total = 100000; $double = ""; for ($i = 0; $i < $total; $i++) { $double .= pack("d", $i + 0.1); } for ($i = 0; $i < $total; $i++) { unpack("@" . ($i * 8) . "/d

  • 采用PHP函数memory_get_usage获取PHP内存清耗量的方法

    一,函数原型 int memory_get_usage ([ bool $real_usage = false ] ) 二,版本兼容 PHP 4 >= 4.3.2, PHP 5 三,基础用法与实例 1,获取当前的内存消耗量 复制代码 代码如下: <?php echo memory_get_usage(); $var = str_repeat("liuhui", 10000); echo memory_get_usage(); unset($var); echo memory

  • php查询mysql大量数据造成内存不足的解决方法

    本文实例分析了php查询mysql大量数据造成内存不足的解决方法.分享给大家供大家参考.具体分析如下: 一.问题 使用php查询mysql大数据量的时候,程序尚未执行完毕,跳出警告: Fatal error:  Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes) 错误提示:php所分配到的100M内存被占用完毕. 二.解决方法: 最简单的解决办法是:在执行文件的头部增加: ini_set('

  • PHP 内存缓存加速功能memcached安装与用法

    一.memcached 简介在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高效.快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序.二.memcached 安装首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz.除此之外,memcached 用到了 libevent,我下载的

  • PHP脚本内存泄露导致Apache频繁宕机解决方法

    在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境,服务器并发和压力都很小. 查看apache错误日志,报大量类似错误: 复制代码 代码如下: [Tue Feb 14 14:49:28 2012] [warn] child process 7751 still did not exit, sending a SIGTERM [Tue Feb 14 14:49:30 2012] [error] child p

  • PHP内存使用情况如何获取

    PHP内置函数memory_get_usage()能返回当前分配给PHP脚本的内存量,单位是字节(byte).在WEB实际开发中,这些函数非常有用,我们可以使用它来调试PHP代码性能. memory_get_usage()函数返回内存使用量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况.但有一点请注意,在这些函数需要在Linux上运行. 下面我们来看一个实例: echo '开始内存:'.memory_get_usage(), '';

  • 解决PHP里大量数据循环时内存耗尽的方法

    最近在开发一个PHP程序的时候遇到如下一问题: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的最大内存已经耗尽.遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据.可想而知,4万条数据全部加载到内存中,内存不爆才怪. 毕竟编程这

  • PHP中使用unset销毁变量并内存释放问题

    复制代码 代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage(); unset($str); $b = memory_get_usage(); echo "\n ".$i.': '.($b - $a).' Bytes.'; } 从结果看出: 8 x 32 = 256 在256字节长的时候才真正有必要释放内存,有些人说,不如直接$str = n

  • phpExcel导出大量数据出现内存溢出错误的解决方法

    phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码 代码如下: PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中 复制代码 代码如下: PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzip压缩,然后保存在内存中 复制代码 代码如下: PHPEx

  • php统计时间和内存使用情况示例分享

    复制代码 代码如下: /** * 记录和统计时间(微秒)和内存使用情况 * 使用方法: * <code> * G('begin'); // 记录开始标记位 * // ... 区间运行代码 * G('end'); // 记录结束标签位 * echo G('begin','end',6); // 统计区间运行时间 精确到小数后6位 * echo G('begin','end','m'); // 统计区间内存使用情况 * 如果end标记位没有定义,则会自动以当前作为标记位 * 其中统计内存使用需要

  • 关于PHP内存溢出问题的解决方法

    一.内存溢出解决方案在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案.还是用例子来说明这个问题,如下:假定日志中存放的记录数为500000条,那么解决方案如下: 复制代码 代码如下: ini_set('memory_limit','64M'); //重置php可以使用的内存大小为64M,一般在远程主机上是不能修改php.ini文件的,只能通过程序设置.注:在safe_mode(安全模式)下,ini_set失效set_time_limit(600);//设置超时限

  • 解析PHP中的内存管理,PHP动态分配和释放内存

    摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够编写例如"char *str = "hello world ";&qu

  • PHP通过内置函数memory_get_usage()获取内存使用情况

    PHP内置函数memory_get_usage()能返回当前分配给PHP脚本的内存量,单位是字节(byte).在WEB实际开发中,这些函数非常有用,我们可以使用它来调试PHP代码性能. memory_get_usage()函数返回内存使用量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况.但有一点请注意,在这些函数需要在Linux上运行. 下面我们来看一个实例: 复制代码 代码如下: echo '开始内存:'.memory_get_u

随机推荐