|
file
Reads entire file into an array
(PHP 4, PHP 5)
Reads an entire file into an array.
Note:
You can use file_get_contents() to return the contents of a file as a string. Parameters
Return Values
Returns the file in an array. Each element of the array corresponds to a
line in the file, with the newline still attached. Upon failure,
file() returns
Note:
Each line in the resulting array will include the line ending, unless
Note:
If you are having problems with PHP not recognizing the line endings when reading files either on or created by a Macintosh computer, you might want to enable the auto_detect_line_endings run-time configuration option. ChangeLog
ExamplesExample 630. file() example<?php Notes
Warning:
When using SSL, Microsoft IIS will violate the protocol by closing the connection without sending a close_notify indicator. PHP will report this as "SSL: Fatal Protocol Error" when you reach the end of the data. To workaround this, you should lower your error_reporting level not to include warnings. PHP 4.3.7 and higher can detect buggy IIS server software when you open the stream using the https:// wrapper and will suppress the warning for you. If you are using fsockopen() to create an ssl:// socket, you are responsible for detecting and suppressing the warning yourself. Related Examples ( Source code ) » file Examples ( Source code ) » File based login Examples ( Source code ) » fgetss Gets line from file pointer and strip HTML tags Examples ( Source code ) » Adding a New Node to contact.xml Examples ( Source code ) » A simple XML parser Examples ( Source code ) » Turning an XML Document into an Array Examples ( Source code ) » Print XML attributes Examples ( Source code ) » Walking the Document Tree Examples ( Source code ) » Use simplexml_load_file to load xml file Examples ( Source code ) » XML file dump Examples ( Source code ) » simplexml_load_file Examples ( Source code ) » XML Path in action Examples ( Source code ) » Set predefined value into xml path Examples ( Source code ) » Generating Tables from XML Examples ( Source code ) » Transforming XML into Basic HTML Examples ( Source code ) » XML file validation Code Examples / Notes » filee dot maccarthy
[[Editors note: using fopen/fgets instead of file() would be more efficient for this task as there is no need to load the entire file into memory]] Here is a quick snippet that will read in N number of lines of a file, then print them. $n=10 $fp = file('/path/to/your/file'); $i=0 while($i < $n){ echo "$fp[$i]"; $i++; } I am using this right now to display the current progress of the seti@home client working on my server, instead of displaying the whole thing, which isn't web page friendly. Because sometimes short really is sweet... 03-mar-2003 10:16
You can use file with https if you go to: http://ftp.proventum.net/pub/php/win32/misc/openssl/. This is instead of using the php_openssl.dll, so be sure to comment this extension in your php.ini. jonathan dot gotti
you can use $file = array_map('rtrim',file('myfile.txt')); to remove annoying ending lines of the resulting array. nuts
WARNING ON WINDOWS: file() function will add "\r\n" in to the end of the row, even if you use only "\n" char to make rows in the file! On UNIX systems there is no such problem. info
Using file() for reading large text files > 10 Mb gives problems, therefore you should use this instead. It is much slower but it works fine. $lines will return an array with all the lines. $handle = @fopen('yourfile...', "r"); if ($handle) { while (!feof($handle)) { $lines[] = fgets($handle, 4096); } fclose($handle); } reversed: moc dot liamg
This note applies to PHP 5.1.6 under Windows (although may apply to other versions). It appears that the 'FILE_IGNORE_NEW_LINES' flag doesn't remove newlines properly when reading Windows-style text files, i.e. files whose lines end in '\r\n'. Solution: Always use 'rtrim()' in preference to 'FILE_IGNORE_NEW_LINES'. skipjack
this a little function I wrote that checks if two ascii files are the same. it opens the file then removes the spaces then coverts the crc32 to base 10 and compares the results. function fcheck($tool) { if(fopen("file.01", "r") != FALSE){ $fp1 = 'file.02'; $fp = 'semcond.01'; $data = implode(" ", file($fp)); $data1 = implode(" ", file($fp1)); $test1 = (dechex(crc32($data))); $test2 = (dechex(crc32($data1))); if($test1 == $test2) $sfv_checksum = 'TRUE'; else $sfv_checksum = 'FALSE'; return $sfv_checksum; } } hhw
The following function can handle text files whose line endings are whatever <LF> (*nix), <CR><LF> (M$) or <CR> (Mac) function file2($filename) { $fp = fopen($filename, "rb"); $buffer = fread($fp, filesize($filename)); fclose($fp); $lines = preg_split("/\r?\n|\r/", $buffer); return $lines; } ae
The Changelog for PHP5 states that there is an optional parameter that instructs file() to cut off lineendings by itself, however, on this page, there is no mention of such a parameter: Added optional parameter to file() which makes the result array not contain the line endings and to skip empty lines. (Ilia) justin
Note: Now that file() is binary safe it is 'much' slower than it used to be. If you are planning to read large files it may be worth your while using fgets() instead of file() For example: $fd = fopen ("log_file.txt", "r"); while (!feof ($fd)) { $buffer = fgets($fd, 4096); $lines[] = $buffer; } fclose ($fd); The resulting array is $lines. I did a test on a 200,000 line file. It took seconds with fgets() compared to minutes with file(). richardtcunningham
justin at visunet dot ie's note of 20-Mar-2003 states "Note: Now that file() is binary safe it is 'much' slower than it used to be. If you are planning to read large files it may be worth your while using fgets() instead of file()." I tested fgets(), file_get_contents(), and file() on PHP 4.3.2 and PHP 5 and timed each to be under a second with over 200,000 lines. I do not know if he was testing extremely long lines or what, but I could not duplicate the difference that he mentioned. dir @ badblue com
Jeff's array2file function is a good start; here are a couple of improvements (no possibility of handle leak when fwrite fails, additional capability of both string2file and array2file; presumably faster performance through use of implode). function String2File($sIn, $sFileOut) { $rc = false; do { if (!($f = fopen($sFileOut, "wa+"))) { $rc = 1; break; } if (!fwrite($f, $sIn)) { $rc = 2; break; } $rc = true; } while (0); if ($f) { fclose($f); } return ($rc); } function Array2File($aIn, $sFileOut) { return (String2File(implode("\n", $aIn), $sFileOut)); } If you're generating your string text using a GET or POST from a TEXTAREA (e.g., a mini-web-text-editor), remember that strip_slashes and str_replace of "/r/n" to "/n" may be necessary as well using these functions. HTH --dir @ badblue com php@don't_spam_me
It appears that the file() function causes file access problems for perl cgi scripts accessing the same files. I am using Perl v5.6.0 in linux with PHP/4.0.4pl1. After running a php app using the file() function, any perl cgi trying to access the same file randomly dies returning an internal server error: premature end of script headers. The simple fix is to use fopen(), fgets() and fclose() instead of file(). kangaroo232002
Instead of using file() for parsing ini / conf files, as shown in mvanbeek at supporting-role dot co dot uk's example below (above?), a great function that puts all your conf info into an associative array is parse_ini_file($filename); very useful ! ian. webmaster
If you want to send a URL via GET to a script and want to open this URL via file() there are problems if there is a & sign in the URL, all after die & sign is cut. TO fix this an get it working with the & sign in the URL @$myopenedcontent= implode("", file ("$url")); $myopenedcontent=eregi_replace('&','{KU}',$myopenedcontent); so all & signs are replaced by {KU} before use the file() function you have to rereplace it, the whole code: $url=eregi_replace('{KU}','&,$url); @$myopenedcontent= implode("", file ("$url")); $myopenedcontent=eregi_replace('&','{KU}',$myopenedcontent); echo "$myopenedcontent"; hope it is helpful ;) Bye Afterburner global-thenumberafterzero
If you want a more powerful tool to open files you may want to use the curllib functions. If curllib is installed on your Server it is probably the best (but not fastest) tool for opening files. More information you can find here: http://curl.haxx.se or on php.net: http://de.php.net/manual/de/ref.curl.php andyg
i tried for quite sometime to get my pdf to attach right some of you may want to try reading it as binary first then base 64 it. //this did not work for me with a pdf file it came in garbled $data = chunk_split(base64_encode(implode("", file($filelocation)))); //but tis seemed to make it work correctly $data = fread($file,filesize($filelocation)); fclose($file); $data = chunk_split(base64_encode($data)); mvanbeek
I needed a cross platform config file for a project using both perl and php, so I used the perl script in the Perl Cookbook, and wrote the following PHP script. This going in an include file that all the PHP files reference, so the only thing that needs to be do for set up, is to set the location of the config file. $filename = "/opt/ssis/includes/ssis-config"; $config = file($filename); reset ($config); foreach ($config as $line) { if ( $line == "" ) next($config); # Ignore blankline elseif ( $line == "\n" ) next($config); # Ignore newline elseif ( strstr($line,"#")) next($config); # Ignore comments else { $line = rtrim($line); # Get rid of newline characters $line = ltrim($line); # Get rid of any leading spaces $value = preg_split("/\s*=\s*/", $line, 2); # split by "=" and removing blank space either side of it. ${Settings}["$value[0]"] = $value[1]; # Create a new array with all the values. } } I am sure there is a neater way of doing it, but all the Config libaries floating arround seemed very complicated. All the config file needs is a series of lines ( key = value ) in plain text. j
heres a little script to return a random quote from a quotes file. <?php $textfile = "Includes/Quotes.txt"; //quotes file if ($quotes = @file("$textfile")) { //don't display errors on file open $quote = rand(0, sizeof($quotes)-1); echo $quotes[$quote]; //echo a random quote }else{ echo ("default quote"); //if quotes file wasn't found, echo out a default quote } ?> andrea
file() has a strange behaviour when reading file with both \n and \r as line delimitator (DOS files), since it will return an array with every single line but with just a \n in the end. It seems like \r just disappears. This is happening with PHP 4.0.4 for OS/2. Don't know about the Windows version. redzia
Example usage of file to remove line containing a key string <? $key = "w3ty8l"; //load file into $fc array $fc=file("some.txt"); //open same file and use "w" to clear file $f=fopen("some.txt","w"); //loop through array using foreach foreach($fc as $line) { if (!strstr($line,$key)) //look for $key in each line fputs($f,$line); //place $line back in file } fclose($f); ?> john
after many months of confusion and frustration, i have finally figured out something that i should have noticed the first time around. you can't file("test.txt") when that same file has been flocked. i guess i didn't have a full understanding of what i was doing when i used flock(). all i had to do was move the flock() around, and all was well. akaylaa
a quick way to count the number of lines in a file is $lines = file ('filename'); $num_lines = count ($lines); echo ("Total lines in file: " . $num_lines); andekian
<?php //Simple way to read the contents of a cgi-script. $file = 'www.pickalandlord.com/cgi-bin/example.exe?parm1=value'; $result = @join (@file ($file),""); echo urldecode($result); /* based on how you receive the data back you may need to urldecode it Urldecoding depends on they way your headers are set in your cgi prog */ ?> |
Change Languagebasename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputcsv fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable lchgrp lchown link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink |