Skip to content

Commit

Permalink
优化对文件写入的处理
Browse files Browse the repository at this point in the history
  • Loading branch information
breath-co2 committed May 26, 2013
1 parent 169802d commit 20b4904
Show file tree
Hide file tree
Showing 10 changed files with 344 additions and 292 deletions.
150 changes: 79 additions & 71 deletions config.new.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,39 @@
);


/**
* 加载库配置
*
* @var array
*/
$config['libraries'] = array
(
// 默认会自动加载的类库
'autoload' => array
(

),

// 命令行下会加载的类库
'cli' => array
(

),

// 调试环境下会加载的类库
'debug' => array
(
'com.myqee.develop',
),

// 后台会加载的类库
'admin' => array
(
'com.myqee.administration',
),
);


/**
* 静态资源的URL,可以是http://开头,例如 http://assets.test.com/
*
Expand All @@ -59,8 +92,9 @@
* 用途说明:
* 在团队成员开发时,个人的配置和服务器配置可能会有所不同,所以每个人希望有一个自己独有的配置文件可覆盖默认配置,通过runtime_config设置可轻松读取不同的配置
* 比如,在服务器上设置 `$config['runtime_config'] = 'server';` 在本地开发时设置 `$config['runtime_config'] = 'dev';`
* 那么,服务器上除了会读取 `config.php` 还会再读取 `config.server.php` 的配置文件,而在开发环境上则读取 `config.dev.php` 配置文件
* 那么,服务器上除了会读取 `config.php` 还会再读取 `config.server.runtime.php` 的配置文件,而在开发环境上则读取 `config.dev.runtime.php` 配置文件
*
* !!! 只会读取根目录、团队类库和项目中的 .runtime.php,不支持类库(含Core)中 .runtime.php
* !!! V2中 `$config['debug_config'] = false;` 参数已废弃,可用次参数设为debug实现类似功能
*
* @var string
Expand All @@ -85,9 +119,9 @@


/**
* 默认打开开发调试环境的关键字
* 默认打开开发调试环境的关键字,推荐在本地开发时开启此功能
*
* !!! 开发时使用Firefox+FireBug将可看到程序执行的各项debug数据,强烈推荐在本地开发时开启此功能,方便开发。但注意:生产环境中绝不能在php.ini设置
* !!! 开发时使用Firefox+FireBug将可查看程序执行的各项debug数据,方便开发。但注意:生产环境中不要开启
*
* 如果值为 `myqee.debug` 则可在php.ini中加入:
*
Expand Down Expand Up @@ -125,50 +159,57 @@
/**
* Data文件、Log、文件缓存等文件写入模式
*
* 参数 | 描述
* -------------------------|--------------------------------------------------------------------
* normal | 正常的文件写入,请确保相应目录有写入权限
* disable | 禁用所有写入并丢弃内容,可用于SAE,BAE等程序目录不允许写入的安全级别高的环境,安全级别高
* db://for_file/filetable | 用于目录不能写入内容又不希望丢弃数据的情况,系统自动转为写入数据库,将会写入 `$db = new Database('for_file');` 表名称 `filetable` 中
* cache://for_file/prefix_ | 同上,将会写入 `$db = new Cache('for_file');` 缓存前缀为 `prefix_`
* 参数 | 描述
* ---------------------------|--------------------------------------------------------------------
* normal | 正常的文件写入,请确保相应目录有写入权限
* disable | 禁用所有写入并丢弃内容,可用于SAE,BAE等程序目录不允许写入的安全级别高的环境,安全级别高
* db://for_file/filetable | 用于目录不能写入内容又不希望丢弃数据的情况,系统自动转为写入数据库,将会写入 `$db = new Database('for_file');` 表名称 `filetable` 中
* cache://for_file/prefix_ | 同上,将会使用缓存对象写入 `$cache = new Cache('for_file');` 缓存前缀为 `prefix_`
*
* @string
*/
$config['file_write_mode'] = 'normal';


/**
* 关闭错误页面记录错误数据
*
* @boolean
*/
$config['error500']['close'] = false;


/**
* 错误页面数据记录方式
*
* 参数 | 描述
* ---------|-----
* file | 文件(默认方式)
* database | 数据库
* cache | 缓存保存
*
* @string
*/
$config['error500']['save_type'] = 'file';


/**
* 错误页面数据记录方式对应配置
* 500错误页面相关设置
*
* 例如save_type为database,则此参数为数据库的配置名
* 如果save_type为cache,则此参数为驱动的配置名
*
* @string
* @var array
*/
$config['error500']['type_config'] = 'default';

$config['error500'] = array
(
/**
* 关闭错误页面记录错误数据功能
*
* true - 关闭.关闭后所有的500错误页面只在页面上输出简单错误数据,错误信息不记录在服务器上
*
* @boolean
*/
'close' => false,

/**
* 错误页面数据记录方式
*
* 参数 | 描述
* ---------|-----
* file | 文件(默认方式)
* database | 数据库
* cache | 缓存保存
*
* @string
*/
'save_type' => 'file',

/**
* 错误页面数据记录方式对应配置
*
* 例如save_type为database,则此参数为数据库的配置名
* 如果save_type为cache,则此参数为驱动的配置名
*
* @string
*/
'type_config' => 'default',
);

/**
* 错误等级
Expand Down Expand Up @@ -255,39 +296,6 @@
$config['asset_allow_suffix'] = 'js|css|jpg|jpeg|png|gif|bmp|pdf|html|htm|mp4|swf';


/**
* 加载库配置
*
* @var array
*/
$config['libraries'] = array
(
// 默认会自动加载的类库
'autoload' => array
(

),

// 命令行下会加载的类库
'cli' => array
(

),

// 调试环境下会加载的类库
'debug' => array
(
'com.myqee.develop',
),

// 后台会加载的类库
'admin' => array
(
'com.myqee.administration',
),
);


/**
* nodejs 执行文件默认路径
* 此功能在devassets等处理css时用到,通常不用改,除非你的node安装目录不是默认目录
Expand Down
109 changes: 35 additions & 74 deletions core/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ public static function setup($auto_execute = true)

if (self::$core_config['runtime_config'])
{
$runtime_file = DIR_SYSTEM .'config.'. self::$core_config['runtime_config'] . EXT;
$runtime_file = DIR_SYSTEM .'config.'. self::$core_config['runtime_config'] .'.runtime'. EXT;

# 读取配置
if (is_file($runtime_file))
Expand Down Expand Up @@ -624,7 +624,7 @@ public static function auto_load($class_name)
$is_alias = true;
$new_class_name = $class_name_array[1];
}
else if (preg_match('#^library_((?:[a-z0-9]+)_(?:[a-z0-9]+))_([a-z0-9_]+)$#', $class_name,$m))
else if (preg_match('#^library_((?:[a-z0-9]+)_(?:[a-z0-9]+))_([a-z0-9_]+)$#', $class_name, $m))
{
$ns = 'library/' . str_replace('_', '/', $m[1]);
$new_class_name = $m[2];
Expand Down Expand Up @@ -686,7 +686,7 @@ public static function auto_load($class_name)
if (!$is_alias)
{
# 在include path中找
foreach (array('project','team_library') as $type)
foreach (array('project', 'team_library') as $type)
{
foreach (self::$include_path[$type] as $path)
{
Expand Down Expand Up @@ -845,17 +845,6 @@ public static function find_file($dir, $file, $ext=null, $auto_require=false)
{
foreach ($the_path as $path)
{
if ($dir=='config' && self::$core_config['runtime_config'])
{
# config 在 debug开启的情况下读取debug
$tmpfile_debug = $path . $dir . DS . $file . '.' . self::$core_config['runtime_config'] . $the_ext;

if (is_file($tmpfile_debug))
{
$found_files[] = $tmpfile_debug;
}
}

$tmpfile = $path . $dir . DS . $file . $the_ext;

if (is_file($tmpfile))
Expand Down Expand Up @@ -925,15 +914,6 @@ public static function import_library($library_name)
$config_files[] = $config_file;
}

if (self::$core_config['runtime_config'])
{
$runtime_config_file = $set[1] .'config.'. self::$core_config['runtime_config'] . EXT;
if (is_file($runtime_config_file))
{
$config_files[] = $runtime_config_file;
}
}

$load_num++;

if (IS_DEBUG && class_exists('Core', false) && class_exists('Debug', false))Core::debug()->info('import a new library: '.Core::debug_path($lib));
Expand Down Expand Up @@ -1079,21 +1059,16 @@ protected static function reload_all_libraries()
# 处理 library 的config
$config_files = array();

# 反向排序,从最后一个开始导入
$include_path = array_reverse(self::include_path());

foreach ($include_path as $path)
{
$config_file = $path . 'config' . EXT;

if (is_file($config_file))
{
$config_files[] = $config_file;
}
}
self::get_config_file_by_path($config_files, self::$include_path['project'], true );
self::get_config_file_by_path($config_files, self::$include_path['team_library'], true );
self::get_config_file_by_path($config_files, self::$include_path['library'], false);
self::get_config_file_by_path($config_files, self::$include_path['core'], false);

if ($config_files)
{
# 反向排序,从最后一个开始导入
$config_files = array_reverse($config_files);

# 导入config
self::$config = self::$core_config;

Expand All @@ -1106,6 +1081,29 @@ protected static function reload_all_libraries()
}
}

protected static function get_config_file_by_path(&$config_files, $paths, $runtime = false)
{
foreach ($paths as $path)
{
$config_file = $path . 'config' . EXT;

if (is_file($config_file))
{
$config_files[] = $config_file;
}

if ($runtime && self::$core_config['runtime_config'])
{
$config_file = $path . 'config.'. self::$core_config['runtime_config'] .'.runtime'. EXT;

if (is_file($config_file))
{
$config_files[] = $config_file;
}
}
}
}

/**
* 根据URL初始化
*/
Expand Down Expand Up @@ -1317,11 +1315,10 @@ private static function _is_online_debug()
}

if (!isset($_COOKIE['_debug_open'])) return false;
if (!isset(self::$core_config['debug_open_password'])) return false;
if (!is_array( self::$core_config['debug_open_password'])) self::$core_config['debug_open_password'] = array( (string) self::$core_config['debug_open_password'] );
if (!isset(self::$core_config['debug_open_password']) || !is_array(self::$core_config['debug_open_password'])) return false;
foreach (self::$core_config['debug_open_password'] as $username => $password)
{
if ($_COOKIE['_debug_open'] == self::get_debug_hash( $username , $password ))
if ($_COOKIE['_debug_open'] == self::get_debug_hash($username, $password))
{
return true;
}
Expand Down Expand Up @@ -1369,40 +1366,4 @@ private static function _get_pathinfo(& $url)

return false;
}

/**
* 检查给定的pathinfo是否属于给的的项目内的URL
*
* @param string $u 项目的URL路径
* @param string $pathinfo 给定的Pathinfo
* @return boolean
*/
private static function _check_is_this_url($u, &$pathinfo)
{
if ($u=='/')
{
return true;
}

$u = rtrim($u, '/');

if (strpos($u, '://'))
{
$tmppath = self::protocol() . $_SERVER["HTTP_HOST"] . '/' . ltrim($pathinfo, '/');
}
else
{
$tmppath = $pathinfo;
}
$len = strlen($u);
if ($len > 0 && substr($tmppath, 0, $len) == $u)
{
$pathinfo = substr($tmppath, $len);
return true;
}
else
{
return false;
}
}
}
Loading

0 comments on commit 20b4904

Please sign in to comment.