title: file_get_contents => PHP Fatal error: Allowed memory exhausted
body: <p>I have no experience when dealing with large files so I am not sure what to do about this. I have attempted to read several large files using <strong>file_get_contents</strong> ; the task is to clean and munge them using <strong>preg_replace()</strong>.</p>
  
  <p>My code runs fine on small files ; however, the large files (40 MB) trigger an Memory exhausted error:</p>
  
  <pre><code>PHP Fatal error:  Allowed memory size of 16777216 bytes exhausted (tried to allocate 41390283 bytes)
  </code></pre>
  
  <p>I was thinking of using <strong>fread()</strong> instead but I am not sure that'll work either. Is there a workaround for this problem?</p>
  
  <p>Thanks for your input.</p>
  
  <p>This is my code:</p>
  
  <pre><code>&lt;?php
  error_reporting(E_ALL);
  
  ##get find() results and remove DOS carriage returns.
  ##The error is thrown on the next line for large files!
  $myData = file_get_contents("tmp11");
  $newData = str_replace("^M", "", $myData);
  
  ##cleanup Model-Manufacturer field.
  $pattern = '/(Model-Manufacturer:)(\n)(\w+)/i';
  $replacement = '$1$3';
  $newData = preg_replace($pattern, $replacement, $newData);
  
  ##cleanup Test_Version field and create comma delimited layout.
  $pattern = '/(Test_Version=)(\d).(\d).(\d)(\n+)/';
  $replacement = '$1$2.$3.$4      ';
  $newData = preg_replace($pattern, $replacement, $newData);
  
  ##cleanup occasional empty Model-Manufacturer field.
  $pattern = '/(Test_Version=)(\d).(\d).(\d)      (Test_Version=)/';
  $replacement = '$1$2.$3.$4      Model-Manufacturer:N/A--$5';
  $newData = preg_replace($pattern, $replacement, $newData);
  
  ##fix occasional Model-Manufacturer being incorrectly wrapped.
  $newData = str_replace("--","\n",$newData);
  
  ##fix 'Binary file' message when find() utility cannot id file.
  $pattern = '/(Binary file).*/';
  $replacement = '';
  $newData = preg_replace($pattern, $replacement, $newData);
  $newData = removeEmptyLines($newData);
  
  ##replace colon with equal sign
  $newData = str_replace("Model-Manufacturer:","Model-Manufacturer=",$newData);
  
  ##file stuff
  $fh2 = fopen("tmp2","w");
  fwrite($fh2, $newData);
  fclose($fh2);
  
  ### Functions.
  
  ##Data cleanup
  function removeEmptyLines($string)
  {
          return preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $string);
  }
  ?&gt;
  </code></pre>