5

最後に、次の 2 行で問題を再現できました。

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 に基づく私の Web サイトが 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 に答える