Этот урок набрал набрал достаточно большое количество комментариев и дальнейшее его комментирование отключено. Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку, посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали. Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
1nSide 07.05.2018 в 11:47

1 задача, сделал запись в фаил чисел от 100 до 1 и вывод их из этого файла

$file = fopen(__DIR__ . '/file4.txt', 'w');
for ($i = 100; $i>= 1; $i--) {
    fputs($file, $i . PHP_EOL);
}

$file = fopen(__DIR__ . '/file4.txt', 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);
ivashkevich 07.05.2018 в 16:57

А зачем? Нужно было написать скрипт, который выводит свой собственный код.

1nSide 07.05.2018 в 11:49

2 задачу не понял как делать

ivashkevich 07.05.2018 в 17:00

Что именно не поняли? На каком пункте?

AnatolyMartyanov 07.05.2018 в 17:06

1 задание

<?php
$file = file_get_contents(__FILE__);
echo $file;

или

<?php
$file = fopen(__FILE__ , 'r');
while  (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
ivashkevich 07.05.2018 в 17:09

Отлично ;)
А можно было вообще написать echo file_get_contents... без использования переменных

AnatolyMartyanov 07.05.2018 в 17:10

Понял, спасибо

[email protected] 24.11.2018 в 10:29

Первый вариант у меня ничего не выводит на экран, только второй...

Pavel-Tonk 06.12.2018 в 01:25

У меня та же проблема.

Fellini 08.03.2019 в 00:54

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

AnatolyMartyanov 07.05.2018 в 17:07

2 задание

$dir = '../file';
$files = scandir($dir);
foreach ($files as $file) {
    echo $file . '<br>';
}

foreach ($files as $dirr) {
    if (is_dir($dirr)) {
        echo $dirr . '<br>';
    }
}
ivashkevich 07.05.2018 в 17:08

Тут всё хорошо, но нужно использовать константу __DIR__

DmitryGavrilov 04.07.2018 в 14:54
<?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>';
    }
}

?>
ivashkevich 06.07.2018 в 18:02

Всё хорошо.

Закрывающий тег ?> в конце не нужен.

rusgil 15.07.2018 в 10:38

Во примерах для открытия файлов и includ'ах используется DIR.
А зачем нужен абсолютный путь, почему не воспользоваться относительным?
В чем разница относительных и абсолютных путей?

ivashkevich 15.07.2018 в 10:53

Потому что константа __DIR__ содержит путь до директории с файлом, в котором она написана. А если мы внутри /index.php подключим файл в папке /inc/123.php, в котором будет ещё один include, то он сработает относительно того файла, который мы запустили, а не в котором этот include написан. То есть если в /inc/123.php будет код:

include '456.php';

То подключится не файл /inc/456.php, а /456.php. Не в одной директории с файлом где написан include, а в одной директории с файлом, к которому мы обратились (/index.php).

Использование __DIR__ эту проблему решает.

Fox-24 15.08.2018 в 12:03

Привет! Благодарю за урок!) Все супер)

1.

<?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>';
}
ivashkevich 16.08.2018 в 21:50

Отлично =)

dom1r 21.08.2018 в 10:35
  1. Мне показалось через fgets лучше, т.к он построчно выводит, а file_get_contents через пробел
<?php
echo "hello";

$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);

2.

<?php
//выводит список файлов без директории
$filelist = [];

if ($handle = opendir(__DIR__)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_file($entry)) {
            $filelist[] = $entry;
        }
    }

    closedir($handle);
}

print_r($filelist);
<?php
//выводит список папок
$filelist = [];

if ($handle = opendir(__DIR__)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_dir($entry)) {
            $filelist[] = $entry;
        }
    }

    closedir($handle);
}

print_r($filelist);
ivashkevich 25.08.2018 в 21:31
  1. Строки схлопывает браузер, если посмотрите исходный код страницы, то увидите переносы строк. В Вашем варианте новые строки выводятся из-за ручного добавления тега <br> после каждой строки. Также можно было весь вывод обернуть в тег <pre>.
  2. Хорошо
  3. Хорошо
artemjeka 11.09.2018 в 17:13
  1. $file = fopen($_SERVER['SCRIPT_FILENAME'], 'rb');
    while (!feof($file)) {
        echo fgets($file);
        echo '<br>';
    }
    fclose($file);
  2. $listFiles = array_diff(scandir(__DIR__), array('..', '.'));
    foreach ($listFiles as $fileName) {
        echo $fileName;
        echo '<br>';
    }
  3. $listFiles = array_diff(scandir(__DIR__), array('..', '.'));
    foreach ($listFiles as $fileName) {
        if (is_file($fileName)) {
            continue;
        }
        echo $fileName;
        echo '<br>';
    }

Спасибо за уроки!

ivashkevich 22.09.2018 в 09:55

Хорошо, но:

  1. для получения пути до скрипта лучше использовать константу __FILE__, так как $_SERVER['SCRIPT_FILENAME'] не всегда покажет скрипт, в котором этот код написан.
  2. вместо array(1, 2) уже давно принято использовать запись [1, 2] - переучивайтесь.
artemjeka 08.10.2018 в 16:04

А когда $_SERVER['SCRIPT_FILENAME'] не покажет текущий файл? Когда вставлен в файле через require ?

ivashkevich 08.10.2018 в 23:09

Да

artemjeka 10.10.2018 в 05:35

Спасибо

Benya 22.09.2018 в 18:24
<?php
$data = htmlspecialchars(file_get_contents(__FILE__));
echo $data;
ivashkevich 22.09.2018 в 20:37

Отлично!

Benya 22.09.2018 в 19:13
<?php
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
    if (is_dir($file)) {
        echo $file . '<br>';
    }
}
ivashkevich 22.09.2018 в 20:37

Супер!

SBTesla 28.09.2018 в 10:14
$file = fopen(__FILE__ , 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}

fclose($file);
//--------------------------------------------------

$dir = __DIR__. '/';
$file = scandir($dir);

foreach ($file as $value) {
    echo $value. '<br>';
}
ivashkevich 28.09.2018 в 23:14

Хорошо

stokato 05.11.2018 в 15:20

Напишите программу, которая выводит свой собственный код.
Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта (если программа лежит в файле homework.php, то упоминания homework.php не должно быть в исходнике).

echo file_get_contents(__FILE__);

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

foreach(scandir(__DIR__ . '/') as $file)
    if(is_dir($file))
        echo $file . '<br>';
ivashkevich 05.11.2018 в 21:50

1 - ОК.
2 - НЕ ОК. Используйте фигурные скобки для тела цикла и условий! Это стандарт в мире PHP. Вам рановато про это читать, но раз уж игнорируете мои комментарии, то почитайте вот это =)

stokato 07.11.2018 в 07:23
foreach(scandir(__DIR__ . '/') as $file){
    if(is_dir($file)){
        echo $file . '<br>';
    }
}

Извините, старые привычки засели глубоко)Я читал, просто не увидел)
Я читал PSR. Это у меня от другого языка въелось)

ivashkevich 08.11.2018 в 10:31

Понял, ок)

virtual2018 22.11.2018 в 14:14

задача 1

//в случае 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;
        }
    }
}
ivashkevich 22.11.2018 в 22:18

Отлично

Bogdan 27.12.2018 в 11:58

//Напишите программу, которая выводит свой собственный код.

//$file = fopen(__FILE__, 'r');
//while (!feof($file)) {
//    echo fgets($file);
//    echo '<br>';
//}
//fclose($file);

//Выведите список всех файлов в текущей директории скрипта.

$showAllFiles = scandir(__DIR__);
foreach ($showAllFiles as $value) {
    echo $value . '<br>';
}

// Сделайте так, чтобы в списке, выводимом программой, остались только папки.

$showAllDirs = scandir(__DIR__);
foreach ($showAllDirs as $value) {
    echo is_dir($value) ? $value  . '<br>': '';
}
ivashkevich 28.12.2018 в 21:09
  1. Почему все закомментировано?
  2. ОК
  3. ОК
ashfedor 11.03.2019 в 20:32
$url = $_SERVER['PHP_SELF'];

$file = fopen(__DIR__ . $url, 'r');
while (!feof($file)){
    echo fgets($file);
    echo '<br>';
}
fclose($file);
ivashkevich 11.03.2019 в 21:33

Есть константа:

__FILE__
ashfedor 11.03.2019 в 20:46
$dir = __DIR__ . '/';

foreach (scandir($dir) as $files ){
    if (is_dir($files)){
        echo $files . '<br>';
    }
}
ivashkevich 11.03.2019 в 21:34

Отлично

[email protected] 12.03.2019 в 21:11
<?php
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}

$files = scandir(__DIR__);

foreach ($files as $dir) {
    if (is_dir($dir)) {
        echo $dir . '<br>';
    }
}
ivashkevich 14.03.2019 в 09:07

Отлично!

[email protected] 13.03.2019 в 19:58
Привет. Просто скопировал по уроку и
возникает такая ошибка, название файлов совпадает, лежит все в одной директории, могут быть еще какие то причины этой ошибки? 

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
ivashkevich 14.03.2019 в 09:08

C:\xampp\htdocs/file.txt - пишет, что файла такого нет. Выбрали xampp вместо OpenServer - разбирайтесь сами, что там не так, я предупреждал)

[email protected] 14.03.2019 в 19:00

Код заработал, но только через расширение PHP. Т.е. так

<?php
$file = fopen(__DIR__ . '/file.php', 'r');

Как я понял, что работает только через PHP, txt просто не видит, может это особенность работа xampp ну и ладно)).
Зато файлы он "рисует", а правильно я понимаю, что вносить информацию таким способом можно не только в txt-файлы? Можно, например, вывести текст в pdf-файл. Я попробовал, но файл почему-то не открылся((.

ivashkevich 17.03.2019 в 23:02

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

[email protected] 18.03.2019 в 10:36

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

ivashkevich 18.03.2019 в 12:30

Вы скопируйте с рабочего компа на домашний и сравните файлы. Где-то будет отличие.

Grewi 22.03.2019 в 23:42

Первое задание:

//Выводим содержимое файла программы
$fOpen = fopen(__FILE__, 'r');

while (!feof($fOpen)) {
    echo htmlentities(fgets($fOpen)).'</br>';
}

Второе задание:

//Выводим список категорий
$dir = scandir(__DIR__ . '/work');
foreach ($dir as $a) {
    if ($a == '.' || $a == '..') { //Удаляем ненужные элементы массива
        continue;
    }
    $i = iconv('windows-1251', 'utf-8', $a); //Правим кодировку

    if (is_dir(__DIR__ . '/work/' . $a)) {
        echo '<p><strong style="color: red;">Папка: </strong>' . $i . '</p>';
    }
}

//Выводим список файлов
foreach ($dir as $a) {
    if ($a == '.' || $a == '..') { //Удаляем ненужные элементы массива
        continue;
    }
    $i = iconv('windows-1251', 'utf-8', $a); //Правим кодировку

    if (is_file(__DIR__ . '/work/' . $a)) {
        $path_parts = pathinfo($i);
        echo '<p><strong style="color:blue;">Файл: </strong>';
        echo $path_parts['filename'];
        echo '<b>.'.$path_parts['extension'].'</b>';
        echo '</p>';
    }
}

//Создаем директории из массива
$newFold = ['Папка--1', 'Папка--2', 'Папка--3'];
foreach ($newFold as $i) {
    $i = iconv('utf-8//IGNORE', 'windows-1251', $i);
    if (file_exists(__DIR__ . '/work/' . $i) == false) {
        mkdir(__DIR__ . '/work/' . $i);
    }
}

//Удаляем файлы из директории
foreach ($dir as $g){
    if(is_file(__DIR__.'/work/'.$g)){
        unlink(__DIR__.'/work/'.$g);
    }
}
ivashkevich 23.03.2019 в 22:28

Отлично разобрались! Так держать =)

Grewi 23.03.2019 в 23:55

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

ivashkevich 24.03.2019 в 00:22

Это главное, что нравится. Остальное вообще не важно)

polvanovv 05.04.2019 в 12:48

1.

echo file_get_contents(__FILE__);

2.1

$dir = scandir(__DIR__);
foreach ($dir as $resource){
    echo $resource;
    echo '<br>';
}

2.2

$dir = scandir(__DIR__);
foreach ($dir as $folder){
    if (is_dir($folder)) {
        echo $folder;
        echo '<br>';
    }
}
ivashkevich 05.04.2019 в 14:07

Отлично

Boodoo 07.04.2019 в 20:38
<?php
    $text = htmlspecialchars(file_get_contents(__FILE__));
    echo $text;

    $arr = scandir(__DIR__);
    foreach($arr as $elem) {
        echo $elem . '<br>';
    }

    for($i=1; $i<4; $i++) {
        mkdir('folder' . $i);   
    }

    $arr = scandir(__DIR__);
    foreach($arr as $elem) {
        if(is_dir($elem)) {
            echo $elem . '<br>';
        }
    }
ivashkevich 08.04.2019 в 21:44

Отлично!

Dram 24.04.2019 в 15:33

Домашка №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));
ivashkevich 25.04.2019 в 07:44

Выводить код нужно в браузер. Никаких имён файлов быть не должно

Dram 25.04.2019 в 08:52
<?php
$file = file_get_contents(__DIR__ . '/index.php');

$file=str_replace('index.php', '', $file);

var_dump($file);

Скажите, пожалуйста, почему в коде выше не работает

echo $file;
print_r($file);

P.S. прошу проверить домашку в соседних уроках, я за последние дни урока 4-5 прошел вроде...

ivashkevich 25.04.2019 в 12:08

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

artemship 30.04.2019 в 19:30
<?php

//Вывод исходного кода программы
$data = htmlspecialchars(file_get_contents(__FILE__));
echo $data;
echo '<br><br>';

//Вывод файлов
$directoryContents = scandir(__DIR__);
foreach ($directoryContents as $item) {
    if (is_file($item)) {
        echo $item . '<br>';
    }
}
echo '<br>';

//Создание папок, если их нет
$folderName = 'folder_';
for ($i = 1; $i < 4; $i++) {
    if (!is_dir($folderName . $i)) {
        mkdir($folderName . $i);
    }
}

//Вывод папок
$directoryContents = scandir(__DIR__);
foreach ($directoryContents as $item) {
    if (is_dir($item) && $item !== '.' && $item !== '..') {
        echo $item . '<br>';
    }
}
ivashkevich 02.05.2019 в 17:45

Супер!

[email protected] 12.05.2019 в 22:29
$file = fopen(__file__,'r');
while(!feof($file)) {
    echo fgets($file);
}
fclose($file);

$way = scandir(__DIR__ . '/');

forEach($way as $key) {
    if (!is_file($key) && $key != '.' && $key != '..') {
       echo $key . '<br>';
    }
}
ivashkevich 12.05.2019 в 23:43

Отлично

Moskva 02.06.2019 в 21:34

1 :

$file = fopen(__FILE__, 'r'); 
while (!feof($file)){
    echo fgets($file) . '<br>';
}
fclose($file);

2.1 :

$file = scandir(__DIR__); 
foreach ($file as $string){
    echo $string . '<br>';
}

2.2 :

$file = scandir(__DIR__);
foreach ($file as $string){
    if(is_dir($string)) { 
        echo $string . '<br>';
    }
}
ivashkevich 03.06.2019 в 18:13

Супер! По первому заданию советую посмотреть еще другие решения, есть вариант в одну строку =)

Moskva 26.06.2019 в 16:31

Попробовал в 1-м задании заменить на

echo file_get_contents(__FILE__);

Не работает, эта команда запускается только когда есть этот кусок кода

while (!feof($file)){
    echo fgets($file) . '<br>';
}

Полностью так выглядит

$file = fopen(__FILE__, 'r');
while (!feof($file)){
    echo fgets($file) . '<br>';
}
fclose($file);

echo file_get_contents(__FILE__);

Ну и соответственно содержимое файла выводит дважды.

ivashkevich 27.06.2019 в 19:05

Такого быть не может. Проверьте ещё раз. Скорее всего не сохранили файл.

esqrx 14.06.2019 в 16:11

/// 1

var_dump(file_get_contents(__FILE__));
ivashkevich 15.06.2019 в 06:34

Супер!

esqrx 16.06.2019 в 01:53

// 2.1

// Можно было и без **IF** обойтись, просто вывести
// можно ли сократить условие **IF** ??

$filesDir = scandir(__DIR__);
foreach ($filesDir as $item) {
    if ($item !== '.' and $item !== '..') {
        echo $item . '<br>';
    }
}
ivashkevich 17.06.2019 в 09:56

!in_array можно, но и так норм

esqrx 16.06.2019 в 02:07

// 2.2

$filesDir = scandir(__DIR__);
foreach ($filesDir as $item) {
    if (is_dir($item)) {
        if ($item !== '.' and $item !== '..') {
            echo $item . '<br>';
        }
    }
}
ivashkevich 17.06.2019 в 09:56

Отлично

Reechniy 14.07.2019 в 15:21
дз1
<?php
$file=file_get_contents(__FILE__);
echo $file;

дз2
<?php
$file=scandir(__DIR__.'/');
foreach ($files as $file) {
    echo $file.'<br>';
}
$files=scandir(__DIR__.'/');
foreach ($files as $dirr){
    if (is_dir($dirr)){
        echo $dirr .'<br>';
    }
}
ivashkevich 14.07.2019 в 15:24

Отлично

AlexxxEy 19.07.2019 в 02:48

Задание 1.

$file = fopen( __FILE__, 'r');
while(!feof($file)){
    echo fgets($file) . '</br>';
}

Задание 2.

$file = scandir(__DIR__ . '/');
foreach($file as $files){
    echo $files . '</br>';
}

foreach($file as $files){
    if(is_dir($files))
    {
        echo $files . '</dir>';
    }
}
ivashkevich 19.07.2019 в 07:04

Отлично

Blook 28.07.2019 в 17:36

1.

$file = fopen(__FILE__, 'r');

while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}

fclose($file);

2.

//Убираем точки с массива
$dirInfo = array_diff_assoc( scandir(__DIR__), ['.', '..'] );

foreach ($dirInfo as $subject) {
    if(is_dir($subject)) {
        echo $subject . '<br>';
    }
}
ivashkevich 28.07.2019 в 18:31

Отлично!

Dreft 02.09.2019 в 18:21

Задача 1.

var_dump(file_get_contents(__FILE__));

Задача 2.

$files = scandir(__DIR__);
foreach ($files as $file) {
    if (is_file($file)) {
        echo $file . "<br>";
    }
}

Задача 2.1

$files = scandir(__DIR__);
foreach ($files as $file) {
    if (!is_file($file) && $file != '.' && $file != '..') {
        echo $file . "<br>";
    }
}
ivashkevich 02.09.2019 в 18:51
  1. Отлично
  2. Отлично
Vladimir96 06.09.2019 в 17:54
<?php
//Задание 1
    $file = fopen(__DIR__ . '/file2.php' , 'r');

    while(!feof($file)) {
        echo fgets($file);
        echo '<br>';
    }

    fclose($file);

//Задание 2
    $fileList = opendir("C:/OSPanel/domains/textfile.loc");

    if($fileList) {       

        while($entry = readdir($fileList)){
            if (is_dir($entry)) {
                echo $entry."<br />";
            }
        }

        closedir($fileList);
    }
ivashkevich 08.09.2019 в 09:30

Всё ок, но в первом задании можно было проще - использовать функцию file_get_contents

Naskek 16.09.2019 в 13:38

описание картинки

У меня почему-то вместо текста в браузере знаки вопроса, в чем может быть проблема ?

ivashkevich 16.09.2019 в 18:49

В кодировке

Ooleg 18.09.2019 в 14:26

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

<?php
if($handle = opendir(__DIR__)){
    echo 'Выводим список файлов';
    echo '<br>';
    while(false !== ($file = readdir($handle))) {
        if($file != "." && $file != ".."){
            echo '"' . $file . '"' . '<br>';
        }
    }
    closedir($handle);
}

echo '<br>' . 'Создаём папки и выводим их';
for ($i = 0; $i <= 2; $i++)
if (!is_dir(__DIR__ . "/" . 'dir' . $i)){
    mkdir(__DIR__ . "/" . 'dir' . $i);
}
if($handle = opendir(__DIR__)){
    echo '<br>';
    while(false !== ($file = readdir($handle))) {
        if($file != "." && $file != ".." && is_dir($file)){
            echo '"' . $file . '"' . '<br>';
        }
    }
    closedir($handle);
}

//Удаляем ненужные папки
for ($i = 0; $i <= 2; $i++)
    if (is_dir(__DIR__ . "/" . 'dir' . $i)){
        rmdir(__DIR__ . "/" . 'dir' . $i);
    }

echo '<br>' . 'Находим наш скрипт и выводим его' . '<br>';
$file = fopen('./'.$_SERVER['PHP_SELF'], 'r'); //Здесь я не до конца понял, что сделал, но работает
echo '"' . './'.$_SERVER['PHP_SELF'] . '"' . '<br>';
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);
ivashkevich 18.09.2019 в 17:51

По выводу содержимого файла, лучше так:

echo file_get_contents(__FILE__);

Остальное ок

dliashchenko 01.10.2019 в 10:02
<?php
echo file_get_contents(__FILE__, null, null, 6, 1000) . "<br/>";

$scanDir = scandir(__DIR__);
foreach ($scanDir as $file){
    if(is_file($file)) {
        echo $file . "<br/>";
    }
}

foreach ($scanDir as $dir){
    if (is_dir($dir)){
        echo $dir . "<br/>";
    }
}
ivashkevich 01.10.2019 в 12:26

Отлично

H3licoptero 09.10.2019 в 13:08
Второе задание

$dir = __DIR__;
$displayDir = scandir($dir);
foreach ($displayDir as $file) {
    if(is_dir($file)) {
        echo $dir . '<br>';
    }
}
ivashkevich 09.10.2019 в 19:29

Отлично

Evilinside 22.10.2019 в 16:57

1ое задание ( тут решил записать данные в другой файл)

$file = copy(__DIR__ . '/files.php',__DIR__ .'/file3.txt');
file_put_contents(__DIR__ .'/file3.txt', $file);

2ое задание

$folders = ['1', '2', '3'];

foreach ($folders as $folder) {
    if (!is_dir($folder)) {
        mkdir($folder, 0777);
    }
}
$files = scandir(__DIR__ . '/');
foreach ($files as $file){
    if(is_dir($file)){
        echo $file . PHP_EOL;
    }
}
ivashkevich 22.10.2019 в 16:59
  1. Вообще не то, что требовалось в задании. Переделайте, пожалуйста.
  2. $newFiles=[]; - это для чего?
Evilinside 22.10.2019 в 17:41

1.

echo file_get_contents(__FILE__ );

2.$newFiles = []; отредактировал, почти сразу же)

ivashkevich 22.10.2019 в 18:27

Отлично

sar16520 02.11.2019 в 20:05

1

<?php
$file = file_get_contents(__FILE__);
echo $file;

2

<?php
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
echo $file . '<br>';
}

$files = scandir(__DIR__ . '/');
foreach ($files as $dirr) {
    if (is_dir($dirr)) {
        echo $dirr . '<br>';
    }
}
ivashkevich 03.11.2019 в 05:19

Отлично

[email protected] 13.11.2019 в 15:04

1

<?php
$file = fopen(__FILE__ , 'r');
while  (!feof($file)) {
    echo fgets($file);
    echo '<br>';

2.1

<?php
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
echo $file . '<br>';
}

2.2

<?php 
$files = scandir(__DIR__ . '/');
foreach ($files as $dirr) {
if (is_dir($dirr)) {
echo $dirr . '<br>';
}
}
ivashkevich 13.11.2019 в 17:14

Всё хорошо, только отступы куда-то потерялись. И первое задание можно было проще сделать.

Salexandr 09.01.2020 в 00:54
echo htmlspecialchars(file_get_contents(__FILE__));
$dir = scandir(__DIR__);
foreach ($dir as $item) {
   echo $item . '<br>';
}
mkdir(__DIR__ . '/newDir1', 0700);
mkdir(__DIR__ . '/newDir2', 0700);
$dir = scandir(__DIR__);
foreach ($dir as $item) {
   if (is_dir($item)) {
       echo $item . '<br>';
   }
}
ivashkevich 11.01.2020 в 10:42
$dir = scandir(__DIR__);
foreach ($dir as $item){
   echo $item . '<br>';

Где закрывающая скобка?

$item){

Тут пробел потерялся

Salexandr 29.01.2020 в 11:53

Поправил, спасибо, отчитал собственную невнимательность!

ivashkevich 29.01.2020 в 13:19

Теперь отлично

eNergy 15.01.2020 в 17:27
<?php
// 1
$file = fopen(__FILE__ , 'r');
while  (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);
// 2
$path = scandir(__DIR__);
foreach ($path as $value) {
    echo $value . '<br>';
}
// 2.1
$path = scandir(__DIR__);
foreach ($path as $value) {
    if (is_dir($value))
    echo $value . '<br>';
}
ivashkevich 18.01.2020 в 06:11

Всё отлично. В качестве решения первого задания только могу на будущее предложить вот такой вариант:

file_get_contents(__FILE__)
YuraG 20.01.2020 в 18:08
<?php

$fd = fopen($_SERVER['SCRIPT_FILENAME'], 'r');

while (!feof($fd)) {
    $row = fgets($fd);
    echo $row . '<br>';
}

// echo file or dir
function viewDirectory(string $path, bool $viewFile = true)
{
    $dd = opendir($path);
    if ($dd) {
        while (false !== ($elemnt = readdir($dd))) {
            if ($viewFile) {
                if (is_dir($elemnt)) {
                    continue;
                }
                echo 'файл : ' . $elemnt . '<br>';
            } else {
                if (is_file($elemnt)) {
                    continue;
                }
                if ($elemnt == '.' || $elemnt == '..'){
                    continue;
                }
                echo 'Папка : ' . $elemnt . '<br>';
            }
        }
    }
}

$dir = __DIR__;

viewDirectory($dir);
echo '<br>';
viewDirectory($dir, 0);

как указать тип что в функцию передается первый параметр путь?

ivashkevich 20.01.2020 в 19:04
  1. Есть специальная константа __FILE__
    Пример более простого решения помещается в одной строке:
    echo file_get_contents(__FILE__);
  2. Код ок, а вот вопроса не понял
YuraG 21.01.2020 в 19:09

По поводу вопросу уже разобрался!
Если функция ничего не возвращает - тип возвращаемого значения можно ставить void ?

ivashkevich 24.01.2020 в 07:58

Да

ChelovekAndrey 11.02.2020 в 00:22

file_get_contents можно передать и со всеми пробелами, через str_raplace
Накопал на просторах.

<?php
\\Первое задание

$homeWorkContent = file_get_contents(__FILE__);
echo str_replace("\r\n",'<br>', $homeWorkContent);
\\Второе задание

$dir = __DIR__. '/file/';
$fileScan = scandir($dir);
foreach ($fileScan as $value){
    echo "$value <br>";
}
ivashkevich 12.02.2020 в 13:05

Отлично

[email protected] 22.02.2020 в 14:47

Здравствуйте, у меня проблемос
К меня даже первый пример не заработал, хотя шторм не жалуется

<?php
$file = fopen(__DIR__ . '/file.txt', 'r');
for($i = 0; $i < 4; $i++)
{
    echo fgets($file);
    echo '<br>';
}
fclose($file);

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

Не догоняю, в чем может быть дело
Дело было в обратном слеше

ivashkevich 23.02.2020 в 19:38

Не .txt а .php

[email protected] 21.03.2020 в 14:07

Первое задание:

echo file_get_contents(__FILE__);
[email protected] 21.03.2020 в 15:11

Почитал комментарии, оказалось всё проще:

echo file_get_contents(__FILE__);
ivashkevich 21.03.2020 в 18:02

Ок) учитесь гуглить

ivashkevich 21.03.2020 в 18:02

Сделайте так, чтобы в этой программе не было упоминания имени самого скрипта

Не выполняется

[email protected] 21.03.2020 в 14:08

Второе задание:

$listFiles = scandir(__DIR__);  //список всех файлов и папок в директории скрипта
foreach ($listFiles as $files) {
    echo $files . '<br>';
}

echo '<br>';

$fileList = scandir(__DIR__);
foreach ($fileList as $fileName) {
    if (is_dir($fileName) && $fileName !== '.' && $fileName !== '..') {
        echo $fileName . '<br>';
    }
}

Исправился))

ivashkevich 21.03.2020 в 18:04

$listFiles = scandir('.');

Разве так мы учились получать текущий путь до папки?

$fileList = glob('*');

Почему здесь не воспользовались scandir?

Fornit 30.03.2020 в 00:45
  1. Напишите программу, которая выводит свой собственный код.
<?php
/**
 * Created
 * by    Danila Fadeev
 * in    PhpStorm
 * for   myproject.loc
 * on    23.02.2020
 * at    12:08
 * P.S.  "Fornit Some Fornus"
 */
?>

<?php
$file = fopen(__DIR__ . '/' .basename(__FILE__), 'r');
while (!feof($file)){
    echo fgets($file) , '<br>';
}
fclose($file);
?>
  1. Выведите список всех файлов в текущей директории скрипта.
    над этим заданием я очень кропотливо трудился. просьба указать на ошибки и улучшения.
<?php
//homeworkPHP24_0.php
$showFileFromCoocie = $_COOKIE['showFiles'] ?? '';
$showDirsFromCoocie = $_COOKIE['showDirs'] ?? '';

function getDirNameWithoutSlashBefore($myDirName){
    return trim($myDirName, '/');
}

function getDirNameWithoutSlashAfterFirst($myDirName){
    /*
    $idxSlash = stripos($myDirName, '/');
    if($idxSlash !== false){

    }
    */
    $resultStrStr = strstr($myDirName, '/', true);
    if(!$resultStrStr){
        return $myDirName;
    }else{
        return $resultStrStr;
    }

}

function setFileFilterCookie(string $nameCookie, bool $bool)
{
    if (!$bool) {
        setcookie($nameCookie, '', time() - 10);
    } else {
        setcookie($nameCookie, 'checked', 0, '/');
    }
}
$createNewDirStart = '';
$resultCreateDir = '';
$showFileChecked = $showFileFromCoocie;
$showDirsChecked = $showDirsFromCoocie;
$errorDirName = '<br>';
$newDirCreated = false;
$newDirCreatePress = false;
if (isset($_POST)) {
    $newDirNameFull = $_POST['txtNewDirName'] ?? '';
    $createNewDirStart = getDirNameWithoutSlashBefore($newDirNameFull);
    if (isset($_POST['txtNewDirName'])) {//if (!($createNewDir === '')){
        $newDirCreatePress = true;
        if ($createNewDirStart === '') {
            if($createNewDirStart == $newDirNameFull){
                $errorDirName = 'Папка не создана: имя папки не должно быть пустым';
            }else {
                $errorDirName = 'Не удалось создать папку с именем "' . $newDirNameFull . '"';
            }
        } else {
            if (!(file_exists(__DIR__ . '/' . $createNewDirStart))) {
                 if(!@mkdir(__DIR__ . '/' . $createNewDirStart, 0777, true)) {
                     $errorDirName = 'Не удалось создать папку с именем "' . $newDirNameFull . '". Попробуйте другое имя.';
                     $resultCreateDir = "";
                 }else{
                     $resultCreateDir = "  <--- Успешно созданная папка";
                     $errorDirName = 'Папка "' . $newDirNameFull . '" успешно создана';
                     $createNewDirStart = getDirNameWithoutSlashAfterFirst($createNewDirStart);
                     $newDirCreated = true;
                 }

            } else {
                $createNewDirStart = getDirNameWithoutSlashAfterFirst($createNewDirStart);
                if (($createNewDirStart == '.') || ($createNewDirStart == '..')){
                    $errorDirName = 'Не удалось создать папку с именем "' . $newDirNameFull . '". Попробуйте другое имя.';
                }else {
                    $resultCreateDir = "  <--- Папка уже была создана ранее";
                    $errorDirName = 'Папка с именем "' . $newDirNameFull . '"  уже существет';
                }
            }
            $showDirsChecked = 'checked';
            setFileFilterCookie('showDirs', $showDirsChecked == 'checked');
        }
    } else {
        $showFileFromPost = $_POST['cbFiles'] ?? '';
        $showDirsFromPost = $_POST['cbDirs'] ?? '';
        $showFileChecked = ($showFileFromPost === 'showFiles') ? 'checked' : '';
        $showDirsChecked = ($showDirsFromPost === 'showDirs') ? 'checked' : '';
        setFileFilterCookie('showFiles', $showFileChecked == 'checked');
        setFileFilterCookie('showDirs', $showDirsChecked == 'checked');
    }
}

$headerFilesList = 'Список ';
if ($showFileChecked === 'checked') {
    $headerFilesList = $headerFilesList . 'файлов';
    if ($showDirsChecked === 'checked'){
        $headerFilesList = $headerFilesList . ' и папок';
    }
} else {
    if ($showDirsChecked === 'checked'){
        $headerFilesList = $headerFilesList . 'папок';
    }
}
$headerFilesList = $headerFilesList . ':';

$files = scandir(__DIR__);
$massFiltredFiles = [];
$newDirFound = false;
if(!$newDirCreatePress || $newDirCreated) {
    foreach ($files as $file) {
        if (($file != '.') && ($file != '..')) {
            if ((($showFileChecked == 'checked') && (is_file($file))) || (($showDirsChecked == 'checked') && (is_dir($file)))) {
                $massFiltredFiles[] = $file;
                if($file === $createNewDirStart){
                    $massFiltredFiles[] = $file . $resultCreateDir;
                    $newDirFound = true;
                }
                //$massFiltredFiles[] = $file . ($file === $createNewDirStart ? $resultCreateDir : '');

            }
        }
    }
    if(!$newDirFound){
        $errorDirName = 'Папка "' . $newDirNameFull . '" успешно создана, но находится в директории уровнем выше';
    }
}

$headerFilesList = (count($massFiltredFiles) == 0) ?  'Список пуст.': $headerFilesList;
?>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Список файлов</title>
</head>
<body>
<table>
    <tr>
        <td width="300">
            <form action="homeworkPHP24_0.php" method="post">
                <input type="checkbox"  name="cbFiles" value="showFiles" <?= $showFileChecked ?>>
                <label for="cbFiles">Отображать файлы</label>
                <br>
                <input type="checkbox" name="cbDirs" value="showDirs" <?= $showDirsChecked ?>>
                <label for="cbFiles">Отображать папки</label>
                <br>
                <input type="submit" name="btnShow" value="Применить фильтр">
                <br>
                <br>
            </form>
        </td>
        <td>
            <form action="homeworkPHP24_0.php" method="post">
                <label for="txtNewDirName">Введите имя новой папки</label>
                <br>
                <input type="text" name="txtNewDirName">
                <br>
                <input type="submit" name="btnCreateNewDir" value="Создать новую папку">
                <br>
                <label><?= $errorDirName ?></label>
            </form>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <?= $headerFilesList ?>
            <br>
            <?php foreach ($massFiltredFiles as $fileName){
                echo $fileName, '<br>';
            }?>
        </td>

    </tr>

</table>
</body>
</html>
Fornit 30.03.2020 в 00:47

что-то всё поехало в комменте.

ivashkevich 30.03.2020 в 09:07

Чтобы не ехало нужно в редакторе комментария оформлять код (самая первая кнопка над окном ввода коммента). Исправьте, пожалуйста, самостоятельно.

Fornit 30.03.2020 в 11:16

я так и делал.и даже редактировал. но толку нет.
редактор кода как-то на куски разрывает код.

ivashkevich 30.03.2020 в 16:00

У вас было 6 символов ``` после второго пункта, вместо 3. Исправил ваш коммент.

ivashkevich 30.03.2020 в 16:04

1.

$file = fopen(__DIR__ . '/' .basename(__FILE__), 'r');

А почему просто __FILE__ не использовали?

Закрывающий тег ?> не нужен!

Решение гораздо проще, если чуть-чуть поискать функции для чтения файлов:

echo file_get_contents(__FILE__);

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

[email protected] 31.03.2020 в 21:31

1

<?php
$file = fopen(__FILE__ , 'r');
while  (!feof($file)) {
    echo fgets($file);
    echo '<br>';
ivashkevich 01.04.2020 в 04:38

Не работает

[email protected] 31.03.2020 в 21:33

2.1

<?php
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
echo $file . '<br>';
}

2.2

<?php 
$files = scandir(__DIR__ . '/');
foreach ($files as $dirrf) {
if (is_dir($dirrf)) {
echo $dirrf . '<br>';
}
}
ivashkevich 01.04.2020 в 04:41

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

[email protected] 08.04.2020 в 18:21
<?php

    $hometask =  fopen(__DIR__ . '/homework.php',  'r');
    $homework = null;
    while(!feof($hometask)) {
        $homework = $homework . fgets($hometask) . PHP_EOL;
    }
    fclose($hometask);
    $format = str_replace('homework.php', 'ПОДМЕНЫШ', $homework);
    file_put_contents(__DIR__ . '/file.txt', $format);
ivashkevich 08.04.2020 в 19:22

Что-то не то, перечитайте условия задачи

[email protected] 08.04.2020 в 18:54

Вывод содержимого директории

<?php

    $catalog_files =  scandir(__DIR__ . '/');
    $filtered_files = array_diff($catalog_files, ['.', '..']);
    $document = fopen(__DIR__ . '/file.txt', 'w');

    while($i < count($catalog_files)) {
        fputs($document, $filtered_files[$i] . PHP_EOL);
        $i++;
    }

    fclose($document);

Вывод подпапок:

<?php

    $catalog_files =  scandir(__DIR__ . '/');
    $filtered_files = array_diff($catalog_files, ['.', '..']);
    $document = fopen(__DIR__ . '/file.txt', 'w');

    while($i < count($catalog_files)) {
        if(is_dir($catalog_files[$i])) {
            fputs($document, $filtered_files[$i] . PHP_EOL);
        }
        $i++;
    }

    fclose($document);
ivashkevich 08.04.2020 в 19:28

Много ненужных действий, рекомендую ознакомиться с другими решениями в комментариях

happyviolence 10.04.2020 в 16:04

Артём, в чём может быть ошибка? Проверяю код из урока, запускаю:

<?php
$file = fopen(__DIR__ . '/file.txt', 'a');
fputs($file, 'abc' . PHP_EOL);
fclose($file);

добавляется одновременно 2 одинаковых строки вместо одной.

ivashkevich 11.04.2020 в 20:55

Плагин в браузере может в фоне ещё раз страницу загружать. Попробуйте в режиме инкогнито

studentDev 11.04.2020 в 12:51
//Задание 1
<?php
   $openCode = htmlspecialchars(file_get_contents(__FILE__));
   echo $openCode . '</br>';

//Задание 2
   $files = scandir(__DIR__);

   for($i = 0; $i < 2; $i++)
   {
      array_shift($files);
   }

   foreach($files as $file)
   {
      if(is_dir($file)) {
         echo $file . '</br>';
      }
   }
ivashkevich 11.04.2020 в 21:27

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

studentDev 12.04.2020 в 02:57

В принципе согласен что усложнил... Буду искать альтернативные решения)
Спасибо огромное за урок :)

WarLikeLaux 11.04.2020 в 18:04

Вывод собственного кода

<?php
echo '<pre>' . htmlspecialchars(file_get_contents(__FILE__)) . '</pre>';
ivashkevich 11.04.2020 в 21:39

Вы же уже сдали одно)

WarLikeLaux 11.04.2020 в 18:11

Вывод файлов и папок отдельно

<?php
$data = scandir('./'); //is_dir()

foreach ($data as $file) {
    if (!is_dir($file)) {
        echo 'File ' . $file . "<br/>";
    } else {
        echo 'Directory ' . $file . "<br/>";
    }
}
ivashkevich 11.04.2020 в 21:40

Отлично

[email protected] 13.04.2020 в 09:43
  1. В подключаемом через require файле лежит всего одна строка - переменная $toRead со значением "DIR . '/index.php'"
    <?php
    require __DIR__ . '/whereIsMyFile.php';
    $file = fopen($toRead, 'r');
    while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
    }
    fclose($file);
  2. Список всех файлов:

    <?php
    $fl = glob("*");
    echo implode('<br>', $fl);

    Отобразить только папки:

    <?php
    $fl = glob("*", GLOB_ONLYDIR);
    echo implode('<br>', $fl);
ivashkevich 13.04.2020 в 14:56

В первом решении не выполнены все условия задачи

[email protected] 13.04.2020 в 18:30

А что, собственно, не выполнено?
Код на экран выводится, имя скрипта в выводимом не фигурирует. Что я упустил?

Ну, в смысле, я понимаю, что, видимо, имелось в виду сделать вот так:

<?php
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);

Но ведь вариант, который я первым сделал, тоже условия соблюдает :)

ivashkevich 14.04.2020 в 19:04

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

[email protected] 14.04.2020 в 19:38

Согласен, я скорее потроллил баг в ТЗ (сорри, мне уже стыдно :) ).
Так или иначе, решение с __FILE__ предоставил :)

ivashkevich 14.04.2020 в 19:53

Ок)

Fill 14.04.2020 в 09:52
<?php
//Программа которая выводит свой собственный код.
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}

//Вывод списока всех файлов в текущей директории скрипта.
$dirArray = scandir(__DIR__);
foreach ($dirArray as $elem) {
    if (!is_dir($elem)) {
        echo $elem . '<br>';
    }
}
//Вывод списока всех папок в текущей директории скрипта.
foreach ($dirArray as $elem) {
    if (is_dir($elem)) {
        echo $elem . '<br>';
    }
}
ivashkevich 14.04.2020 в 19:30

Отлично

X-Nick 15.04.2020 в 19:22

В уроке функции file_put_contents, file_get_contents использованы без открывания и закрывания файла. Я читал где-то, что и fputs и fgets не остро нуждаются в этом. В документации об этом ничего не нашел. Так как правильно? Для всех функций чтения/записи использовать open и close?

ivashkevich 16.04.2020 в 06:48

В документации помимо слов есть примеры использования. Разве есть в разделах про file_put_contents и file_get_contents что-то про открытие и закрытие?

n.yurasheva 16.04.2020 в 23:57

1) Программа, которая выводит свой собственный код

<?php
echo '<pre>';
echo htmlspecialchars(file_get_contents(__FILE__));
echo '</pre>';

или так

<?php
echo '<pre>';
highlight_string(file_get_contents(__FILE__));
echo '</pre>';

или так

<?php
header('Content-Type: text/plain');
if ($f = fopen(__FILE__, 'r')) {
    fpassthru($f);
    fclose($f);
}

2) Выведите список всех файлов и папок

<?php
//Выводим все элементы
if ($handle = opendir(__DIR__)) {
    echo 'Элементы:'.'<br>';
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo $file.'<br>';
        }
    }
    closedir($handle);
}
//Выводим только папки
if ($handle = opendir('.')) {
    echo 'Папки:'.'<br>';
    while (false !== ($catalog = readdir($handle))) {
        if (is_dir($catalog) && $catalog != "." && $catalog != "..") {
            echo $catalog.'<br>';
        }
    }
    closedir($handle);
}
ivashkevich 17.04.2020 в 09:22
<?php
echo '<pre>';
echo htmlspecialchars(file_get_contents(__FILE__));
echo '</pre>';

Зачем pre и htmlspecialchars?

<?php echo file_get_contents(__FILE__);

:)

[email protected] 17.04.2020 в 00:57

2 задача, 1 пункт

<?php
$fileList = scandir(__DIR__);
foreach ($fileList as $item) {
    echo $item . '<br>';
}

2 пункт

<?php
$fileList = scandir(__DIR__);
foreach ($fileList as $item) {
    if (is_dir($item)) {
        echo $item . '<br>';
    }
}
ivashkevich 17.04.2020 в 09:23
<?php echo file_get_contents(__FILE__);

:)

Timurik 17.04.2020 в 17:28

1.

<?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>';
    }
}
ivashkevich 18.04.2020 в 05:51

Отличная, образцовая домашка!

Timurik 18.04.2020 в 08:51

Спасибо!

[email protected] 29.04.2020 в 19:57
<?php
// 1 задание

echo file_get_contents(__FILE__);

// 2 задание

$files = scandir(__DIR__);
var_dump($files);
foreach ($files as $dir) {
    if (is_dir($dir)) {
        echo $dir . '<br>';
    }
}
ivashkevich 29.04.2020 в 20:36

Супер! Вардамп только нужно было убрать перед отправкой

titelivus 03.05.2020 в 06:17
  1. Вот бы еще и пробелы сохранялись)
<?php

$file = fopen(__FILE__, 'r');
while(!feof($file)) {
    $string = fgets($file);
    echo filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS);
    echo '<br>';
}
fclose($file);

2.
Только файлы:

<?php

$fileList = scandir(__DIR__);

foreach ($fileList as $item) {
    if (is_file($item)) {
        echo $item;
        echo '<br>';
    }
}

Только папки:

<?php

$fileList = scandir(__DIR__);

foreach ($fileList as $item) {
    if (!is_file($item)) {
        echo $item;
        echo '<br>';
    }
}
ivashkevich 03.05.2020 в 20:57

Первое задание можно гораздо проще решить. Поищите а комментариях.
Остальные ОК.

titelivus 04.05.2020 в 04:52

Пишу это в test.php

<?php 
echo file_get_contents(__FILE__);

Захожу на http://myproject.loc/test.php
И вижу пустоту. Но если посмотреть код страницы, можно увидеть этот код закомментированным. Но как так вышло?)

ivashkevich 06.05.2020 в 13:08

А какие именно комментарии?

titelivus 07.05.2020 в 05:49

В коде страницы следующее:

<!--?php 
echo file_get_contents(__FILE__);-->
<html>
    <head></head>
    <body></body>
</html>
ivashkevich 08.05.2020 в 19:52

Вы ее по какому пути открываете? Через myproject.loc?

titelivus 08.05.2020 в 19:55
ivashkevich 08.05.2020 в 20:34

Какое-то волшебство)

2yeezy4me 06.05.2020 в 08:02

1.

<?php
echo file_get_contents(__FILE__);

2.

$showAllFiles = scandir(__DIR__);

foreach ($showAllFiles as $value) {
    echo $value . '<br>';
}
<?php
$fileList = scandir(__DIR__);

foreach ($fileList as $item) {
    if (!is_file($item)) {
        echo $item;
        echo '<br>';
    }
}
ivashkevich 06.05.2020 в 14:00

Супер!

[email protected] 06.05.2020 в 17:45

Демонстрируем содержимое

<?php
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);

Выводим список файлов

$files = scandir(__DIR__);
foreach ($files as $file) {
    echo $file . '<br>';

}

Выводим только папки

$files = scandir(__DIR__);
foreach ($files as $file) {
    if (is_dir($file)) {
        echo $file . '<br>';
    }
}
ivashkevich 07.05.2020 в 16:45

Первое задание можно гораздо проще решить. Поищите а комментариях.
Остальные ОК.

[email protected] 14.05.2020 в 16:42
//Задание №1

$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
//Задание №2.1

$file = scandir(__DIR__);
foreach ($file as $string) {
    echo $string;
}
//Задание №2.2

$file = scandir((__DIR__));
foreach ($file as $string) {
    if (is_dir($string)) {
        echo $string . '</dir>';
    }

}
ivashkevich 15.05.2020 в 18:14

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

<?php echo file_get_contents(__FILE__);
IePyton 18.05.2020 в 12:30
//первое задание
<?php

require __DIR__ . '/24_path.php';
$file = fopen($path, 'r');
while (!feof($file)) {
   echo fgets($file);
   echo '<br>';
}
fclose($file);

//второе задание
<?php

$allFiles = scandir(__DIR__);
foreach ($allFiles as $i) {
    if (is_dir($i)) {
        echo $i . '<br>';
    }
};
ivashkevich 19.05.2020 в 06:05

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

<?php echo file_get_contents(__FILE__);
IePyton 19.05.2020 в 09:30

Я так пробовал сделать - у меня почему то выводился пустой белый экран, но при просмотре исходного кода я видел пхп код))
я не понял как вывести не в исходный код, а именно в "боевой экран"

Hellbound 05.06.2020 в 02:46

Задание 1 не получается, я пробовал так

<?php
echo file_get_contents(__FILE__);

и так

<?php
$file = fopen(__DIR__ . '/contents.php', 'r'); // c __FILE__ то же самое
echo fgets($file);
fclose($file);

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

Задание 2, все файлы

<?php
$dir = opendir(__DIR__ . '/');
while ($elementName = readdir($dir)) {
    echo $elementName . '<br>';
}

closedir($dir);

Только папки

<?php
$dir = opendir(__DIR__ . '/');
while ($elementName = readdir($dir)) {
    if (is_dir($elementName)) {
        echo $elementName . '<br>';
    }
}

closedir($dir);

Задание 3 - https://codingzone.io/problems/14/solution/2016 (а зачем в образце решения массив $pairs?)

ivashkevich 06.06.2020 в 08:15

вариант для браузера будет выглядеть так:

<?php echo htmlentities(file_get_contents(__FILE__));

UPD: если в браузере посмотреть исходный код страницы, там будет код программы, но закомментированный

он не закомментированный. Там просто открывается тег, который браузер не может корректно обработать (считает, что это тег вёрстки).

  1. ОК
  2. Затем что рукожоп я) Спасибо, исправил
[email protected] 06.06.2020 в 02:41

1 задание

$a = fopen(__FILE__, 'r');
while($b = fgets($a)){
    echo $b;
}

или
echo file_get_contents(__FILE__);

2 задание

//Выведите список всех файлов в текущей директории скрипта.
$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

Спасибо за урок!

ivashkevich 06.06.2020 в 08:49
    if(is_dir($item) === true){

Не нужно сравнивать булево значение с true

    if(is_dir($item)){

В остальном отлично

[email protected] 06.06.2020 в 10:13

Да, думаю, что это уже усвоил, хотя так код выглядит очевиднее (для меня новичка).
Спасибо!

UtillitE 26.07.2020 в 17:02

Привет, решила задачку. Самая лёгкая получилась :)))

<?php
$line = trim(fgets(STDIN));
$nums = explode(' ', $line);
foreach ($nums as $i => $num1) {
    foreach ($nums as $j => $num2) {
        if ($i === $j) {
            continue;
        }
        echo $num1. ' '. $num2 . PHP_EOL;

    }
}
ivashkevich 27.07.2020 в 18:31

Отлично)

demos 20.08.2020 в 09:49
  1. file_get_contents(FILE) - ничего не вывел в браузер, поэтому:
    <?php
    $file = fopen(__FILE__, 'r');
    while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
    }
    fclose($file);
  2. <?php
    //Выводим список файлов директории:
    $files = scandir(getcwd());
    foreach ($files as $file){
    if (strpos ($file,'.')){
        echo $file.'<br>';
    }
    }
    //Создаем 3 папки:
    $i=1;
    while ($i<=3){
    mkdir(getcwd()."/".'DIR_'.$i);
    $i++;
    }
    //Выводим список папок директории:
    $files = scandir(getcwd());
    foreach ($files as $file){
    if (!strpos ($file,'.')){
        echo $file.'<br>';
    }
    }
ivashkevich 23.08.2020 в 08:59

Всё отлично, но проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

MikeSiebel 11.10.2020 в 18:20

Добрый день!
1.

<?php
echo 'свой собственный код' . '<br>';
$data = htmlentities(file_get_contents(__FILE__));
echo $data;

2.

<?php
$files = scandir(__DIR__ . '/');
echo 'Список файлов и папок' . '<br>';
foreach ($files as $file) {
        echo $file . '<br>';
}
echo ' ' . '<br>';
echo 'Список папок' . '<br>';
foreach ($files as $dir) {
    if (is_dir($dir)) {
        echo $dir . '<br>';
    }
}
ivashkevich 12.10.2020 в 07:44

Привет! Отлично!

GeoOK 16.10.2020 в 15:06

Здравствуйте! Надеюсь, я правильно понял 1 часть ДЗ.

1 Задание

link.php

<?php
$link = '/index.php';

index.php

<?php

include __DIR__ . '/link.php';
$file = fopen(__DIR__ . "$link", 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);

2 Задание

$path = scandir('/volume2/web/');
foreach ($path as $string) {
    echo $string;
    echo "<br>";
}

function checkDir($Dir):bool
{
    if (is_dir("$Dir")) {
        return false;
    } else {
        mkdir("$Dir");
        return true;
    }
}

$dirList = ['Dir1', 'Dir2', 'Dir3'];
foreach ($dirList as $Dir) {
    if (checkDir($Dir)) {
        echo "Каталог $Dir создан";
    } else {
        echo "Ошибка! Каталог $Dir уже существует";
    }
    echo "<br>";
}

$path = opendir('/volume2/web/');
while (($entPath = readdir($path)) !== false) {
    if (is_dir("$entPath")) {
        echo $entPath;
        echo "<br>";
    }
}
closedir($path);
ivashkevich 18.10.2020 в 15:18

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

pixel 09.11.2020 в 01:01
  1. Вывод собственного кода
    <?php
    $file = fopen(__FILE__, 'r');
    while (!feof($file)) {
        $searchNameScript = str_replace(__FILE__, '', fgets($file));
        echo '<pre>' . $searchNameScript . '</pre>';
    }
ivashkevich 09.11.2020 в 19:22

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

Sergey503 15.11.2020 в 18:33

1)

echo file_get_contents(__FILE__);

2)

// Только файлы
$files = scandir(__DIR__ . '/');
foreach ($files as $file) {
    echo 'File ' . $file . '<br>';
}

// Только папки
$directory = scandir(__DIR__ . '/');
foreach ($directory as $dir) {
    if (is_dir($dir)) {
        echo 'Directory ' . $dir . '<br>';
    }
}
ivashkevich 17.11.2020 в 17:09

Отлично

Alexandr92 31.01.2021 в 14:25

1.

<?php
$file = fopen(__FILE__, 'r');
while (!feof($file)) {
    echo fgets($file);
    echo '<br>';
}
fclose($file);
?>

2.Выведите список всех файлов в текущей директории скрипта.

<?php
$files = scandir(__DIR__);
foreach ($files as $i) {
    echo $i;
    echo '<br>';
}

Сделайте так, чтобы в списке, выводимом программой, остались только папки.

<?php
$files = scandir(__DIR__);
foreach ($files as $i) {
    if (is_dir($i)) {
        echo $i;
        echo '<br>';
    }
}
ivashkevich 01.02.2021 в 06:33

Отлично

Egor.Ka 23.02.2021 в 15:58
<?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>';
    }
}
ivashkevich 28.02.2021 в 06:00

Отлично

Vladimir96 02.03.2021 в 21:46
// получение файла
echo file_get_contents(__DIR__ . '/read.php');

// сканирование всей директории
$dir = '../rwfile.loc';
$getDir = scandir($dir);
var_dump($getDir);

// вывод только текущих папок
$result = [];
foreach($getDir as $dir) {
    if(is_dir($dir)) {
        $result[] = $dir;
    }
}
var_dump($result);
ivashkevich 10.03.2021 в 08:09

Перечитайте первое задание

Логические задачи с собеседований