【发布时间】: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