However more often than not, the contents are static, usually html template component. With static includes you have many more options available.
aerwear
We will analyse some of these functions to find out which one is most suitable when dealing with files with static content. We use the term function loosely, because require and include are not real functions but language constructs.
Function | Brief Description |
string file_get_contents ( string filename [, int use_include_path]) | Reads entire file into a string |
int fpassthru ( resource handle) | Output all remaining data on a file pointer |
string fgets ( resource handle [, int length]) | Gets line from file pointer |
array file ( string filename [, int use_include_path]) | Reads entire file into an array |
require(string filename) include(string filename) require_once(string filename) include_once(string filename) |
includes and evaluates the specific file. |
int readfile ( string filename [, int use_include_path]) | Outputs a file |
We compensate for file caching and background processes by executing each script 4 times and taking the average (mean) of the result number 2-4. The first result is always rejected. Any result that appears to be outlier is rejected. The mean is rounded to 5 decimal places.
Function | Sample Usage | Time (s) | Memory (b) |
file_get_contents | echo file_get_contents($filename); | 0.00564 | 1067856 |
fpassthru | fpassthru($fp); | 0.00184 | 20032 |
fgets | $fp = fopen($filename,"rb"); while(!feof($fp)) { echo fgets($fp); } |
0.07190 | 30768 |
file | echo join(”",file($filename)); | 0.06464 | 2185624 |
require_once | require_once($filename); | 0.08065 | 2067696 |
include | include($filename); | 0.08202 | 2067696 |
readfile | readfile($filename); | 0.00191 | 19208 |
The only conclusion that can be drawn from these studies is that fpassthru and readfile are equally good if you wish to include static content as part of the script’s output.
Before you rush off to change all your includes and requires into readfiles or fpassthrus let’s run the same test with a smaller (32Kb file). 32Kb is a more realistic size for an included file.
Function | Time (s) | Memory (b) | ||
32Kb File | 1Mb File | 32Kb File | 1Mb File | |
file_get_contents | 0.00152 | 0.00564 | 52480 | 1067856 |
fpassthru | 0.00117 | 0.00184 | 20016 | 20032 |
fgets | 0.00195 | 0.07190 | 30760 | 30768 |
file | 0.00157 | 0.06464 | 87344 | 2185624 |
require_once | 0.00225 | 0.08065 | 67992 | 2067696 |
include | 0.00222 | 0.08202 | 67928 | 2067624 |
readfile | 0.00117 | 0.00191 | 19192 | 19208 |
The most significant feature of these results is that both fpassthru and readfile scale really well. In other words, memory consumption and execution time does not increase significantly with increase in file size. That does not always mean your script will be faster just because you use these functions instead of require or include.