訪問php時提示內存位置訪問無效的解決辦法和思路分析
2024-09-10 00:05:07
供稿:網友
我們就需要找到是哪一個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應用程序池進程,問題徹底解決….