Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
е еще раз посмотрим на предыдущие примеры. Обратите внимание на доселе 
не встречавшуюся нам конструкцию or die(). Ее особенно удобно применять как 
раз при работе с файлами. Как мы знаем, оператор or имеет очень низкий 
приоритет 
(даже ниже, чем у =), поэтому в нашем примере всегда выполняется уже после при- 

сваивания. Иными словами, первая строчка примера с точки зрения PHP выглядит 
так: 
($f=fopen("/home/user/file.txt", "r")) or die("Ошибка!"); 

Глава 15. Работа с файлами 249 
Конечно, то, что or обозначает "логическое ИЛИ" в нашем случае не так интересно 

(ибо возвращаемое значение просто игнорируется). Нас же сейчас интересует 
другое 
свойство оператора: выполнять второй свой операнд только в случае ложности 
перво- 
го. Смотрите: если файл открыть не удалось, fopen() возвращает false, а значит, 

осуществляется вызов die() "на другом конце" оператора or. 
Заметьте, что нельзя просто так заменить or на, казалось бы равнозначный ему 
опе- 
ратор ||, потому что последний имеет гораздо более высокий приоритет — выше, 
чем у =. Таким образом, в результате вызова функции 
$f=fopen("/home/user/file.txt", "r") || die("Ошибка!"); 
в действительности будет выполнено 
$f = (fopen("/home/user/file.txt", "r") || die("Ошибка!")); 
Как видите, это не совсем то, что нам нужно. 
Безымянные временные файлы 
Иногда всем нам приходится работать с временными файлами, которые при завер- 
шении программы хотелось бы удалить. При этом нас интересует лишь файловый 
дескриптор, а не имя временного файла. Для создания таких объектов в PHP 
предусмотрена специальная функция. 
int tmpfile() 
Создает новый файл с уникальным именем (чтобы другой процесс случайно не по- 
считал этот файл "своим") и открывает его на чтение и запись. В дальнейшем вся 
работа должна вестись с возвращенным файловым дескриптором, потому что имя 
файла недоступно. 
Фраза "имя файла недоступно" может породить некоторые сомнения, но это 
действительно так по одной-единственной причине: его просто нет. Вот как 
такое может произойти? В большинстве систем после открытия файла его имя 
можно спокойно удалить из дерева файловой системы, продолжая при этом 
работать с "безымянным" файлом через дескриптор, как обычно. При закрытии 
этого дескриптора блоки, которые занимает файл на диске, будут автоматиче- 
ски помечены как свободные. 
Пространство, занимаемое временным файлом, автоматически освобождается при его 
закрытии и при завершении работы программы. 

Часть IV. Стандартные функции PHP 250 
Закрытие файла 
После работы файл лучше всего закрыть. На самом деле это делается и автоматиче- 

ски при завершении сценария, но лучше все же не искушать судьбу и законы Мэрфи. 

Особенно, если вы одновременно открыли десятки (или сотни) файлов. 
int fclose(int $fp) 
Закрывает файл, открытый предварительно функцией fopen() (или popen() или 
fsockopen(), но об этом позже). Возвращает false, если файл закрыть не удалось 
(например, что-то с ним случилось или же разорвалась связь с удаленным хостом). 
В 
противном случае возвращает значение "истина". 
Заметьте, что вы должны всегда закрывать FTP- и HTTP-соединения, потому что в 
про- 
тивном случае "беспризорный" файл приведет к неоправданному простою канала и 
из- 
лишней загрузке сервера. Кроме того, успешно закрыв соединение, вы будете 
уверены в 
том, что все данные были доставлены без ошибок. 
Особенно своевременное закрытие критично при использовании FTP-файла в 
режиме записи, когда вывод программы для ускорения буферизуется. Не за- 
крыв файл, вы вообще не сможете быть уверены, что буфер вывода очистил- 
ся, а значит, файл записался на удаленную машину верно. 
Чтение и запись 
Для каждого открытого файла (точнее, для каждого файлового дескриптора, ведь 
один и тот же файл может быть открыт несколько раз, т. е. с ним может быть 
связано 
сразу несколько дескрипторов) система хранит определенную величину, которая на- 

зывается текущей позицией ввода-вывода, или указатель файла. Функции чтения и 
записи файлов работают именно с этой позицией. А именно, функции чтения читают 
блок данных, начиная с этой позиции, а функции записи — записывают, также от- 
считывая от нее. Если указатель файла установлен за последним байтом и 
осуществляется запись, то файл автоматически увеличивается в размере. Есть 
также 
 
<<-[Весь Текст]
Страница: из 287
 <<-