Наконец я смог воспроизвести проблему с помощью следующих двух строк:
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
Я попытался сделать много вещей и, наконец, подумал спросить об этом онлайн :(. Вот что я попробовал:
Добавлен код до инициализации и установки Silex app[debug] = true
после:
ini_set('display_errors', 1);
error_reporting(-1);
ErrorHandler::register();
if ('cli' !== php_sapi_name()) {
ExceptionHandler::register();
}
Пытался проверить, в какой степени идет код. Но я продолжал вмешиваться. Я пошел до NativeSessionStorage::start()
и сдался, так что это работало до тех пор, и любые ошибки, которые я генерирую там, сообщались должным образом, как и ожидалось.
Попытался просмотреть другие записи о том, как исправить 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.
Я думаю, у меня была такая же проблема раньше. Если вы используете версию PHP < 5.4.11 — в реализации SessionHandler есть ошибка — проверьте это ссылка на сайт может быть, это как-то связано …
Возможно, запустите ‘strace’, чтобы увидеть, где PHP не работает. Возможно, у вас есть проблемы с разрешениями в зависимости от того, какой пользователь пытается получить доступ к определенным ресурсам. Например, каталог, где сессии должны быть сохранены.