当前位置:首页 > PHP教程 > PHP高级教程

php实现的mongodb操作类实例

本文实例讲述了php实现的mongodb操作类。分享给大家供大家参考。具体如下:

<?php 
/*
 * to change this template, choose tools | templates
 * and open the template in the editor.
 */ 
class mongo_db { 
  private $config; 
  private $connection; 
  private $db; 
  private $connection_string; 
  private $host; 
  private $port; 
  private $user; 
  private $pass; 
  private $dbname; 
  private $persist; 
  private $persist_key; 
  private $selects = array(); 
  private $wheres = array(); 
  private $sorts = array(); 
  private $limit = 999999; 
  private $offset = 0; 
  private $timeout = 200; 
  private $key = 0; 
  /**
  *
  * constructor *
  *
  * automatically check if the mongo pecl extension has been
  installed/enabled.
  * generate the connection string and establish a connection
  to the mongodb.
  */ 
  public function __construct() { 
    if((is_nosql != 1)){ 
      return; 
    } 
    if (!class_exists('mongo')) { 
      //$this->error("the mongodb pecl extension has not been installed or enabled", 500); 
    } 
    $configs =wxcity_base::load_config("cache","mongo_db"); 
    $num = count($configs['connect']); 
    $this->timeout = trim($configs['timeout']); 
    $keys = wxcity_base::load_config('double'); 
    $this->key = $keys['mongo_db']; 
    $this->config = $configs['connect'][$this->key]; 
    $status = $this->connect(); 
    if($status == false) 
    { 
      for($i = 1; $i < $num; $i++) 
      { 
        $n = $this->key + $i; 
        $key = $n >= $num ? $n - $num : $n; 
        $this->config = $configs['connect'][$key]; 
        $status = $this->connect(); 
        if($status!=false) 
        { 
          $keys['mongo_db'] = $key ; 
          $this->key = $key; 
          $data = "<?phpnreturn ".var_export($keys, true).";n?>"; 
          file_put_contents(whty_path.'configs/double.php', $data, lock_ex); 
          break; 
        } 
      } 
    } 
    if($status==false) 
    { 
      die('mongodb not connect'); 
    } 
  } 
  function __destruct() { 
    if((is_nosql != 1)){ 
      return; 
    } 
    if($this->connection) 
    { 
      $this->connection->close(); 
    } 
  } 
    /**
 *
 * connect to mongodb  *
 *
 * establish a connection to mongodb using
 the connection string generated in
 * the connection_string() method.
 if 'mongo_persist_key' was set to true in the  
 * config file, establish a persistent connection.
 we allow for only the 'persist'
 * option to be set because we want to 
 establish a connection immediately.
 */ 
  private function connect() { 
    $this->connection_string(); 
    $options = array('connect'=>true,'timeout'=>$this->timeout); 
    try { 
      $this->connection = new mongo($this->connection_string, $options); 
      $this->db = $this->connection->{$this->dbname}; 
      return($this); 
    } catch (mongoconnectionexception $e) { 
      return false; 
    } 
  } 
  /**
  *
  * build connection string *
  *
  * build the connection string from the config file.
  */ 
  private function connection_string() { 
    $this->host = trim($this->config['hostname']); 
    $this->port = trim($this->config['port']); 
    $this->user = trim($this->config['username']); 
    $this->pass = trim($this->config['password']); 
    $this->dbname = trim($this->config['database']); 
    $this->persist = trim($this->config['autoconnect']); 
    $this->persist_key = trim($this->config['mongo_persist_key']); 
    $connection_string = "mongodb://"; 
    if (emptyempty($this->host)) { 
      $this->error("the host must be set to connect to mongodb", 500); 
    } if (emptyempty($this->dbname)) { 
      $this->error("the database must be set to connect to mongodb", 500); 
    } if (!emptyempty($this->user) && !emptyempty($this->pass)) { 
      $connection_string .= "{$this->user}:{$this->pass}@"; 
    } if (isset($this->port) && !emptyempty($this->port)) { 
      $connection_string .= "{$this->host}:{$this->port}"; 
    } else { 
      $connection_string .= "{$this->host}"; 
    } $this->connection_string = trim($connection_string); 
  } 
  /**
  *
  * switch_db  *
  *
  * switch from default database to a different db
  */ 
  public function switch_db($database = '') { 
    if (emptyempty($database)) { 
      $this->error("to switch mongodb databases, a new database name must be specified", 500); 
    } $this->dbname = $database; 
    try { 
      $this->db = $this->connection->{$this->dbname}; 
      return(true); 
    } catch (exception $e) { 
      $this->error("unable to switch mongo databases: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * select fields  *
  *
  * determine which fields to include or which to
  exclude during the query process.
  * currently, including and excluding at 
  the same time is not available, so the
  * $includes array will take precedence over
  the $excludes array.
  if you want to
  * only choose fields to exclude,
  leave $includes an empty array().
  *
  * @usage: $this->mongo_db->select(array('foo', 'bar'))->get('foobar');
  */ 
  public function select($includes = array(), $excludes = array()) { 
    if (!is_array($includes)) { 
      $includes = array(); 
    } 
    if (!is_array($excludes)) { 
      $excludes = array(); 
    } 
    if (!emptyempty($includes)) { 
      foreach ($includes as $col) { 
        $this->selects[$col] = 1; 
      } 
    } else { 
      foreach ($excludes as $col) { 
        $this->selects[$col] = 0; 
      } 
    } return($this); 
  } 
  /**
  *
  * where parameters   *
  *
  * get the documents based on these
  search parameters. the $wheres array should
  * be an associative array with the field 
  as the key and the value as the search
  * criteria.  *
  * @usage = $this->mongo_db->where(array('foo' => 'bar'))->get('foobar');
  */ 
  public function where($wheres = array()) { 
    foreach ((array)$wheres as $wh => $val) { 
      $this->wheres[$wh] = $val; 
    } return($this); 
  } 
  /**
  *
  * where_in parameters *
  *
  * get the documents where the value 
  of a $field is in a given $in array().
  *
  * @usage = $this->mongo_db->where_in('foo', array('bar', 'zoo', 'blah'))->get('foobar');
  */ 
  public function where_in($field = "", $in = array()) { 
    $this->where_init($field); 
    $this->wheres[$field]['$in'] = $in; 
    return($this); 
  } 
  /**
  *
  * where_not_in parameters *
  *
  * get the documents where the value of 
  a $field is not in a given $in array().
  *
  * @usage = $this->mongo_db->where_not_in('foo', array('bar', 'zoo', 'blah'))->get('foobar');
  */ 
  public function where_not_in($field = "", $in = array()) { 
    $this->where_init($field); 
    $this->wheres[$field]['$nin'] = $in; 
    return($this); 
  } 
  /**
  *
  * where greater than parameters  *
  *
  * get the documents where the value of 
  a $field is greater than $x
  * 
  * @usage = $this->mongo_db->where_gt('foo', 20);
  */ 
  public function where_gt($field = "", $x) { 
    $this->where_init($field); 
    $this->wheres[$field]['$gt'] = $x; 
    return($this); 
  } 
  /**
  *
  * where greater than or equal to parameters  *
  *
  * get the documents where the value of a $field is greater than or equal to $x
  *
  * @usage = $this->mongo_db->where_gte('foo', 20);
  */ 
  public function where_gte($field = "", $x) { 
    $this->where_init($field); 
    $this->wheres[$field]['$gte'] = $x; 
    return($this); 
  } 
  /**
  *
  * where less than parameters  *
  *
  * get the documents where the value of
  a $field is less than $x
  *
  * @usage = $this->mongo_db->where_lt('foo', 20);
  */ 
  public function where_lt($field = "", $x) { 
    $this->where_init($field); 
    $this->wheres[$field]['$lt'] = $x; 
    return($this); 
  } 
  /**
  *
  * where less than or equal to parameters  *
  *
  * get the documents where the value of 
  a $field is less than or equal to $x
  *
  * @usage = $this->mongo_db->where_lte('foo', 20);
  */ 
  public function where_lte($field = "", $x) { 
    $this->where_init($field); 
    $this->wheres[$field]['$lte'] = $x; 
    return($this); 
  } 
  /**
  *
  * where between parameters   *
  *
  * get the documents where the value of
  a $field is between $x and $y
  *
  * @usage = $this->mongo_db->where_between('foo', 20, 30);
  */ 
  public function where_between($field = "", $x, $y) { 
    $this->where_init($field); 
    $this->wheres[$field]['$gte'] = $x; 
    $this->wheres[$field]['$lte'] = $y; 
    return($this); 
  } 
  /**
  *
  * where between and not equal to parameters  *
  *
  * get the documents where the value of 
  a $field is between but not equal to $x and $y
  *
  * @usage = $this->mongo_db->where_between_ne('foo', 20, 30);
  */ 
  public function where_between_ne($field = "", $x, $y) { 
    $this->where_init($field); 
    $this->wheres[$field]['$gt'] = $x; 
    $this->wheres[$field]['$lt'] = $y; 
    return($this); 
  } 
  /**
  *
  * where not equal to parameters  *
  *
  * get the documents where the value of 
  a $field is not equal to $x
  *
  * @usage = $this->mongo_db->where_between('foo', 20, 30);
  */ 
  public function where_ne($field = "", $x) { 
    $this->where_init($field); 
    $this->wheres[$field]['$ne'] = $x; 
    return($this); 
  } 
  /**
  *
  * where or   *
  *
  * get the documents where the value of 
  a $field is in one or more values  
  *
  * @usage = $this->mongo_db->where_or('foo', array( 'foo', 'bar', 'blegh' );
  */ 
  public function where_or($field = "", $values) { 
    $this->where_init($field); 
    $this->wheres[$field]['$or'] = $values; 
    return($this); 
  } 
  /**
  *
  * where and  *
  *
  * get the documents where the elements match 
  the specified values *
  * @usage = $this->mongo_db->where_and( array ( 'foo' => 1, 'b' => 'someexample' );
  */ 
  public function where_and($elements_values = array()) { 
    foreach ((array)$elements_values as $element => $val) { 
      $this->wheres[$element] = $val; 
    } return($this); 
  } 
  /**
  *
  * where mod  *
  *
  * get the documents where $field % $mod = $result *
  * @usage = $this->mongo_db->where_mod( 'foo', 10, 1 );
  */ 
  public function where_mod($field, $num, $result) { 
    $this->where_init($field); 
    $this->wheres[$field]['$mod'] = array($num, $result); 
    return($this); 
  } 
  /**   *    *  where size *    *  *  get the documents where the size of a field is in a given $size int *  *  @usage : $this->mongo_db->where_size('foo', 1)->get('foobar'); */ 
  public function where_size($field = "", $size = "") { 
    $this->_where_init($field); 
    $this->wheres[$field]['$size'] = $size; 
    return ($this); 
  } 
  /**
  *
  * like parameters *
  *
  * get the documents where the (string) value of 
  a $field is like a value. the defaults
  * allow for a case-insensitive search.   *
  * @param $flags  
  * allows for the typical regular expression flags:
  *   i = case insensitive
  *   m = multiline
  *   x = can contain comments
  *   l = locale  
  *   s = dotall, "." matches everything, including newlines
  *   u = match unicode
  *
  * @param $enable_start_wildcard
  * if set to anything other than true, a starting line character "^" will be prepended
  * to the search value, representing only searching for a value at the start of
  * a new line.
  *  * @param $enable_end_wildcard 
  * if set to anything other than true, an ending line character "$" will be appended
  * to the search value, representing only searching for a value at the end of
  * a line.
  * 
  * @usage = $this->mongo_db->like('foo', 'bar', 'im', false, true);
  */ 
  public function like($field = "", $value = "", $flags = "i", $enable_start_wildcard = true, $enable_end_wildcard = true) { 
    $field = (string) trim($field); 
    $this->where_init($field); 
    $value = (string) trim($value); 
    $value = quotemeta($value); 
    if ($enable_start_wildcard !== true) { 
      $value = "^" . $value; 
    } if ($enable_end_wildcard !== true) { 
      $value .= "$"; 
    } $regex = "/$value/$flags"; 
    $this->wheres[$field] = new mongoregex($regex); 
    return($this); 
  } 
  public function wheres($where){ 
    $this->wheres = $where; 
  } 
  /**
  *
  * order by parameters *
  *
  * sort the documents based on the parameters passed.
  to set values to descending order,
  * you must pass values of either -1, false,
  'desc', or 'desc', else they will be
  * set to 1 (asc).
  *
  * @usage = $this->mongo_db->where_between('foo', 20, 30);
  */ 
  public function order_by($fields = array()) { 
    if (!is_array($fields) || !count($fields)) return ; 
    foreach ($fields as $col => $val) { 
      if ($val == -1 || $val === false || strtolower($val) == 'desc') { 
        $this->sorts[$col] = -1; 
      } else { 
        $this->sorts[$col] = 1; 
      } 
    } return($this); 
  } 
  /**
  *
  * limit documents *
  *
  * limit the result set to $x number of documents  *
  * @usage = $this->mongo_db->limit($x);
  */ 
  public function limit($x = 99999) { 
    if ($x !== null && is_numeric($x) && $x >= 1) { 
      $this->limit = (int) $x; 
    } return($this); 
  } 
  /**
  *
  * offset documents   *
  *
  * offset the result set to skip $x number of documents
  *
  * @usage = $this->mongo_db->offset($x);
  */ 
  public function offset($x = 0) { 
    if ($x !== null && is_numeric($x) && $x >= 1) { 
      $this->offset = (int) $x; 
    } return($this); 
  } 
  /**
  *
  * get_where  *
  *  
  * get the documents based upon the passed parameters  *
  * @usage = $this->mongo_db->get_where('foo', array('bar' => 'something'));
  */ 
  public function get_where($collection = "", $where = array(), $limit = 99999, $orderby=array()) { 
    if (is_array($orderby) || !emptyempty($orderby)) { 
      $order_by = $this->order_by($order_by); 
    } 
    return($this->where($where)->limit($limit)->get($collection)); 
  } 
  public function selecta($collection = "", $limit = 99999, $orderby=array()) { 
    if(intval($limit)<1){ 
      $limit = 999999; 
    } 
    $order_by = $this->order_by($orderby); 
    $re = $this->limit($limit)->get($collection); 
    $this->clear(); 
    return (array)$re; 
  } 
  public function listinfo($collection = "", $orderby=array(), $page=1, $pagesize=12) { 
    $page = max(intval($page), 1); 
    $offset = $pagesize * ($page - 1); 
    $pagesizes = $offset + $pagesize; 
    $this->offset($offset); 
    $order_by = $this->order_by($orderby); 
    $re = $this->limit($pagesize)->get($collection); 
    $this->limit(999999); 
    $count = $this->count($collection); 
    $this->pages = pages($count, $page, $pagesize); 
    return (array)$re; 
  } 
  /**
  *
  * get *
  *
  * get the documents based upon the passed parameters  *
  * @usage = $this->mongo_db->get('foo', array('bar' => 'something'));
  */ 
  public function get($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("in order to retreive documents from mongodb, a collection name must be passed", 500); 
    } $results = array(); 
    $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit)->skip((int) $this->offset)->sort($this->sorts); 
    $returns = array(); 
    foreach ($documents as $doc): $returns[] = $doc; 
    endforeach; 
    return($returns); 
  } 
  public function getmy($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("in order to retreive documents from mongodb, a collection name must be passed", 500); 
    } $results = array(); 
    $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit)->skip((int) $this->offset)->sort($this->sorts); 
    $returns = array(); 
    foreach ($documents as $doc): $returns[] = $doc; 
    endforeach; 
    $this -> clear(); 
    return($returns); 
  } 
  /**
  *
  * count  *
  *
  * count the documents based upon the passed parameters *
  * @usage = $this->mongo_db->get('foo');
  */ 
  public function count($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("in order to retreive a count of documents from mongodb, a collection name must be passed", 500); 
    } $count = $this->db->{$collection}->find($this->wheres)->limit((int) $this->limit)->skip((int) $this->offset)->count(); 
    $this->clear(); 
    return($count); 
  } 
  /**
  *
  * insert  *
  *
  * insert a new document into the passed collection *
  * @usage = $this->mongo_db->insert('foo', $data = array());
  */ 
  public function insert($collection = "", $data = array(), $name='id') { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to insert into", 500); 
    } if (count($data) == 0 || !is_array($data)) { 
      $this->error("nothing to insert into mongo collection or insert is not an array", 500); 
    } try { 
    /**
      wxcity_base::load_sys_class('whtysqs','',0); 
      $mongoseq_class = new whtysqs('creaseidsqs');
      $re = $mongoseq_class->query("?name=" . $collection . "&opt=put&data=1");
    **/ 
      $re = put_sqs('list_mongo_creaseidsqs','1'); 
      if(is_numeric($re)){ 
        $re++; 
        $data[$name] = intval($re); 
      }else{ 
        $data[$name] = intval(time()); 
        //die('mongosqs error'); 
      } 
      $this->db->{$collection}->insert($data, array('fsync' => true)); 
      $this->clear(); 
      return $data[$name]; 
    } catch (mongocursorexception $e) { 
      $this->error("insert of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  public function insertwithid($collection = "", $data = array()) { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to insert into", 500); 
    } if (count($data) == 0 || !is_array($data)) { 
      $this->error("nothing to insert into mongo collection or insert is not an array", 500); 
    } try { 
      $this->db->{$collection}->insert($data, array('fsync' => true)); 
      $this->clear(); 
      return 1; 
    } catch (mongocursorexception $e) { 
      $this->error("insert of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * update  *
  *
  * update a document into the passed collection *
  * @usage = $this->mongo_db->update('foo', $data = array());
  */ 
  public function update($collection = "", $data = array()) { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to update", 500); 
    } if (count($data) == 0 || !is_array($data)) { 
      $this->error("nothing to update in mongo collection or update is not an array", 500); 
    } try { 
      $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => true, 'multiple' => false)); 
      $this->clear(); 
      return(true); 
    } catch (mongocursorexception $e) { 
      $this->error("update of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * update_all  *
  *
  * insert a new document into the passed collection *
  * @usage = $this->mongo_db->update_all('foo', $data = array());
  */ 
  public function update_all($collection = "", $data = array()) { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to update", 500); 
    } if (count($data) == 0 || !is_array($data)) { 
      $this->error("nothing to update in mongo collection or update is not an array", 500); 
    } try { 
      $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => true, 'multiple' => true)); 
      return(true); 
    } catch (mongocursorexception $e) { 
      $this->error("update of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * delete  *
  *
  * delete document from the passed collection based upon certain criteria *
  * @usage = $this->mongo_db->delete('foo', $data = array());
  */ 
  public function delete($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to delete from", 500); 
    } try { 
      $this->db->{$collection}->remove($this->wheres, array('fsync' => true, 'justone' => true)); 
      $this->clear(); 
      return(true); 
    } catch (mongocursorexception $e) { 
      $this->error("delete of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * delete_all  *
  *
  * delete all documents from the passed collection based upon certain criteria
  *
  * @usage = $this->mongo_db->delete_all('foo', $data = array());
  */ 
  public function delete_all($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection selected to delete from", 500); 
    } try { 
      $this->db->{$collection}->remove($this->wheres, array('fsync' => true, 'justone' => false)); 
      return(true); 
    } catch (mongocursorexception $e) { 
      $this->error("delete of data into mongodb failed: {$e->getmessage()}", 500); 
    } 
  } 
  /**
  *
  * add_index  *
  *
  * ensure an index of the keys in a collection with optional parameters.
  to set values to descending order,
  * you must pass values of either -1, false, 'desc', or 'desc', else they will be
  * set to 1 (asc). *
  * @usage = $this->mongo_db->add_index($collection, array('first_name' => 'asc', 'last_name' => -1), array('unique' => true));
  */ 
  public function add_index($collection = "", $keys = array(), $options = array()) { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection specified to add index to", 500); 
    } if (emptyempty($keys) || !is_array($keys)) { 
      $this->error("index could not be created to mongodb collection because no keys were specified", 500); 
    } foreach ($keys as $col => $val) { 
      if ($val == -1 || $val === false || strtolower($val) == 'desc') { 
        $keys[$col] = -1; 
      } else { 
        $keys[$col] = 1; 
      } 
    } if ($this->db->{$collection}->ensureindex($keys, $options) == true) { 
      $this->clear(); 
      return($this); 
    } else { 
      $this->error("an error occured when trying to add an index to mongodb collection", 500); 
    } 
  } 
  /**
  *
  * remove_index   *
  *
  * remove an index of the keys in a collection.
  to set values to descending order,
  * you must pass values of either -1, false, 'desc', or 'desc', else they will be
  * set to 1 (asc). *
  * @usage = $this->mongo_db->remove_index($collection, array('first_name' => 'asc', 'last_name' => -1));
  */ 
  public function remove_index($collection = "", $keys = array()) { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection specified to remove index from", 500); 
    } if (emptyempty($keys) || !is_array($keys)) { 
      $this->error("index could not be removed from mongodb collection because no keys were specified", 500); 
    } if ($this->db->{$collection}->deleteindex($keys, $options) == true) { 
      $this->clear(); 
      return($this); 
    } else { 
      $this->error("an error occured when trying to remove an index from mongodb collection", 500); 
    } 
  } 
  /**
  *
  * remove_all_indexes  *
  *
  * remove all indexes from a collection. *
  * @usage = $this->mongo_db->remove_all_index($collection);
  */ 
  public function remove_all_indexes($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection specified to remove all indexes from", 500); 
    } $this->db->{$collection}->deleteindexes(); 
    $this->clear(); 
    return($this); 
  } 
  /**
  *
  * list_indexes   *
  *
  * lists all indexes in a collection. *
  * @usage = $this->mongo_db->list_indexes($collection);
  */ 
  public function list_indexes($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection specified to remove all indexes from", 500); 
    } return($this->db->{$collection}->getindexinfo()); 
  } 
  /**
  *
  * drop collection *
  *
  * removes the specified collection from the database.
  be careful because this
  * can have some very large issues in production!
  */ 
  public function drop_collection($collection = "") { 
    if (emptyempty($collection)) { 
      $this->error("no mongo collection specified to drop from database", 500); 
    } $this->db->{$collection}->drop(); 
    return true; 
  } 
  /**
  *
  * clear  *
  *
  * resets the class variables to default settings
  */ 
  private function clear() { 
    $this->selects = array(); 
    $this->wheres = array(); 
    $this->limit = null; 
    $this->offset = null; 
    $this->sorts = array(); 
  } 
  /**
  *
  * where initializer  *
  *
  * prepares parameters for insertion in $wheres array().
  */ 
  private function where_init($param) { 
    if (!isset($this->wheres[$param])) { 
      $this->wheres[$param] = array(); 
    } 
  } 
  public function error($str, $t) { 
    echo $str; 
    exit; 
  } 
} 
?>

使用范例:

$table_name=trim(strtolower($this->table_name)); 
$this->mongo_db->where($where); 
$order=!emptyempty($order)?array('aid'=>'desc'):array('aid'=>'asc');
//升序降序 
$infos=$this->mongo_db->listinfo($table_name,$order,$page,$pagesize);

希望本文所述对大家的php程序设计有所帮助。


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!