|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Есть PHP-скрипт, который может запускаться как интерактивно (с выводом в терминал), так и планировщиком (с выводом в log-файл). В скрипте последовательно вызывается несколько функций. Можно ли сделать так, перед вызовом stdout менялся на конкретный файл, а после возврата функции stdout восстанавливался? Я пробовал делать fopen перед вызовом функции, в результате вывод перенаправлялся в файл. Но при этом после возврата функции не получалось восстановить stdout, несмотря на то, что я сохранял posix_ttyname и после возврата пробовал сделать fopen на сохраненное значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 14:01 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Alibek B. не получалось восстановить stdout, несмотря на то, что я сохранял posix_ttyname и после возврата пробовал сделать fopen на сохраненное значение. https://www.php.net/manual/ru/wrappers.php.php ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 16:24 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
На примере не покажите? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 19:51 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Сделал так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В принципе работает именно так, как мне нужно. Но мне не нравится буферизация и ее особенности/ограничения. Я бы предпочел перенаправление вывода. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 20:14 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Alibek B. На примере не покажите? Давайте на Вашем примере посмотрим, что можно намутить. Лишний код, не имеющий явного и прямого отношения к проблеме, в пример не включайте, но каменты, конечно же, приветствуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 23:52 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Вот исходная программа: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
А вот пример: Код: 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.
При запуске должен написать в консоль START, PROC и END, а P1 и P2 должны быть выведены в файлы p1.log и p2.log соответственно. Но в данном примере в консоль выводится START и PROC, в файл p1.log выводится P1, а остальное пропадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 00:17 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Занятно. Ошибки в консоль не вываливаются? Мне напечатало: Код: php 1.
Это строка Код: php 1.
Ладно, глядим значение константы Код: php 1. 2.
Это наводит на мысль, что поток вывода явно привязан к константе. Закрыли его - гуд бай, константа осталась, но уже не указывает на ресурс. Что видим. Код: php 1. 2. 3. 4. 5. 6.
А так... Гхм... Код: php 1. 2. 3. 4.
Видимо, потому, как Вы и пишите: Alibek B. не получалось восстановить stdout Вероятно, остается делать какой-то приблизительно такого плана веселый замут, избавившись от дефолтового stdout и определить поток вывода явно (впрочем, это можно заметно упростить): Код: 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.
Или, вообще, пересмотреть концепцию вывода. Например, в скрипте выводить всё в один поток, а в среде вызова разделять, направляя часть вывода по маркерам в файл. Ну это на уровне идеи. Не пробовал, может быть можно (а может и нет) определить в пхп четвертый, пятый и т.д. потоки и ими играть в среде вызова (в командной строке). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 02:27 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
vkle Вероятно, остается делать какой-то приблизительно такого плана веселый замут, избавившись от дефолтового stdout и определить поток вывода явно (впрочем, это можно заметно упростить) Выглядит криво и неудобно. Уж лучше буферизацию использовать. vkle Или, вообще, пересмотреть концепцию вывода. Например, в скрипте выводить всё в один поток, а в среде вызова разделять, направляя часть вывода по маркерам в файл. Ну это на уровне идеи. Не пробовал, может быть можно (а может и нет) определить в пхп четвертый, пятый и т.д. потоки и ими играть в среде вызова (в командной строке). Это уже усложнение ради усложнения. Я как раз хотел упростить и сделать скелет скрипта прозрачным. Как в bash-скриптах, в которых можно вызвать подпрограмму и перенаправить ее вывод по конвейеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 10:15 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Alibek B. Выглядит криво и неудобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 14:41 |
|
PHP: Перенаправить вывод для одной функции
|
|||
---|---|---|---|
#18+
Не появилось ли в PHP 7 более удобного способа? Вроде бы эта библиотека позволяет более гибко работать с потоками. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2022, 18:06 |
|
|
Start [/forum/topic.php?fid=23&tid=1459354]: |
0ms |
get settings: |
32ms |
get forum list: |
11ms |
check forum access: |
9ms |
check topic access: |
9ms |
track hit: |
183ms |
get topic data: |
30ms |
get forum data: |
5ms |
get page messages: |
377ms |
get tp. blocked users: |
3ms |
others: | 132ms |
total: | 791ms |
0 / 0 |