#45945 [Fbk->Opn]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes
ID: 45945 User updated by: djimenez at conduit-it dot com Reported By: djimenez at conduit-it dot com -Status: Feedback +Status: Open Bug Type: Apache2 related Operating System: Ubuntu PHP Version: 5.*, 6CVS (2009-07-15) New Comment: Using the handler module: LoadModule php5_module /usr/lib/apache2/modules/libphp5.so AddType application/x-httpd-php .php .phtml .php3 .html .inc .func .clss AddType application/x-httpd-php-source .phps Previous Comments: [2009-09-16 12:35:33] j...@php.net Are you using the filter or handler module? What exactly do you put in your httpd.conf to enable PHP? [2009-07-15 19:01:34] djimenez at conduit-it dot com I tested against nightly snapshot php5.3-200907151630 and still obtain the same results. The bug is probably in the php5 apache2 module. [2008-08-31 02:22:29] djimenez at conduit-it dot com I used amazon ec2 to test and reconfirm this bug on a base install of apache2 and php5.2.6 in ubuntu intrepid ibex. No changes to the php.ini (which I've included without comments and empty sections): [PHP] engine = On zend.ze1_compatibility_mode = Off short_open_tag = On asp_tags = Off precision= 12 y2k_compliance = On output_buffering = Off zlib.output_compression = Off implicit_flush = Off unserialize_callback_func= serialize_precision = 100 allow_call_time_pass_reference = On safe_mode = Off safe_mode_gid = Off safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = disable_classes = expose_php = On max_execution_time = 30 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data memory_limit = 16M ; Maximum amount of memory a script may consume (16MB) error_reporting = E_ALL & ~E_NOTICE display_errors = On display_startup_errors = Off log_errors = Off log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off variables_order = "EGPCS" register_globals = Off register_long_arrays = On register_argc_argv = On auto_globals_jit = On post_max_size = 8M magic_quotes_gpc = On magic_quotes_runtime = Off magic_quotes_sybase = Off auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = enable_dl = Off file_uploads = On upload_max_filesize = 2M allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [Syslog] define_syslog_variables = Off [mail function] SMTP = localhost smtp_port = 25 [SQL] sql.safe_mode = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = On mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_port = mysql.default_socket = mysql.default_host = mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = Off [MySQLi] mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mSQL] msql.allow_persistent = On msql.max_persistent = -1 msql.max_links = -1 [PostgresSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [Sybase] sybase.allow_persistent = On sybase.max_persistent = -1 sybase.max_links = -1 sybase.min_error_severity = 10 sybase.min_message_severity = 10 sybase.compatability_mode = Off [Sybase-CT] sybct.allow_persistent = On sybct.max_persistent = -1 sybct.max_links = -1 sybct.min_server_severity = 10 sybct.min_client_severity = 10 [bcmath] bcmath.scale = 0 [Informix] ifx.default_host = ifx.default_user = ifx.default_password = ifx.allow_persistent = On ifx.max_persistent = -1 ifx.max_links = -1 ifx.textasvarchar = 0 ifx.byteasvarchar = 0 ifx.charasvarchar = 0 ifx.blobinfile = 0 ifx.nullformat = 0 [Session] session.save_handler = files session.use_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_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 4 url_rewriter.tags = "a=href,area=href,frame=src,
#45945 [NoF->Opn]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes
ID: 45945 User updated by: djimenez at conduit-it dot com Reported By: djimenez at conduit-it dot com -Status: No Feedback +Status: Open Bug Type: Apache2 related -Operating System: Ubuntu - gutsy gibbon +Operating System: Ubuntu -PHP Version: 5.2.6 +PHP Version: 5.2.* And 5.3.*, possibly others New Comment: I tested against nightly snapshot php5.3-200907151630 and still obtain the same results. The bug is probably in the php5 apache2 module. Previous Comments: [2008-11-03 01:00:02] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". [2008-10-26 19:22:26] j...@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://windows.php.net/snapshots/ [2008-08-31 02:22:29] djimenez at conduit-it dot com I used amazon ec2 to test and reconfirm this bug on a base install of apache2 and php5.2.6 in ubuntu intrepid ibex. No changes to the php.ini (which I've included without comments and empty sections): [PHP] engine = On zend.ze1_compatibility_mode = Off short_open_tag = On asp_tags = Off precision= 12 y2k_compliance = On output_buffering = Off zlib.output_compression = Off implicit_flush = Off unserialize_callback_func= serialize_precision = 100 allow_call_time_pass_reference = On safe_mode = Off safe_mode_gid = Off safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = disable_classes = expose_php = On max_execution_time = 30 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data memory_limit = 16M ; Maximum amount of memory a script may consume (16MB) error_reporting = E_ALL & ~E_NOTICE display_errors = On display_startup_errors = Off log_errors = Off log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off variables_order = "EGPCS" register_globals = Off register_long_arrays = On register_argc_argv = On auto_globals_jit = On post_max_size = 8M magic_quotes_gpc = On magic_quotes_runtime = Off magic_quotes_sybase = Off auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = enable_dl = Off file_uploads = On upload_max_filesize = 2M allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [Syslog] define_syslog_variables = Off [mail function] SMTP = localhost smtp_port = 25 [SQL] sql.safe_mode = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = On mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_port = mysql.default_socket = mysql.default_host = mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = Off [MySQLi] mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mSQL] msql.allow_persistent = On msql.max_persistent = -1 msql.max_links = -1 [PostgresSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [Sybase] sybase.allow_persistent = On sybase.max_persistent = -1 sybase.max_links = -1 sybase.min_error_severity = 10 sybase.min_message_severity = 10 sybase.compatability_mode = Off [Sybase-CT] sybct.allow_persistent = On sybct.max_persistent = -1 sybct.max_links = -1 sybct.min_server_severity = 10 sybct.min_client_severity = 10 [bcmath] bcmath.scale = 0 [Informix] ifx.default_host = ifx.default_user = ifx.default_password = ifx.allow_persistent = On ifx.max_persistent = -1 ifx.max_links = -1 ifx.textasvarchar = 0 ifx.byteasvarchar = 0 ifx.charasvarchar = 0 ifx.blobinfile = 0 ifx.nullformat = 0 [Session] session.save_handler = files session.use_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_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.
#45945 [Com]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes
ID: 45945 Comment by: djimenez at conduit-it dot com Reported By: djimenez at conduit-it dot com Status: Open Bug Type: Apache2 related Operating System: Ubuntu - gutsy gibbon PHP Version: 5.2.6 New Comment: I used amazon ec2 to test and reconfirm this bug on a base install of apache2 and php5.2.6 in ubuntu intrepid ibex. No changes to the php.ini (which I've included without comments and empty sections): [PHP] engine = On zend.ze1_compatibility_mode = Off short_open_tag = On asp_tags = Off precision= 12 y2k_compliance = On output_buffering = Off zlib.output_compression = Off implicit_flush = Off unserialize_callback_func= serialize_precision = 100 allow_call_time_pass_reference = On safe_mode = Off safe_mode_gid = Off safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions = disable_classes = expose_php = On max_execution_time = 30 ; Maximum execution time of each script, in seconds max_input_time = 60 ; Maximum amount of time each script may spend parsing request data memory_limit = 16M ; Maximum amount of memory a script may consume (16MB) error_reporting = E_ALL & ~E_NOTICE display_errors = On display_startup_errors = Off log_errors = Off log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off variables_order = "EGPCS" register_globals = Off register_long_arrays = On register_argc_argv = On auto_globals_jit = On post_max_size = 8M magic_quotes_gpc = On magic_quotes_runtime = Off magic_quotes_sybase = Off auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = enable_dl = Off file_uploads = On upload_max_filesize = 2M allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [Syslog] define_syslog_variables = Off [mail function] SMTP = localhost smtp_port = 25 [SQL] sql.safe_mode = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQL] mysql.allow_persistent = On mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_port = mysql.default_socket = mysql.default_host = mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = Off [MySQLi] mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mSQL] msql.allow_persistent = On msql.max_persistent = -1 msql.max_links = -1 [PostgresSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [Sybase] sybase.allow_persistent = On sybase.max_persistent = -1 sybase.max_links = -1 sybase.min_error_severity = 10 sybase.min_message_severity = 10 sybase.compatability_mode = Off [Sybase-CT] sybct.allow_persistent = On sybct.max_persistent = -1 sybct.max_links = -1 sybct.min_server_severity = 10 sybct.min_client_severity = 10 [bcmath] bcmath.scale = 0 [Informix] ifx.default_host = ifx.default_user = ifx.default_password = ifx.allow_persistent = On ifx.max_persistent = -1 ifx.max_links = -1 ifx.textasvarchar = 0 ifx.byteasvarchar = 0 ifx.charasvarchar = 0 ifx.blobinfile = 0 ifx.nullformat = 0 [Session] session.save_handler = files session.use_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_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 4 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset=" [MSSQL] mssql.allow_persistent = On mssql.max_persistent = -1 mssql.max_links = -1 mssql.min_error_severity = 10 mssql.min_message_severity = 10 mssql.compatability_mode = Off mssql.secure_connection = Off [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 Previous Comments: ---------------- [2008-08-31 01:48:44] djimenez at conduit-it dot com output buffering was set to Off, though setting it to something else still had the same result with the test on my box. [2008-08-31 00:32:04] [EMAIL PROTECTED] What have you set your output_buffering to? (check from phpinfo() output) -
#45945 [Fbk->Opn]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes
ID: 45945 User updated by: djimenez at conduit-it dot com Reported By: djimenez at conduit-it dot com -Status: Feedback +Status: Open Bug Type: Apache2 related Operating System: Ubuntu - gutsy gibbon PHP Version: 5.2.6 New Comment: output buffering was set to Off, though setting it to something else still had the same result with the test on my box. Previous Comments: [2008-08-31 00:32:04] [EMAIL PROTECTED] What have you set your output_buffering to? (check from phpinfo() output) [2008-08-29 04:15:37] djimenez at conduit-it dot com Description: Apache2 supports byte range response with an output filter. Static files over 8000 bytes work fine, but mod_php5 served content only works correctly if it is <= 8000 bytes To test I used telnet to submit an HTTP Range request for the included PHP file from an apache2 server configured with mod_php5. Example requests are in the actual results. Reproduce code: --- Expected result: Apache's byterange output filter should handle range requests for PHP responses > 8000 bytes. Actual result: -- While the test scripts second echo is commented, I get the expected results: $ telnet dev.conduit-it.com 80 Trying 10.42.84.2... Connected to dev.conduit-it.com. Escape character is '^]'. GET /test.php HTTP/1.1 Host:dev.conduit-it.com Range:bytes=0-24 Connection:close HTTP/1.1 206 Partial Content Date: Fri, 29 Aug 2008 03:43:20 GMT Content-Range: bytes 0-24/8000 Content-Length: 25 Connection: close Content-Type: text/html .Connection closed by foreign host. We can also see it working for multiple ranges: $ telnet dev.conduit-it.com 80 Trying 10.42.84.2... Connected to dev.conduit-it.com. Escape character is '^]'. GET /test.php HTTP/1.1 Host:dev.conduit-it.com Range:bytes=0-24,50-74 Connection:close HTTP/1.1 206 Partial Content Date: Fri, 29 Aug 2008 03:45:44 GMT Content-Length: 240 Connection: close Content-Type: multipart/byteranges; boundary=455911696d6f354a2 --455911696d6f354a2 Content-type: text/html Content-range: bytes 0-24/8000 . --455911696d6f354a2 Content-type: text/html Content-range: bytes 50-74/8000 . --455911696d6f354a2-- Connection closed by foreign host. So apache is doing all the work for us, until we uncomment the second echo statement in the repro. script. This puts us over the 8000 byte limit. At that point, both example requests will return full 200 OK responses (so content is 8000 periods + our message) -- Edit this bug report at http://bugs.php.net/?id=45945&edit=1
#45945 [NEW]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes
From: djimenez at conduit-it dot com Operating system: Ubuntu - gutsy gibbon PHP version: 5.2.6 PHP Bug Type: Apache2 related Bug description: Apache byterange output filter nullified if mod_php5 output > 8000 bytes Description: Apache2 supports byte range response with an output filter. Static files over 8000 bytes work fine, but mod_php5 served content only works correctly if it is <= 8000 bytes To test I used telnet to submit an HTTP Range request for the included PHP file from an apache2 server configured with mod_php5. Example requests are in the actual results. Reproduce code: --- Expected result: Apache's byterange output filter should handle range requests for PHP responses > 8000 bytes. Actual result: -- While the test scripts second echo is commented, I get the expected results: $ telnet dev.conduit-it.com 80 Trying 10.42.84.2... Connected to dev.conduit-it.com. Escape character is '^]'. GET /test.php HTTP/1.1 Host:dev.conduit-it.com Range:bytes=0-24 Connection:close HTTP/1.1 206 Partial Content Date: Fri, 29 Aug 2008 03:43:20 GMT Content-Range: bytes 0-24/8000 Content-Length: 25 Connection: close Content-Type: text/html .Connection closed by foreign host. We can also see it working for multiple ranges: $ telnet dev.conduit-it.com 80 Trying 10.42.84.2... Connected to dev.conduit-it.com. Escape character is '^]'. GET /test.php HTTP/1.1 Host:dev.conduit-it.com Range:bytes=0-24,50-74 Connection:close HTTP/1.1 206 Partial Content Date: Fri, 29 Aug 2008 03:45:44 GMT Content-Length: 240 Connection: close Content-Type: multipart/byteranges; boundary=455911696d6f354a2 --455911696d6f354a2 Content-type: text/html Content-range: bytes 0-24/8000 . --455911696d6f354a2 Content-type: text/html Content-range: bytes 50-74/8000 . --455911696d6f354a2-- Connection closed by foreign host. So apache is doing all the work for us, until we uncomment the second echo statement in the repro. script. This puts us over the 8000 byte limit. At that point, both example requests will return full 200 OK responses (so content is 8000 periods + our message) -- Edit bug report at http://bugs.php.net/?id=45945&edit=1 -- Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=45945&r=trysnapshot52 Try a CVS snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=45945&r=trysnapshot53 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=45945&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=45945&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=45945&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=45945&r=needtrace Need Reproduce Script:http://bugs.php.net/fix.php?id=45945&r=needscript Try newer version:http://bugs.php.net/fix.php?id=45945&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=45945&r=support Expected behavior:http://bugs.php.net/fix.php?id=45945&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=45945&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=45945&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=45945&r=globals PHP 4 support discontinued: http://bugs.php.net/fix.php?id=45945&r=php4 Daylight Savings: http://bugs.php.net/fix.php?id=45945&r=dst IIS Stability:http://bugs.php.net/fix.php?id=45945&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=45945&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=45945&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=45945&r=nozend MySQL Configuration Error:http://bugs.php.net/fix.php?id=45945&r=mysqlcfg