WedX - журнал о программировании и компьютерных науках

Как можно обнаружить первый запуск программы?

В моем веб-приложении пользователи могут загрузить архив .tar.gz, содержащий файлы приложения. Однако, поскольку база данных MySQL не будет настроена, пользователю необходимо запустить сценарий установки, расположенный в ./install.

Я «ловлю» пользователя при первом запуске приложения, проверяя, существует ли каталог ./install. Если это так, страница index.php перенаправляет пользователя на сценарий установки.

Однако мне было интересно, есть ли более элегантный способ «поймать» пользователя при первом запуске программы.

Кто-то в IRC предложил веб-серверу создать файл .installed после завершения, но, поскольку у веб-сервера может не быть прав на запись в корневой каталог веб-сайта, я не могу на это полагаться.

Как бы вы решили эту проблему, или мое решение работоспособно?

php
15.03.2010

  • Я думаю, что это прекрасное решение. Но если у вас нет прав на запись, как удалить каталог install? 15.03.2010
  • В моем приложении? Я попросил пользователя сделать это после установки. :) 18.03.2010

Ответы:


1

Когда запросы MySQL завершаются с ошибкой с кодом 1146, это означает, что таблицы не существуют. Вы можете следить за такими ошибками, так как они либо означают, что программное обеспечение не было установлено, либо что установка нарушена.

Как сказал Джулиан Х. Лам в комментариях, функция mysql_errno() возвращает этот номер ошибки. В случае MySQLi это либо свойство $connection->errno, либо вызов функции mysqli_errno($link).

15.03.2010
  • Это отличное решение, так как оно также будет обрабатывать неизбежный случай, когда пользователь по какой-то причине удаляет БД. 15.03.2010
  • Мне это нравится... это работает лучше, чем использовать php exec(), чего я все равно боюсь делать. 17.03.2010
  • Для тех, кому интересно: mysql_errno() возвращает номер ошибки. 18.03.2010

  • 2

    Помимо решения, которое вы предоставили, я мог бы подумать, что вы делаете обратное: добавляете файл .not-installed в свой tar и удаляете после завершения установки.

    15.03.2010
  • Но мне все равно понадобятся права на запись, чтобы удалить файл, да? Я не могу всегда полагаться на то, что конечный пользователь сохранит приложение, принадлежащее www-data, не так ли? Я, как правило, не делаю, но я могу делать что-то неправильно... 15.03.2010
  • @Julian H. Lam: Ну, вы можете указать, что вашему приложению нужны права на запись, чтобы работать. Я не думаю, что, например. вордпресс работает иначе. Также нужны права на запись. 15.03.2010
  • Да, любая известная мне CMS требует либо вручную удалить файл (или папку), либо доступ на запись в папку установки. 15.03.2010

  • 3

    Большинство веб-приложений (wordpress, drupal и т. д.) предполагают, что это условие первого запуска, когда в файле отсутствуют настройки или присутствует файл. Удаляя или заставляя пользователя удалить файл при первом запуске приложения, вы также гарантируете безопасность, поскольку приложение нельзя перенастроить, удалив или изменив имя файла... что может быть проще сделать, чем создайте новый файл и смоделируйте его содержимое.

    Более продвинутые платформы будут читать и изменять файл конфигурации, чтобы указать первый запуск. В приложении Zend Framework вы должны прочитать, а затем изменить один из файлов конфигурации установки.

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

    В вашей установке вы можете проверить наличие прав на запись в корень URL-адреса, если у вас их нет, сообщите пользователю удалить setup.php (например)

      $delete = False;
      $dir = dirname(__FILE__);
      if(is_writeable(__FILE__)) {
         if(unlink(__FILE__)) {
           $delete = True;
         }
      }
    
      if(!$delete) {
        $file = __FILE__
        print "IMPORTANT please remove/rename the file {$file} to complete installation"
      }
    
    15.03.2010
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]