PHP 5.3.3 中的 ini_set("memory_limit") 根本不起作用

发布于 2024-10-18 14:15:58 字数 405 浏览 5 评论 0 原文

我之前有过这样的工作:

echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";

这将输入:

32M
256M

在由命令行执行的 php 脚本上。 我从 5.2 更新到 5.3,从现在开始,这个指令根本不起作用:这给了我:

32M
32M

然后让我的脚本因致命错误而失败...

我检查了 php 文档,并用 google 搜索了它,我没有'找不到“memory_limit”已被弃用的任何地方。

有人有解决办法吗?

I had this working before :

echo ini_get("memory_limit")."\n";
ini_set("memory_limit","256M");
echo ini_get("memory_limit")."\n";

That would input this :

32M
256M

on a php script executed by command line.
I updated from 5.2 to 5.3, and from now, this directive is not working at all : this gives me :

32M
32M

and then make my script fail with a fatal Error...

I checked the php documentation, and googled it, and I didn't find anywhere that "memory_limit" had been deprecated.

Does anyone have a solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

猫九 2024-10-25 14:15:59

Ubuntu 10.04 仅附带 Suhosin 补丁,它不提供配置选项。但是你可以安装 php5-suhosin 来解决这个问题:

apt-get update
apt-get install php5-suhosin

现在你可以编辑 /etc/php5/conf.d/suhosin.ini 并设置:

suhosin.memory_limit = 1G

然后使用 ini_set 将在脚本中工作:

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

Ubuntu 10.04 comes with the Suhosin patch only, which does not give you configuration options. But you can install php5-suhosin to solve this:

apt-get update
apt-get install php5-suhosin

Now you can edit /etc/php5/conf.d/suhosin.ini and set:

suhosin.memory_limit = 1G

Then using ini_set will work in a script:

ini_set('memory_limit', '256M');
鹿! 2024-10-25 14:15:59

让我们用 2 个示例进行测试:

    <?php    
    $memory = (int)ini_get("memory_limit"); // Display your current value in php.ini (for example: 64M)
    echo "original memory: ".$memory."<br>";
    ini_set('memory_limit','128M'); // Try to override the memory limit for this script
    echo "new memory:".$memory;
    }
    // Will display:
    // original memory: 64
    // new memory: 64
    ?>

上面的示例不适用于覆盖 memory_limit 值。
但这是可行的:

    <?php
    $memory = (int)ini_get("memory_limit"); // get the current value
    ini_set('memory_limit','128'); // override the value
    echo "original memory: ".$memory."<br>"; // echo the original value
    $new_memory = (int)ini_get("memory_limit"); // get the new value
    echo "new memory: ".$new_memory;  // echo the new value
    // Will display:
    // original memory: 64
    // new memory: 128
    ?>

您必须将 ini_set('memory_limit','128M'); 放在文件顶部至少在任何回显之前

对于我来说, suhosin 不是解决方案,因为它甚至没有出现在我的 phpinfo() 中,但这有效:

    <?php
    ini_set('memory_limit','2048M'); // set at the top of the file
    (...)
    ?>

Let's do a test with 2 examples:

    <?php    
    $memory = (int)ini_get("memory_limit"); // Display your current value in php.ini (for example: 64M)
    echo "original memory: ".$memory."<br>";
    ini_set('memory_limit','128M'); // Try to override the memory limit for this script
    echo "new memory:".$memory;
    }
    // Will display:
    // original memory: 64
    // new memory: 64
    ?>

The above example doesn't work for overriding the memory_limit value.
But This will work:

    <?php
    $memory = (int)ini_get("memory_limit"); // get the current value
    ini_set('memory_limit','128'); // override the value
    echo "original memory: ".$memory."<br>"; // echo the original value
    $new_memory = (int)ini_get("memory_limit"); // get the new value
    echo "new memory: ".$new_memory;  // echo the new value
    // Will display:
    // original memory: 64
    // new memory: 128
    ?>

You have to place the ini_set('memory_limit','128M'); at the top of the file or at least before any echo.

As for me, suhosin wasn't the solution because it doesn't even appear in my phpinfo(), but this worked:

    <?php
    ini_set('memory_limit','2048M'); // set at the top of the file
    (...)
    ?>
不一样的天空 2024-10-25 14:15:58

以下是值得检查的事项列表:

是否安装了 Suhosin?

ini_set

  • 格式很重要
    <代码>
    ini_set('内存限制'​​, '512'); // 没用
    ini_set('内存限制'​​, '512MB'); // 没用
    ini_set('内存限制'​​, '512M'); // 好的 - 512MB
    ini_set('内存限制'​​, 512000000); // 好的 - 512MB

当使用整数时,该值以字节为单位。速记
常见问题解答中所述的表示法,也可能是使用过。

http://php.net/manual/en/ini.core .php#ini.memory-limit

  • php_admin_value 是否已在 .htaccess 或虚拟主机文件中使用?

设置指定指令的值。这不能用于
.htaccess 文件。任何使用 php_admin_value 设置的指令类型都不能
被 .htaccess 或 ini_set() 覆盖。清除之前设置的
value 使用 none 作为值。

http://php.net/manual/en/configuration.changes.php

Here's a list of things that are worth checking:

Is Suhosin installed?

ini_set

  • The format is important

    ini_set('memory_limit', '512'); // DIDN'T WORK
    ini_set('memory_limit', '512MB'); // DIDN'T WORK
    ini_set('memory_limit', '512M'); // OK - 512MB
    ini_set('memory_limit', 512000000); // OK - 512MB

When an integer is used, the value is measured in bytes. Shorthand
notation, as described in this FAQ, may also be used.

http://php.net/manual/en/ini.core.php#ini.memory-limit

  • Has php_admin_value been used in .htaccess or virtualhost files?

Sets the value of the specified directive. This can not be used in
.htaccess files. Any directive type set with php_admin_value can not
be overridden by .htaccess or ini_set(). To clear a previously set
value use none as the value.

http://php.net/manual/en/configuration.changes.php

眼睛会笑 2024-10-25 14:15:58

很可能您的 suhosin 已更新,这将 suhosin.memory_limit 的默认值从禁用更改为 0(这将不允许对 memory_limit 进行任何更新)。

在 Debian 上,更改 /etc/php5/conf.d/suhosin.ini

;suhosin.memory_limit = 0

suhosin.memory_limit = 2G

或您喜欢的任何值。您可以在 http://www.hardened-php.net/hphp/changelog.html,其中写着:

改变了memory_limit保护的实现方式

Most likely your sushosin updated, which changed the default of suhosin.memory_limit from disabled to 0 (which won't allow any updates to memory_limit).

On Debian, change /etc/php5/conf.d/suhosin.ini

;suhosin.memory_limit = 0

to

suhosin.memory_limit = 2G

Or whichever value you are comfortable with. You can find the changelog of Sushosin at http://www.hardened-php.net/hphp/changelog.html, which says:

Changed the way the memory_limit protection is implemented

洋洋洒洒 2024-10-25 14:15:58

如果您启用了 suhosin 扩展,它可以防止脚本将内存限制设置为超出其启动值或某个定义的上限。

http://www.hardened-php.net/suhosin/configuration.html #suhosin.memory_limit

If you have the suhosin extension enabled, it can prevent scripts from setting the memory limit beyond what it started with or some defined cap.

http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

装迷糊 2024-10-25 14:15:58

对我有用,与 PHP 5.3 无关。就像许多此类选项一样,当启用 safe_mode 时,它​​不能通过 ini_set() 覆盖。检查更新的 php.ini (更好的是:也更改那里的内存限制)。

Works for me, has nothing to do with PHP 5.3. Just like many such options it cannot be overriden via ini_set() when safe_mode is enabled. Check your updated php.ini (and better yet: change the memory_limit there too).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文