For C/C++ programmers.
fscanf() does not work like C/C++, because PHP's fscanf() move file pointer the next line implicitly.(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
fscanf — Обрабатывает данные из файла по условиям формата
   Функция fscanf() аналогична функции
   sscanf(), но берёт входные данные из файла,
   который связан с потоком stream, и интерпретирует входные данные
   по условиям формата format.
  
   Любой пробельный символ в строке формата эквивалентен любому
   пробельному символу во входящем потоке. Это означает, что даже символ табуляции
   (\t) в строке формата может соответствовать
   одному символу пробела в потоке входных данных.
  
Каждый вызов функции fscanf() считывает одну строку из файла.
streamРесурс (resource) указателя файловой системы, который обычно создают функцией fopen().
format
    Формат интерпретации строки string,
    который описывает документация к функции sprintf()
    со следующими отличиями:
    
F, g, G
      и b.
     D обозначает десятичное число.
     i обозначает целое число с определением системы счисления.
     n обозначает количество символов, которые функция уже обработала.
     s останавливает чтение при любом пробельном символе.
     * вместо спецификатора преобразования argnum$ подавляет
      присваивание этого спецификатора преобразования.
     varsНеобязательные переменные, которым функция присвоит значения.
Функция возвращает массив с результатами разбора, если в функцию передали только два аргумента. Функция вернёт количество присвоенных значений, если передали необязательные аргументы. Необязательные аргументы требуется передавать по ссылке.
   Если параметр format ожидает больше подстрок,
   чем доступно в параметре string, вернётся значение null.
   Функци вернёт false, если возникнут другие ошибки.
  
Пример #1 Пример использования функции fscanf()
<?php
$handle = fopen("users.txt", "r");
while ($userinfo = fscanf($handle, "%s\t%s\t%s\n")) {
    list ($name, $profession, $countrycode) = $userinfo;
    //... совершаем какие-либо действия над значениями
}
fclose($handle);
?>
Пример #2 Содержимое файла users.txt
javier argonaut pe hiroshi sculptor jp robert slacker us luigi florist it
For C/C++ programmers.
fscanf() does not work like C/C++, because PHP's fscanf() move file pointer the next line implicitly.It would be great to precise in the fscanf documentation
that one call to the function, reads a complete line.
and not just the number of values defined in the format.
If a text file contains 2 lines each containing 4 integer values,
reading the file with 8 fscanf($fd,"%d",$v) doesnt run !
You have to make 2 
fscanf($fd,"%d %d %d %d",$v1,$v2,$v3,$v4);
Then 1 fscanf per line.If you want to read text files in csv format or the like(no matter what character the fields are separated with), you should use fgetcsv() instead. When a text for a field is blank, fscanf() may skip it and fill it with the next text, whereas fgetcsv() correctly regards it as a blank field.Yet another function to read a file and return a record/string by a delimiter.  It is very much like fgets() with the delimiter being an additional parameter.  Works great across multiple lines.
function fgetd(&$rFile, $sDelim, $iBuffer=1024) {
    $sRecord = '';
    while(!feof($rFile)) {
        $iPos = strpos($sRecord, $sDelim);
        if ($iPos === false) {
            $sRecord .= fread($rFile, $iBuffer);
        } else {
            fseek($rFile, 0-strlen($sRecord)+$iPos+strlen($sDelim), SEEK_CUR);
            return substr($sRecord, 0, $iPos);
        }
    }
    return false;
}If you want to parse a cron file, you may use this pattern:
<?php
while ($cron = fscanf($fp, "%s %s %s %s %s %[^\n]s"))
{
}
?>to include all type of visible chars you should try:
<?php fscanf($file_handler,"%[ -~]"); ?>actually, instead of trying to think of every character that might be in your file, excluding the delimiter would be much easier.
for example, if your delimiter was a comma use:
%[^,]
instead of:
%[a-zA-Z0-9.| ... ]
Just make sure to use %[^,\n] on your last entry so you don't include the newline.