5

最后,我能够用以下两行重现该问题:

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

我尝试了很多东西,最后想到了在网上问:(。这是我尝试过的:

  1. 创建了一个简单的 Silex 项目并检查它是否正常工作。不,不是。
  2. 在 Silex 初始化之前添加代码并在app[debug] = true之后设置:

    ini_set('display_errors', 1);
    error_reporting(-1);
    ErrorHandler::register();
    if ('cli' !== php_sapi_name()) {
        ExceptionHandler::register();
    }
    
  3. 试图检查代码的范围。但我一直在继续介入。我一直坚持到NativeSessionStorage::start()放弃,所以它一直工作到那时,我在那里产生的任何错误都会按预期正确报告。

  4. 尝试查看其他条目以了解如何修复 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 脚本。

4

2 回答 2

1

我想我以前也遇到过同样的问题。如果您使用的是 PHP 版本 < 5.4.11 - SessionHandler 实现中存在错误 - 请检查此链接,也许它与某种相关...

于 2014-12-01T10:30:23.573 回答
0

也许运行 'strace' 来查看 PHP 失败的地方。也许你有基于用户试图访问某些资源的权限问题。例如应该保存会话的目录。

于 2014-11-30T19:22:42.463 回答