Я смущен отсутствием какой-либо команды между открытием и закрытием ручки.
Позвольте мне поместить что-то впереди: слева '{' и справа '}' скобка - это управление потоком, и между ними нужны команды. fopen()
и fclose()
нет. Хотя это только две команды, они наследуют намного больше.
При этом давайте посмотрим на их задачи: fopen()
делает ...
- (a) ищет специфику c file,
- (b) если файл не существует, он создает файл
- (c) открывает файл только для записи,
- (d ) перенаправляет указатель файла на начало файла,
- (e) если файл длиннее нуля, он усекает его до нулевой длины.
In В частности, меня смущает отсутствие какой-либо команды между открытием и закрытием ручки.
Вы видите, что между ними много "команд". Так что не волнуйтесь.
У меня странное ощущение, что существует вероятность того, что файл: возможно, не будет очищен
Если быть точным, файл не является очищено, оно обрезается до нулевой длины. Более ранние данные этого файла все еще находятся в памяти вашего хранилища данных. Но это зависит от вашей операционной системы. Существуют программы для полного удаления этих блоков данных.
[...], или могут быть повреждены
Я не понимаю вопроса. Вы собираетесь удалить файл - какой урон вы еще ожидаете?
[...] или заполнены случайными данными в некоторых случаях.
То есть C -стиль для создания переменных путем установки указателя на свободную память, но без очистки данных, которые были ранее в нем, и передачи этой обязанности вам. Но здесь это только усечение, а не перенаправление указателя файла. Этот страх можно игнорировать.
Но у меня есть вопрос, действительно ли эта функция на 100% безопасна, то есть ее поведение определено однозначно, и результат будет таким, как ожидалось.
Да, обычно поведение определяется однозначно. Но вы должны ожидать некоторых побочных эффектов:
- , если файл не существует, он будет создан. Вы должны иметь доступ для записи в каталог. (иначе он вернется с ложным)
- если у вас нет прав на запись в файл, он вернется с ложным.
- , если ваша php среда использует "безопасный режим" возможная разница между владельцем и пользователем приводит к ошибке
fopen()
. Вы должны быть уверены, что файл работает только вами.
Может случиться, что вы просто напишите fopen()
и не будете проверять возвращаемый параметр. Это может вызвать проблему и привести к: не на 100% безопасно, если вы не будете правильно реагировать.
Так что - да fopen()
и fclose()
достаточно, исправьте и сообщите вам, если работа не выполнена должным образом.