PHP无数据库读写文件

修改了一下 https://mkblog.cn/1457/ 使用了单例模式,希望大家喜欢

<?php
/* 
* @link https://mkblog.cn/ 
* @author mengkun 
* @license MIT 
*/  
 
/**
 * PHP 无数据库配置文件增删查改模块
 * !注:本模块未对高并发进行优化兼容,如果数据量或并发过大,还是用数据库比较好 :)
 *
 * 使用方法:
 *
 * 一、引用本模块
 *
 *  require_once 'Config.class.php';
 *
 *
 * 二、初始化
 *
 *  $C = Config::getInstance('配置文件名'); // 配置文件目录以及文件名
 *
 *
 * 三、内置方法
 *
 *  - 存储(如果已存在则是修改)单条数据
 *
 *      $C->set('sitename', '独木魂博客');
 *
 *
 *  - 存储(如果已存在则是修改)一个数组
 *
 *      $C->set('user', array('name'=>'peter', 'age'=>12));
 *
 *
 *  - 读取一条数据
 *
 *      $C->get('user', '默认值');
 *
 *
 *  - 删除一条数据
 *
 *      $C->delete('user');
 *
 *
 *  - 保存对数据的修改
 *
 *      $C->save();     // 保存成功返回 true,否则返回失败原因
 *
 *
 * * 注:为了避免频繁地写文件,以上所有对数据的操作都必须调用一次 $C->save(); 才会真正被保存到配置文件中
 *       建议将所有的数据操作都执行完后再进行存储操作。
 *
 *
 * * 附:精简写法
 *
 *      $C->set('sitename', '孟坤博客')->save();
 */
 
class Config {
	private $data;
	private $file;
	/**
	 * @var Object 保存类实例的静态成员变量
	 */
	private static $_instance;
 
	/**
	 * 构造函数
	 * @param $file 存储数据文件
	 * @return
	 */
	private function __construct($file) {
		$file = $file.'.php';
		if (!is_dir(dirname($file))) {
			//第三个参数是“true”表示能创建多级目录,iconv 防止中文目录乱码
			$res = mkdir(iconv("UTF-8", "GBK", dirname($file)),0777,true);
		}
		$this->file = $file;
		$this->data = $this->read($file);
	}
 
	/**
	 * 读取配置文件
	 * @param $file 要读取的数据文件
	 * @return 读取到的全部数据信息
	 */
	public function read($file) {
		if (!file_exists($file)) return array();
		$data = include $file;
		if (is_null($data)) return array();
		return $data;
	}
 
	/**
	 * 获取指定项的值
	 * @param $key 要获取的项名
	 * @param $default 默认值
	 * @return data
	 */
	public function get($key = null, $default = '') {
		if (is_null($key)) return $this->data;
		// 取全部数据
		if (isset($this->data[$key])) return $this->data[$key];
		return $default;
	}
 
	/**
	 * 设置指定项的值
	 * @param $key 要设置的项名
	 * @param $value 值
	 * @return null
	 */
	public function set($key, $value) {
		if (is_string($key)) {
			// 更新单条数据
			$this->data[$key] = $value;
		} else if (is_array($key)) {
			// 更新多条数据
			foreach ($this->data as $k => $v) {
				if ($v[$key[0]] == $key[1]) {
					$this->data[$k][$value[0]] = $value[1];
				}
			}
		}
 
		return $this;
	}
 
	/**
	 * 删除并清空指定项
	 * @param $key 删除项名
	 * @return null
	 */
	public function delete($key) {
		unset($this->data[$key]);
		return $this;
	}
 
	/**
	 * 保存配置文件
	 * @param $file 要保存的数据文件
	 * @return true-成功 其它-保存失败原因
	 */
	public function save() {
 
		$data = $this->data;
		// 含有二进制或非utf8字符串对应检测
		if (is_null($data)) return '数据文件有误';
		return file_put_contents($this->file, '<?php return '.var_export($data, true).';');
	}
 
	/**
	 * @return Object 单例方法,用于访问实例的公共的静态方法
	 */
	public static function getInstance($file) {
		if (empty(self::$_instance[$file])) 
                    self::$_instance[$file] = new self($file);
		return self::$_instance[$file];
	}
}

 

版权声明:
作者:phpcn
链接:https://blog.i-book.ml/12/
来源:小小云博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭