Professional Web Applications Themes

#45945 [NEW]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes - PHP Bugs

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: --------------- <?php // upto ...

  1. #1

    Default #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:
    ---------------
    <?php

    // upto and including 8000 bytes will allow the byterange filter to work
    //
    // NOTE: 8000 byte limit was found by manual trial and error, may vary per
    system, but
    // my guess would be it has to do with a byte buffer either in mod_php5 or
    apache2
    echo str_repeat(".", 8000);

    // anything over 8000 bytes will "fail" (full response)
    //echo "\n...one toke over the line";

    ?>

    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

    djimenez Guest

  2. #2

    Default #45945 [Opn->Fbk]: Apache byterange output filter nullified if mod_php5 output > 8000 bytes

    ID: 45945
    Updated by: net
    Reported By: djimenez at conduit-it dot com
    -Status: Open
    +Status: Feedback
    Bug Type: Apache2 related
    Operating System: Ubuntu - gutsy gibbon
    PHP Version: 5.2.6
    New Comment:

    What have you set your output_buffering to? (check from phpinfo()
    output)


    Previous Comments:
    ------------------------------------------------------------------------

    [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:
    ---------------
    <?php

    // upto and including 8000 bytes will allow the byterange filter to
    work
    //
    // NOTE: 8000 byte limit was found by manual trial and error, may vary
    per system, but
    // my guess would be it has to do with a byte buffer either in mod_php5
    or apache2
    echo str_repeat(".", 8000);

    // anything over 8000 bytes will "fail" (full response)
    //echo "\n...one toke over the line";

    ?>

    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

    jani@php.net Guest

  3. #3

    Default #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] net

    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:
    ---------------
    <?php

    // upto and including 8000 bytes will allow the byterange filter to
    work
    //
    // NOTE: 8000 byte limit was found by manual trial and error, may vary
    per system, but
    // my guess would be it has to do with a byte buffer either in mod_php5
    or apache2
    echo str_repeat(".", 8000);

    // anything over 8000 bytes will "fail" (full response)
    //echo "\n...one toke over the line";

    ?>

    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

    djimenez Guest

  4. #4

    Default #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=,fields et="

    [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] net

    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:
    ---------------
    <?php

    // upto and including 8000 bytes will allow the byterange filter to
    work
    //
    // NOTE: 8000 byte limit was found by manual trial and error, may vary
    per system, but
    // my guess would be it has to do with a byte buffer either in mod_php5
    or apache2
    echo str_repeat(".", 8000);

    // anything over 8000 bytes will "fail" (full response)
    //echo "\n...one toke over the line";

    ?>

    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

    djimenez Guest

Similar Threads

  1. Printing xlated output of Filter::Simple ?
    By Dean Arnold in forum PERL Modules
    Replies: 0
    Last Post: November 13th, 05:15 PM
  2. web service ( + WSE 2.0 ) hangs after adding an output filter
    By DaberElay in forum ASP.NET Web Services
    Replies: 0
    Last Post: June 27th, 10:30 PM
  3. SOAPExceptions don't go through the output filter pipeline
    By carl in forum ASP.NET Web Services
    Replies: 0
    Last Post: May 13th, 12:46 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139