2014-11-26 17 views
5

Cuối cùng tôi đã có thể repro vấn đề với hai dòng sau:Screen trắng of Death trong silex khi chuyển đổi từ PHP 5.3 để Php 5.4 vì "session_start"

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

Khi tôi làm điều này, tôi nhận được một WSOD! Bất kỳ ý tưởng tại sao điều này xảy ra?

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

Cuối cùng, tôi đào sâu hơn và sâu hơn và thu hẹp nó xuống vấn đề được gây ra vì thất bại trong session_start(); Tuy nhiên, tôi không biết tại sao nó lại thất bại như vậy.

Vì vậy, sự cố xảy ra với: Khi session_start() được gọi là NativeSessionStorage::start(), lỗi này không thành công. Tuy nhiên, khi tôi tạo một trang thử nghiệm mẫu, chỉ cần session_start() nó mới thành công!

Silex có làm gì khác không ?!

Tôi đang giữ văn bản bên dưới để bất kỳ ai gặp phải vấn đề tương tự cũng hiểu lý do đằng sau sự cố.

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

Tôi đã cố chuyển từ Php 5.3 sang Php 5.4 gần đây và trang web của tôi dựa trên Silex ngừng hoạt động với WSOD.

Tôi đã kiểm tra Lỗi Logs PHP và tôi thấy:. Premature end of script headers: php54.cgi

Tôi đã thử làm rất nhiều thứ và cuối cùng nghĩ đến hỏi nó trực tuyến :(Đây là những gì tôi đã cố gắng:

  1. Tạo một . xương trần dự án silex và kiểm tra nếu nó đang làm việc Nope, nó không phải là
  2. Added mã trước khi silex được khởi tạo và thiết app[debug] = true sau:.

    ini_set('display_errors', 1); 
    error_reporting(-1); 
    ErrorHandler::register(); 
    if ('cli' !== php_sapi_name()) { 
        ExceptionHandler::register(); 
    } 
    
  3. Đã cố gắng kiểm tra mức độ mã đi. Nhưng tôi đã tiếp tục bước vào. Tôi đã đi đến NativeSessionStorage::start() và đã từ bỏ, do đó, nó đã được làm việc cho đến sau đó và bất kỳ lỗi nào tôi tạo ra đã được báo cáo đúng như mong đợi.

  4. Đã thử xem các mục khác về cách sửa lỗi BSOD, nhưng không ai trong số họ thực sự giải thích cách mọi thứ sẽ thay đổi bằng cách chuyển từ PHP 5.3 sang PHP 5.4! Đó là tất cả những gì tôi đã làm. Chỉ cần thay đổi phiên bản PHP và PHP.INI cho phù hợp. Dưới đây là PHP.INI tôi sử dụng ngay bây giờ.

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

tôi đã sử dụng các công cụ được cung cấp bởi các bảng điều khiển của tài khoản lưu trữ của tôi để làm cho việc chuyển đổi, vì vậy tôi khá chắc chắn nó phải là thích hợp. Tôi có thể chạy các tập lệnh PHP khác.

+0

bạn đã kiểm tra bản ghi PHP trên máy chủ để xem lỗi nào nó đang nhận? – Barmar

+0

Có Barmar, tôi nhận được: Kết thúc sớm của tiêu đề tập lệnh: php54.cgi. Tôi đã thêm nó vào câu hỏi để những người khác cũng biết. –

+0

điều này có hữu ích không? http://silex.sensiolabs.org/doc/web_servers.html – RST

Trả lời

0

Có thể chạy 'strace' để xem PHP bị lỗi ở đâu. Có lẽ bạn có các vấn đề về quyền dựa trên những gì người dùng đang cố gắng truy cập một số tài nguyên nhất định. Ví dụ: thư mục nơi các phiên được cho là được lưu.

1

Tôi nghĩ rằng tôi đã có cùng một vấn đề trước đây. Nếu bạn đang sử dụng phiên bản PHP < 5.4.11 - có một lỗi trong việc thực hiện SessionHandler - kiểm tra này link ra, có lẽ nó là bằng cách nào đó liên quan ...

Các vấn đề liên quan