Schließlich war ich in der Lage, das Problem mit den folgenden zwei Zeilen Repro:White Screen of Death in Silex, wenn sie von PHP 5.3 Php 5.4 wegen "session_start"
session_set_save_handler(new SessionHandler());
session_start();
Wenn ich das tue, erhalte ich ein WSOD! Irgendeine Idee, warum das passiert?
============================================== ==============
Schließlich habe ich tiefer und tiefer gegraben und es auf das Problem beschränkt, das wegen des Ausfalls in session_start()
verursacht wird; Trotzdem weiß ich nicht, warum es so scheitert.
So läuft das Problem auf: Wenn session_start()
in NativeSessionStorage::start()
aufgerufen wird, schlägt es fehl. Allerdings, wenn ich eine Beispieltestseite erstellen, die nur session_start()
es gelingt!
Macht Silex etwas anderes ?!
Ich halte den Text unten, damit jeder, der sich mit einem ähnlichen Problem konfrontiert sieht, den Grund für den Fehler versteht.
============================================== =============
Ich habe vor kurzem versucht, von PHP 5.3 auf PHP 5.4 zu wechseln und meine auf Silex basierende Website hat aufgehört, mit einem WSOD zu arbeiten.
ich die PHP-Fehlerprotokolle überprüft, und ich sehe. Premature end of script headers: php54.cgi
Ich habe versucht, eine Menge Sachen zu tun und schließlich dachte es online :(fragen Hier ist, was ich versucht:
- Erstellt ein . nackte Knochen Silex Projekt und überprüft, ob es funktioniert Nein, es war nicht
Added Code vor Silex initialisiert und gesetzt
app[debug] = true
nach.ini_set('display_errors', 1); error_reporting(-1); ErrorHandler::register(); if ('cli' !== php_sapi_name()) { ExceptionHandler::register(); }
Versucht, das Ausmaß zu überprüfen, in dem der Code geht. Aber ich ging weiter. Ich ging bis
NativeSessionStorage::start()
und gab auf, also funktionierte es bis dahin und alle Fehler, die ich dort erzeugte, wurden ordnungsgemäß gemeldet.Ich habe versucht, andere Einträge zu suchen, wie man BSOD repariert, aber keiner von ihnen hat wirklich erklärt, wie sich die Dinge durch den Wechsel von PHP 5.3 zu PHP 5.4 geändert hätten! Das ist ALLES, was ich getan habe. Habe die PHP-Version und PHP.INI entsprechend geändert. Unten ist die PHP.INI, die ich jetzt benutze.
; |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
ich verwenden, um die von der Zentrale meines Hosting-Account bereitgestellten Tools die Schalter zu machen, so dass ich bin ziemlich sicher, dass es richtig sein muss. Ich kann andere PHP-Skripte ausführen.
haben Sie das PHP-Protokoll auf dem Server überprüft, um zu sehen, welchen Fehler es bekommt? – Barmar
Ja Barmar, bekomme ich: Vorzeitige Ende der Skript-Header: php54.cgi. Ich habe es der Frage hinzugefügt, damit die anderen es auch wissen. –
würde das helfen? http://silex.sensiolabs.org/doc/web_servers.html – RST