sorry_i_noob
@sorry_i_noob

Несколько вопросов по функции fopen?

Здравствуйте.
На странице мануала по функции fopen сказано...
На платформе Windows, необходимо экранировать все обратные слеши в пути к файлу или использовать прямые слеши.

Я написал вот такой код (без экранирования символов), и он прекрасно работает:
<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

$fopen_result_1 = fopen('folder\file.txt', "a+");
$content_1 = fread($fopen_result_1, filesize('folder\file.txt'));
echo $content_1;

echo '<br><br><br><br>';

$fopen_result_2 = fopen('folder/file.txt', "a+");
$content_2 = fread($fopen_result_2, filesize('folder/file.txt'));
echo $content_2;

Почему он работает? И не выдается никакой ошибки. Это был вопрос первый.

Вопрос второй. В мануале написано...
Так как установка флага трансляции по умолчанию зависит от SAPI и используемой версии PHP, рекомендуем явно задавать указанный флаг из соображений портируемости. Вы должны использовать режим 't', если вы работаете с текстовыми файлами и используете \n для обозначения конца строки в вашем скрипте, но при этом предполагаете, что ваши файлы будут использоваться в таких приложениях, как "Блокнот". Во всех остальных случаях используйте флаг 'b'.

А потом...
Замечание:
Из соображений портируемости, настоятельно рекомендуется всегда использовать флаг 'b' при открытии файлов с помощью fopen().

Замечание:
Кроме того, из соображений портируемости, также настойчиво рекомендуется переписать старый код, который полагается на режим 't', чтобы вместо этого он использовал правильные концы строк и режим 'b'.

Сначала говорится, что 't' нужно использовать при открытии текстовых файлов, а 'b' - при открытии бинарных. А потом - ВСЕГДА ИСПОЛЬЗОВАТЬ 'b'. Так что использовать? Не понятно. Можете объяснить?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
riky
@riky
Laravel
1) экранировать нужно если после слеша идет n, t или r. Т.к. \r \n \t это спец символы. Ваш код работает потому что после слеша другие символы. Для того чтобы не заставлять помнить эти спец символы предлагают экранировать все. Правда это актуально только если путь в двойных кавычках. т.е. "folder\nile.txt".

2) не используйте t. при его использовании и запуске скрипта на винде при записи в файл у вас будет заменяться \n на \r\n. Для того чтобы стандартный блокнот нормально открывал. Естественно это чушь (как и использовать этот блокнот).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы