2014-11-26 24 views
5

Finalmente sono riuscito a Repro il problema con le seguenti due righe:schermo bianco della morte in Silex quando si passa da PHP 5.3 a PHP 5.4 a causa di "session_start"

session_set_save_handler(new SessionHandler()); 
session_start(); 

Quando faccio questo, ottengo un WSOD! Qualche idea del perché accada questo?

========================================= ==============

Infine, ho scavato sempre più in profondità e ridotto il problema a causa di un errore in session_start(); Tuttavia, non so perché fallisce in questo modo.

Quindi, il problema si riduce a: Quando session_start() viene chiamato in NativeSessionStorage::start(), non riesce. Tuttavia, quando creo una pagina di prova di esempio che fa semplicemente session_start(), riesce!

Silex fa qualcosa di diverso ?!

Sto mantenendo il testo qui sotto in modo che chiunque abbia problemi simili capisca il motivo del fallimento.

========================================= ==============

Ho cercato di passare da Php 5.3 a Php 5.4 di recente e il mio sito web basato su Silex ha smesso di funzionare con un WSOD.

ho controllato i registri di errore di PHP e vedo:. Premature end of script headers: php54.cgi

ho provato a fare un sacco di roba e infine pensato di chiedere online :(Ecco cosa ho provato:

  1. creato una . ossa nude progetto Silex e controllato se si sta lavorando no, non era
  2. codice aggiunto prima Silex viene inizializzato e impostare app[debug] = true dopo:.

    ini_set('display_errors', 1); 
    error_reporting(-1); 
    ErrorHandler::register(); 
    if ('cli' !== php_sapi_name()) { 
        ExceptionHandler::register(); 
    } 
    
  3. Si è cercato di verificare fino a che punto il codice va. Ma continuavo a intervenire. Sono andato fino allo NativeSessionStorage::start() e mi sono arreso, quindi fino a quel momento funzionava e ogni errore che generavo veniva segnalato correttamente come previsto.

  4. Provato a guardare altre voci per come risolvere BSOD, ma nessuno di loro ha davvero spiegato come le cose sarebbero cambiate passando da PHP 5.3 a PHP 5.4! Questo è tutto ciò che ho fatto. Ho appena modificato la versione PHP e PHP.INI di conseguenza. Di seguito è il PHP.INI che uso ora.

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

ho usato gli strumenti forniti dal pannello di controllo del mio account di hosting di effettuare il passaggio, quindi sono abbastanza sicuro che deve essere corretta. Sono in grado di eseguire altri script PHP.

+0

hai controllato il registro PHP sul server per vedere quale errore sta ottenendo? – Barmar

+0

Sì Barmar, ottengo: Fine prematura delle intestazioni degli script: php54.cgi. L'ho aggiunto alla domanda così anche gli altri lo sanno. –

+0

sarebbe di aiuto? http://silex.sensiolabs.org/doc/web_servers.html – RST

risposta

0

Forse eseguire 'strace' per vedere dove PHP sta fallendo. Forse hai problemi di permessi in base a quale utente sta provando ad accedere ad alcune risorse. Ad esempio la directory in cui si suppone che le sessioni vengano salvate.

1

Penso di aver avuto lo stesso problema prima. Se si utilizza PHP versione < 5.4.11 - c'è un bug nell'implementazione di SessionHandler - controlla questo link out, forse è in qualche modo collegato ...