最后,我能够通过以下两行来重现这个问题:
session_set_save_handler(new SessionHandler());
session_start();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了一个WSOD!知道为什么会这样吗?
================================================== ==========
最后,我深入挖掘并将其缩小到由于失败导致的问题session_start(); 不过,我不知道为什么会失败.
所以,问题归结为:当session_start()调用时NativeSessionStorage::start(),它失败了.但是,当我创建一个样本测试页面时,session_start()它就成功了!
Silex有什么不同的做法吗?!
我保留下面的文字,以便任何面临类似问题的人都能理解失败背后的原因.
================================================== ==========
我最近尝试从Php 5.3切换到Php 5.4,我的网站基于Silex停止了与WSOD的合作.
我检查了PHP错误日志,我看到:
Premature end of script headers: php54.cgi
我尝试了很多东西,最后想到在线询问:(.这是我试过的:
在Silex初始化之前添加代码并app[debug] = true在之后设置:
ini_set('display_errors', 1);
error_reporting(-1);
ErrorHandler::register();
if ('cli' !== php_sapi_name()) {
ExceptionHandler::register();
}
Run Code Online (Sandbox Code Playgroud)试图检查代码的程度.但是我继续踩着.我走了直到NativeSessionStorage::start()放弃了,所以它一直工作到那时我在那里产生的任何错误都按预期正确报告.
尝试查看其他条目以了解如何修复BSOD,但是没有一个真正解释过如何通过从PHP 5.3迁移到PHP 5.4来改变事情!这就是我所做的一切.刚刚更改了PHP版本和PHP.INI.下面是我现在使用的PHP.INI.
; |PIG v0.3.2.1|
[PHP]
open_basedir =
engine = 1
zend.ze1_compatibility_mode =
short_open_tag = 1
asp_tags =
precision = 14
y2k_compliance = 1
output_buffering = …Run Code Online (Sandbox Code Playgroud)为什么以下代码中的两种类型的调用方法之间存在差异:
class Access
def method_missing name
print "Method is missing"
end
protected
def protected_method
print "Calling Protected Method"
end
end
access = Access.new
access.protected_method #Method is missing
access.send(:protected_method) #Calling Protected Method
Run Code Online (Sandbox Code Playgroud)
在access.protected_method按预期工作.但该send选项尝试调用该方法,即使它受到保护.我想知道内部发生了什么.
我得到一个要调用的方法的字符串,所以我想使用,send但我不想调用受保护的方法.