downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

Voting

Please answer this simple SPAM challenge: two minus zero?
(Example: nine)

The Note You're Voting On

webmaster at wildpeaks dot com
9 years ago
The following function retrieves a line in a file, regardless of its size, so you won't get an error if the file's size is beyond php's allowed memory limit (the string has to be below however), which is something i was needing for accessing a big log file generated by a webhost. Indexes start at 1 (so $line = 1 means the first line unlike arrays). If the file is small, it would be better to use "file()" however.

<?php
function strpos_count($haystack, $needle, $i = 0) {
    while (
strpos($haystack,$needle) !== false) {$haystack = substr($haystack, (strpos($haystack,$needle) + 1)); $i++;}
    return
$i;
}
function
getLine($file,$line=1){
   
$occurence = 0;
   
$contents = '';
   
$startPos = -1;
    if (!
file_exists($file)) return '';
   
$fp = @fopen($file, "rb");
    if (!
$fp) return '';
    while (!@
feof($fp)) {
       
$str = @fread($fp, 1024);
       
$number_of_occurences = strpos_count($str,"\n");
        if (
$number_of_occurences == 0) {if ($start_pos != -1) {$contents .= $str;}}
        else {
           
$lastPos = 0;
            for (
$i = 0; $i < $number_of_occurences; $i++){
               
$pos = strpos($str,"\n", $lastPos);
               
$occurence++;
                if (
$occurence == $line) {
                   
$startPos = $pos;
                    if (
$i == $number_of_occurences - 1) {$contents = substr($str, $startPos + 1);}
                } elseif (
$occurence == $line + 1) {
                    if (
$i == 0) {$contents .= substr($str, 0, $pos);} else {$contents = substr($str, $startPos, $pos - $startPos);}
                   
$occurence = 0;
                    break;
                }
               
$lastPos = $pos + 1;
            }
        }
    }
    @
fclose($fp);
    return
$contents;
}
?>

<< Back to user notes page

 
show source | credits | stats | sitemap | contact | advertising | mirror sites