Page 1 of 1

[SOLVED] Apache does not deliver a big file

PostPosted: Thu Apr 14, 2011 2:19 pm
by fels
I have allowed for 1024M upload size, upload happens successfully, but download fails.
This happens for a file with about 900MB; a smaller file withabout 200MB can be uploaded and downloaded.

Opera Error page:

----
Remote server or file not found

You tried to access the address http://vm178.rz.uos.de:8081/dfh/downloa ... ce5ddf44a9, which is currently unavailable. Please make sure that the web address (URL) is correctly spelled and punctuated, then try reloading the page.
...
---

Does anybody know how to tweak php.ini and apache.conf to cooperate?
Do you reccommend another web server (nginx, lighttpd with cgi-support) ?)

Some interesting php.ini values:

short_open_tag = On
max_execution_time = 60
max_input_time = 60
memory_limit = 256M
error_reporting = E_ALL
display_errors = Off
log_errors = On
file_uploads = On
upload_tmp_dir = /data/dfh/tmp
upload_max_filesize = 1024M
post_max_size = 1024M
...


Apache error_log.
[Thu Apr 14 16:05:39 2011] [error] [client 131.173.61.235] File does not exist: /var/www/html/dfh/img/captcha-a.png, referer: http://vm178.rz.uos.de:8081/dfh/downloa ... .1_OSX.dmg
[Thu Apr 14 16:06:17 2011] [error] [client 131.173.61.235] PHP Notice: Undefined variable: rating in /var/www/html/dfh/ratingbar.php on line 43, referer: http://vm178.rz.uos.de:8081/dfh/admin.php
[Thu Apr 14 16:06:17 2011] [error] [client 131.173.61.235] PHP Notice: Undefined index: width in /var/www/html/dfh/ratingbar.php on line 12, referer: http://vm178.rz.uos.de:8081/dfh/admin.php
[Thu Apr 14 16:06:17 2011] [error] [client 131.173.61.235] PHP Notice: Undefined index: height in /var/www/html/dfh/ratingbar.php on line 13, referer: http://vm178.rz.uos.de:8081/dfh/admin.php
[Thu Apr 14 16:07:10 2011] [error] [client 131.173.61.235] File does not exist: /var/www/html/dfh/img/button03.gif\\, referer: http://vm178.rz.uos.de:8081/dfh/downloa ... ecific.EXE
[Thu Apr 14 16:07:10 2011] [error] [client 131.173.61.235] File does not exist: /var/www/html/dfh/\\"img, referer: http://vm178.rz.uos.de:8081/dfh/downloa ... ecific.EXE
[Thu Apr 14 16:07:10 2011] [error] [client 131.173.61.235] File does not exist: /var/www/html/dfh/img/captcha-a.png, referer: http://vm178.rz.uos.de:8081/dfh/downloa ... ecific.EXE

Re: Apache does not deliver a big file

PostPosted: Thu Apr 14, 2011 3:00 pm
by fels
Found the reason (?):

It seems as if DFH needs filesize as (PHP-) memory; I changed:
memory_limit = 1024M
(processing time might be worth a look, too)

... and the big file (900MB) went through.

Could this be solved in some another way?
(mod_deflate, x-sendfile, ... or any other idea)

Regards Frank

Re: Apache does not deliver a big file

PostPosted: Fri Apr 15, 2011 2:07 pm
by SamEA
fels wrote:Found the reason (?):

It seems as if DFH needs filesize as (PHP-) memory; I changed:
memory_limit = 1024M
(processing time might be worth a look, too)

... and the big file (900MB) went through.

Could this be solved in some another way?
(mod_deflate, x-sendfile, ... or any other idea)

Regards Frank


All files are processed by PHP and therefore all files uploaded must follow PHP's configuration (php.ini), however the php.ini file may be adjusted or modified by the .htaccess method or by directly modifying the php.ini file itself. Contact your web hoster for more assistance on modifying the PHP's configuration file.

Re: [SOLVED] Apache does not deliver a big file

PostPosted: Sat Jul 30, 2011 5:21 pm
by javaboon
hmm i have had the same problems, i am serving 2000mb+ files. the whole file is read into memory before served. perhaps a chunked download would be better

Code: Select all
<?php
  define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of tiles chunk

  // Read a file and display its content chunk by chunk
  function readfile_chunked($filename, $retbytes = TRUE) {
    $buffer = '';
    $cnt =0;
    // $handle = fopen($filename, 'rb');
    $handle = fopen($filename, 'rb');
    if ($handle === false) {
      return false;
    }
    while (!feof($handle)) {
      $buffer = fread($handle, CHUNK_SIZE);
      echo $buffer;
      ob_flush();
      flush();
      if ($retbytes) {
        $cnt += strlen($buffer);
      }
    }
    $status = fclose($handle);
    if ($retbytes && $status) {
      return $cnt; // return num. bytes delivered like readfile() does.
    }
    return $status;
  }

  // Here goes your code for checking that the user is logged in
  // ...
  // ...
 
  if ($logged_in) {
    $filename = 'path/to/your/file';
    $mimetype = 'mime/type';
    header('Content-Type: '.$mimetype );
    readfile_chunked($filename);
  }
  else {
    echo 'Tabatha says you haven\'t paid.';
  }
?>


code stolen from the internet :-)