Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Видимо потому, что браузеру передаются данные, форматированные как php-код, и тот их скрывает.
Но если открыть исходный код, то будет его показывать, хотя обычно не должен.
<?php
//Выведите список всех файлов в текущей директории скрипта.
//Создайте теперь в директории со скриптом несколько папок.
//Сделайте так, чтобы в списке, выводимом программой, остались только папки.
//выводим файлы
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
echo $file . '<br>';
}
//выводим папки как папки, прокольно что есть is_dir)
$files = scandir(__DIR__ . '/');
foreach ($files as $dirr) {
if (is_dir($dirr)) {
echo $dirr . '<br>';
}
}
?>
Во примерах для открытия файлов и includ'ах используется DIR.
А зачем нужен абсолютный путь, почему не воспользоваться относительным?
В чем разница относительных и абсолютных путей?
Потому что константа __DIR__ содержит путь до директории с файлом, в котором она написана. А если мы внутри /index.php подключим файл в папке /inc/123.php, в котором будет ещё один include, то он сработает относительно того файла, который мы запустили, а не в котором этот include написан. То есть если в /inc/123.php будет код:
include '456.php';
То подключится не файл /inc/456.php, а /456.php. Не в одной директории с файлом где написан include, а в одной директории с файлом, к которому мы обратились (/index.php).
<?php
// Напишите программу, которая выводит свой собственный код.
// Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта
// (если программа лежит в файле homework.php, то упоминания homework.php не должно быть в исходнике).
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
echo fgets($file);
echo '<br>';
}
fclose($file);
2.
<?php
// Выведите список всех файлов в текущей директории скрипта.
$dir = __DIR__ . '/';
$files = scandir($dir);
foreach ($files as $value) {
echo $value . '</br>';
}
3. Тут я немного больше сделал:)
<?php
// Создайте теперь в директории со скриптом несколько папок.
// Сделайте так, чтобы в списке, выводимом программой, остались только папки.
// Массив с именами новых папок
$newfolders = ['folder-1', 'folder-2', 'folder-3'];
// Если папки еще не существуют, создаем новые
foreach ($newfolders as $folder) {
if (!is_dir($folder)) {
mkdir($folder, 0700);
}
}
// Задаем директорию и получаем массив с файлами
$dir = __DIR__ . '/';
$files = scandir($dir);
// Выводит список всех папок
foreach ($files as $value) {
if (is_dir($value))
echo $value . '</br>';
}
Строки схлопывает браузер, если посмотрите исходный код страницы, то увидите переносы строк. В Вашем варианте новые строки выводятся из-за ручного добавления тега <br> после каждой строки. Также можно было весь вывод обернуть в тег <pre>.
для получения пути до скрипта лучше использовать константу __FILE__, так как $_SERVER['SCRIPT_FILENAME'] не всегда покажет скрипт, в котором этот код написан.
вместо array(1, 2) уже давно принято использовать запись [1, 2] - переучивайтесь.
Напишите программу, которая выводит свой собственный код.
Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта (если программа лежит в файле homework.php, то упоминания homework.php не должно быть в исходнике).
echo file_get_contents(__FILE__);
Выведите список всех файлов в текущей директории скрипта.
Создайте теперь в директории со скриптом несколько папок.
Сделайте так, чтобы в списке, выводимом программой, остались только папки.
foreach(scandir(__DIR__ . '/') as $file)
if(is_dir($file))
echo $file . '<br>';
1 - ОК.
2 - НЕ ОК. Используйте фигурные скобки для тела цикла и условий! Это стандарт в мире PHP. Вам рановато про это читать, но раз уж игнорируете мои комментарии, то почитайте вот это =)
//в случае php/html файла без обработки функцией htmlspecialchars, будет пустая страница
//необходимо преобразовать в html сущности
$data = htmlspecialchars(file_get_contents(__FILE__));
echo $data;
задача 2 - список файлов
if ($array_file = scandir(__DIR__)) {
foreach ($array_file as $index) {
if (is_file($index)) {
echo '<br>' . $index;
}
}
}
задача 2.1 - список директорий
if ($array_file=scandir(__DIR__)) {
foreach ($array_file as $index) {
// отсеим стандартные указатели на текущую и вышестоящую диреторию
if (is_dir($index) && $index != '.' && $index != '..') {
echo '<br>'.$index;
}
}
}
Привет. Просто скопировал по уроку и
возникает такая ошибка, название файлов совпадает, лежит все в одной директории, могут быть еще какие то причины этой ошибки?
Warning: fopen(C:\xampp\htdocs/file.txt): failed to open stream: No such file or directory in C:\xampp\htdocs\files.php on line 2
Warning: fgets() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\files.php on line 4
Warning: fgets() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\files.php on line 4
Warning: fgets() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\files.php on line 4
Warning: fgets() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\files.php on line 4
Warning: fclose() expects parameter 1 to be resource, bool given in C:\xampp\htdocs\files.php on line 7
Код заработал, но только через расширение PHP. Т.е. так
<?php
$file = fopen(__DIR__ . '/file.php', 'r');
Как я понял, что работает только через PHP, txt просто не видит, может это особенность работа xampp ну и ладно)).
Зато файлы он "рисует", а правильно я понимаю, что вносить информацию таким способом можно не только в txt-файлы? Можно, например, вывести текст в pdf-файл. Я попробовал, но файл почему-то не открылся((.
Потому что PDF - это не просто текст, это формат данных со специальными правилами. Про то, что якобы данные пишутся в .php-файл, но не пишутся в .txt - звучит как-то неправдоподобно. Скорее всего, есть еще что-то.
Да, точно есть, на домашнем компе все работает, на рабочем (как раз на нем я это задание и пытался выполнить впервые) пишет файл не найден. Я еще когда html и css изучал заметил, что стили не работают(если их с внешнего файла подключать), что то с рабочим компом.
Спасибо и за поддержку и классные уроки, но пока получается медленнее, чем хотелось. Не все сразу запоминается, иногда приходиться возвращаться к прошлым материалам и повторять. Но процесс захватывающий.
Домашка №1 (были проблемы с кодировкой комментов, пришлось изгалиться)
<?php
//Напишите программу, которая выводит свой собственный код.
//Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта
//(если программа лежит в файле index.php, то упоминания index.php не должно быть в исходнике).
$file = file_get_contents(__DIR__ . '/index.php');
$file=str_replace('index.php', '', $file);
file_put_contents(__DIR__ . '/file.txt', iconv('utf-8', 'windows-1251', $file));
// Можно было и без **IF** обойтись, просто вывести
// можно ли сократить условие **IF** ??
$filesDir = scandir(__DIR__);
foreach ($filesDir as $item) {
if ($item !== '.' and $item !== '..') {
echo $item . '<br>';
}
}
Это было пока что самое сложное задание, все три задания выполнил в одном файле, но первое опустил в самый конец кода. С нетерпением жду критику, задание далось тяжело и уверен, что использовал не самый оптимальный способ его выполнения.
P.S. Посмотрел как другие выполнили, слишком сложно у меня получилось и да, вариант не оптимальный.
Warning: fopen(D:\OSPanel\domains\myproject.loc\www/file.txt): failed to open stream: No such file or directory in D:\OSPanel\domains\myproject.loc\www\files.php on line 2
Warning: fgets() expects parameter 1 to be resource, boolean given in D:\OSPanel\domains\myproject.loc\www\files.php on line 4
Warning: fclose() expects parameter 1 to be resource, boolean given in D:\OSPanel\domains\myproject.loc\www\files.php on line 7
Не догоняю, в чем может быть дело
Дело было в обратном слеше
В уроке функции file_put_contents, file_get_contents использованы без открывания и закрывания файла. Я читал где-то, что и fputs и fgets не остро нуждаются в этом. В документации об этом ничего не нашел. Так как правильно? Для всех функций чтения/записи использовать open и close?
<?php
//Напишите программу, которая выводит свой собственный код.
echo file_get_contents(__FILE__);
2.
//Выведите список всех файлов в текущей директории скрипта.
$directory = scandir(__DIR__ . '/');
foreach ($directory as $file) {
echo $file . '<br>';
}
//Создайте теперь в директории со скриптом несколько папок.
//Сделайте так, чтобы в списке, выводимом программой, остались только папки.
$directory = scandir(__DIR__ . '/');
foreach ($directory as $dir) {
if (is_dir($dir)) {
echo $dir . '<br>';
}
}
Я так пробовал сделать - у меня почему то выводился пустой белый экран, но при просмотре исходного кода я видел пхп код))
я не понял как вывести не в исходный код, а именно в "боевой экран"
<?php
$file = fopen(__DIR__ . '/contents.php', 'r'); // c __FILE__ то же самое
echo fgets($file);
fclose($file);
Все время выводится пустая страница. Нагуглить ничего не смог (не умею видимо). Перезапускал браузер, PhpStorm, компьютер, все равно пустая страница
UPD: если в браузере посмотреть исходный код страницы, там будет код программы, но закомментированный
//Выведите список всех файлов в текущей директории скрипта.
$a = scandir(__DIR__);
foreach($a as $item){
if ($item == '.' || $item == '..'){
continue;
}
if(is_dir($item) === true){
continue;
}
echo $item . '<br>';
}
'<hr>';
//Создайте теперь в директории со скриптом несколько папок.
mkdir('folder1', 0777);
mkdir('folder2', 0777);
mkdir('folder3', 0777);
//Сделайте так, чтобы в списке, выводимом программой, остались только папки.
$a = scandir(__DIR__);
foreach($a as $item){
if ($item == '.' || $item == '..'){
continue;
}
if(is_dir($item) === true){
echo $item . '<br>';
}
}
третье
к слову, если бы не подсмотрел в решении про php_eol - то не прошел бы тесты.
Т.к. система <br> не пропускает.
Возможно, следует обозначить это в задании. https://codingzone.io/ru/problems/14/solution/2077
Не годится. В задании речь идет о том что в исходном коде не должно быть упоминаний о его имени. То есть в случае если файл переименуют и запустят, то он не поломается. Для этого можно использовать константу __FILE__
<?php
//Напишите программу, которая выводит свой собственный код.
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
echo fgets($file);
echo '<br>';
}
fclose($file);
//Выведите список файлов в текущей директории скрипта, чтобы в списке,
//выводимом программой, остались только папки.
$file1 = scandir(__DIR__);
foreach ($file1 as $item) {
if(is_dir($item))
{
echo $item , '/<br>';
}
}
1 задача, сделал запись в фаил чисел от 100 до 1 и вывод их из этого файла
А зачем? Нужно было написать скрипт, который выводит свой собственный код.
2 задачу не понял как делать
Что именно не поняли? На каком пункте?
1 задание
или
Отлично ;)
А можно было вообще написать echo file_get_contents... без использования переменных
Понял, спасибо
Первый вариант у меня ничего не выводит на экран, только второй...
У меня та же проблема.
Видимо потому, что браузеру передаются данные, форматированные как php-код, и тот их скрывает.
Но если открыть исходный код, то будет его показывать, хотя обычно не должен.
2 задание
Тут всё хорошо, но нужно использовать константу __DIR__
Всё хорошо.
Закрывающий тег
?>
в конце не нужен.Во примерах для открытия файлов и includ'ах используется DIR.
А зачем нужен абсолютный путь, почему не воспользоваться относительным?
В чем разница относительных и абсолютных путей?
Потому что константа __DIR__ содержит путь до директории с файлом, в котором она написана. А если мы внутри /index.php подключим файл в папке /inc/123.php, в котором будет ещё один include, то он сработает относительно того файла, который мы запустили, а не в котором этот include написан. То есть если в /inc/123.php будет код:
То подключится не файл /inc/456.php, а /456.php. Не в одной директории с файлом где написан include, а в одной директории с файлом, к которому мы обратились (/index.php).
Использование __DIR__ эту проблему решает.
Привет! Благодарю за урок!) Все супер)
1.
2.
3. Тут я немного больше сделал:)
Отлично =)
2.
Спасибо за уроки!
Хорошо, но:
А когда $_SERVER['SCRIPT_FILENAME'] не покажет текущий файл? Когда вставлен в файле через require ?
Да
Спасибо
Отлично!
Супер!
Хорошо
Напишите программу, которая выводит свой собственный код.
Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта (если программа лежит в файле homework.php, то упоминания homework.php не должно быть в исходнике).
Выведите список всех файлов в текущей директории скрипта.
Создайте теперь в директории со скриптом несколько папок.
Сделайте так, чтобы в списке, выводимом программой, остались только папки.
1 - ОК.
2 - НЕ ОК. Используйте фигурные скобки для тела цикла и условий! Это стандарт в мире PHP. Вам рановато про это читать, но раз уж игнорируете мои комментарии, то почитайте вот это =)
Извините, старые привычки засели глубоко)Я читал, просто не увидел)
Я читал PSR. Это у меня от другого языка въелось)
Понял, ок)
задача 1
задача 2 - список файлов
задача 2.1 - список директорий
Отлично
//Напишите программу, которая выводит свой собственный код.
//Выведите список всех файлов в текущей директории скрипта.
// Сделайте так, чтобы в списке, выводимом программой, остались только папки.
Есть константа:
Отлично
Отлично!
C:\xampp\htdocs/file.txt - пишет, что файла такого нет. Выбрали xampp вместо OpenServer - разбирайтесь сами, что там не так, я предупреждал)
Код заработал, но только через расширение PHP. Т.е. так
Как я понял, что работает только через PHP, txt просто не видит, может это особенность работа xampp ну и ладно)).
Зато файлы он "рисует", а правильно я понимаю, что вносить информацию таким способом можно не только в txt-файлы? Можно, например, вывести текст в pdf-файл. Я попробовал, но файл почему-то не открылся((.
Потому что PDF - это не просто текст, это формат данных со специальными правилами. Про то, что якобы данные пишутся в .php-файл, но не пишутся в .txt - звучит как-то неправдоподобно. Скорее всего, есть еще что-то.
Да, точно есть, на домашнем компе все работает, на рабочем (как раз на нем я это задание и пытался выполнить впервые) пишет файл не найден. Я еще когда html и css изучал заметил, что стили не работают(если их с внешнего файла подключать), что то с рабочим компом.
Вы скопируйте с рабочего компа на домашний и сравните файлы. Где-то будет отличие.
Первое задание:
Второе задание:
Отлично разобрались! Так держать =)
Спасибо и за поддержку и классные уроки, но пока получается медленнее, чем хотелось. Не все сразу запоминается, иногда приходиться возвращаться к прошлым материалам и повторять. Но процесс захватывающий.
Это главное, что нравится. Остальное вообще не важно)
1.
2.1
2.2
Отлично
Отлично!
Домашка №1 (были проблемы с кодировкой комментов, пришлось изгалиться)
Выводить код нужно в браузер. Никаких имён файлов быть не должно
Скажите, пожалуйста, почему в коде выше не работает
P.S. прошу проверить домашку в соседних уроках, я за последние дни урока 4-5 прошел вроде...
Советую вам посмотреть решения других учеников. Чтобы не использовать имя текущего файла используется константа __FILE__
Супер!
Отлично
1 :
2.1 :
2.2 :
Супер! По первому заданию советую посмотреть еще другие решения, есть вариант в одну строку =)
Попробовал в 1-м задании заменить на
Не работает, эта команда запускается только когда есть этот кусок кода
Полностью так выглядит
Ну и соответственно содержимое файла выводит дважды.
Такого быть не может. Проверьте ещё раз. Скорее всего не сохранили файл.
/// 1
Супер!
// 2.1
!in_array можно, но и так норм
// 2.2
Отлично
Отлично
Задание 1.
Задание 2.
Отлично
1.
2.
Отлично!
Задача 1.
Задача 2.
Задача 2.1
Всё ок, но в первом задании можно было проще - использовать функцию file_get_contents
У меня почему-то вместо текста в браузере знаки вопроса, в чем может быть проблема ?
В кодировке
Это было пока что самое сложное задание, все три задания выполнил в одном файле, но первое опустил в самый конец кода. С нетерпением жду критику, задание далось тяжело и уверен, что использовал не самый оптимальный способ его выполнения.
P.S. Посмотрел как другие выполнили, слишком сложно у меня получилось и да, вариант не оптимальный.
По выводу содержимого файла, лучше так:
Остальное ок
Отлично
Отлично
1ое задание ( тут решил записать данные в другой файл)
2ое задание
1.
2.$newFiles = []; отредактировал, почти сразу же)
Отлично
1
2
Отлично
1
2.1
2.2
Всё хорошо, только отступы куда-то потерялись. И первое задание можно было проще сделать.
Где закрывающая скобка?
Тут пробел потерялся
Поправил, спасибо, отчитал собственную невнимательность!
Теперь отлично
Всё отлично. В качестве решения первого задания только могу на будущее предложить вот такой вариант:
как указать тип что в функцию передается первый параметр путь?
Пример более простого решения помещается в одной строке:
По поводу вопросу уже разобрался!
Если функция ничего не возвращает - тип возвращаемого значения можно ставить void ?
Да
file_get_contents можно передать и со всеми пробелами, через str_raplace
Накопал на просторах.
Отлично
Здравствуйте, у меня проблемос
К меня даже первый пример не заработал, хотя шторм не жалуется
Warning: fopen(D:\OSPanel\domains\myproject.loc\www/file.txt): failed to open stream: No such file or directory in D:\OSPanel\domains\myproject.loc\www\files.php on line 2
Warning: fgets() expects parameter 1 to be resource, boolean given in D:\OSPanel\domains\myproject.loc\www\files.php on line 4
Warning: fclose() expects parameter 1 to be resource, boolean given in D:\OSPanel\domains\myproject.loc\www\files.php on line 7
Не догоняю, в чем может быть дело
Дело было в обратном слеше
Не .txt а .php
Первое задание:
Почитал комментарии, оказалось всё проще:
Ок) учитесь гуглить
Не выполняется
Второе задание:
Исправился))
Разве так мы учились получать текущий путь до папки?
Почему здесь не воспользовались scandir?
над этим заданием я очень кропотливо трудился. просьба указать на ошибки и улучшения.
что-то всё поехало в комменте.
Чтобы не ехало нужно в редакторе комментария оформлять код (самая первая кнопка над окном ввода коммента). Исправьте, пожалуйста, самостоятельно.
я так и делал.и даже редактировал. но толку нет.
редактор кода как-то на куски разрывает код.
У вас было 6 символов ``` после второго пункта, вместо 3. Исправил ваш коммент.
1.
А почему просто __FILE__ не использовали?
Закрывающий тег ?> не нужен!
Решение гораздо проще, если чуть-чуть поискать функции для чтения файлов:
2.
Сорян, не смогу подобное проверять, очень сложно. Код по заданию должен был в 5 строк выйти, эта мешанина не нужна ни вам, ни мне)
1
Не работает
2.1
2.2
Соблюдайте отступы, и оформляйте код с помощью самой первой кнопки в редакторе комментариев. По алгоритму замечаний нет.
Что-то не то, перечитайте условия задачи
Вывод содержимого директории
Вывод подпапок:
Много ненужных действий, рекомендую ознакомиться с другими решениями в комментариях
Артём, в чём может быть ошибка? Проверяю код из урока, запускаю:
добавляется одновременно 2 одинаковых строки вместо одной.
Плагин в браузере может в фоне ещё раз страницу загружать. Попробуйте в режиме инкогнито
Красота! Непонятно только, зачем первое задание переусложнили тегами и экранизацией как следствие
В принципе согласен что усложнил... Буду искать альтернативные решения)
Спасибо огромное за урок :)
Вывод собственного кода
Вы же уже сдали одно)
Вывод файлов и папок отдельно
Отлично
Список всех файлов:
Отобразить только папки:
В первом решении не выполнены все условия задачи
А что, собственно, не выполнено?
Код на экран выводится, имя скрипта в выводимом не фигурирует. Что я упустил?
Ну, в смысле, я понимаю, что, видимо, имелось в виду сделать вот так:
Но ведь вариант, который я первым сделал, тоже условия соблюдает :)
Нуу, такое себе. Вместо этого подключили файл, в котором это имя всё же содержится. По факту да, хитростью взяли) но ожидалось решение с __FILE__
Согласен, я скорее потроллил баг в ТЗ (сорри, мне уже стыдно :) ).
Так или иначе, решение с
__FILE__
предоставил :)Ок)
Отлично
В уроке функции file_put_contents, file_get_contents использованы без открывания и закрывания файла. Я читал где-то, что и fputs и fgets не остро нуждаются в этом. В документации об этом ничего не нашел. Так как правильно? Для всех функций чтения/записи использовать open и close?
В документации помимо слов есть примеры использования. Разве есть в разделах про file_put_contents и file_get_contents что-то про открытие и закрытие?
1) Программа, которая выводит свой собственный код
или так
или так
2) Выведите список всех файлов и папок
Зачем pre и htmlspecialchars?
:)
2 задача, 1 пункт
2 пункт
:)
1.
2.
Отличная, образцовая домашка!
Спасибо!
Супер! Вардамп только нужно было убрать перед отправкой
2.
Только файлы:
Только папки:
Первое задание можно гораздо проще решить. Поищите а комментариях.
Остальные ОК.
Пишу это в test.php
Захожу на http://myproject.loc/test.php
И вижу пустоту. Но если посмотреть код страницы, можно увидеть этот код закомментированным. Но как так вышло?)
А какие именно комментарии?
В коде страницы следующее:
Вы ее по какому пути открываете? Через myproject.loc?
http://myproject.loc/test.php
Какое-то волшебство)
1.
2.
Супер!
Демонстрируем содержимое
Выводим список файлов
Выводим только папки
Первое задание можно гораздо проще решить. Поищите а комментариях.
Остальные ОК.
Всё отлично. В качестве варианта решения первого задания более предпочтительным будет:
Всё отлично. В качестве варианта решения первого задания более предпочтительным будет:
Я так пробовал сделать - у меня почему то выводился пустой белый экран, но при просмотре исходного кода я видел пхп код))
я не понял как вывести не в исходный код, а именно в "боевой экран"
Задание 1 не получается, я пробовал так
и так
Все время выводится пустая страница. Нагуглить ничего не смог (не умею видимо). Перезапускал браузер, PhpStorm, компьютер, все равно пустая страница
UPD: если в браузере посмотреть исходный код страницы, там будет код программы, но закомментированный
Задание 2, все файлы
Только папки
Задание 3 - https://codingzone.io/problems/14/solution/2016 (а зачем в образце решения массив $pairs?)
вариант для браузера будет выглядеть так:
он не закомментированный. Там просто открывается тег, который браузер не может корректно обработать (считает, что это тег вёрстки).
1 задание
2 задание
третье
к слову, если бы не подсмотрел в решении про php_eol - то не прошел бы тесты.
Т.к. система <br> не пропускает.
Возможно, следует обозначить это в задании.
https://codingzone.io/ru/problems/14/solution/2077
Спасибо за урок!
Не нужно сравнивать булево значение с true
В остальном отлично
Да, думаю, что это уже усвоил, хотя так код выглядит очевиднее (для меня новичка).
Спасибо!
Привет, решила задачку. Самая лёгкая получилась :)))
Отлично)
Всё отлично, но проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
Добрый день!
1.
2.
Привет! Отлично!
Здравствуйте! Надеюсь, я правильно понял 1 часть ДЗ.
1 Задание
link.php
index.php
2 Задание
Здравствуйте. Нет, в первом задании должен получиться 1 файл, который выведет свой собственный код.
Не годится. В задании речь идет о том что в исходном коде не должно быть упоминаний о его имени. То есть в случае если файл переименуют и запустят, то он не поломается. Для этого можно использовать константу __FILE__
1)
2)
Отлично
1.
2.Выведите список всех файлов в текущей директории скрипта.
Сделайте так, чтобы в списке, выводимом программой, остались только папки.
Отлично
Отлично
Перечитайте первое задание