【问题标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes)允许的内存大小 134217728 字节用尽(尝试分配 24 字节)
【发布时间】:2017-07-23 06:53:48
【问题描述】:

我正在尝试使用 PHP 脚本创建 Java 文件,但由于某种原因,每当我运行此脚本时,屏幕上都会出现以下错误:

致命错误:在 C:\filepath\file.php88 中已用尽 134217728 字节的允许内存(尝试分配 24 字节)强>

这是第 88 行的代码块:

$var1 = explode(".", $filenamee);
$var2 = explode(".", $folder);

$filename = "extfiles/".$var2[0]."/".$var1[0].".java";
$file = fopen($filename, "c");
$lines_array = array();
while (!feof($file)) {


    $line = fgets($file);
    array_push($lines_array, $line); // This is line 88

}

我尝试将 php.ini 中的内存限制从 128MB 更改为 512MB,但没有成功。我还尝试使用以下方法设置代码的内存限制:

ini_set('memory_limit', '512MB');

但这也没有用。

我能做些什么来解决这个问题?

【问题讨论】:

  • 为什么你使用 'c' 作为 fopen 的模式,它是用于写入和读取之后的文件。你还说你想创建文件,但在代码中看起来你已经阅读了代码。
  • 我需要做的是创建一个Java文件,然后在其中添加一些代码。用什么参数代替“c”?
  • 使用 c 它会创建代码,但是您对循环的期望是什么?您从刚刚创建的文件中循环读取行。
  • 所以要删除循环?
  • 我不知道你想做什么 =) 可能是你需要在循环中编写一些代码到 java 文件。然后关闭文件。

标签: php memory-management programmatically-created array-push


【解决方案1】:

试试这个:

ini_set('memory_limit', '512M');

【讨论】:

    【解决方案2】:

    请阅读documentation

    警告

    如果传递的文件指针无效,您可能会出现无限循环, 因为 feof() 无法返回 TRUE。

    确保您的文件指针有效,并为模式传递“r”(= 读取)。

    【讨论】:

    • 但是文件不存在,应该创建文件
    • 那么你想做什么?如果您调用fgets,您正在尝试从文件中读取。如果文件是由fopen 创建的,你希望从文件中读取什么?
    【解决方案3】:

    我必须开始我的 Drupal 7 项目,并且我已更改为 sites/default/settings.php 文件,包括底部两行,请查看下面

    ini_set('memory_limit', '-1'); // unlimited memory limit
    ini_set('max_execution_time', 3000);
    

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 2013-08-09
      • 2021-12-29
      • 2018-02-23
      • 2014-11-20
      • 2017-10-30
      • 1970-01-01
      • 2015-03-08
      • 2017-08-11
      相关资源
      最近更新 更多