Как правильно читать файлы с помощью php

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

Вы можете перейти на сайт Project Gutenberg и попытаться загрузить файлы с помощью функции . После того, как у вас есть данные в строке, вы также можете просто сохранить их в локальном файле с помощью функции . В следующем примере это будет ясно:

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

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

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

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

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

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

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

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

Checking if a File Exists

Your very first step when trying to read data from a file or writing something to it should be to check if the file already exists. Trying to read data from a file which does not exist will result in a warning from PHP and will probably crash your code.

The easiest way to check if a file exists is to use the PHP function. It will return if a file or directory with the given exists and otherwise. This might be obvious, but I would like to point out that  doesn’t have to just be the name of a file. It can also be an absolute or relative path. For example, we could use prime_numbers.txt or science/project/periodic_table.txt.

It’s also important to remember that this function will also return for files which are inaccessible due to safe mode restrictions.

Another function that you can use to check for the existence of a file is . In contrast to , this function will only return if the specified path points to a file and not a directory.

Making Sure That the File Actually Exists

If the code you are writing performs a lot of file operations on a particular file, you might get incorrect results using the above functions. This is because the results of the execution of both and are cached in order to improve performance. PHP also caches the values returned by other filesystem functions like , , etc.

You can call to make sure that any information you are accessing for a file is up to date.

This is generally only a problem if the same file is being accessed multiple times in a single script to know its status. Also, the cached data is cleared if you delete the file inside the script using the function. This basically means that you probably won’t face any caching related problems, but it is still good to know that you can clear the cache in case the information goes stale or if you are getting unexpected results when trying to access information about a file.

Синтаксис file_get_contents

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

Мы не учебник!

И в этом наше преимущество!

Не будем копировать учебник!

Если вы используете в функции абсолютный путь до файла, то вы получите уже исполненный код файла:

echo file_get_contents(«https://dwweb.ru/page/php/function/005_poluchit_dannyie_s_pomoschyu_file_get_contents.html»);

Если вы используете путь на сервере, то получите исходный код файла:

echo file_get_contents(home/domen/dwweb_ru/www/page/php/function/005_poluchit_dannyie_s_pomoschyu_file_get_contents.html);

Результаты получения данных, с помощью file_get_content, можно посмотреть на двух примерах:

Оригинальный файл и код открытый в html редакторе из ->

Получение данных file_get_contents ->

Получение данных file_get_contents ->

Как записать исполняемый код php в файл

записать в файл исполняемый код

В самом начале скажем пару слов :

Я уже делал страницу, где в реальности в каждый новый файл записывался html каркас страницы! -> . А исполняемый php код — в нем нужно просто заэкранировать, либо поместить переменные в одинарные кавычки!

И где он применяется у меня на сайте!? На 115 секунде записываются данные на страницу, как раз в этом видео… все данные относительно страницы записываются в виде php кода с переменными!

видео… экскурсию

На скрине — отдельное поле, в который вставляется тот код, который должен исполниться:

Это работает очень просто!

textareaОбращаю ваше внимание$text_for_pageОбращаю ваше внимание

Может это кажется страшным, но для меня это каждодневная работа!

Дальнейшая обработка файла

Вы знаете где находится загруженный файл. Как можно работать с ним далее? Для этого PHP имеет богатый арсенал команд и расширений.

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

По этой причине необходимо произвести обработку файла до выхода из программы.

Сохранить файл на сервере

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

Копируем файл:

Перемещаем файл:

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

Пример использования:

If (!empty($_FILES) && !$_FILES) {
$destination = ‘/var/www/mysite/uploads/newPicture.jpg’;
if (rename($_FILES, $destination)) {
// файл был успешно перемещен
} else {
// ошибка при переносе файла
}
}

1
2
3
4
5
6
7
8

If(!empty($_FILES’myfile’)&&!$_FILES’myfile»error’){

$destination=’/var/www/mysite/uploads/newPicture.jpg’;

if(rename($_FILES’myfile»tmp_name’,$destination)){

// файл был успешно перемещен

}else{

// ошибка при переносе файла

}

}

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

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

Данная команда позволяет убедиться, что указанный filename был получен именно через HTTP POST механизм, а не каким либо другим способом. Если файл получен именно так, то производится перемещение.

Выбор за вами

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

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

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

Похожие темы

  • Оригинал статьи: The right way to read files with PHP.
  • PHP.net — полный справочник по PHP на все случаи жизни.
  • Прочитайте «PHP через примеры, Часть 1» и откройте для себя упрощенный метод PHP для построения сложных и мощных программ для Web.
  • Узнайте о функции , которая не рассматривается в данной статье.
  • Узнайте о функции , которая не рассматривается в данной статье.
  • PHP.net — отличный ресурс для PHP-разработчиков.
  • Ознакомьтесь с «Рекомендуемым списком книг по PHP.»
  • Просмотрите все связанные с PHP материалы на developerWorks.
  • Усовершенствуйте ваши навыки программирования на PHP, ознакомившись с ресурсами проекта PHP на сайте IBM developerWorks.
  • Посетите Раздел Open Source на developerWorks для получения разнообразной информации о средствах и методах разработки ПО, инструментальных средств и обновлений проектов, что поможет вам в разработке технологий с открытым исходным кодом и использовании их с программными продуктами IBM.
  • Рационализируйте свой следующий проект по разработке ПО с открытым исходным кодом с помощью пробного ПО IBM, доступного на DVD или для загрузки.
  • Посетите Safari Books Online, где представлено множество ресурсов по технологиям с открытым исходным кодом.

Writing Data to a File in PHP

One of the easiest ways to write data to a file in PHP is with the help of the  function.

The parameter determines the file in which the data will be written. The second parameter is the data that you want to write to the file. Most of the time it will be a string, but it could also be an array or a stream resource. 

Remember that PHP will automatically create a file with the given name for you if it doesn’t already exist. However, it won’t create any directories for you. This means that you can store a file with the name On the Origin of Species .txt without any error. However, setting to  Biology/Evolution/On the Origin of Species .txt, if Biology/Evolution/ doesn’t already exist, will result in an error.

The parameter determines how the content will be written to a file. It can have any or all of the following three values:

  • —This tells PHP to search for the given file name in the include directory.
  • —This will tell PHP to append the data you passed to the function to the existing data in the file. It could be useful if you are storing data in a file like a log or a personal diary. Recording new data like temperature or events that happened to you today won’t overwrite something you recorded yesterday.
  • —This will tell PHP to get a lock on the file before starting to write content into it. It can prevent unexpected things from happening when two different scripts are reading or writing data to the same file. With this particular value, you will get an exclusive lock on the file. You can read more about these locks in the PHP documentation of the function.

This function returns the number of bytes that were written to the file on success and on failure. However, you must still use the strict equality operator to check if it was successful in writing content to the file. That’s because code that writes 0 bytes to the file will still evaluate to false.

Чтение информации о загруженном файле

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

Array(
=> Array (
=> treasure-map-3.jpg
=> image/jpeg
=> D:\OpenServer.526\userdata\temp\phpA8EE.tmp
=> 0
=> 83604
)
)

1
2
3
4
5
6
7
8
9

Array(

myfile=>Array(

name=>treasure-map-3.jpg

type=>imagejpeg

tmp_name=>D\OpenServer.526\userdata\temp\phpA8EE.tmp

error=>

size=>83604

)

)

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

Если PHP удалось загрузить файл на сервер, то error равен 0, а tpm_name — содержит путь до временно созданного файла. Оригинальное название хранится в переменной name, также есть дополнительная информация о типе и размере файла.

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

Запись в файлы

ass=»text»>Запись в файлы осуществляется функциями fputs и fwrite, которые абсолютно идентичны:

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

В этом примере в файл «file.txt» записывается строка «Hello, world!»

Предыдущая Следующая

Если Вам нужна частная профессиональная консультация от авторов
многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime.

Чтение файла в PHP

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

    <?php
$fd = fopen("form.php", 'r') or die("файл открыть не удалось");
while(!feof($fd))
{
    $str = htmlentities(fgets($fd));
    echo $str;
}
fclose($fd);
?>

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

Работа с потоком

// Открытие потока на чтение и получение его дескриптора
$f = fopen("file.txt", "r") or die("Не могу открыть файл!");

// Закрытие потока
fclose($f);

// Открытие потока на чтение и запись
$f = fopen("file.txt", "r+");
// Открытие потока на запись. Указатель помещается в конец файла
$f = fopen("file.txt", "a");
// Открытие потока на чтение и запись. Указатель помещается в конец файла
$f = fopen("file.txt", "a+");
// Открытие потока на запись. Файл обрезается до нулевой длины
$f = fopen("file.txt", "w");
// Открытие потока на чтение и запись. Файл обрезается до нулевой длины
$f = fopen("file.txt", "w+");

// Читаем файл кусками
$f = fopen("file.txt", "r");
// Читаем первые 5 байт из потока
echo fread($f, 5);
// Читаем следующие 3 байта из потока
echo fread($f, 3);
//Выводим всё с текущей позиции до конца
fpassthru($f);
fclose($f);

// Читаем файл построчно в массив
$f = fopen("file.txt", "r");
$lines = [];
while ( $line = fgets($f) ){
  $lines[] = $line;
}
fclose($f);

// Читаем файл построчно в массивы, вырезаем html-тэги, оставляя нужные
$f = fopen("file.html", "r");
$lines = [];
while ( $line = fgetss($f, 4096, "<p><br>") ){
	$lines[] = $line;
}
fclose($f);

// Читаем файл побайтово в массив
$f = fopen("file.txt", "r");
$bytes = [];
while ( !feof($f) ){
	$bytes[]= fgetc($f);
}
fclose($f);

// Пишем в файл
$f = fopen("file.txt", "r+");
fwrite($f, "Новый текст", 25);
fclose($f);

// Пишем в конец файла
$f = fopen("file.txt", "a");
fputs($f, "\nНовая строка");
fclose($f);

// Читаем последние 10 байт из потока
$f = fopen("file.txt", "r");
// Устанавливаем указатель в нужную позицию
fseek($f, -10, SEEK_END);
// В какой позиции мы находимся?
echo ftell($f);
// Читаем данные
echo fread($f, 10);
// Устанавливаем указатель в начало потока
rewind($f);
fclose($f);

Парсинг

Ещё дна частая задача в веб-программировании, это парсинг файлов. Иногда вам нужно слить сайт конкурента чтобы проанализировать цены на похожие товары, загрузить данные с csv документа в базу данных, проанализировать xml карты сайта и т.д. Давайте рассмотрим загрузку данных их csv документа.

Пример парсинга csv файла в php

PHP

//Открываем csv файл в режиме чтения
$csv = fopen(‘clients.csv’, ‘r’);

//Читаем файл построчно при помощи fgetcsv()
while ($row = fgetcsv($csv, 1000, ‘;’)){
//Здесь можно выполнять запросы к БД для сохранения данных пользователей и т.п.
echo ‘<pre>’; print_r($row); echo ‘</pre>’;
}

//Закрываем файл
fclose($csv);

1
2
3
4
5
6
7
8
9
10
11

//Открываем csv файл в режиме чтения

$csv=fopen(‘clients.csv’,’r’);

 
//Читаем файл построчно при помощи fgetcsv()

while($row=fgetcsv($csv,1000,’;’)){

//Здесь можно выполнять запросы к БД для сохранения данных пользователей и т.п.

echo'<pre>’;print_r($row);echo'</pre>’;

}
 
//Закрываем файл

fclose($csv);

Я создал csv сохранив его в кодировке UTF-8, разделитель поля — ; разделитель текста — «

Обратите внимание что в функции fgetcsv() третий параметр (разделитель) должен совпадать с тем, что вы указывали при сохранении csv

В результате выполнения скрипта, получаю содержимое csv вот в таком виде:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Array
(

=>ФИО

1=>Email

2=>Телефон
)
Array
(

=>ИвановИванИванович

1=>ivanov@mail.ru

2=>+79001234567

)
Array
(

=>ПетровПётрПетрович

1=>petrov@gmail.com

2=>+79280001122

)

Более подробно вопросы парсинга данных (как excel документов так и html страниц я рассмотрю в отдельных прикладных статьях). Желаю удачи в изучении php!

Пример 2: Загрузить файл с указанием пути к файлу

Если файл существует в указанном месте, путь к файлу необходимо указать в URL-адресе. В этом примере мы создадим HTML-файл со следующим кодом, который будет передавать имя файла с путем к файлу:

download3.html

<html>
<head>
<title>Скачать файлы</title>
</head>
<body>
<p><a href="download.php?path=downloads/lecture.pdf">Скачать PDF file</a></p>
<p><a href="download2.php?path=downloads/rose.jpg">Скачать JPG file</a></p>
</body>
</html>

Мы создадим файл PHP со следующим кодом, чтобы загрузить файл по пути к файлу. Код PHP в предыдущем примере будет немного изменен для загрузки файла по заданному пути. Функция clearstatecache() используется для очистки кеша, который был ранее сохранен. В функции readfile() используются два аргумента.

download2.php

<?php
if(isset($_GET))
{
//Читать url
$url = $_GET;//Очистить кэш
clearstatcache();

//Проверьте, существует ли путь к файлу или нет
if(file_exists($url)) {

//Определение информации заголовка
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($url).'"');
header('Content-Length: '. filesize($url));
header('Pragma: public');

//Очистить выходной буфер системы
flush();

//Считайте размер файла
readfile($url,true);

//Завершить работу со скриптом
die();
}
else{
echo "Путь к файлу не существует.";
}
}
echo "Путь к файлу не определен."

?>

Загрузить файл с помощью функции readfile()

Функция readfile() используется в сценарии PHP для принудительной загрузки любого файла из текущего местоположения или файла с путем к файлу. Синтаксис этой функции приведен ниже.

Синтаксис

int readfile ( string $filename ] )

Эта функция может принимать три аргумента. Первый аргумент является обязательным, а два других аргумента – необязательными. Первый аргумент, $filename, хранит имя файла или имя файла с путем, который будет загружен. Значение по умолчанию второго параметра, $use_include_path, равно false и будет установлено в true, если имя файла с путем используется в первом аргументе. Третий аргумент, $context, используется для указания ресурса потока контекста. Эта функция возвращает количество байтов, прочитанных из файла, указанного в первом аргументе. Использование этой функции показано в следующих двух примерах.

Чтение файла и работа с текстом

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

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

Как видите, функция может принимать множество параметров, самый простой случай это такое использование:

$mytext = file_get_contents($_FILES);

1 $mytext= file_get_contents($_FILES’myfile»tmp_name’);

Текст загружен, дальше с ним можно уже что то делать. А потом, к примеру, результаты записать в другой файл.

Reading Data From a File in PHP

One of the easiest ways to read data from a file in PHP is with the help of the  function. It will simply read the entire file and give it to you in the form of a string. All the parameters except the first one are optional.

The second parameter accepts a boolean value to determine if it should look for a file in the location specified by the include path, which can be set using the function.

You can use the third parameter to specify a bunch of options to refine how the files are accessed. You can use it to specify header values like the and  as well as the HTTP method.

The parameter determines the point where reading starts on the original file. Providing a negative value will start counting from the end. The support for negative offsets was only added in PHP 7.1.0. It is worth noting that offset only works with local files and is not supported for remote files.

The function reads the whole file at once by default. You can change this behavior by providing a value for the parameter. The length of characters to be read is counted from the offset value.

This function will return if it failed to read data from the file you specified. However, it can also return values which evaluate to , so make sure that you check if it actually returned false using the operator.

You can use this function to open remote files, but that would be possible only if the value of the  option in php.ini is or .

Как это все работает вместе

Не забудьте создать каталог uploaded_files и сделать его доступным для записи пользователем web-server. Затем перейдите и запустите файл index.php, который должен отобразить форму загрузки файла, которая выглядит так:

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

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

Настройка параметров PHP

Существует несколько настроек конфигурации PHP, которые вам следует предварительно проверить для успешной загрузки файлов. В этом разделе мы рассмотрим все параметры, которые важны для загрузки файлов PHP. Эти параметры можно настроить в файле php.ini.

Если вы не знаете, где найти файл php.ini, вы можете использовать , чтобы найти его. Просто создайте файл PHP на своем сервере со следующей строкой и откройте его из браузера.

Вот выдержка из установочного файла с некоторыми полезными значениями по умолчанию.

Ключевые настройки

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

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

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

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

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

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

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

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

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

Логика загрузки

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

Загрузите код из файла upload.php на GitHub. Мы рассмотрим важные части этого файла.

В файле upload.php мы проверили, действительно ли это валидный запрос POST.

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

  • : Временный путь, в который загружается файл, сохраняется в этой переменной.
  • : Фактическое имя файла сохраняется в этой переменной.
  • : Указывает размер загруженного файла в байтах.
  • : Содержит mime тип загруженного файла.
  • : Если во время загрузки файла была ошибка, эта переменная заполняется соответствующим сообщением об ошибке. В случае успешной загрузки файла она содержит значение 0, которое можно сравнить с помощью константы .

После проверки запроса POST мы проверяем, что загрузка файла прошла успешно.

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

Если загрузка файла прошла успешно, мы инициализируем несколько переменных с информацией о загруженном файле.

В приведенном выше коде мы также выяснили расширение загруженного файла и сохранили его в переменной .

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

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

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

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

Наконец, мы перенаправляем пользователя в файл index.php. Кроме того, мы устанавливаем соответствующее сообщение в переменной сессии, которое будет отображаться пользователям после перенаправления в файле index.php.

Прямая работа с файлами

// Читаем весь файл напрямую в буфер вывода
readfile("file.txt");
// Что и
$f = fopen("file.txt", "r");
echo fread($f, filesize("file.txt"));
fclose($f);

// Читаем файл построчно в массив
$lines = file("file.txt");;
// Что и
$f = fopen("file.txt", "r");
while ( $lines[] = fgets($f) );
fclose($f);

// Получаем весь файл в виде строки
$file = file_get_contents("file.txt");
// Что и
$f = fopen("file.txt", "r");
$file = fread($f, filesize("file.txt"));
fclose($f);

// Пишем в файл затирая содержимое
file_put_contents("file.txt", "Новое содержимое");
// Что и
$f = fopen("file.txt", "w");
fputs($f, "Новое содержимое");
fclose($f);

// Пишем в файл добавляя содержимое в конец
file_put_contents("file.txt", "Новое содержимое", FILE_APPEND);
// Что и
$f = fopen("file.txt", "a");
fputs($f, "Новое содержимое");
fclose($f);

Пример 1: Загрузить файл с именем файла

В этом примере мы создадим HTML-файл со следующим кодом, в котором имя файла будет передано в качестве параметра URL-адреса с именем path, а значение этого параметра будет передано в файл PHP с именем download.php.

download2.html

<html>
<head>
<title>Скачивать файлы</title>
</head>
<body>
<p><a href="download.php?path=abc.txt">Скачать файл TEXT</a></p>
<p><a href="download.php?path=horizon.zip">Скачать файл ZIP</a></p>
<p><a href="download.php?path=lecture.pdf">Скачать файл PDF</a></p>
<p><a href="download.php?path=rose.jpg">Скачать файл JPG</a></p>
</body>
</html>

Мы создадим файл PHP со следующим кодом для принудительной загрузки файла. Здесь функция isset() используется для проверки, определен ли $_GET . Если переменная определена, функция file_exists() используется для проверки, существует ли файл на сервере. Затем функция header() используется для установки необходимой информации заголовка перед использованием функции readfile(). Функция basename() используется для получения имени файла, а функция sizes() используется для чтения размера файла в байтах, который будет показан в открывшемся диалоговом окне для загрузки файла. функция  flush()используется для очистки буфера вывода. Здесь функция readfile() используется только с именем файла.

download.php

<?php

if(isset($_GET))
{
//Читать файл
$filename = $_GET;
//Проверка на существование файла
if(file_exists($filename)) {

//Определение информации заголовка
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Length: '. filesize($filename));
header('Pragma: public');

//Очистить выходной буфер системы
flush();

//Считайте размер файла
readfile($filename);

//Завершить работу со скриптом
die();
}
else{
echo "Файл не существует.";
}
}
else
echo "Имя файла не определено."
?>

Выходные данные

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

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

Adblock
detector