【问题标题】:No closure support in PHP 5.3.2-1ubuntu4.2PHP 5.3.2-1ubuntu4.2 不支持闭包
【发布时间】:2011-03-27 06:59:58
【问题描述】:

我刚刚意识到有些 PHP 不能在一台服务器上正确执行,但在另一台服务器上却可以。

他们都运行带有 PHP PHP 5.3.2 的 Ubuntu 10.04(带有 Suhosin-Patch (cli) 的 PHP 5.3.2-1ubuntu4.2(构建时间:2010 年 5 月 13 日 20:03:45))

我正在测试:

$f = function() {};

var_dump($f);
die();

在工作的服务器上,结果是:

对象(闭包)#1 (0) { }

如果没有,结果是:

未知:0

我错过了什么?

[编辑]

在同一个文件中有 2 个闭包似乎存在问题:

<?php
$f = function() {};
$f2 = function() {};

var_dump($f);
var_dump($f2);
die();

输出:

未知:0
对象(闭包)#1 (0) {}

【问题讨论】:

  • 你确定另一个是 running 5.3 吗?它可以安装,但运行的是旧版本?尝试运行phpinfo(); 以确保它们之间的相关设置都相同(虽然我不确定设置是否与此问题有关,但它会验证安装的版本)。
  • 您有更多关于两种设置的差异的信息吗?
  • 你能把error_reporting设置成E_ALL | E_STRICT吗?也许某些错误正在被静默抑制...?
  • 如果 PHP 版本有问题,那么在第二个示例中,输出将是 UNKNOWN 两次;据报道一个变量包含一个闭包对象这一事实让我认为该脚本确实使用的是 PHP 5.3。

标签: php php-closures


【解决方案1】:

在更多的谷歌搜索和 ircmaxell 在 phpinfo 上的提示之后,我得到了关于 eaccelerator 的提示。

正确运行代码的服务器正在运行 eaccelerator 0.9.6.1,而不能正常运行的是 0.9.6。

从源代码编译了新版本,它解决了我的问题。

谢谢!

【讨论】:

  • 如果你看到UNKNOWN:0 这通常意味着内存损坏。
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 2021-01-03
  • 2014-09-17
  • 1970-01-01
  • 2013-06-16
  • 2011-08-09
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多