最后,我能够用以下两行重现该问题:
session_set_save_handler(new SessionHandler());
session_start();
当我这样做时,我得到一个 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 项目并检查它是否正常工作。不,不是。
在 Silex 初始化之前添加代码并在
app[debug] = true
之后设置:ini_set('display_errors', 1); error_reporting(-1); ErrorHandler::register(); if ('cli' !== php_sapi_name()) { ExceptionHandler::register(); }
试图检查代码的范围。但我一直在继续介入。我一直坚持到
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 = 4096 zlib.output_compression = implicit_flush = unserialize_callback_func = serialize_precision = 100 allow_call_time_pass_reference = safe_mode = ; safe_mode_gid = 1 safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = "PHP_" safe_mode_protected_env_vars = "LD_LIBRARY_PATH" disable_functions = exec,passthru,shell_exec,system,proc_open,popen,show_source disable_classes = highlight.string = "#DD0000" highlight.comment = "#FF9900" highlight.keyword = "#007700" highlight.bg = "#FFFFFF" highlight.default = "#0000BB" highlight.html = "#000000" expose_php = 1 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = 6135 display_errors = 1 display_startup_errors = log_errors = 1 log_errors_max_len = 1024 ignore_repeated_errors = ignore_repeated_source = report_memleaks = 1 track_errors = html_errors = error_log = "/hsphere/local/var/httpd/logs/php54_error.log" variables_order = EGPCS register_globals = 0 ; register_long_arrays = 1 register_argc_argv = 1 auto_globals_jit = 1 post_max_size = 30M ; magic_quotes_gpc = 1 magic_quotes_runtime = magic_quotes_sybase = auto_prepend_file = auto_append_file = default_mimetype = "text/html" always_populate_raw_post_data = 1 ;***** Added by go-pear include_path=".:/hsphere/shared/php54/include/php/PEAR" ;***** doc_root = user_dir = extension_dir = "/hsphere/shared/php54/lib/php/extensions/no-debug-non-zts-20100525/" cgi.fix_pathinfo = 1 file_uploads = 1 upload_tmp_dir = upload_max_filesize = 25M allow_url_fopen = 1 allow_url_include = default_socket_timeout = 60 auto_detect_line_endings = 1 [Syslog] define_syslog_variables = [mail function] sendmail_path = /usr/sbin/sendmail -t -i -fpostmaster@example.com mail.force_extra_parameters = [SQL] sql.safe_mode = [ODBC] odbc.allow_persistent = odbc.check_persistent = 1 odbc.max_persistent = "-1" odbc.max_links = "-1" odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = mysql.max_persistent = "-1" mysql.max_links = "-1" mysql.default_port = 3306 mysql.default_socket = "/var/lib/mysql/mysql.sock" mysql.default_host = localhost mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = [MySQLi] mysqli.max_links = "-1" mysqli.default_port = 3306 mysqli.default_socket = "/var/lib/mysql/mysql.sock" mysqli.default_host = localhost mysqli.default_user = mysqli.default_pw = mysqli.reconnect = [PostgresSQL] pgsql.allow_persistent = pgsql.auto_reset_persistent = pgsql.max_persistent = "-1" pgsql.max_links = "-1" pgsql.ignore_notice = 0 pgsql.log_notice = 0 [dbx] dbx.colnames_case = lowercase [bcmath] bcmath.scale = 0 [Session] session.save_handler = files session.save_path = "${US_ROOTF}/tmp" session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = Off session.bug_compat_warn = Off session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] assert.active = 1 assert.warning = 1 assert.bail = assert.callback = 0 assert.quiet_eval = 0 [Sockets] sockets.use_system_read = 1 [mbstring] mbstring.language = Neutral mbstring.internal_encoding = "EUC-JP" mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = mbstring.detect_order = auto mbstring.substitute_character = mbstring.func_overload = 0 [exif] exif.encode_unicode = "ISO-8859-15" exif.decode_unicode_motorola = "UCS-2BE" exif.decode_unicode_intel = "UCS-2LE" exif.encode_jis = exif.decode_jis_motorola = JIS exif.decode_jis_intel = JIS [soap] soap.wsdl_cache_enabled = 1 soap.wsdl_cache_dir = "/tmp" soap.wsdl_cache_ttl = 86400 [Zend] zend_extension="/hsphere/shared/php54/lib/php/extensions/ZendGuardLoader.so" ; zend_extension_manager.optimizer = "/usr/local/Zend/lib/Optimizer-3.3.3" ; zend_extension_manager.optimizer_ts = "/usr/local/Zend/lib/Optimizer_TS-3.3.3" ; zend_optimizer.version = "3.3.3" ; zend_extension = "/usr/local/Zend/lib/ZendExtensionManager.so" ; zend_extension_ts = "/usr/local/Zend/lib/ZendExtensionManager_TS.so" [suhosin] ; extension = suhosin.so suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = 0 suhosin.executor.include.whitelist = "http://,https://,file://,bfa://" suhosin.executor.allow_symlink = 0 suhosin.mail.protect = 1 suhosin.upload.disallow_elf = 1 suhosin.log.syslog = 511 suhosin.log.syslog.facility = 8 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511 suhosin.session.encrypt = 0 suhosin.cookie.cryptua = 0 suhosin.session.cryptdocroot = 0 suhosin.cookie.cryptdocroot = 0 suhosin.executor.include.whitelist="phar" suhosin.get.max_value_length = 10240 [curl] extension=curl.so [gmp] extension=gmp.so [iconv] extension=iconv.so [imap] extension=imap.so [mysqli] extension=mysqli.so [mysql] extension=mysql.so [odbc] extension=odbc.so [pdo] extension=pdo.so [pdo_mysql] extension=pdo_mysql.so [pdo_pgsql] extension=pdo_pgsql.so [pdo_sqlite] extension=pdo_sqlite.so [pgsql] extension=pgsql.so [sqlite3] extension=sqlite3.so [htscanner] extension=htscanner.so [mongo] extension=mongo.so [date] date.timezone=EST
我使用主机帐户控制面板提供的工具进行切换,所以我很确定它一定是正确的。我能够运行其他 PHP 脚本。