Функция readfile в php проверяет существует ли файл
В общем виде взаимодействие с файлами в PHP сводится к открытию файла, выполнению с ними необходимых действий и закрытию файла. При открытии файла определяется режим дальнейшей с ним работы. Это может быть открытие для чтения, записи, добавления данных. Есть так же режимы открытия файла, совмещающие в себе одновременно и чтение и запись.
Существует множество возможностей выполнять чтение из файлов – можно получить данные в разной форме – построчное считывание, получение массива строк и так далее.
Создание и запись файла
Для создания файла, необходимо выполнить открытие файла в режиме записи. Открытие файла выполняется функцией fopen. Первым параметром этой функции указывает путь к файлу. Второй параметр указывает на режим открытия файл. Для создания файла нужно указать режим записи файла - "w".
Если файл с таким именем уже есть, то режим записи позволит создать новый пустой файл на месте существующего, удалив все его данные.
Еще существует параметр "w+", позволяющий, открывать одновременно для чтения и записи. При этом, если файл с таким именем уже существовал, данные в нем сотрутся.
При выполнении операции открытия, функция вернет значение – дескриптора файла – специальной файловой переменная, которая будет указывать последующим функциям с каким именно файлом выполнять свои действия.
Для добавления новых данных в открытый в режиме записи файл используется функция fwrite. Первым параметром указывается дескриптор файла. Затем строка, которую нужно записать в файл. При необходимости, третьим параметром можно ограничить количество записываемых символов.
После записи всех строк, его необходимо закрыть. Для этого применяется функция fclose. Единственным параметром для нее служит дескриптор файла.
В итоге, код создания и сохранения файла выглядит следующим образом:
Символы "\r\n" означают символ конца строки. Если не добавлять, все строки в записанном файле объединятся в одну строку.
Добавление данных в существующий файл
Для того, чтобы дописать какую-либо информацию в уже созданный файл, его нужно открыть в режиме записи, но с сохранением имеющейся информации. Т.е. файл будет открыт так же для записи, но при записи в такой файл, они будут добавляться в его конец.
Если же файла с указанным именем не существует, файл будет создан и все данные будут записаны в него.
Еще есть режим "a+", открывающий файл для чтения и записи, с переходом в конец файла.
Чтение файла
Для чтения из файла, функции fopen назначается параметр "r", что означает, что файл будет открыт только для чтения. Чтение из файла выполняет функция fgets. Первым параметром указывается дескриптор файла. Второй, необязательный, параметр определяет размер считываемой строки. Если второй параметр не указывать, текущая строка будет считана до символа конца строки.
Режим "r+" открывает файл для чтения и записи.
Для считывания всех строк из файла, можно воспользоваться циклом, в котором будет считываться по одной строке до конца файла:
Функция feof используется в условии цикла для определения конца файла и завершения цикла считывания.
Кроме описанного метода получения данных из файла, PHP имеет еще множество различных функций. Иногда проще получить стразу все содержимое файла (функция readfile) или загрузить все строки в массив (функция file), и работать уже с ним. Для таких целей не придется открывать файл для чтения и закрывать его. Все эти действия будут выполнены самой функцией.
С помощью функции fgetc можно считывать содержимое файла посимвольно:
Удаление файла
Удаление файла выполняется функцией unlink. В параметре указывается путь к удаляемому файлу.
Проверка существует ли файл
Иногда, прежде чем, выполнять какие-либо действия с файлом необходимо проверить, существует ли он. Для этого используется функция file_exists. В параметре указывается путь к файлу.
На самом деле, чем открыть php файл, не является большой проблемой. Бывает труднее открыть бутылку пива, когда находишься посреди леса. Но так думают лишь заядлые программисты. А для новичков поведаем обо всех возможностях php для работы с файлами:
Файлы php
Файлы с расширением php содержат в себе код написанный, на одноименном языке программирования. В отличие от других языков, php является серверным языком программирования. То есть он выполняется на стороне сервера. Поэтому для отладки его кода на клиентской машине должен быть установлен локальный сервер.
Для работы с файлами php используются специальные приложения – программные редакторы. Наиболее распространенными из них являются:
- Dreamweaver.
- PHPEdit.
- Eclipse PHP Development.
При создании сайтов на основе php может потребоваться многократное использование программного кода. В таких ситуациях удобно подключать уже готовые решения, находящиеся в другом файле. Для этого используется конструкция include . Ее синтаксис:
Открытие и закрытие файлов
В php все операции с файлами осуществляются в несколько этапов:
- Открытие файла;
- Редактирование содержимого;
- Закрытие файла.
Для открытия файла используется функция fopen() . Ее синтаксис:
Для закрытия доступа к файлу служит функция fclose () . Синтаксис:
int fclose (int file) , где int file – дескриптор сайта, который нужно закрыть.
После каждого чтения или записи файл нужно закрывать этой функцией. Иначе остается открытым поток, созданный для файла. А это ведет к лишнему расходу серверных мощностей.Чтение и запись файлов
Для простого отображения всего содержимого файла идеально подходит функция readfile () . Ее синтаксис:
readfile (string filename) , где string filename – строковое имя фала ( не дескриптор ).
Тот же самый файл можно прочитать с помощью функции fpassthru () . Она считывает данные от конечной позиции указателя и до конца файла. Ее синтаксис:
Для работы с функцией требуется открытие и закрытие файла. Пример:
Результат аналогичен предыдущему.
Функции для работы с файлами в php позволяют считывать содержимое построчно и посимвольно:
- string fgets ( int file, int length) – функция считывает строку длиною length . Пример:
- string fread (int file, int length) – по действию идентична предыдущей.
Для записи текстовых данных в файл существует две идентичные функции:
- int fputs ( int file, string string [, int length ])
- int fwrite ( int file, string string [, int length ])
Функции записывают в файл int file строку string string указанной длины int length ( необязательный аргумент ). Пример:
Создание и удаление файлов
Чтобы создать файл php , можно использовать функцию fopen() в режиме доступа « w » или « w+ ». Или функцию touch () . Она устанавливает время изменения файла. При отсутствии элемента с искомым именем он будет создан. Ее синтаксис:
Для создания копии файла используется функция copy() . В качестве аргументов она принимает имя оригинала и файла, куда нужно скопировать содержимое. Если он не существует, то будет создан. Синтаксис функции:
Удалить файл можно с помощью функции unlink() . Ее синтаксис:
Получение информации о файле
Для получения информации о файлах в php используется целый ряд функций:
- bool fileexists (string filename) – проверяет, существует ли элемент;
- int fileatime (string filename) – возвращает время последнего открытия;
- int filesize (string filename) – возвращает байтовый размер файла;
- string filetype (string filename) – тип файла.
Это еще не все возможности для работы с файлами, реализованные в php . Многие из методов и функций остались за кадром. Так что простор для самостоятельного познания еще велик.
В этом уроке вы узнаете несколько важных функций на PHP, которые достаточны для всех ваших основных потребностей чтения и записи файлов. Вы узнаете, как читать файл, записывать в файл, записывать в текстовый файл и проверять, существует ли файл.
К счастью, PHP предоставляет множество функций для чтения и записи данных в файлы. В этом уроке я покажу вам самые простые способы чтения данных из локального или удаленного файла и способы использования флагов для записи в файлы именно так, как мы хотим.
Проверка наличия файла
Ваш первый шаг при попытке чтения данных из файла или записи чего-то в него должен состоять в том, чтобы проверить, существует ли файл уже. Попытка прочитать данные из файла, который не существует, приведет к предупреждению с PHP и, вероятно, приведет к краху вашего кода.
Самый простой способ проверить, существует ли файл, - использовать функцию PHP file_exists($filename) . Он вернет true , если файл или каталог с заданным $filename существует и false в противном случае. Это может быть очевидно, но я хотел бы указать, что $filename не обязательно должно быть именем файла. Это также может быть абсолютный или относительный путь. Например, мы могли бы использовать prime_numbers.txt или science/project/period_table.txt.
Также важно помнить, что эта функция также вернет false для файлов, которые недоступны из-за ограничений безопасного режима.
Другой функцией, которую вы можете использовать для проверки существования файла, является is_file() . В отличие от file_exists() , эта функция возвращает только true , если указанный путь указывает на файл, а не на каталог.
Убедимся, что файл фактически существует
Если код, который вы пишете, выполняет множество операций с файлами в определенном файле, вы можете получить неверные результаты, используя вышеуказанные функции. Это связано с тем, что результаты выполнения файлов file_exists() и is_file() кэшируются для повышения производительности. PHP также кэширует значения, возвращаемые другими функциями файловой системы, такими как filesize() , filemtime() и т. д.
Вы можете вызвать clearstatcache() , чтобы убедиться, что любая информация, которую вы просматриваете для файла, обновлена.
Обычно это проблема только в том случае, если к одному и тому же файлу обращаются несколько раз в одном скрипте, чтобы узнать его статус. Кроме того, кэшированные данные очищаются, если вы удаляете файл внутри скрипта с помощью функции unlink() . Это в основном означает, что вы, вероятно, не столкнетесь с какими-либо проблемами, связанными с кешированием, но по-прежнему хорошо знать, что вы можете очистить кеш, если информация устареет или вы получаете неожиданные результаты при попытке получить доступ к информации о файле.
Чтение данных из файла в PHP
Один из самых простых способов чтения данных из файла в PHP - с помощью функции file_get_contents($filename, $use_include_path, $context, $offset, $maxlen) . Он просто прочитает весь файл и передаст его вам в виде строки. Все параметры, кроме первого, являются необязательными.
Второй параметр принимает логическое значение, чтобы определить, должен ли он искать файл в местоположении, указанном путем include, который может быть задан с помощью функции set_include_path() .
Параметр $offset определяет точку начала чтения исходного файла. Отрицательное значение начнет отсчет с конца. Поддержка отрицательных смещений была добавлена только в PHP 7.1.0. Стоит отметить, что смещение работает только с локальными файлами и не поддерживается для удаленных файлов.
Функция file_get_contents() считывает весь файл сразу по умолчанию. Вы можете изменить это поведение, указав значение параметра $maxlen . Длина символов, подлежащих чтению, подсчитывается из значения смещения.
Эта функция вернет false , если не удалось прочитать данные из указанного файла. Тем не менее, она также может возвращать значения, которые вычисляются как false , поэтому убедитесь, что вы проверяете, действительно ли он вернул false с помощью оператора === .
Вы можете использовать эту функцию для открытия удаленных файлов, но это было бы возможно, только если значение параметра allow-url-fopen в php.ini true или 1 .
Запись данных в файл в PHP
Один из самых простых способов записи данных в файл в PHP - с помощью функции file_put_contents($filename, $data, $flags, $context) .
Параметр $filename определяет файл, в котором будут записываться данные. Второй параметр - это данные, которые вы хотите записать в файл. В большинстве случаев это будет строка, но она также может быть массивом или ресурсом потока.
Помните, что PHP автоматически создаст файл с заданным именем, если он еще не существует. Однако он не создаст для вас каких-либо каталогов. Это означает, что вы можете сохранить файл с именем On the Origin of Species [Charles Darwin].txt без каких-либо ошибок. Однако установка $filename в Biology/Evolution/On Origin of Species [Charles Darwin] .txt, если Biology/Evolution/ еще не существует, приведет к ошибке.
Параметр $flags определяет, как содержимое будет записано в файл. Он может иметь любое или все из следующих трех значений:
- FILE_USE_INCLUDE_PATH - Это указывает PHP на поиск имени файла в каталоге include.
- FILE_APPEND - Это скажет PHP, чтобы добавить данные, которые вы передали функции, к существующим данным в файле. Это может быть полезно, если вы храните данные в файле, таком как журнал или личный дневник. Запись новых данных, таких как температура или события, которые произошли с вами сегодня, не будет перезаписывать то, что вы записали вчера.
- LOCK_EX - Это скажет PHP, чтобы получить блокировку файла, прежде чем начинать писать в него содержимое. Это может предотвратить непредвиденные события, когда два разных сценария читают или записывают данные в один и тот же файл. С этим конкретным значением вы получите эксклюзивную блокировку файла. Вы можете узнать больше об этих блокировках в документации PHP о функции flock() .
Эта функция возвращает количество байтов, которые были записаны в файл с успехом, и false при ошибке. Тем не менее, вы все равно должны использовать строгий оператор равенства, чтобы проверить, было ли успешным запись содержимого в файл. Это потому, что код, который записывает 0 байтов в файл, будет по-прежнему оцениваться как false.
Чтение и запись данных в файлы
Вы можете перейти на сайт Project Gutenberg и попытаться загрузить файлы с помощью функции file_get_contents() . После того, как у вас есть данные в строке, вы также можете просто сохранить их в локальном файле с помощью функции file_put_contents() . В следующем примере это будет ясно:
Вы также можете сохранить веб-страницы или контент с таких сайтов, как Википедия. Если вам нужно понять HTML или проанализировать содержимое HTML, которое вы только что сохранили локально, вы можете следовать руководству, например, Парсинг HTML на PHP с помощью DiDOM, что поможет вам автоматически получать ссылки, файлы изображений или любую другую такую информацию с веб-страницы.
Вернемся к локальным файлам. Подумайте о ситуации, когда у вас есть куча текстовых файлов, и вы хотите проанализировать их содержимое, чтобы увидеть такие вещи, как самые распространенные слова в них. Этого можно добиться легко, используя кучу встроенных функций PHP.
Мы преобразовали весь текст в нижний регистр и сделали предположение, что каждое слово разбивается на пробелы. Затем текст преобразуется в массив с помощью метода explode() , чтобы упростить анализ отдельных слов. Удивительно, но слово «эволюция» не используется ни разу во всей книге, которая дала теорию эволюции ее происхождения.
Это был просто пример автоматического анализа большого количества текста. Вы можете сделать что-то подобное с любым типом текста, хранящегося в файле.
Логирование данных с помощью FILE_APPEND
Еще одним полезным примером может быть логирование информации в течение небольших периодов времени. Это может быть ваша тренировка, метеорологические данные или колония пчел, которую вы наблюдаете. После того, как у вас есть данные в строке, вы можете легко сохранить его в файле и добавить его к существующим данным, используя флаг FILE_APPEND с file_put_contents() .
Подобный код можно использовать для чего-то вроде хранения ежедневной статьи в Википедии в файле каждый день или отслеживания новостных статей и заголовков в течение недель или месяцев. Все, что вам нужно сделать, это написать код, чтобы очистить данные, а затем сохранить их, используя что-то похожее на приведенный выше фрагмент кода. Учебник, подобный Парсингу HTML на PHP при помощи DiDOM может помочь вам.
Вместо того, чтобы писать текст в обычном формате, вы можете обернуть его в некоторый HTML, чтобы упростить чтение в браузерах. Возможности безграничны.
Заключительные мысли
Существует много других способов чтения и записи данных в файлы на PHP. Однако file_get_contents() и file_put_contents() будут решать почти все ваши основные потребности, не добавляя ненужных осложнений.
Единственный раз, когда вы можете столкнуться с проблемой с file_get_contents() , является то, что файл, который вы читаете, очень большой - размером 2ГБ или более. Это связано с тем, что file_get_contents() загружает весь файл в память сразу, и есть хорошие шансы исчерпать память с такими большими файлами. В этом случае вам нужно будет полагаться на такие функции, как fgets() и fread() , чтобы сразу прочитать небольшую часть файла.
Поскольку PHP является серверным языком программирования, он позволяет вам работать с файлами и каталогами, хранящимися на веб-сервере. В этом руководстве вы узнаете, как создавать, получать доступ и управлять файлами на вашем веб-сервере с помощью функций файловой системы PHP.
Открытие файла с помощью PHP-функции fopen()
Для работы с файлом вам сначала нужно открыть файл. Функция PHP fopen() используется для открытия файла. Базовый синтаксис этой функции может быть задан следующим образом:
Первый параметр, передаваемый в fopen() , указывает имя файла, который вы хотите открыть, а второй параметр указывает, в каком режиме файл должен быть открыт. Например:
Файл можно открыть в одном из следующих режимов:
Операции с файлами и каталогами подвержены ошибкам. Поэтому рекомендуется реализовать некоторую форму проверки ошибок, чтобы в случае возникновения ошибки ваш скрипт корректно ее обработал. См. Руководство по обработке ошибок в PHP.
Закрытие файла с помощью PHP-функции fclose()
Закончив работу с файлом, его нужно закрыть. Функция fclose() используется для закрытия файла, как показано в следующем примере:
Хотя PHP автоматически закрывает все открытые файлы при завершении скрипта, рекомендуется закрывать файл после выполнения всех операций.
Чтение файлов с помощью PHP-функции fread()
Теперь, когда вы поняли, как открывать и закрывать файлы. В следующем разделе вы узнаете, как читать данные из файла. В PHP есть несколько функций для чтения данных из файла. Вы можете прочитать от одного символа до всего файла с помощью одной операции.
Чтение фиксированного количества символов
Функцию fread() можно использовать для чтения указанного количества символов из файла. Базовый синтаксис этой функции можно задать с помощью.
Чтение всего содержимого файла
Функцию fread() можно использовать вместе с функцией filesize() для одновременного чтения всего файла. Функция filesize() возвращает размер файла в байтах.
Для обработки данных файла необходимо выполнить итерацию по массиву с помощью цикла foreach. Вот пример, который считывает файл в массив, а затем отображает его с помощью цикла:
Запись файлов с помощью PHP-функции fwrite()
Точно так же вы можете записывать или добавлять данные в существующий файл с помощью PHP-функции fwrite() . Базовый синтаксис этой функции может быть задан следующим образом:
В приведенном выше примере, если файл note.txt не существует, PHP автоматически создаст его и запишет данные. Но если файл note.txt уже существует, PHP удалит содержимое этого файла, если оно есть, перед записью новых данных, однако, если вы просто хотите добавить файл и сохранить существующее содержимое, просто используйте режим a вместо w в приведенном выше примере.
Если файл, указанный в функции file_put_contents() , уже существует, PHP по умолчанию перезапишет его. Если вы хотите сохранить содержимое файла, вы можете передать специальный флаг FILE_APPEND в качестве третьего параметра функции file_put_contents() . Он просто добавит новые данные в файл вместо того, чтобы перезаписывать его. Вот пример:
Переименование файлов с помощью PHP-функции rename()
Вы можете переименовать файл или каталог с помощью PHP-функции rename() , например:
Удаление файлов с помощью PHP-функции unlink()
Вы можете удалять файлы или каталоги с помощью PHP-функции unlink() , например:
В следующей главе мы узнаем больше о разборе каталогов или папок в PHP.
Функции файловой системы PHP
В следующей таблице представлен обзор некоторых других полезных функций файловой системы PHP, которые можно использовать для динамического чтения и записи файлов.
Функция | Описание |
---|---|
fgetc() | Читает по одному символу за раз. |
fgets() | Читает по одной строке за раз. |
fgetcsv() | Читает строку значений, разделенных запятыми. |
filetype() | Возвращает тип файла. |
feof() | Проверяет, достигнут ли конец файла. |
is_file() | Проверяет, является ли файл обычным файлом. |
is_dir() | Проверяет, является ли файл каталогом. |
is_executable() | Проверяет, является ли файл исполняемым. |
realpath() | Возвращает канонизированный абсолютный путь. |
rmdir() | Удаляет пустой каталог. |
Пожалуйста, ознакомьтесь со справочником по файловой системе PHP, чтобы узнать о других полезных функциях файловой системы PHP.
Похожие посты
Руководство по загрузке файлов на сервер в PHP
Руководство по GET и POST запросам в PHP
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 5 / 5. Количество оценок: 1
Оценок пока нет. Поставьте оценку первым.
Разработка сайтов для бизнеса
Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.
Описание родственных функций вы сможете найти в разделах Каталоги и Выполнение программ.
За списком обёрток URL для работы с удалёнными файлами и пояснениями обращайтесь к главе Поддерживаемые протоколы и обёртки.
Содержание
User Contributed Notes 8 notes
I just learned that, to specify file names in a portable manner, you DON'T need 'DIRECTORY_SEPARATOR' - just use '/'. This really surprised and shocked me, as until now I typed about a zillion times 'DIRECTORY_SEPARATOR' to stay platform independent - unnecessary. Don't make the same mistake.You have an array of directories (straightforward list of directories):
<?php
$array = array(
'/home/drapeko/var' ,
'/home/drapeko/var/y' ,
'/home/drapeko' ,
'/home' ,
'/var/libexec'
);
);
?>
And you would like to transform this array to hierarchy of directories:
<?php
$array = array (
'home' => array (
'drapeko' => array (
'var' => array (
'y' => array()
)
)
),
'var' => array(
'libexec' => array()
)
);
?>
How can you do it?
First of all the below function will help us.
<?php
/**
* This function converts real filesystem path to the string array representation.
*
* for example,
* '/home/drapeko/var/y will be converted to $result_array['home']['drapeko']['var']['y']
* '/home/drapeko/var/y/file.txt will be converted to $result_array['home']['drapeko']['var']['y']
*
* @param $path realpath of the directory
* @return string string array representation of the path
*/
function pathToArrayStr ( $path ) <
// TODO constants/configs?
$res_path = str_replace (array( ':/' , ':\\' , '/' , '\\' , DIRECTORY_SEPARATOR ), '/' , $path );
// if the first or last symbol is '/' delete it (e.g. for linux)
$res_path = preg_replace (array( "/^\//" , "/\/$/" ), '' , $res_path );
// create string
$res_path = '[\'' . str_replace ( '/' , '\'][\'' , $res_path ). '\']' ;
return $res_path ;
>
?>
It simply converts the real path of the file to array string representation.
How can you use this function? I know it looks like a little confusing. But it's quite simple. Consider the example below:
<?php
$result = array();
$check = array();
foreach( $array as $val ) <
$str = pathToArrayStr ( $val , 'result' );
foreach( $check as $ck ) <
if ( strpos ( $ck , $str ) !== false ) <
continue 2 ;
>
>
$check [] = $str ;
eval( '$result' . $str . ' = array();' );
>
print_r ( $result );
?>
Heh, how do you find it? This approach has helped me very much. I hope you will find it useful. :)
I made this function to search and/or display files by extension or for a string occurance in the filename. Any comments or enhancements are welcome offcourse. I'll update this function soon.
usage: list_files([string], [string], [int 1 | 0], [int 1 | 0]);
search for extension: list_files([string], [string], [0], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [0], [0]);
echo result: list_files([string], [string], [0], [1]);
search for string occurance: list_files([string], [string], [1], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [1], [0]);
echo result: list_files([string], [string], [1], [1]);
function list_files ( $directory , $stringSearch , $searchHandler , $outputHandler ) $errorHandler = false ;
$result = array();
if (! $directoryHandler = @ opendir ( $directory )) echo ( "<pre>\nerror: directory \" $directory \" doesn't exist!\n</pre>\n" );
return $errorHandler = true ;
>
if ( $searchHandler === 0 ) while ( false !== ( $fileName = @ readdir ( $directoryHandler ))) if(@ substr ( $fileName , - @ strlen ( $stringSearch )) === $stringSearch ) @ array_push ( $result , $fileName );
>
>
>
if ( $searchHandler === 1 ) while( false !== ( $fileName = @ readdir ( $directoryHandler ))) if(@ substr_count ( $fileName , $stringSearch ) > 0 ) @ array_push ( $result , $fileName );
>
>
>
if (( $errorHandler === true ) && (@ count ( $result ) === 0 )) echo ( "<pre>\nerror: no filetype \" $fileExtension \" found!\n</pre>\n" );
>
else sort ( $result );
if ( $outputHandler === 0 ) return $result ;
>
if ( $outputHandler === 1 ) echo ( "<pre>\n" );
print_r ( $result );
echo ( "</pre>\n" );
>
>
>
This function searches a directory and returns an array of all files whose filename matches the specified regular expression. It's similar in concept to the Unix find program.
function findfile($location='',$fileregex='') if (!$location or !is_dir($location) or !$fileregex) return false;
>
$all = opendir($location);
while ($file = readdir($all)) if (is_dir($location.'/'.$file) and $file <> ".." and $file <> ".") $subdir_matches = findfile($location.'/'.$file,$fileregex);
$matchedfiles = array_merge($matchedfiles,$subdir_matches);
unset($file);
>
elseif (!is_dir($location.'/'.$file)) if (preg_match($fileregex,$file)) array_push($matchedfiles,$location.'/'.$file);
>
>
>
closedir($all);
unset($all);
return $matchedfiles;
>
<?php
ini_set ( 'auto_detect_line_endings' , true );
$contents = file ( 'unknowntype.txt' );
ini_set ( 'auto_detect_line_endings' , false );
$content2 = file ( 'unixfile.txt' );
?>
Note, with PHP 4.3 anytime Mac files are read using fgets or file you'll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to.
\\ Read a line from a MAC file
stream_get_line($fp, 4096, "\r");
\\ Read a line from a UNIX file
stream_get_line($fp, 4096, "\n");
\\ Read a line from a DOS file
stream_get_line($fp, 4096, "\r\n");
\\ Read a line up to any filesystem line ending
ini_set('auto_detect_line_endings', true); fgets($fp);
\\ You can also make up your own line ending characters:
\\ Read up to the first instance of ":"
stream_get_line($fp, 4096, ":");
This is a function I use to determine if a file contains Binary information. I use this for my search engine so that it doesn't try to index files like .zip or .mp3 or any other file that doesn't contain readable information. It makes use of the Character Type Extension if it's loaded, if it's not then it uses Regular Expressions.
function is_binary($link)
$tmpStr = '';
@$fp = fopen($link, 'rb');
@$tmpStr = fread($fp, 256);
@fclose($fp);
if($tmpStr != '')
$tmpStr = str_replace(chr(10), '', $tmpStr);
$tmpStr = str_replace(chr(13), '', $tmpStr);
for($i =0; $i < strlen($tmpStr); $i++)
if( extension_loaded('ctype') )
if( !ctype_print($tmpStr[$i]) )
$tmpInt++;
>
else
if( !eregi("[[:print:]]+", $tmpStr[$i]) )
$tmpInt++;
>
>
Here is a useful function if you're having trouble writing raw bytes into a file.
It receives an integer and returns an array containing the ASCII values of the bytes on each index of the array.
function int2bytes($number) $byte = $number;
$i=0;
do $dec_tmp = $byte;
$byte = bcdiv($byte,256,0);
$resto = $dec_tmp - (256 * $byte);
$return[] = $resto;
> while($byte >= 256);
if($byte) $return[] = $byte;
return array_reverse($return);
>
$arr will contain the following values:
Array
(
[0] => 1
[1] => 40
[2] => 56
)
Now, to write this data to the file, just use a fputs() with chr(), just like this:
a function based on "tunnelareaten at gmail dot com"s idea to search for files in a given directory by a searchstring or by fileextension.
I added support to search recursively through all sub-directories an to determine weather the filepath should be returned or not.
<?php
// recursive function to get contents of given folder by searchterm or fileextension
// (does not show folders)
// standards: Foldername: string
// Searchterm: string
// Searchtype: ext/search (file-extension or searchterm within filename)
// SaveCompletePath: true/1
// usage: array FileSearch_r($Folder,$Search[,$SearchType,$SavePath])
function FileSearch_r ( $Dir , $Search , $SearchType = "search" , $SavePath = 1 ) $Array =array();
$D = dir ( $Dir );
while ( false !==( $Entry = $D -> read ()))
if ( $Entry != '.' && $Entry != '..' ) $Entry = $Dir . $Entry ;
if ( is_dir ( $Entry )) $Array = array_merge ( $Array , FileSearch_r ( $Entry . '/' , $Search , $SearchType , $SavePath ));
else
if ( $SearchType == "search"
? substr_count ( $Entry , $Search )> 0
:( $SearchType == "ext"
? substr ( $Entry ,- strlen ( $Search ))=== $Search
: true ))
$Array []= $Entry ;
>
$D -> close ();
sort ( $Array , SORT_STRING );
if(!(bool) $SavePath ) $Array = str_replace ( $Dir , "" , array_values ( $Array ));
return $Array ;
>
?>
Читайте также: