国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP網站安裝實現程序

2024-05-04 21:48:23
字體:
來源:轉載
供稿:網友

網站安裝過程我們需要幾處非常簡單,一個是我們要讓用戶輸入用戶名密碼然后連接數據庫之后再把我們以前準備好.sql文件利用php讀取并執行,最后簡單配置一下站點,這樣一個完整的php網站安裝過程就完美的搞定了.

這次順便做了一個install.php才發現難度其實并不大.還是文件寫入操作而已.安裝其實主要操作的還是數據庫里的內容.先來看看文件里怎么寫:還是用的Codeigiter,對于使用其他框架或者手寫而言,僅思路可參考,用了挺多CI自帶的helper或者是library的,代碼如下:

  1. $content = "<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');n"
  2.  $content .= '$active_group'"= 'default';n"
  3.  $content .= '$active_record'." = TRUE;n"
  4.  $content .= '$db'."['default']['hostname'] = '".$this->input->post('hostname')."';n"; 
  5.  $content .= '$db'."['default']['username'] = '".$this->input->post('rootname')."';n"; 
  6.  $content .= '$db'."['default']['password'] = '".$this->input->post('pass')."';n"; 
  7.  $content .= '$db'."['default']['database'] = '".$this->input->post('book')."';n";//開源代碼Vevb.com 
  8.  $content .= '$db'."['default']['dbdriver'] = 'mysql';n"
  9.  $content .= '$db'."['default']['dbprefix'] = '';n"
  10.  $content .= '$db'."['default']['pconnect'] = TRUE;n"
  11.  $content .= '$db'."['default']['db_debug'] = TRUE;n"
  12.  $content .= '$db'."['default']['cache_on'] = FALSE;n"
  13.  $content .= '$db'."['default']['cachedir'] = '';n"
  14.  $content .= '$db'."['default']['char_set'] = 'utf8';n"
  15.  $content .= '$db'."['default']['dbcollat'] = 'utf8_general_ci';n"
  16.  $content .= '$db'."['default']['swap_pre'] = '';n"
  17.  $content .= '$db'."['default']['autoinit'] = TRUE;n"
  18.  $content .= '$db'."['default']['stricton'] = FALSE;"

在文件里用n來換行,因為里面包括了PHP的代碼,這導致了我們只能用雙引號避免沖突,否則的話就得用了,感覺工作量更大,針對$db,直接顯示必須要用單引號,于是就出現了這個.

寫入文件之后,接著我們需要做的是執行一系列安裝操作,也就是CREATE TABLE,以及創建一個新用戶用于登陸,在model里,我這么寫,代碼如下:

  1. function install() { 
  2.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_category'")) == 0) 
  3.  $this->db->query("CREATE TABLE pr_category(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, category VARCHAR(100) NOT NULL UNIQUE, deadline INT NOT NULL)"); 
  4.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_college'")) == 0) 
  5.  $this->db->query("CREATE TABLE pr_college(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL UNIQUE)"); 
  6.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_level'")) == 0) 
  7.  $this->db->query("CREATE TABLE pr_level(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, level INT NOT NULL, name VARCHAR(20) NOT NULL)"); 
  8.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_rates'")) == 0) 
  9.  $this->db->query("CREATE TABLE pr_rates(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, pid INT NOT NULL, ip VARCHAR(40) NOT NULL, category INT NOT NULL)"); 
  10.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_users'")) == 0) 
  11.  $this->db->query("CREATE TABLE pr_users(uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(45) NOT NULL UNIQUE, password VARCHAR(50) NOT NULL, level INT NOT NULL )"); 
  12.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_works'")) == 0) 
  13.  $this->db->query("CREATE TABLE pr_works(pid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, content TEXT, realname VARCHAR(20) NOT NULL, studentnum VARCHAR(20) NOT NULL, college INT NOT NULL, filename TEXT NOT NULL, category INT NOT NULL)"); 
  14.  $query1 = $this->db->get_where('pr_level',array('level' => 1, 'name' => '普通用戶')); 
  15.  $query2 = $this->db->get_where('pr_level',array('level' => 5, 'name' => '管理員')); 
  16.  $query3 = $this->db->get_where('pr_level',array('level' => 99, 'name' => '超級管理員')); 
  17.  if ($query1->num_rows() == 0) 
  18.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (1, '普通用戶')"); 
  19.  if ($query2->num_rows() == 0) 
  20.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (5, '管理員')"); 
  21.  if ($query3->num_rows() == 0) 
  22.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (99, '超級管理員')"); 
  23.  $this->username = $this->input->post('username'); 
  24.  $this->password = $this->input->post('password'); 
  25.  $this->level = 99; 
  26.  $query4 = $this->db->get_where('pr_users',array('username' => $this->input->post('username'))); 
  27.  if ($query4->num_rows() == 0) { 
  28.  $this->db->insert('pr_users'$this); 
  29.  return TRUE; 
  30.  } else { 
  31.  return FALSE; 
  32.  } 
  33.  } 

其實這么寫查詢量很大效率又低,不過這有效的避免了上一次安裝被打斷之后重新安裝遇到的麻煩,檢測是否已經創建了某個表,是否已經有新用戶了之類的,代碼如下:

mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_category'"))

這句可以查詢數據庫中是否存在這個表,執行完如果順利的話,將install.php改個名字,代碼如下:

  1. rename('application/controllers/install.php''application/controllers/install.lock'); 

在其他文件里加入檢測install.php是否存在,如果存在的話就跳轉到install.php,這樣就做好了簡單的安裝流程了,必須放在model前,否則會提示沒有數據庫而不會跳轉,代碼如下:

  1. if (file_exists('application/controllers/install.php')) 
  2. redirect('install'); 

至于什么是否存在表之類的,因為CI會check而且優先級也高于我們自己寫的錯誤提示,所以這里就不加了,完整源碼(MVC),Controller代碼如下:

  1. <?php 
  2. class Install extends CI_Controller { 
  3.  function __construct() { 
  4.  parent::__construct(); 
  5.  $this->load->helper('url'); 
  6.  $this->load->helper('file'); 
  7.  } 
  8.  function index() { 
  9.  $data['title'] = '安裝向導'
  10.  $this->load->helper('form'); 
  11.  $this->load->library('form_validation'); 
  12.  $this->form_validation->set_rules('hostname''主機名''trim|required|xss_clean'); 
  13.  $this->form_validation->set_rules('rootname''數據庫用戶名''trim|required|xss_clean'); 
  14.  $this->form_validation->set_rules('username''用戶名''trim|required|xss_clean'); 
  15.  $this->form_validation->set_rules('password''密碼''trim|required|xss_clean|md5'); 
  16.  $data['error'] = ''
  17.  if ($this->form_validation->run() == FALSE) { 
  18.  $this->load->view('install'$data); 
  19.  } else { 
  20.  $config['hostname'] = $this->input->post('hostname'); 
  21.  $config['username'] = $this->input->post('rootname'); 
  22.  $config['password'] = $this->input->post('pass'); 
  23.  $config['database'] = $this->input->post('book'); 
  24.  $config['dbdriver'] = 'mysql'
  25.  $config['dbprefix'] = ''
  26.  $config['pconnect'] = TRUE; 
  27.  $config['db_debug'] = TRUE; 
  28.  $config['cache_on'] = FALSE; 
  29.  $config['cachedir'] = ''
  30.  $config['char_set'] = 'utf8'
  31.  $config['dbcollat'] = 'utf8_general_ci'
  32.  $config['swap_pre'] = ''
  33.  $config['autoinit'] = TRUE; 
  34.  $config['stricton'] = FALSE; 
  35.  if ($this->load->database($config, TRUE)) { 
  36.  $content = "<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');n"
  37.  $content .= '$active_group'"= 'default';n"
  38.  $content .= '$active_record'." = TRUE;n"
  39.  $content .= '$db'."['default']['hostname'] = '".$this->input->post('hostname')."';n"; 
  40.  $content .= '$db'."['default']['username'] = '".$this->input->post('rootname')."';n"; 
  41.  $content .= '$db'."['default']['password'] = '".$this->input->post('pass')."';n"; 
  42.  $content .= '$db'."['default']['database'] = '".$this->input->post('book')."';n"; 
  43.  $content .= '$db'."['default']['dbdriver'] = 'mysql';n"
  44.  $content .= '$db'."['default']['dbprefix'] = '';n"
  45.  $content .= '$db'."['default']['pconnect'] = TRUE;n"
  46.  $content .= '$db'."['default']['db_debug'] = TRUE;n"
  47.  $content .= '$db'."['default']['cache_on'] = FALSE;n"
  48.  $content .= '$db'."['default']['cachedir'] = '';n"
  49.  $content .= '$db'."['default']['char_set'] = 'utf8';n"
  50.  $content .= '$db'."['default']['dbcollat'] = 'utf8_general_ci';n"
  51.  $content .= '$db'."['default']['swap_pre'] = '';n"
  52.  $content .= '$db'."['default']['autoinit'] = TRUE;n"
  53.  $content .= '$db'."['default']['stricton'] = FALSE;"
  54.  if (write_file('application/config/database.php'$content)) { 
  55.  $this->load->model('install_model'); 
  56.  if ($this->install_model->install()) { 
  57.  rename('application/controllers/install.php''application/controllers/install.lock'); 
  58.  $this->load->library('session'); 
  59.  if (!emptyempty($this->session->userdata['login'])) { 
  60.  $this->session->sess_destroy(); // destroy the session 
  61.  } 
  62.  redirect('poster_admin/login''refresh'); 
  63.  } else { 
  64.  $data['error'] = '超級管理員用戶名已存在'
  65.  $this->load->view('install'$data); 
  66.  } 
  67.  } else { 
  68.  $data['error'] = '安裝失敗,無法寫入文件'
  69.  $this->load->view('install'$data); 
  70.  } 
  71.  } 
  72.  } 
  73.  } 
  74. ?> 

Model:

  1. class Install_model extends CI_Model { 
  2.  function __construct() { 
  3.  parent::__construct(); 
  4.  $this->load->database(); 
  5.  $this->load->dbforge(); 
  6.  } 
  7.  function install() { 
  8.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_category'")) == 0) 
  9.  $this->db->query("CREATE TABLE pr_category(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, category VARCHAR(100) NOT NULL UNIQUE, deadline INT NOT NULL)"); 
  10.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_college'")) == 0) 
  11.  $this->db->query("CREATE TABLE pr_college(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL UNIQUE)"); 
  12.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_level'")) == 0) 
  13.  $this->db->query("CREATE TABLE pr_level(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, level INT NOT NULL, name VARCHAR(20) NOT NULL)"); 
  14.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_rates'")) == 0) 
  15.  $this->db->query("CREATE TABLE pr_rates(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, pid INT NOT NULL, ip VARCHAR(40) NOT NULL, category INT NOT NULL)"); 
  16.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_users'")) == 0) 
  17.  $this->db->query("CREATE TABLE pr_users(uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(45) NOT NULL UNIQUE, password VARCHAR(50) NOT NULL, level INT NOT NULL )"); 
  18.  if (mysql_num_rows(mysql_query("SHOW TABLES LIKE 'pr_works'")) == 0) 
  19.  $this->db->query("CREATE TABLE pr_works(pid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, content TEXT, realname VARCHAR(20) NOT NULL, studentnum VARCHAR(20) NOT NULL, college INT NOT NULL, filename TEXT NOT NULL, category INT NOT NULL)"); 
  20.  $query1 = $this->db->get_where('pr_level',array('level' => 1, 'name' => '普通用戶')); 
  21.  $query2 = $this->db->get_where('pr_level',array('level' => 5, 'name' => '管理員')); 
  22.  $query3 = $this->db->get_where('pr_level',array('level' => 99, 'name' => '超級管理員')); 
  23.  if ($query1->num_rows() == 0) 
  24.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (1, '普通用戶')"); 
  25.  if ($query2->num_rows() == 0) 
  26.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (5, '管理員')"); 
  27.  if ($query3->num_rows() == 0) 
  28.  $this->db->query("INSERT INTO pr_level(level, name) VALUES (99, '超級管理員')"); 
  29.  $this->username = $this->input->post('username'); 
  30.  $this->password = $this->input->post('password'); 
  31.  $this->level = 99; 
  32.  $query4 = $this->db->get_where('pr_users',array('username' => $this->input->post('username'))); 
  33.  if ($query4->num_rows() == 0) { 
  34.  $this->db->insert('pr_users'$this); 
  35.  return TRUE; 
  36.  } else { 
  37.  return FALSE; 
  38.  } 
  39.  } 

View:

  1. <!DOCTYPE html> 
  2. <html lang="Zh-CN"> 
  3. <html> 
  4. <head> 
  5.  <meta charset="utf-8"/> 
  6.  <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
  7.  <link rel="stylesheet" href="<?php echo base_url() . 'css/bootstrap.css' ?>"> 
  8.  <link rel="stylesheet" href="<?php echo base_url() . 'css/login.css' ?>"> 
  9.  <link rel="icon" type="image/x-icon" href="<?php echo base_url() . 'favicon.ico' ?>"/> 
  10.  <script src="<?php echo base_url() . 'js/jquery-1.9.0.js' ?>"></script> 
  11.  <script src="<?php echo base_url() . 'js/bootstrap.js' ?>"></script> 
  12.  <title><?php echo $title; ?> - SMU Poster</title> 
  13. </head> 
  14. <body> 
  15. <div class="container"> 
  16.  <div class="row"> 
  17.  <div class="col-sm-4 col-sm-offset-4"> 
  18.  <div <?php $err = validation_errors(); echo !(empty($error) && empty($err)) ? 'class="alert alert-danger text-center"' : '?>><?php echo validation_errors(); ?> 
  19.  <?php echo $error ?></div> 
  20.  <?php echo form_open('install', array('class'=>'form-horizontal','role'=>'form')); ?> 
  21.  <div class="col-sm-sm-4 col-sm-offset-4"><h2>安裝向導</h2></div> 
  22.  <div class="form-group"> 
  23.  <div class="col-sm-9 col-sm-offset-2"> 
  24.  <div class="input-group"> 
  25.  <span class="input-group-addon"><span class="glyphicon glyphicon-cloud"></span></span> 
  26.  <input type="text" class="form-control" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="一般為localhost" id="hostname" name="hostname" placeholder="主機名" value="localhost"/> 
  27.  </div> 
  28.  </div> 
  29.  </div> 
  30.  <div class="form-group"> 
  31.  <div class="col-sm-9 col-sm-offset-2"> 
  32.  <div class="input-group"> 
  33.  <span class="input-group-addon"><span class="glyphicon glyphicon-book"></span></span> 
  34.  <input type="text" class="form-control" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="數據庫名如poster,請自行創建" id="book" name="book" placeholder="數據庫名"/> 
  35.  </div> 
  36.  </div> 
  37.  </div> 
  38.  <div class="form-group"> 
  39.  <div class="col-sm-9 col-sm-offset-2"> 
  40.  <div class="input-group"> 
  41.  <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span> 
  42.  <input type="text" class="form-control" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="連接數據庫的賬號" id="rootname" name="rootname" placeholder="數據庫賬號"/> 
  43.  </div> 
  44.  </div> 
  45.  </div> 
  46.  <div class="form-group"> 
  47.  <div class="col-sm-9 col-sm-offset-2"> 
  48.  <div class="input-group"> 
  49.  <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span> 
  50.  <input type="password" class="form-control" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="連接數據庫的密碼" id="pass" name="pass" placeholder="數據庫密碼"/> 
  51.  </div> 
  52.  </div> 
  53.  </div> 
  54.  <div class="form-group"> 
  55.  <div class="col-sm-9 col-sm-offset-2"> 
  56.  <div class="input-group"> 
  57.  <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span> 
  58.  <input type="text" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="注冊一個后臺超級管理員賬號" class="form-control" id="username" name="username" placeholder="后臺登錄賬號"/> 
  59.  </div> 
  60.  </div> 
  61.  </div> 
  62.  <div class="form-group"> 
  63.  <div class="col-sm-9 col-sm-offset-2"> 
  64.  <div class="input-group"> 
  65.  <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span> 
  66.  <input type="password" onMouseOver="$(this).tooltip('show')" data-toggle="tooltip" title="后臺超級管理員密碼" class="form-control" id="password" name="password" placeholder="后臺登陸密碼"/> 
  67.  </div> 
  68.  </div> 
  69.  </div> 
  70.  <div class="form-group"> 
  71.  <div class="col-sm-offset-3 col-sm-9"> 
  72.  <button type="submit" class="btn btn-default">開始安裝</button> 
  73.  </div> 
  74.  </div> 
  75.  </form> 
  76.  </div> 
  77.  </div> 
  78. </div> 
  79. <div id="footer"> 
  80.  <div class="container"> 
  81.  <p class="text-center copyright text-muted">Designed By <a href="http://m.survivalescaperooms.com/">微軟技術俱樂部</a></p> 
  82.  </div> 
  83. </div> 
  84. </body> 
  85. </html> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨嘎县| 三河市| 南城县| 台南市| 平远县| 林口县| 乌鲁木齐县| 冕宁县| 交口县| 简阳市| 盘山县| 姚安县| 望都县| 甘洛县| 神池县| 抚远县| 同心县| 漾濞| 子长县| 甘孜| 陆良县| 河曲县| 莱州市| 五寨县| 交城县| 灌南县| 巴南区| 吴堡县| 嘉义县| 定兴县| 武穴市| 凭祥市| 德格县| 唐河县| 北票市| 宣恩县| 泊头市| 进贤县| 高台县| 乐亭县| 茌平县|