Белый экран смерти в Silex при переходе с PHP 5.3 на Php 5.4 из-за & quot; session_start & quot;

Наконец я смог воспроизвести проблему с помощью следующих двух строк:

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 [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
    

Я использовал инструменты, предоставленные панелью управления моей учетной записи хостинга, чтобы сделать это, поэтому я уверен, что это должно быть правильно. Я могу запускать другие сценарии PHP.

5

Решение

Я думаю, у меня была такая же проблема раньше. Если вы используете версию PHP < 5.4.11 — в реализации SessionHandler есть ошибка — проверьте это ссылка на сайт может быть, это как-то связано …

1

Другие решения

Возможно, запустите ‘strace’, чтобы увидеть, где PHP не работает. Возможно, у вас есть проблемы с разрешениями в зависимости от того, какой пользователь пытается получить доступ к определенным ресурсам. Например, каталог, где сессии должны быть сохранены.

0

По вопросам рекламы [email protected]