Finally I was able to repro the issue with the following two lines:
session_set_save_handler(new SessionHandler());
session_start();
When I do this, I get a WSOD! Any idea why this happens?
============================================================
Finally, I digged deeper and deeper and narrowed it down to the issue being caused because of failure in session_start(); Still, I do not know why it fails that way. 
So, the problem boils down to: 
When session_start() is called in NativeSessionStorage::start(), it fails. However, when I create a sample test page which just does session_start() it succeeds! 
Does Silex do anything different?!
I am keeping the text below so that anyone facing similar issue understands the reason behind the failure.
============================================================
I have tried to switch from Php 5.3 to Php 5.4 recently and my website based on Silex stopped working with a WSOD.
I checked the PHP Error Logs and I see:
Premature end of script headers: php54.cgi
I tried doing a lot of stuff and finally thought of asking it online :(. Here's what I tried:
Added code before Silex is initialized and set app[debug] = true after:
ini_set('display_errors', 1);
error_reporting(-1);
ErrorHandler::register();
if ('cli' !== php_sapi_name()) {
    ExceptionHandler::register();
}
Tried to check the extent to which the code goes. But I was keeping on stepping in. I went till NativeSessionStorage::start() and gave up, so it was working till then and any errors I generate there were being reported properly as expected.
Tried looking at other entries for how to fix BSOD, but none of them really explained how things would have changed by moving from PHP 5.3 to PHP 5.4! That is ALL I did. Just changed the PHP version and PHP.INI accordingly. Below is the PHP.INI I use now.
;                           |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 [email protected]
  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
I used the tools provided by the control panel of my hosting account to make the switch, so I am pretty sure it must be proper. I am able to run other PHP scripts.
I think I had the same problem before. If you are using PHP Version < 5.4.11 - there is a bug in the SessionHandler implementation - check this link out, maybe it is somehow related...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With