Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12

Как вывести результат работы скрипта в файл?

10.08.2016, 23:56. Показов 9382. Ответов 24

Студворк — интернет-сервис помощи студентам
Есть скрипт, он кладется в диру и при запросе браузером выводит на экран содержимое диры -папки и файлы в этой директории, причем показывает, что во что вложено(дерево):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    // Получаем полный список файлов и каталогов внутри $folder
    $files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING);
    foreach($files as $file) {
    //Преобразуем спецсимволы в именах в штмл-сущности:
    $file = htmlspecialchars($file, ENT_NOQUOTES | ENT_SUBSTITUTE,'UTF-8');
      // Отбрасываем текущий и родительский каталог
      if (($file == '.') || ($file == '..')) continue;
      $f0 = $folder.'/'.$file; //Получаем полный путь к файлу
      // Если это директория
      if (is_dir($f0)) {
        // Выводим, делая заданный отступ, название директории
        echo $space.$file."&nbsp;&nbsp;<b><font color=\"#cc0000\">&lt;DIR&gt;</font></b><br>";
        // С помощью рекурсии выводим содержимое полученной директории
        showTree($f0, $space.'-');
      }
      // Если это файл, то просто выводим название файла
      else echo $space.$file."<br>";
    }
  }
  // Запускаем функцию для текущего каталога
  showTree("./", "");
Но как сделать, чтобы скрипт еще писал то, что он сейчас выводит на экран браузера в файл той же директории, где лежит сам?
Просьба не пинать -мои познания в пыхе совсем мизерные(сам вообще не ит-шник), просьба дать готовый код.

Добавлено через 7 минут
Лишь бы работало под пхп 5.6 и старше, а остальное -все равно.

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

Добавлено через 11 минут
Но первый вариант, конечно, предпочтительнее

Добавлено через 45 минут
PHP
1
2
3
4
.....
$ob=ob_get_contents();
file_put_contents('../html/log.txt',$ob);
ob_end_flush();
А как мне сделать, чтобы избежать вообще ввода "html"?

Добавлено через 40 минут
PHP
1
2
3
4
5
6
7
8
9
........
 
showTree("./", "");
 
$ob=ob_get_contents();
$patch=getcwd();
 
file_put_contents($patch.'/log.txt',$ob);
ob_end_flush();
Под пингвином рабоатет, под виндой -пустой файл.
Как решить проблему?

Добавлено через 29 минут
PHP
1
2
3
4
5
6
7
8
  .....showTree("./", "");
 
$scriptPath = $argv[0];
$dir = dirname($scriptPath);
$ob = ob_get_contents();
file_put_contents($dir ."log.txt", $ob);
 
ob_end_flush();
И так только под пинвином. Под виндой не работает, странно...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2016, 23:56
Ответы с готовыми решениями:

Как вывести результат работы CGI-скрипта на той же странице?
Приветствую! Вопрос такой: Например, у меня есть html страница: &lt;html&gt; &lt;body&gt; &lt;form...

Вывести результат работы скрипта PowerShell в ListView
Есть скрипт на powershell, который выводит список принтеров с домена: $terminals = (&quot;domen&quot;) $terminals | ForEach-Object {...

Как вывести результат работы bat файла в текстовый файл?
Имеется bat файл с кодом: @echo off echo Result &gt; C:\Result.txt set /P maska=&quot;Vvedite masky:&quot; for %%d in (a b c d e f g h i j k l m...

24
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
10.08.2016, 23:59
koh5154, используйте директиву
output_handler = ...
Рекомендую книгу И. Григин PHP 5.1,
там всё достаточно подробно рассказано.
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 00:03  [ТС]
А как это применить?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 00:14
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
/**
 * @param string $folder
 * @param string $space
 * @return string
 */
function showTree($folder, $space) {
    $result = '';
    // Получаем полный список файлов и каталогов внутри $folder
    $files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING);
    foreach($files as $file) {
        //Преобразуем спецсимволы в именах в html-сущности:
        $file = htmlspecialchars($file, ENT_NOQUOTES | ENT_SUBSTITUTE,'UTF-8');
        // Отбрасываем текущий и родительский каталог
        if (($file == '.') || ($file == '..')) continue;
        $f0 = $folder.DIRECTORY_SEPARATOR.$file; //Получаем полный путь к файлу
        // Если это директория
        if (is_dir($f0)) {
            // Выводим, делая заданный отступ, название директории
            $result .= $space.$file.'&nbsp;&nbsp;<b><font color="#cc0000">&lt;DIR&gt;</font></b><br>'.PHP_EOL;
            // С помощью рекурсии выводим содержимое полученной директории
            $result .= showTree($f0, $space.'-');
        }
        // Если это файл, то просто выводим название файла
        else $result .= $space.$file.'<br>'.PHP_EOL;
    }
    return $result;
}
// Запускаем функцию для текущего каталога
$data = showTree('.'.DIRECTORY_SEPARATOR, '');
echo $data;
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 00:17  [ТС]
http://php.net/output-handler
;output_handler =

; Прозрачное сжатие вывода с помощью Zlib библиотеки
; Допустимые значения для этой опции 'off', 'on' или определенный размер буфера,
; который будут использоваться для сжатия (по умолчанию равен 4 КБ)
; Примечание: Результат размер блока может изменяться в зависимости от природы сжатия.
; output_handler должна быть отключена, если выбрано значение 'On'.
При чем тут это?

Добавлено через 3 минуты
Варнинги в консоль и не пишет в файл.
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 00:24  [ТС]
Вот вывод:
Миниатюры
Как вывести результат работы скрипта в файл?  
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 00:29
koh5154, 30-ю строку замените на
PHP
1
$data = showTree('.', '');
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 00:36  [ТС]
И где тут запись в файл?
Мой вариант хоть пишет на экран и в лог, пока только под пинвином, что не есть гуд...

Добавлено через 2 минуты
Опять воз варнигов в консоли. И надо чтобы писало в афйл. Ушел пока, в общем - не работает.
0
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
11.08.2016, 00:39
koh5154
Цитата Сообщение от koh5154 Посмотреть сообщение
;output_handler =
; Прозрачное сжатие вывода с помощью Zlib библиотеки
; Допустимые значения для этой опции 'off', 'on' или определенный размер буфера,
; который будут использоваться для сжатия (по умолчанию равен 4 КБ)
; Примечание: Результат размер блока может изменяться в зависимости от природы сжатия.
; output_handler должна быть отключена, если выбрано значение 'On'.
При чем тут это?
, это только часть возможностей output_handler =,
самое главное что output_handler можно указать функцию в качестве параметра которая будет
обрабатывать весь выводимый поток, в том числе может его и сжимать, а может и в файл записывать,
смотря по тому какую функцию подключить.

Но это не единственное решение, возможно ещё через буфер, с помощью функций:
PHP
1
2
3
bool ob_start(string, int, bool);
string ob_get_contents(void);
void ob_clean(void);
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 00:39
koh5154, чуть выше подправленный вариант функции.
запись в файл - добавить 1-ну сроку в конец:
PHP
1
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . 'dir.log', $data);
0
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
11.08.2016, 00:40
koh5154, P.S.: если сами не разберётесь, обращайтесь
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 00:53  [ТС]
Получил список всех файлов компа. А надо только той диры, где лежит файл. Список файлов и папок этой диры.
И без варнингов в консоли.

RefSol, просто выложите раб. код. На работающем проще понять.
Все, пока пошел в оффлайн, завтра вернусь.
0
11.08.2016, 00:55

Не по теме:

koh5154, вам никто ничего не должен. удачи.

0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 09:52  [ТС]
Проверил Ваш код в 2-х варианта х- временами лезет во все диры.
Цитата Сообщение от Cra3y Посмотреть сообщение
Не по теме:
koh5154, вам никто ничего не должен. удачи.
Просто не знаете, в чем проблема, так каждый может написать...
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 10:07
koh5154, это не мой код, а ваш.
я только прямой вывод на возврат переменной менял. На остальное не смотрел.
Баг в раннем экранировании переменной $file.
исправленный вариант:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
/**
 * @param string $folder
 * @param string $space
 * @return string
 */
function showTree($folder, $space) {
    $result = '';
    // Получаем полный список файлов и каталогов внутри $folder
    $files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING);
    foreach($files as $file) {
        // Отбрасываем текущий и родительский каталог
        if (($file == '.') || ($file == '..')) continue;
        $f0 = $folder.DIRECTORY_SEPARATOR.$file; //Получаем полный путь к файлу
        //Преобразуем спецсимволы в именах в html-сущности:
        $file = htmlspecialchars($file, ENT_NOQUOTES | ENT_SUBSTITUTE,'UTF-8');
        // Если это директория
        if (is_dir($f0)) {
            // Выводим, делая заданный отступ, название директории
            $result .= $space.$file.'&nbsp;&nbsp;<b><font color="#cc0000">&lt;DIR&gt;</font></b><br>'.PHP_EOL;
            // С помощью рекурсии выводим содержимое полученной директории
            $result .= showTree($f0, $space.'-');
        }
        // Если это файл, то просто выводим название файла
        else $result .= $space.$file.'<br>'.PHP_EOL;
    }
    return $result;
}
// Запускаем функцию для текущего каталога
$data = showTree('.', '');
echo $data;
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . 'dir.log', $data);
1
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 10:24  [ТС]
Пробую. Опять получил в логе 100500файлов из всех дир....

Добавлено через 8 минут
А теперь не получил. Плавающий баг какой-то...

Добавлено через 3 минуты
а.
Понял.
Если данный тип файла открывается двойным кликом -норм (у меня на винде по дефолту пхп- файлы открываются php-cli)
Если "файл - открыть с помощью cli" - не работает, не то в лог идет.
Странно
по логике- должен быть одинаковый результат, хоть как открывать...
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 10:57
Цитата Сообщение от koh5154 Посмотреть сообщение
Если данный тип файла открывается двойным кликом -норм (у меня на винде по дефолту пхп- файлы открываются php-cli)
Если "файл - открыть с помощью cli" - не работает, не то в лог идет.
текущая директория то разная в этих случаях

Добавлено через 2 минуты
для вывода текущей директории перед 29й строкой добавьте
PHP
1
echo realpath('.'), PHP_EOL;
1
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 10:59  [ТС]
Поднаточил скрипт. Теперь выдает красивый штмл-файл.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
/**
 * @param string $folder
 * @param string $space
 * @return string
 */
function showTree($folder, $space) {
    $result = '';
    // Получаем полный список файлов и каталогов внутри $folder
    $files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING);
    foreach($files as $file) {
        // Отбрасываем текущий и родительский каталог
        if (($file == '.') || ($file == '..')) continue;
        $f0 = $folder.DIRECTORY_SEPARATOR.$file; //Получаем полный путь к файлу
        //Преобразуем спецсимволы в именах в html-сущности:
        $file = htmlspecialchars($file, ENT_NOQUOTES | ENT_SUBSTITUTE,'UTF-8');
        // Если это директория
        if (is_dir($f0)) {
            // Выводим, делая заданный отступ, название директории
            $result .= $space.$file.'&nbsp;&nbsp;<b><font color="#cc0000">&lt;DIR&gt;</font></b><br>'.PHP_EOL;
            // С помощью рекурсии выводим содержимое полученной директории
            $result .= showTree($f0, $space.'-');
        }
        // Если это файл, то просто выводим название файла
        else $result .= $space.$file.'<br>'.PHP_EOL;
    }
    return $result;
}
// Запускаем функцию для текущего каталога
echo realpath('.'), PHP_EOL;
$data = showTree('.', '');
$html_kode1 = "<html>
<head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">
<title>Скрипт, который выводит дерево директории на PHP.</title>
</head>
<body alink=\"#000088\" bgcolor=\"#FFFFFF\" link=\"#0000FF\" text=\"#000000\"
vlink=\"#FF0000\">
 
<br>
<h1>Дерево директорий и файлов:</h1><br><br>";
$html_kode2 = " </body></html>";
$data2 = $html_kode1.$data.$html_kode2;
 
echo $data2;
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . 'dir.html', $data2);
Добавлено через 2 минуты
Пока увы не помогло
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
11.08.2016, 11:03
Цитата Сообщение от koh5154 Посмотреть сообщение
Пока увы не помогло
а echo realpath('.'), PHP_EOL; и не должно было помочь - это для информации о реальной текущей директории
0
0 / 0 / 0
Регистрация: 10.08.2016
Сообщений: 12
11.08.2016, 11:17  [ТС]
/var/www/html в пингвине. В винде слишком быстро закрывается консоль -не успеваю прочесть

Добавлено через 9 минут
C:\X\......\utility - при запуске кликом.
C:\Windows\System32 при файл открыть..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2016, 11:17
Помогаю со студенческими работами здесь

Как конвертировать результат работы скрипта в utf-8?
Здравствуйте! Ест один скрипт который заменить все в текста найдя значение из массива $search в значение массива $replace. Скрипт работает...

Как проверить результат работы скрипта CREATE?
Отправляю на сервер запрос о создании строки. Пришел ответ без ошибок, т.е. &quot;&quot; В результате строка в базе не создалась. Сам не...

Как результат работы скрипта записать в textarea
Доброго времени суток. Есть форма для загрузки файла на сервер. И два textarea: kat1 и kat2. ...

Вывести в файл результат работы программы
Ребята помогите плиз вывести в файл прогу. Заранее благодарен uses crt; const m = 100; type str20 = string; Anketa = record ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru