开发者

How might one detect the first run of a program?

开发者 https://www.devze.com 2022-12-23 04:06 出处:网络
In my web application, users can download a .tar.gz archive containing the app files. However, because the MySQL database won\'t have been configured then, the user needs to run the install script loc

In my web application, users can download a .tar.gz archive containing the app files. However, because the MySQL database won't have been configured then, the user needs to run the install script located in ./install.

I "catch" the user upon first run of the app by checking to see if the ./install directory exists. If so, the index.php page redirects the user to the install script.

However, I was wondering if there were a more elegant way to "catch" a user upon first-run of a program.

Someone on IRC suggested the web-server create a file .installed upon completion, but because the web server might not have write privileges to the web root directory, I can't rely on that.

How would you go about solving this problem, or is m开发者_如何学Cy solution workable?


When MySQL queries fail with the error code 1146, it means the tables don't exist. You could be on the lookout for such errors, since they either mean the software wasn't installed, or that the installation is broken.

As Julian H. Lam said in the comments, the mysql_errno() function returns that error number. In case of MySQLi, it's either the property $connection->errno or the function call mysqli_errno($link).


Other than the solution you provided, I could think that you do the opposite: Add a .not-installed file to your tar and delete after installation finishes.


Most web applications out there (wordpress, drupal, etc) assume it is a first-run condition when there is a lack of settings in a file, or the presence of a file. By removing or forcing the user to remove a file upon first-run of an application you also guarantee security because the application can't be re-configured by deleting or changing the name of a file... which might be easier to do than create a new file and simulate its contents.

More advanced frameworks will read and modify a configuration file to indicate first-run. In a Zend Framework application you would read, then modify one of the installations configuration files.

Because a web application executes code when it receives a request, code you do not want to be executed again should be deleted or outside of the 'public' directory. Projects that are extremely concerned with a setup being re-ran delete the setup file altogether.

In your installation you can check for write permissions to the URL root, if you lack them tell the user to delete setup.php (for example)

  $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"
  }
0

精彩评论

暂无评论...
验证码 换一张
取 消