title: PHP download large file returns a 0 Kb file
body: <p>Hello fellow stakoverflowers, </p>
  
  <p>I'm having a problem with PHP/Apache. I have an application that allows the admin to upload 100Mb files. The uploading works well but I'm having problems with the downloading.</p>
  
  <p>It works perfectly with smaller files (tested with a 50Mb file) but for some reason I can't get the 100 Mb files.</p>
  
  <p>Here's  my php code</p>
  
  <pre><code>$extension = 'zip'; //for testing
  
  switch ($extension) {
    case "dwg": $contentType="image/vnd.dwg"; break;
    case "dxf": $contentType="image/vnd.dxf"; break;
    case "pdf": $contentType="application/pdf"; break;
    case "zip": $contentType="application/zip"; break; 
    case "png": $contentType="image/png"; break; 
    case "jpeg": $contentType="image/jpeg"; break; 
    case "jpg": $contentType="image/jpg"; break; 
    case "gif": $contentType="image/gif"; break; 
    default: 
      $contentType = '';
  }
  
  @header("Content-type: " . $contentType);
  @header("Content-Disposition: attachment; filename=$filename");
  @header("Cache-Control: no-cache, must-revalidate");
  @header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // passed date
  
  echo file_get_contents($url);
  </code></pre>
  
  <p>I've also tried other solutions I found on SO.</p>
  
  <pre><code>header('Content-Description: File Transfer');
  header('Content-Transfer-Encoding: binary');
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header("Cache-Control: public");
  header("Content-type: " . $contentType);
  header("Content-Disposition: attachment; filename=\"".$filename."\"");
  header("Content-Length: ".filesize($url));
  
  echo self::url_get_contents(URL_PUBLIC . $url);
  
  ...
  
  private function url_get_contents ($url) {
      if (!function_exists('curl_init')){ 
          die('CURL is not installed!');
      }
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          $output = curl_exec($ch);
      curl_close($ch);
          echo $output;
      return $output;
  }
  </code></pre>
  
  <p>Or </p>
  
  <pre><code>$file_contents = fopen($url, "r");
  echo $file_contents;
  fclose($file_contents);
  </code></pre>
  
  <p>All solutions return the same thing. A file size of 0 Kb.
  Like I said, smaller sized files works.</p>
  
  <p>Also, when I test locally, the 100 Mb size files download correctly so my guess is that the problem comes from the server. I've changed the php.ini as follows </p>
  
  <pre><code>register_globals = Off
  magic_quotes_gpc = Off
  post_max_size = 128M
  memory_limit = 256M
  upload_max_filesize = 128M
  max_execution_time = 120
  expose_php = off
  session.save_path = /tmp
  mysqli.default_socket = /tmp/mysql5.sock
  mysql.default_socket = /tmp/mysql5.sock
  </code></pre>
  
  <p>It's probably a memory limit problem but not sure.</p>