Как отличить вызов веб-сервера и командная строка? [дубликат]

Я успешно развернул приложение. Мне нужно было сделать три вещи:

  1. правильно вернуть приложение из фабрики приложений
  2. поместить файл passenger_wsgi.py в папку app / code
  3. , убедиться, что правильная версия Python называется

фабрика приложений теперь это ...

    ...

    from myapp.view import auth
    app.register_blueprint(auth.bp)
    from myapp.view import module1
    app.register_blueprint(module1.bp)
    app.add_url_rule("/", endpoint="index")
    from myapp.view import api
    app.register_blueprint(api.bp)

    return app
if __name__ == "__main__":
    app = create_app()
    app.run()

/var/www/app_name/code/passenger_wsgi.py файл выглядит следующим образом

from nwpapp import create_app
application = create_app()

Я не использовал виртуальную среду. по умолчанию вызывается python2.7. Мне пришлось установить альтернативы и сделать Python3.6 по умолчанию. Обязательно запустите правильную версию pip для установки ваших зависимостей.

60
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

Если названо из командной строки, серверная переменная HTTP_USER_AGENT не установлен. Я использую эту константу для определения, называют ли сценарий из командной строки или нет:

define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));

ОБНОВЛЕНИЕ: Так как этот ответ все еще отмечен как 'корректный', я хотел бы пересмотреть свой оператор - доверие заголовку "Агента пользователя" может быть проблематичным, так как это - пользовательское значение.

Используйте php_sapi_name() == 'cli' или PHP_SAPI == 'cli', как предложено Eugene/cam8001 в комментариях.

Спасибо за указание на это!

98
ответ дан Shocker 24 November 2019 в 17:48
поделиться

Я выдержал сравнение $_SERVER суперглобальный в обоих вызовах. Это кажется этим $_SERVER['argc'] (т.е. количество аргументов передало сценарию), только установлен при выполнении от оболочки/командной строки:

<?php
if (isset($_SERVER['argc'])) {
    define('CLI', true);
} else {
    define('CLI', false);
}

Это, кажется, работает и над хостами Linux и Windows. (Сначала я думал о проверке некоторые переменные среды, но они отличаются для каждой операционной системы. Кроме того, весь $_SERVER['HTTP_*'] заголовки отсутствуют в версии CLI, но я не уверен, достаточно ли это надежно.)

3
ответ дан Piskvor cc-by-sa 3.0 24 November 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: