本文概述

一个非常简单的事实解释了在PHP中执行脚本期间基于VirtualAlloc和VirtualFree方法的错误, PHP没有足够的可用内存来执行它, 这就是抛出异常的原因, 你也会发现PHP致命错误消息”内存不足(已分配xxxxxx)(试图分配xxxx字节)”。例如, 最近使用最新版本的Composer尝试使用composer update指令更新软件包时, 会引发这种异常:

Loading composer repositories with package information

Updating dependencies (including require-dev)

VirtualAlloc() failed: [0x00000008] Not enough memory resources are available to process this command.

VirtualFree() failed: [0x000001e7] Attempt to access invalid address.

VirtualAlloc() failed: [0x00000008] Not enough memory resources are available to process this command.

VirtualFree() failed: [0x000001e7] Attempt to access invalid address.

PHP Fatal error: Out of memory (allocated 1512046592) (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220

Fatal error: Out of memory (allocated 1512046592) (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/Solver.php on line 220

有了先前的确认, 你可能正在考虑, 如果我的设备上的RAM超过8GB, 怎么办?好吧, 不幸的是, 问题并不总是相同的, 因此根据你的情况, 解决方案可能会明显不同。

A.解决方案:增加PHP最大内存限制

你需要知道的第一件事是PHP发行版的当前内存限制。你可以通过运行以下命令的CLI快速了解这一点:

php -r "echo ini_get('memory_limit');"

在我们的情况下, 在不修改我们发行版的php.ini文件的情况下, 此命令在控制台中输出128M。当前这是某些PHP脚本可以运行的限制, 而作曲家基本上就是错误, 因此你将需要在提到的PHP配置文件(php.ini)中增加此限制。你可以通过以下命令知道哪个ini文件用于PHP的CLI版本:

php --ini

在Windows中, 这将输出:

Configuration File (php.ini) Path: C:\Windows

Loaded Configuration File: C:\xampp72\php\php.ini

Scan for additional .ini files in: (none)

Additional .ini files parsed: (none)

因此, 使用你喜欢的文本编辑器打开php.ini文件, 并使用相当大的值(例如512M或1G)修改memory_limit属性的数量:

; Maximum amount of memory a script may consume (128MB)

; http://php.net/memory-limit

memory_limit=512M

当然, 数量会根据脚本的性能而变化, 因此你可能需要对其进行测试并根据需要进行更改。保存文件, 重新启动apache并再次测试脚本(如果使用的是composer, 请运行命令直至其生效)。如果它不起作用, 并且你遇到相同的异常, 请进一步增加该值, 直到它起作用为止(除非你安装了32位PHP, 该PHP的数量独立于其可用性, 其最大值为2G)。

如果你的值不起作用并且你使用的是64位PHP发行版, 请检查Monkeypatch解决方案, 该解决方案为PHP脚本定义了对RAM的无限使用(在生产环境中绝对不建议这样做, 但在开发环境中有助于了解问题所在)。

对Windows XAMPP用户或32位PHP发行版的重要警告

不幸的是, 如果在使用XAMPP时在运行某些脚本或作曲家时遇到此异常, 并且2056M的最大内存不足, 并且你仍然看到这些异常, 那么让我告诉你, 你遇到的问题很大将需要优化你的脚本, 或者在可能的情况下, 将其从32位分发转移到64位分发。

此问题基于以下事实:32位加味的发行版(例如众所周知的XAMPP环境仅提供32位体系结构)将不允许你使用更大量的内存, 即使你有16GB的可用RAM, 例如在你的电脑。 32位体系结构将在php.ini中将其限制为更大的值, 使其最大数量为1996MB-2056MB。

xampp用户的最后一个资源提示

如果你正在使用XAMPP的PHP发行版来使用composer, 并且你使用的指令(例如composer更新或composer安装)失败, 则意味着用于处理项目的composer.json的代码需要2GB以上的内存才能执行这将在xampp中失败。在这种情况下, 可怜的解决方案是像Wampp那样更改堆栈。此开发人员堆栈提供了64位版本, 在增加内存限制后不应遇到此问题。

B.快速的猴子补丁解决方案

如果你尝试使用具有不同值的异常尝试上述解决方案, 但这还不够, 则可以尝试为内存限制设置无限值:

警告

你不应该在生产中执行此操作, 因为PHP将具有无限的内存访问权限, 这意味着如果脚本泄漏内存, 则服务器可能无法使用, 直到重新启动为止。仅在开发环境中本地执行此操作, 以测试脚本是否正常工作。

; Maximum amount of memory a script may consume (128MB)

; http://php.net/memory-limit

memory_limit=-1

如果看到此异常时正在使用composer, 则可能要与PHP一起运行指令(composer更新), 并定位composer.phar文件, 例如:

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update

C.下载基于x64的PHP版本

如果没有任何上述解决方案有效, 那么你将需要使用64位的PHP发行版来使用composer更新项目的依赖项。不用担心, 基本上你仍然可以在项目中使用当前的PHP版本, 但是你将在CLI中使用另一个版本来安装/更新依赖项。

访问Windows的PHP:二进制文件和源发布网站, 并下载所需的基于X64的PHP版本。在我们的例子中, 我们将使用64位的PHP 7.2:

将zip内容解压缩到系统的某个目录中。在本例中, 我们将其存储在桌面中:C:\ Users \ sdkca \ Desktop \ php72。在目录中, 你会找到64位PHP的二进制发行版, 但是尚未配置, 如果尝试使用此PHP二进制文件运行composer, 它可能会失败。首先, 复制你将在根目录中找到的php.ini-development文件, 并将副本名称更改为php.ini, 因此二进制文件会将此文件作为默认配置。

在新的php.ini文件(C:\ Users \ sdkca \ Desktop \ php72 \ php.ini)上, 你将需要取消注释extension_dir指令并启用gd2和openssl模块, 否则composer在执行命令期间会引发错误。 :

; Directory in which the loadable extensions (modules) reside.

; http://php.net/extension-dir

; extension_dir = "./"

; On windows:

extension_dir = "ext"

; Uncomment as well the gd2 and openssl extensions to enable them in PHP

extension=gd2

extension=openssl

现在你已经具有此64位PHP版本的基本配置, 现在可以尝试使用以下二进制文件运行composer命令:

"C:\Users\sdkca\Desktop\php72\php.exe" -d memory_limit=-1 "C:/ProgramData/ComposerSetup/bin/composer.phar" update

编码愉快!

php 猴子补丁,如何解决Composer安装/更新错误:VirtualAlloc()失败:[0x00000008]相关推荐

  1. Win10 更新补丁后出现“未安装音频设备” 错误 2021-10-14

    Win10 更新补丁后出现"未安装音频设备" 错误修复方法 日前更新win10补丁后,右下角音频图标出现红色叉叉,提示"未安装音频设备",卸载驱动等方式均无效, ...

  2. macos安装更新错误_如何控制何时安装macOS更新

    macos安装更新错误 Updates are necessary, but annoying. Which is why your Mac, by default, installs them au ...

  3. 解决Win7安装更新补丁提示0x80240037

    Win7安装更新补丁提示0x80240037该怎么办?最近使用Win7系统的用户反应在安装系统补丁的时候出现了0x80240037的错误提示,是怎么回事呢?出现这样的现象一般是由于安装不兼容引起的,针 ...

  4. Windows 7 更新补丁(解决无法安装Axure RP 9)亲测可用

    出现如上问题 我们可以通过微软发布的更新补丁,解决这个问题. 安装: 一.安装windows7补丁(windows10系统跳过该步骤) 根据自己系统位数选择安装.计算机 右击[属性] Windows7 ...

  5. composer 更新php位置,使用composer安装/更新PHP包

    composer是PHP用来管理PHP依赖关系的工具. 安装composer 1 2curl -s https://getcomposer.org/installer | php sudo mv co ...

  6. ubuntu解决软件安装依赖错误

    ubuntu解决软件安装依赖问题 无法用apt-get install package_name 安装软件啦,总是出现依赖错误,导致不安装软件.连基本的aptitude debian包管理软件也不能用 ...

  7. c log 指定服务器,解决 SQL2000安装程序配置服务器失败。参考服务器错误日志和C:\WINDOWS\sqlstp.log方法...

    重新安装SQL Server 2000时错误,提示"参考服务器错误日志和 C:/WINDOWS/sqlstp.log了解更多信息 重装sql经常遇到2个问题 安装好SQL Server 20 ...

  8. 一键脚本解决Windows系统更新错误(0x80070003)

    新建文本,写入以下内容并保存为bat文件 REM 解决系统更新错误(0x80070003) pause net stop "Windows Update" rd /s/q &quo ...

  9. 通过WinPE卸载补丁,解决因安装补丁电脑蓝屏、无法开机等问题

    安装windows安全补丁后,开机修复不成功,或者蓝屏,可以尝试以下解决方案 使用PE里面的dism工具卸载近期安装的补丁 WinPE进入系统以后 进入PE后,点击"开始" > ...

最新文章

  1. 【 MATLAB 】filter 函数介绍(一维数字滤波器)
  2. Openfire 的安装和配置
  3. typec四线焊接图_实物图+电气图纸讲解:教你学会看配电系统图,不收藏,可惜了...
  4. flink on yarn两种提交模式
  5. vue之父子组件通信
  6. 前端学习(1753):前端调试值之网络请求面板的按钮使用说明
  7. bat 脚本清空窗口内容_tomcat9.0启动脚本startup.bat的分析
  8. PHP脚本调用命令获取实时输出
  9. 坊间八卦 | 关于 Oracle 中国区裁员的是是非非
  10. python自定义抛出异常信息_浅谈python抛出异常、自定义异常, 传递异常
  11. 安卓 java 视频_安卓实战项目-动态桌面-rxjava实现搜索本地所有视频
  12. mysql数据库原理
  13. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_4_Object类中wait带参方法和notifyAll方法...
  14. 轻松解决Mac和Windows中Unity汉化问题
  15. linux类mac桌面,让Linux Mint看起来更像Mac桌面的主题
  16. H5页面免费制作工具大集合
  17. 高德地图自定义点标记大小_高德地图 自定义点标记 图标大小
  18. CSS鼠标划过背景渐变效果
  19. Beam Search 简介
  20. 一年成为Emacs高手(像神一样使用编辑器)

热门文章

  1. 深度学习实战1(基本概念、全连接神经网络、CNN)
  2. Excel  VBA批量修改文件名
  3. 苹果cms v10用户搜索什么就入库添加什么php源码实现
  4. 上位机编程工控控件全览,漂亮工控控件
  5. Django - 注册界面实现+页面跳转
  6. 【专题】2022年全球手游市场报告PDF合集分享(附原数据表)
  7. 【信息系统项目管理师】高项知识框架--考点大汇总
  8. 马钢新区今日全面投产了
  9. 【微课制作软件】Focusky教程 | 支持同时打开多个文档并相互复制粘贴
  10. mac更换apple id_如何使用Mac在Apple TV上截屏