есть docker-compose.yml, с него разворачиваю проект Спойлер Код (Text): version: '3' services: apps: image: my/php-image expose: - "9000" ports: - 80:80 volumes: - ./sites/:/var/sites extra_hosts: - "api.site.local:127.0.0.1" - "storeapi.site.local:127.0.0.1" - "integration.site.local:127.0.0.1" environment: XDEBUG_CONFIG: "remote_host=site remote_enable=2 remote_autostart=on remote_port=9000" PHP_IDE_CONFIG: "serverName=site" SANDBOX: 0 DEVELOPER: "TRUE" DEBUG: "TRUE" db: image: mysql command: --default-authentication-plugin=mysql_native_password ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: root adminer: image: adminer restart: always ports: - 8080:8080 все поднимаю все хорошо. Дальше Есть файл cli.php где запускаються задачи, задачи отрабатываються нормально. НО! сам cli.php файл начинает работать не сразу, проходит секунд 15 и только потом запускается скрипт. Сам проект работает быстро в браузере. ВОПРОС: на что докер (контейнер) тратит время перед запуском cli.php файла. Вообще не понимаю в какую сторону копать. Давайте вместе найдем проблему ) заранее спасибо
Предположу что задержка из-за сетевых проблем. Типа, xdebug всегда активен и на старте скрипта он пытается соединиться с удаленным хостом.
xdebug отключил. Не помогло. Кстати не первый раз разворачиваю этот докер, но первый раз встречаю такую проблему Какие еще могут быть варианты?
Как вообще запускаешь этот скрипт? Тормозит любой скрипт, даже пустой? Если нет, то выясни на каком месте задержка. Отлаживай.
в корне проекта создаю новый файл рнр, пустой, открываю скобки, ставлю die, и он все равно секунд 15 запускается
Как запускаешь? --- Добавлено --- 15 сек это просто Код (Text): $ php path/to/script.php Или там ещё какие-то пляски? --- Добавлено --- Еще сделай php -m чтобы посмотреть какие модули подключены, правда ли ты убрал xdebug.
Спойлер [PHP Modules] Core ctype curl date dom fileinfo filter ftp hash iconv json libxml mbstring mongodb mysqlnd openssl pcre PDO pdo_dblib pdo_mysql pdo_sqlite pdo_sqlsrv phalcon Phar posix readline Reflection session SimpleXML soap SPL sqlite3 sqlsrv standard tokenizer xdebug xml xmlreader xmlwriter zlib [Zend Modules] Xdebug в корне проекта создаю пустой файл и запускаю php aa.php - те же 10-15 секунд --- Добавлено --- не ужели все подрядд отключать придется ( что бы понять что тормозит?
Семён Семёныч, ну что же вы! Я же просил отключить xdebug. Пока моя версия не проверена. Действуй! Учтоняю: надо отключить xdebug только для консоли!!! Ты знаешь что модули PHP можно отдельно настраивать для fpm, apache и cli ? Скрипт может тормозить потому что php лезет к сети и не находит ответа. А что у нас сразу лезет к сети, даже с путым скриптом, прям на старте? Правильно - xdebug. --- Добавлено --- Как выглядит типичная структура фс на ubuntu Код (Text): etc/ php/ 7.4/ cli/ conf.d/ ##-xxx.ini php.ini fpm/ conf.d/ ##-xxx.ini php.ini тебе надо удалить /etc/php/7.4/cli/conf.d/20-xdebug.ini (с поправкой на версию и дистрибутив) потом опять проверить php -m чтобы убедиться что там нет xdebug
не ужели все подрядд отк php -m я вижу что xdebug и в [PHP Modules] и в [Zend Modules] что именно нужно отключить из этого? и смогу ли я работать потом с дебагером дальше? и вообще почему их два ? ))) пока впросов становить только больше ^^ не, не знаю ( --- Добавлено --- у меня в php.ini вот такой путь указан - Configuration File (php.ini) Path /usr/local/etc/php и fpm или cli там нету ... (ща буду искать) --- Добавлено --- find -name xdebug.ini вот так вот ничего не находит в /
Женя, я не хочу слишком втягиваться в твои задачи. Просто скажу как бы я дейстовал: Судя по всему, это не убунта. Точно выяснить можно заглянув в /etc/issue Я надеюсь, что конфигурации консольного и веб php все-таки разные. Я предпочитаю оставлять xdebug для веб-версии и отключать для консольной. Потому что не хочу чтобы задачи в кроне или php artisan ххх стучались в мой phpstorm. Для такой консольной отладки у меня есть специальные трюки. В консольном php можно узнать путь до настроек так: php -i | grep php.ini или показать сразу все подключенные файлы php --ini А дальше надо смотреть: возможно все настройки содержатся в одном php.ini, тогда там надо закоментировать строчки про xdebug. А возможно подключаются файлы для отдельных модулей, тогда надо удалить файл. Команду find ты используешь слишком тупо. Надо чуть сложнее: find / -name "*xdebug.ini" Тогда он найдет и например такой файл: 20-xdebug.ini
наша цель - проверить не он ли создает проблему, а не выключить его навсегда. без понятия почему их два. кривой конфиг мб? вот заглянешь в конфигурацию и выяснишь!
Саша, я выяснил несколько вещей. Первое то что, все еще я темный лес в настройках environment. Второе что fpm нет у апача, и есть у nginxa Дальше... я выяснил что если в php.ini закоментировать все что где есть xdebuger, в том числе и ;zend_extension=xdebug.so - моя проблема решается. Если написать php -m то я вижу что xdebuger пропадает и из [PHP Modules] и из [Zend Modules] Я так понимаю что у меня начинает срабатывать дебагер и при запуске программы из консоли? и получается нуэно сделать то что ты писал выше "оставить дял веб и отключить для консоли..." - как это сделать? --- Добавлено --- - у меня апач - xdebug.ini я не могу найти
Ну ты и не обязан быть гуру во всём. В интернетах есть миллион готовых образов docker с php. Можешь попробовать найти подходящий. Я использую просто официальный образ ubuntu и в нем ставлю php без каких-то финтов, стандартно и вижу разные ini для apache / cli / fpm Ты до этого не говорил пр апачи. ))) Вообще-то апачи может работать с php-fpm, но может и традиционно с mod_php, нам это не принципиально. Просто если БЫ были разные папки для апачи и консоли, то было бы удобно. Например в убунте так и там удобно. Уже не надо искать xdebug.ini если и без этого получилось выключить xdebug. Значит он настраивается в главном ini файле. Как выглядит полный путь к php.ini если ты посмотришь в phpinfo через веб-страничку? А как он же выглядит если через консольный php --ini ? Они разные? Если да, то это ответ на твой вопрос "как сделать" — надо закоментировать xdebug только в консольном варианте php.ini. Если одинаковый, то я бы забил х на этот образ докер и нашел более дружественный на базе ubuntu. Я тоже не гуру и не знаю как разделить конфиги cli/web если они не разделены уже. На этом всё. Дальше давай сам. Удачи!
@Taktreba мне понадобилось разделить ini в образе на основе Debian 10. Код (Text): $ cat /etc/issue Debian GNU/Linux 10 \n \l $ php -v PHP 7.2.34 (cli) (built: Dec 11 2020 10:56:30) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies $ php --ini Configuration File (php.ini) Path: /usr/local/etc/php Loaded Configuration File: /usr/local/etc/php/php.ini Scan for additional .ini files in: /usr/local/etc/php/conf.d Additional .ini files parsed: /usr/local/etc/php/conf.d/docker-php-ext-gd.ini, /usr/local/etc/php/conf.d/docker-php-ext-gnupg.ini, /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini, /usr/local/etc/php/conf.d/docker-php-ext-intl.ini, /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini, /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini, /usr/local/etc/php/conf.d/docker-php-ext-soap.ini, /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini, /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini, /usr/local/etc/php/conf.d/docker-php-ext-xsl.ini, /usr/local/etc/php/conf.d/docker-php-ext-zip.ini По умолчанию там один php.ini на все случаи. Но я поискал и нашел, что если в папке с php.ini появится файл php-cli.ini, то консольный вариант будет использовать именно его. В итоге у меня такая структура Код (Text): /usr/local/etc/php/ conf.d/ php-cli.ini php.ini содержимое php.ini (используется в веб-версии) Код (Text): max_execution_time = 1000 max_input_time = 1000 ; xdebug 3 installed in docker. I use MacOS on host, PhpStorm listen port 9003 zend_extension=xdebug xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9003 содержимое php-cli.ini (используется в консоли) Код (Text): ;max_execution_time = 1000 ;max_input_time = 1000 Оба варианта грузят файлы из папки /usr/local/etc/php/conf.d/ поэтому я нашел в ней файл содержащий xdebug и удалил его. Теперь если я вызову в консоли php -i | grep xdebug у меня не выведется ничего, т.к. xdebug выключен. Но если я открою в браузере файл с функцией phpinfo(), то я увижу что xdebug включен для web. На сладкое, как же всё-таки отлаживать консольные скрипты, когда это понадобится. Для этого я создал алиас с указанием использовать другой ini файл: Код (Text): alias phpdebug='PHP_IDE_CONFIG="serverName=php-docker.local" php -c /usr/local/etc/php/php.ini -d xdebug.start_with_request=yes' "php-docker.local" это название сервера в моём PhpStorm. Для него прописан маппинг локальных папок на серверные. И когда мне надо отладить скрипт в консоли, я вызываю его так: Код (Text): $ phpdebug path/to/script.php