считать файл в переменную php

file_get_contents

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

file_get_contents — Читает содержимое файла в строку

Описание

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.

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

Имя читаемого файла.

Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.

Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.

Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.

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

Функция возвращает прочтённые данные или false в случае возникновения ошибки.

Ошибки

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

Примеры

Пример #1 Получить и вывести исходный код домашней страницы сайта

Пример #2 Поиск файлов в include_path

Пример #3 Чтение секции файла

Результатом выполнения данного примера будет что-то подобное:

Пример #4 Использование потоковых контекстов

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

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

Источник

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

file_get_contents — Читает содержимое файла в строку

Описание

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.

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

Имя читаемого файла.

Начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path.

Смещение, с которого начнется чтение оригинального потока.

Поиск смещения ( offset ) не поддерживается при работе с удаленными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но этот результат является непредсказуемым, так как он работает на буферизованном потоке.

Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.

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

Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.

Ошибки

Примеры

Пример #1 Получить и вывести исходный код домашней страницы вебсайта

Пример #2 Поиск файлов в include_path

Пример #3 Чтение секции файла

Результатом выполнения данного примера будет что-то подобное:

Пример #4 Использование потоковых контекстов

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

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

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

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

Источник

Чтение файла в PHP. Выбираем оптимальный вариант

считать файл в переменную php. Смотреть фото считать файл в переменную php. Смотреть картинку считать файл в переменную php. Картинка про считать файл в переменную php. Фото считать файл в переменную phpПриветствую вас, друзья! 🙂

Думаю, что, если не все, то, уж точно большинство из вас сталкивались на практике с необходимостью чтения информации из txt файлов на уровне серверных скриптов. У меня, по крайней мере, таких случаев было несколько, о последнем из которых я вам сегодня и расскажу.

Ничего в этом сложного нет, но иногда глаза разбегаются от обилия вариантов, предоставляемых средствами серверных языков. Если говорить конкретно о PHP, на котором я сейчас программирую, то с помощью его функций можно считывать содержимое файлов и построчно, и целиком в строку, и в массив, причём для последнего варианта существует ещё несколько способов… Вот такие пироги 🙂

К сожалению только, данные методы работают с различной скоростью для файлов разной структуры, и о скорости их работы нет ни единого слова в официальной документации; об этом можно судить лишь на практике, перебирая все возможные варианты.

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

Создаём PHP парсер файла — начальные условия

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

Однажды у меня на работе возникла проблема, которая заключалась в том, что в БД хранились телефоны пользователей в неверном формате. Сам баг я, естественно, без проблем пофиксил.

Но, что делать с неверной информацией, которая на тот момент уже хранились в базе данных? Естественно, её нужно было заменить на корректную.

Для этого мне был предоставлен текстовый файл с идентификаторами пользователей и их телефонами, которые нужно было перенести в БД.

Должен сказать, он получился весьма увесистым: 352 Кбайта и 8223 строки текста, в каждой из которых содержался идентификатор пользователя и его телефон в формате id_пользователя:номер_телефона.

Словом, вся задача заключалась в построчном чтении файла PHP средствами, выделения из строки идентификатора и телефона с последующим обновлением значения телефона у пользователя в БД, найденного по айдишнику.

считать файл в переменную php. Смотреть фото считать файл в переменную php. Смотреть картинку считать файл в переменную php. Картинка про считать файл в переменную php. Фото считать файл в переменную php

Мой проект был реализован на PHP фреймворке Yii, следовательно в дальнейших примерах кода вы встретите элементы его API для работы с БД, в частности, поэтому не пугайтесь 🙂

После анализа имеющихся в языке конструкций, а также опыта других разработчиков, по крупицам собранного в Интернете, мне удалось выделить 4 способа, которые я далее вам и продемонстрирую.

Ну, а после я расскажу, по каким критериям и как именно я выбирал среди них оптимальный вариант. И, естественно, поделюсь результатами 🙂

Так что данная статья — отличная тренировка терпеливости 🙂 Суть её будет заключаться в подробном изучении следующего материала вплоть до результатов, которые будут ждать вас в конце. По ходу, кстати, можете поработать ещё и над фантазией, предполагая, как именно будет выбираться идеальный вариант.

Чтение файла в PHP построчно с помощью fgets()

Для того, чтобы прочитать файл построчно, в PHP есть специальная функция fgets(). Чтобы с её помощью считать содержимое всего файла, её нужно вызывать в цикле, проходясь по всем строкам.

В итоге, PHP парсер файла, реализующий данный алгоритм, у меня принял следующий вид:

Немного расшифрую свою писанину, если у кого-то возникнут сложности в понимании.

В самом начале, переменной $filename присваивается значение имени файла, который будет парситься, с полным путём к нему. Далее следуют PHP проверка существования файла и читаем ли он с помощью функций file_exists() и is_readable() соответственно.

Если всё ОК, то открываем файл с помощью функции fopen(), которая вызывается с PHP оператором управления ошибками для того, чтобы отключить вывод ошибок, генерируемых данной функцией. Использовать я его решил, чтобы сгенерировать своё сообщение об ошибке вместо стандартного.

Если файл открыть получилось, то мы проходимся по всем его строкам в цикле, пока файл не закончится, и, если строка не пустая, разделяем её по символу двоеточия функцией explode().

Затем проверяем, что id пользователя и его телефон не пустые, ищем пользователя в БД по айдишнику и, если таковой существует, то обновляем ему номер телефона, убрав из значения номера предварительно символы переноса и начала новой строки.

Ну, и ещё я использовал PHP функции strtolower() и strtoupper() для проверки существования в БД пользователя с идентификаторами, которые могли быть прописаны в различных регистрах, т.к. они в моём случае состояли из символов и цифр.

считать файл в переменную php. Смотреть фото считать файл в переменную php. Смотреть картинку считать файл в переменную php. Картинка про считать файл в переменную php. Фото считать файл в переменную php

Далее по коду следуют различные сообщения об ошибках, которые могут возникнуть на разных этапах, а также функция закрытия файла — fclose().

PHP парсинг файла в массив с помощью file()

Данный метод чтения файла в PHP предполагает использование функции file(), которая открывает файл и помещает его содержимое в массив. При этом элементами массива будут являться, как раз, строки считываемого файла, что в моей ситуации отлично подходит.

Код данного варианта PHP парсера файла получился следующий:

Как видите, от предыдущего способа чтения файла в PHP данный отличается только своим началом, где файл открывается и сразу же считывается функцией file() вместо связки fopen() + fgets(), как ранее.

Далее код такой же.

PHP чтение файла в переменную с помощью fread()

Ещё одной функцией PHP для разбора файла является fread(), с помощью которой можно читать различные фрагменты файла указанной длины. Чтобы прочитать файл в PHP целиком, в качестве размера фрагмента я указал размер файла, полученный с помощью функции filesize():

Данный способ чтения файла PHP средствами, на самом деле, очень похож на предыдущий, т.к., несмотря на то, что с помощью PHP данные из файла изначально считываются не в массив, а в строковую переменную, далее она всё равно преобразуется в массив, т.к. с ним проще работать, чем со строкой.

Преобразование строки в массив на PHP проще всего сделать с помощью уже применявшейся сегодня функции explode(), в качестве разделителя в которую был передан символ начала строки.

А дальше всё идёт по накатанной 🙂

Создаём PHP парсер файла на базе file_get_contents()

Ну, и напоследок, я решил реализовать PHP парсинг файла с помощью функции file_get_contents(), которая, как раз и предназначена для чтения файла целиком в строку, т.е. работает, практически, как fread($fp, filesize($filename)).

За тем лишь исключением, что file_get_contents() самостоятельно открывает файл и считывает его, в то время как для использования fread() нужно было предварительно открыть файл через fopen() и получить его указатель для дальнейшего использования.

В целом, код PHP парсера файла на базе file_get_contents() будет практически как и в предыдущем случае:

На этом всё. Пришло время подвести итоги производительности всех перечисленных вариантов и выяснить, какой же PHP парсер файла оказался самым оптимальным для дальнейшего использования.

Какой способ обработки файлов в PHP является оптимальным?

Чтобы выбрать из найденных вариантов самый оптимальный, т.е. самый быстрый, я решил определить время выполнения скрипта PHP в каждом случае. Для этого я воспользовался методикой, описанной в статье по ссылке.

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

Время работы PHP скрипта я также решил для удобства округлять до третьего знака после запятой, т.е. до тысячных долей секунд (хотя, можно было ограничиться и сотыми, на самом деле).

Помню, когда я учился в школе и писал свою научную работу по физике (да, был такой опыт 🙂 ) на её защите перед университетскими преподавателями меня постоянно упрекали за недостаточное количество экспериментов (я делал по 3 опыта для каждого случая). «Светилы науки» называли цифры в 100, ну или, хотя бы, в 10 экспериментов для сравнения различных ситуаций, чтобы можно было делать какое-то их сопоставление и минимизировать вероятность случайного превосходства одного над другим.

Да, досталось мне тогда от них крепко, но их рекомендации я хорошо усвоил, что даже сейчас об этом помню, хотя прошло уже более 10 лет с тех пор. Тем более, что данные рекомендации действительно были основаны на законах математической статистики и теории вероятности.

Ну, на научность своих нынешних экспериментов я в данной статье не претендую, поэтому число в 100 экспериментов я посчитал излишне большим, а процесс их проведения — слишком утомительным занятием.

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

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

Экспериментfgets()file()fread()file_get_contents()
19,1479,72210,5392,008
28,9509,0069,4951,733
38,8218,8459,2071,642
48,7178,8768,9311,758
59,0109,0918,7031,635
69,1108,6409,7121,633
79,0749,6269,131,645
88,8869,2049,0481,701
98,6678,9189,4381,713
108,8529,1979,5371,567
Среднее8,9239,1139,3741,704

Как видите, помимо значений времени выполнения скрипта в каждом из 10 экспериментов, я решил подсчитать среднюю температуру по больнице 🙂

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

И им оказался, как видите, последний вариант, реализованный на базе функции file_get_contents(), который выполняет чтение содержимого файла в строковую переменную с дальнейшим его преобразованием в массив и обработкой в цикле.

Все остальные варианты PHP парсеров файлов работают примерно с одинаковой скоростью.

Почему именно он обогнал своих конкурентов я, если честно, не имею ни малейшего понятия. Могу лишь предположить, что операция чтения файла в строку с помощью file_get_contents() требует меньше ресурсов, чем формирование готового массива строк с помощью file().

А превосходство над fgets() и fread() можно списать на то, что перед их использованием требуется открытие файла с помощью fopen(), на что требуется время.

Да, на самом деле, это и не важно, т.к. цифры говорят сами за себя: благодаря использованию функции file_get_contents() PHP парсер файла на его базе работает в 5 раз быстрее остальных, что и повлияло на моё решение использовать его на практике.

Разбор файла в PHP — выводы

Как я уже и говорил в начале, мои опыты не являются безупречными и опираться исключительно на полученные в их ходе результаты не стоит, т.к., несмотря на быстродействие file_get_contents() в моей ситуации, бывают случаи, когда намного удобнее и эффективнее использовать другие приведённые мною PHP парсеры файлов.

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

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

Я это особенно ощутил во время проведения опытов, когда один и тот же PHP парсер файла отработал за 9, затем за 12, а потом снова за 9 секунд на трёх последовательных итерациях из-за банального запуска проводника Windows во время второго случая, который, естественно, тоже требует серверных ресурсов.

Учитывая данные особенности, я проводил эксперименты практически одновременно, друг за другом, при одинаковом комплекте запущенных программ, чтобы не распылять ресурсы серверного железа.

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

Если же вы будете работать с асинхронными серверными языками (C#, Java) или технологиями (Node.js, например), то, по возможности, для экспериментов создавайте отдельный поток, который будет работать на выделенном ядре процессора.

Ну, а если найти полностью незадействованное ядро не получится (что при уровне современного ПО не удивительно), то вы хотя бы сможете найти самое слабонагруженное или, хотя бы, со статической нагрузкой, которая не меняется во времени.

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

Подытоживая, хочу сказать, что приведённые в статье фрагменты кода могут использоваться не только для парсинга текстовых файлов в PHP, но и отлично подойдут для других форматов, например, для разбора CSV файлов дампа базы данных MySQL.

Пишите ваши отзывы, как положительные, так и отрицательные в комментариях под статьёй — мне необходимо любое ваше мнение для дальнейшего развития 🙂

Также буду благодарен, если поделитесь данной статьёй со своими друзьями в социальных сетях с помощью кнопочек ниже.

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться 😉

Источник

Запись в файлы и чтение файлов с помощью PHP

В этом уроке вы узнаете несколько важных функций на PHP, которые достаточны для всех ваших основных потребностей чтения и записи файлов. Вы узнаете, как читать файл, записывать в файл, записывать в текстовый файл и проверять, существует ли файл.

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

Проверка наличия файла

Ваш первый шаг при попытке чтения данных из файла или записи чего-то в него должен состоять в том, чтобы проверить, существует ли файл уже. Попытка прочитать данные из файла, который не существует, приведет к предупреждению с PHP и, вероятно, приведет к краху вашего кода.

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

Убедимся, что файл фактически существует

Чтение данных из файла в PHP

Запись данных в файл в PHP

Эта функция возвращает количество байтов, которые были записаны в файл с успехом, и false при ошибке. Тем не менее, вы все равно должны использовать строгий оператор равенства, чтобы проверить, было ли успешным запись содержимого в файл. Это потому, что код, который записывает 0 байтов в файл, будет по-прежнему оцениваться как false.

Чтение и запись данных в файлы

Вы также можете сохранить веб-страницы или контент с таких сайтов, как Википедия. Если вам нужно понять HTML или проанализировать содержимое HTML, которое вы только что сохранили локально, вы можете следовать руководству, например, Парсинг HTML на PHP с помощью DiDOM, что поможет вам автоматически получать ссылки, файлы изображений или любую другую такую информацию с веб-страницы.

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

Это был просто пример автоматического анализа большого количества текста. Вы можете сделать что-то подобное с любым типом текста, хранящегося в файле.

Логирование данных с помощью FILE_APPEND

Подобный код можно использовать для чего-то вроде хранения ежедневной статьи в Википедии в файле каждый день или отслеживания новостных статей и заголовков в течение недель или месяцев. Все, что вам нужно сделать, это написать код, чтобы очистить данные, а затем сохранить их, используя что-то похожее на приведенный выше фрагмент кода. Учебник, подобный Парсингу HTML на PHP при помощи DiDOM может помочь вам.

Вместо того, чтобы писать текст в обычном формате, вы можете обернуть его в некоторый HTML, чтобы упростить чтение в браузерах. Возможности безграничны.

Заключительные мысли

Существует много других способов чтения и записи данных в файлы на PHP. Однако file_get_contents() и file_put_contents() будут решать почти все ваши основные потребности, не добавляя ненужных осложнений.

Источник

readfile

(PHP 4, PHP 5, PHP 7, PHP 8)

readfile — Выводит файл

Описание

Читает файл и записывает его в буфер вывода.

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

Имя читаемого файла.

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

Возвращает количество прочитанных из файла байт в случае успешного выполнения или false в случае возникновения ошибки

Ошибки

Примеры

Пример #1 Принудительная загрузка с помощью readfile()

Результатом выполнения данного примера будет что-то подобное:

считать файл в переменную php. Смотреть фото считать файл в переменную php. Смотреть картинку считать файл в переменную php. Картинка про считать файл в переменную php. Фото считать файл в переменную php

Примечания

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

User Contributed Notes 36 notes

Just a note for those who face problems on names containing spaces (e.g. «test test.pdf»).

In the examples (99% of the time) you can find
header(‘Content-Disposition: attachment; filename=’.basename($file));

but the correct way to set the filename is quoting it (double quote):
header(‘Content-Disposition: attachment; filename=»‘.basename($file).'»‘ );

Some browsers may work without quotation, but for sure not Firefox and as Mozilla explains, the quotation of the filename in the content-disposition is according to the RFC
http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

if you need to limit download rate, use this code

= ‘file.zip’ ;
$download_file = ‘name.zip’ ;

regarding php5:
i found out that there is already a disscussion @php-dev about readfile() and fpassthru() where only exactly 2 MB will be delivered.

In my case, trying to send PDF files thru PHP after access-logging,
the beginning «/» must be removed in PHP 7.1.

My script working correctly on IE6 and Firefox 2 with any typ e of files (I hope :))

Run on Apache 2 (WIN32) PHP5

Always using MIME-Type ‘application/octet-stream’ is not optimal. Most if not all browsers will simply download files with that type.

If you use proper MIME types (and inline Content-Disposition), browsers will have better default actions for some of them. Eg. in case of images, browsers will display them, which is probably what you’d want.

To deliver the file with the proper MIME type, the easiest way is to use:

To avoid the risk of choosing themselves which files to download by messing with the request and doing things like inserting «../» into the «filename», simply remember that URLs are not file paths, and there’s no reason why the mapping between them has to be so literal as «download.php?file=thingy.mpg» resulting in the download of the file «thingy.mpg».

It’s your script and you have full control over how it maps file requests to file names, and which requests retrieve which files.

But even then, as ever, never trust ANYTHING in the request. Basic first-day-at-school security principle, that.

Send file with HTTPRange support (partial download):

A note on the smartReadFile function from gaosipov:

Change the indexes on the preg_match matches to:

See preg_match for more details on this.

When using the readfile_chunked function noted here with files larger than 10MB or so I am still having memory errors. It’s because the writers have left out the all important flush() after each read. So this is the proper chunked readfile (which isn’t really readfile at all, and should probably be crossposted to passthru(), fopen(), and popen() just so browsers can find this information):

>
?>

All I’ve added is a flush(); after the echo line. Be sure to include this!

If you are lucky enough to not be on shared hosting and have apache, look at installing mod_xsendfile.
This was the only way I found to both protect and transfer very large files with PHP (gigabytes).
It’s also proved to be much faster for basically any file.
Available directives have changed since the other note on this and XSendFileAllowAbove was replaced with XSendFilePath to allow more control over access to files outside of webroot.

Download the source.

150M.
It does not mean that you can fully escape memory exhaustion, though: if you are reading too much at a time, you can still encounter it. That is why in my library I use a helper function («speedLimit») to calculate whether selected speed limit will fit the available memory (while allowing some headroom).
You can read comments in the code itself for more details and raise issues for the library, if you think something is incorrect there (especially since it’s WIP at the moment of writing this), but so far I am able to get consistent behavior with it.

If you are looking for an algorithm that will allow you to download (force download) a big file, may this one will help you.

// Close sessions to prevent user from waiting until
// download will finish (uncomment if needed)
//session_write_close();

set_time_limit(0);
ignore_user_abort(false);
ini_set(‘output_buffering’, 0);
ini_set(‘zlib.output_compression’, 0);

$chunk = 10 * 1024 * 1024; // bytes per chunk (10 MB)

$fh = fopen($filepath, «rb»);

if ($fh === false) <
echo «Unable open file»;
>

ob_flush(); // flush output
flush();
>

In the C source, this function simply opens the path in read+binary mode, without a lock, and uses fpassthru()

If you need a locked read, use fopen(), flock(), and then fpassthru() directly.

A mime-type-independent forced download can also be conducted by using:

Using pieces of the forced download script, adding in MySQL database functions, and hiding the file location for security was what we needed for downloading wmv files from our members creations without prompting Media player as well as secure the file itself and use only database queries. Something to the effect below, very customizable for private access, remote files, and keeping order of your online media.

While at it I added into download.php a hit (download) counter. Of course you need to setup the DB, table, and columns. Email me for Full setup// Session marker is also a security/logging option
Used in the context of linking:
http://www.yourdomain.com/download.php?id=xx&hit=1

[Edited by sp@php.net: Added Protection against SQL-Injection]

I have noticed some unusual behavior with Internet Explorer 6 that’s worth taking note of. I have a link on my site to a script that outputs an XML file to the browser with the below code:

header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename=»‘.$filename.'»‘);
@readfile($file);

When the popular IE setting “Reuse Window for Launching Shortcuts” is unchecked (access this setting in the Tools Menu > Internet Options > Advanced Tab) this script will output the file to the browser and open it in a different window if the user clicks the open button on the IE prompt. However, if this setting is checked, and browser windows are being re-used, then it will open up on top of the page where the link was clicked to access the script.

If I instead set the html link target option to be “_blank”, the script will open up in a new window as expected if the “Reuse Window for Launching Shortcuts” is checked. But, if the setting is unchecked, the output XML file will open up in a new window and there will be another blank window also open that has the address of the script, in addition to our original window.

This is far from ideal, and there is no way of knowing whether users have this option checked or not. We are stuck with the distinct possibility of half of our visitors seeing either an annoying third blank window being opened or the script writing over their original window, depending on their “Reuse Window for Launching Shortcuts” setting.

To reduce the burden on the server, you might want to output «Etag» and/or «Last-Modified» on http response header. But there are some headers, which PHP itself outputs automatically, disturbing this. So I wrote this function with erasing these.

If you guys know how to judge the return values of function «stat», in order to avoid using «is_file» or «is_readable» (or «is_dir»), please let me know or just write it here.

If you don’t have to do anything special on 404, «header(‘HTTP/1.x xxx xxxxx’);» can be inside of the function.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *