Skip to content
Snippets Groups Projects
  • Jared Hancock's avatar
    f21e5c01
    Fetch file data in chunks for downloads · f21e5c01
    Jared Hancock authored
    MySQL has a limit on the maximum amount that can be transferred in one
    statement. It's the max_allowed_packet setting. The value of this setting
    will be the approximate upper limit of attachments that can be handled by
    the database given the current access model for osTicket.
    
    The issue came up for attachment uploads and was corrected, so that uploads
    are chunk inserted into the database. Downloads, however, were forgotten.
    Strangely, it took quite a bit of debugging to track down the problem.
    
    This patch corrects attachment downloads by fetching 256kB chunks of the
    attachment at a time and sending them directly to the client. This will also
    overcome PHP's memory limit which would be the second-level blocker of
    attachment sizes. Lastly, the AttachmentFile::getData() method is simulated
    using output buffering. This will provide the same access as the previous
    getData() method; however, it is still subject ot PHP's memory limits.
    f21e5c01
    History
    Fetch file data in chunks for downloads
    Jared Hancock authored
    MySQL has a limit on the maximum amount that can be transferred in one
    statement. It's the max_allowed_packet setting. The value of this setting
    will be the approximate upper limit of attachments that can be handled by
    the database given the current access model for osTicket.
    
    The issue came up for attachment uploads and was corrected, so that uploads
    are chunk inserted into the database. Downloads, however, were forgotten.
    Strangely, it took quite a bit of debugging to track down the problem.
    
    This patch corrects attachment downloads by fetching 256kB chunks of the
    attachment at a time and sending them directly to the client. This will also
    overcome PHP's memory limit which would be the second-level blocker of
    attachment sizes. Lastly, the AttachmentFile::getData() method is simulated
    using output buffering. This will provide the same access as the previous
    getData() method; however, it is still subject ot PHP's memory limits.