Php fopen in utf 8

fopen

fopen() закрепляет именованный ресурс, указанный в аргументе filename , за потоком.

Список параметров

Если filename передан в форме «scheme://. «, он считается URL’ом и PHP проведёт поиск обработчика протокола (также известного как «обертка») для этой схемы. Если ни одна обёртка не закреплена за протоколом, PHP выдаст замечание, чтобы помочь вам отследить потенциальную проблему в вашем скрипте и затем продолжит выполнение, как если бы filename указывал на обыкновенный файл.

Если PHP установлено, что filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл это разрешают. Если вы включили безопасный режим или open_basedir, то накладываются дальнейшие ограничения.

Если PHP установлено, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.

Замечание:

Список поддерживаемых протоколов доступен в разделе Поддерживаемые протоколы и обработчики (wrappers). Некоторые протоколы (обертки) поддерживают контекст и/или опции php.ini . Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется оберткой http).

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

Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:

Список возможных режимов для fopen() используя mode
mode Описание
‘r’ Открывает файл только для чтения; помещает указатель в начало файла.
‘r+’ Открывает файл для чтения и записи; помещает указатель в начало файла.
‘w’ Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пробует его создать.
‘w+’ Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пытается его создать.
‘a’ Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘a+’ Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
‘x’ Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING . Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
‘x+’ Создаёт и открывает для чтения и записи; иначе имеет то же поведение что и‘x’.
‘c’ Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от ‘w’), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри flock() ) перед изменением, так как использование ‘w’ может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
‘c+’ Открывает файл для чтения и записи; иначе имеет то же поведение, что и ‘c’.

Замечание:

Разные семейства операционных систем имеют разные соглашения относительно окончания строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильные символы (или символ) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh используют \r в качестве символа конца строки.

Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы «странно выглядят».

Windows предлагает флаг режима текстовой трансляции (‘t’), который автоматически переведёт \n в \r\n во время работы с файлом. И наоборот — вы также можете использовать ‘b’, чтобы принудительно включить бинарный режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите ‘b’ или ‘t’ последней буквой параметра mode .

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

Если вы явно не укажете флаг ‘b’ во время работы с бинарными файлами, вы можете столкнуться со странной порчей ваших данных, включая испорченные файлы изображений и странные проблемы с символами \r\n.

Замечание:

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

Замечание:

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

Необязательный третий параметр use_include_path может быть установлен в ‘1’ или TRUE , если вы также хотите провести поиск файла в include_path.

Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

Возвращаемые значения

Возвращает указатель на файл в случае успешной работы, или FALSE в случае ошибки.

Ошибки

Если открыть файл не удалось, будет сгенерирована ошибка уровня E_WARNING . Вы можете использовать оператор @ для подавления этой ошибки.

Список изменений

Версия Описание
5.2.6 Добавлены опции ‘c’ и ‘c+’
4.3.2 С версии PHP 4.3.2, по умолчанию устанавливается бинарный режим для всех платформ, различающих бинарный и текстовый режимы. Если у вас появились проблемы после обновления, попытайтесь использовать в качестве обхода проблемы флаг ‘t’, пока вы не сделаете ваш скрипт более портируемым, как это было указано выше.

Примеры

Пример #1 Примеры использования fopen()

$handle = fopen ( «/home/rasmus/file.txt» , «r» );
$handle = fopen ( «/home/rasmus/file.gif» , «wb» );
$handle = fopen ( «http://www.example.com/» , «r» );
$handle = fopen ( «ftp://user:password@example.com/somefile.txt» , «w» );
?>

Примечания

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обертки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

Замечание: Когда опция safe mode включена, PHP проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

Замечание:

Если вы сталкиваетесь с проблемами во время чтения или записи файлов, и вы используете PHP в виде серверного модуля, убедитесь в том, что процесс сервера имеет доступ к используемым вами файлам и директориям.

Замечание:

Эта функция также может выполниться успешно, в случае если filename является директорией. Если вы не уверены является ли filename файлом или директорией, то вам необходимо воспользоваться функцией is_dir() , до вызова fopen() .

Смотрите также

  • Поддерживаемые протоколы и обработчики (wrappers)
  • fclose() — Закрывает открытый дескриптор файла
  • fgets() — Читает строку из файла
  • fread() — Бинарно-безопасное чтение файла
  • fwrite() — Бинарно-безопасная запись в файл
  • fsockopen() — Открывает соединение с интернет сокетом или доменным сокетом Unix
  • file() — Читает содержимое файла и помещает его в массив
  • file_exists() — Проверяет наличие указанного файла или каталога
  • is_readable() — Определяет существование файла и доступен ли он для чтения
  • stream_set_timeout() — Устанавливает значение тайм-аута на потоке
  • popen() — Открывает файловый указатель процесса
  • stream_context_create() — Создаёт контекст потока
  • umask() — Изменяет текущую umask
  • SplFileObject

Источник

Method for php to create utf8 encoded file using fopen

This article illustrates how php uses fopen to create an utf8 encoded file. Share it for your reference. The specific implementation method is as follows:

Generally speaking, if we use fopen directly to create files, we will find that the encoding of files is not uft-8, so if we want to create uft8 files, we need to do 1 some technical processing. The specific steps are as follows:

Using PHP to create a file encoded in utf-8 format:

Step 1: Create a new txt file, open it, file- > Save as xxx. php and change the encoding to UTF-8. Save.

Part 2: Add the following code to the php file:

 $filename=rand(100,999).".txt";// Define the file name and file format to be created (change it as needed) 
$str = "PHP Learning network [www.ofstack.com]";// Contents to be written to the new file
if (!$head=fopen($filename, "w+")) die(" Try to open a file [".$filename."] Failure ! Please check that you have sufficient permissions ! Creation process terminated !");
>
if (fwrite($head,$str)==false) fclose($head);
die(" Failed to write content ! Please check that you have sufficient permissions ! Write process terminated !");
>
echo " Successfully created UTF-8 Format file [".$filename."] And writes the contents to the file: ".$str;
fclose($head);
?>

Ensure that the encoding format of the PHP code file itself is UTF-8
② What is the encoding format of the php code file? What is the file encoding created
③ The problem of garbled code is displayed

There are three main factors that control the display of the page:

1. HTML code control: The head tag in the standard HTML web page file contains this code < meta http-equiv="Content-Type" content="text/html; charset=utf-8" / >The sentence charset=utf-8 in the code tells the browser to display the contents of the web page in utf-8 format.

2. PHP code control: If header («content-Type: text/html; charset=utf-8 «); This code is also intended to tell the browser to display the contents of the web page in utf-8 format. (Note: This code cannot be preceded by output similar to echo.)

3. File physical storage attribute control: open a file with Notepad, file- > Save As, what you see in «Encoding» is the real encoding of the current file

 $f=fopen("test.txt", "wb"); 
$text=utf8_encode("a!");

// First use function utf8_encode Change the data to be written to UTF Encoding format.

$text="\xEF\xBB\xBF".$text;

//"\xEF\xBB\xBF", This string of characters is indispensable, and the generated file will become UTF-8 Format, otherwise it will still be ANSI Format.

fputs($f, $text);

// Write.

fclose($f);
?>

The file encoding format created in this way is indeed utf-8, but the Chinese characters in the file appear garbled phenomenon. After 1 debugging, the code is as follows:

 $ctxtsubmit=" Good "; 
$f=fopen("../".$file, "wb");
//$text=utf8_encode($ctxtsubmit);
// First use function utf8_encode Change the data to be written to UTF Encoding format.
$text="\xEF\xBB\xBF".$ctxtsubmit;
//"\xEF\xBB\xBF", This string of characters is indispensable, and the generated file will become UTF-8 Format, otherwise it will still be ANSI Format.
fputs($f, $text);
// Write.
fclose($f);
?>

I hope this article is helpful to everyone’s PHP programming.

Источник

Читайте также:  Javascript textarea line by line
Оцените статью