Анимация
JavaScript
|
Главная Библионтека ("myfile.txt","r"); while(!feof($f)) { $st=fgets($f); теперь обрабат1ваем очередную строку $st . . . функции являются синонимами. Что ж... Несмотря на это, я все-таки рискну вхдви-нуть такое предположение. Чтение CSV-файла Программа Excel из Microsoft Office стала настолько популярна, что в PHP даже встроили функцию для работы с одним из форматов файлов, в которых может сохранять данные Excel. Часто она бывает довольно удобна и экономит пару строк дополнительного кода. list fgetcsv(int $f, int $length, char $delim=,) Функция читает одну строку из файла, заданного дескриптором $f, и разбивает ее по символу $delim. Параметр $delim должен обязательно быть строкой из одного символа, в противном случае принимается во внимание только первый символ этой строки. Функция возвращает получившийся список или false, если строки кончились. Параметр $length задает максимальную длину строки точно так же, как это делается в fgets(). Пустые строки в файле не игнорируются, а возвращаются как список из одного элемента - пустой строки. Функция fgetcsv() работает чуть быстрее пары fgets()/explode() , но зато она, как мы можем видеть, гораздо менее универсальна. Применяйте ее в таком контексте: $f=fopen("file.csv","r") or die("Ошибка!"); for($i=0; $data=fgetcsv($f, 1000, ";"); { $num = count($data); if($num==1 && $data[0]==="") continue; echo "<h3>Строка номер $i ($num полей):</h3>"; for($c=0; $c<$num; $c++) print "[$c]: $data[$c]<br>"; fclose($f); Положение указателя текущей позиции int feof(int $f) Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла). Эта функция чаще всего используется в следующем fclose($f); Лучше избегать подобных конструкций, т. к. в случае больших файлов они довольно медлительны. Лучше читайте файл целиком при помощи File() (см. ниже) или fread() - конечно, если вам нужен доступ к каждой строке этого файла, а не только к нескольким первым! int fseek(int $f, in $offset, int $whence=SEEK SET) Устанавливает указатель файла на байт со смещением $offset (от начала файла, от его конца или от текущей позиции, в зависимости от параметра $whence). Это, впрочем, может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением HTTP или FTP. Параметр $whence, как уже упоминалось, задает, с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2: □ SEEKSET - устанавливает позицию начиная с начала файла; □ SEEKCUR - отсчитывает позицию относительно текущей позиции; □ SEEK END - отсчитывает позицию относительно конца файла. В случае использования последних двух констант параметр $offset вполне может быть отрицательным (а при применении seekend он будет отрицательным наверняка). Как это ни странно, но в случае успешного завершения эта функция возвращает 0, а в случае неудачи -1. Почему так сделано - неясно. Наверное, по аналогии с ее Си-эквивалентом? int ftell(int $f) Возвращает положение указателя файла. Собственно, вот и все, что делает эта функция. Функции для определения типов файлов Помимо уже рассмотренных, PHP имеет также набор вспомогательных (и весьма удобных) функций для работы с файлами. Они отличаются тем, что работают не с файловыми идентификаторами, а непосредственно с их именами. Определение типа файла bool file exists(string $filename) Возвращает true, если файл с именем $filename существует на момент вызова. Используйте эту функцию с осторожностью! Например, следующий код никуда не годится с точки зрения безопасности: $fname="/etc/passwd"; if(!file exists($fname) $f=fopen($fname,"w"); else $f=fopen($fname,"r"); Дело в том, что между вызовом file exists() и открытием файла в режиме w проходит некоторое время, в течение которого другой процесс может "вклиниться" и " подменить" используемый нами файл. Сейчас это все кажется маловероятным, но данная проблема выходит на передний план при написании сценария счетчика. Мы еще остановимся на ней чуть позже. string filetype(string $filename) Возвращает строку, которая описывает тип файла с именем $filename. Если такого файла не существует, возвращает false. После вызова строка будет содержать одно из следующих значений: □ file - обгчный файл; □ dir - каталог; □ link - символическая ссылка; □ fifo - fifo-канал; □ block - блочно-ориентированное устройство; □ char - символьно-ориентированное устройство; □ unknown - неизвестный тип файла. Рассматриваемые ниже несколько функций представляют собой лишь надстройку для функции filetype(). В большинстве случаев они очень полезны, и пользоваться ими удобнее, чем последней. bool is file(string $filename) Возвращает true, если $filename - обгчный файл. bool is dir(string $filename) Возвращает true, если $filename - каталог. bool is link(string $filename) Возвращает true, если $filename - символическая ссылка. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 [ 83 ] 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |