Beispiel #1
0
 /**
  * 构造函数
  * @param dbConfig  数据库配置
  */
 public function __construct($dbConfig)
 {
     $linkfunction = TRUE == $dbConfig['persistent'] ? 'mysql_pconnect' : 'mysql_connect';
     $this->conn = $linkfunction($dbConfig['host'] . ":" . $dbConfig['port'], $dbConfig['login'], $dbConfig['password']) or FeiError("数据库链接错误 : " . mysql_error());
     mysql_select_db($dbConfig['database'], $this->conn) or FeiError("无法找到数据库,请确认数据库名称正确!");
     $this->exec("SET NAMES UTF8");
 }
Beispiel #2
0
 public function __construct()
 {
     if (!function_exists('xcache_set')) {
         FeiError('PHP环境未安装Xcache函数库!');
     }
 }
Beispiel #3
0
 /**
  * 生成单个静态页面
  * @param Feiurl         FeiUrl的参数
  * @param alias_url      生成HTML文件的名称,如果不设置alias_url,将使用年月日生成目录及随机数为文件名的形式生成HTML文件。
  * @param update_mode    更新模式,默认2为同时更新列表及文件
  *                       0是仅更新列表
  *                       1是仅更新文件
  */
 public function make($Feiurl, $alias_url = NULL, $update_mode = 2)
 {
     if (1 == FeiAccess('r', 'Fei_html_making')) {
         $this->Feiurls[] = array($Feiurl, $alias_url);
         return;
     }
     @(list($controller, $action, $args, $anchor) = $Feiurl);
     if ($url_item = FeiHtml::getUrl($controller, $action, $args, $anchor, TRUE)) {
         @(list($baseuri, $realfile) = $url_item);
         $update_mode = 1;
     } else {
         $file_root_name = '' == $GLOBALS['G_Fei']['html']['file_root_name'] ? '' : $GLOBALS['G_Fei']['html']['file_root_name'] . '/';
         if (NULL == $alias_url) {
             $filedir = $file_root_name . date('Y/n/d') . '/';
             $filename = substr(time(), 3, 10) . substr(mt_rand(100000, substr(time(), 3, 10)), 4) . ".html";
         } else {
             $filedir = $file_root_name . dirname($alias_url) . '/';
             $filename = basename($alias_url);
         }
         $baseuri = rtrim(dirname($GLOBALS['G_Fei']['url']["url_path_base"]), '/\\') . "/" . $filedir . $filename;
         $realfile = APP_PATH . "/" . $filedir . $filename;
     }
     if (0 == $update_mode or 2 == $update_mode) {
         FeiHtml::setUrl($Feiurl, $baseuri, $realfile);
     }
     if (1 == $update_mode or 2 == $update_mode) {
         $remoteurl = 'http://' . $_SERVER["SERVER_NAME"] . ':' . $_SERVER['SERVER_PORT'] . '/' . ltrim(FeiUrl($controller, $action, $args, $anchor, TRUE), '/\\');
         $cachedata = file_get_contents($remoteurl);
         if (FALSE === $cachedata) {
             $cachedata = $this->curl_get_file_contents($remoteurl);
             if (FALSE === $cachedata) {
                 FeiError("无法从网络获取页面数据,请检查:<br />1. FeiUrl生成地址是否正确!<a href='{$remoteurl}' target='_blank'>点击这里测试</a>。<br />2. 设置php.ini的allow_url_fopen为On。<br />3. 检查是否防火墙阻止了APACHE/PHP访问网络。<br />4. 建议安装CURL函数库。");
             }
         }
         __mkdirs(dirname($realfile));
         file_put_contents($realfile, $cachedata);
     }
 }
Beispiel #4
0
 /**
  * 魔术函数,实现对控制器扩展类的自动加载
  */
 public function __call($name, $args)
 {
     if (in_array($name, $GLOBALS['G_Fei']["auto_load_controller"])) {
         return FeiClass($name)->__input($args);
     } elseif (!method_exists($this, $name)) {
         FeiError("方法 {$name}未定义!<br />请检查是否控制器类(" . get_class($this) . ")与数据模型类重名?");
     }
 }
Beispiel #5
0
/**
 * FeiClass  类实例化函数  自动载入类定义文件,实例化并返回对象句柄
 * @param class_name    类名称
 * @param args          类初始化时使用的参数,数组形式
 * @param sdir          载入类定义文件的路径,可以是目录+文件名的方式,也可以单独是目录。sdir的值将传入import()进行载入
 * @param force_inst    是否强制重新实例化对象
 */
function FeiClass($class_name, $args = NULL, $sdir = NULL, $force_inst = FALSE)
{
    // 检查类名称是否正确,以保证类定义文件载入的安全性
    if (preg_match('/[^a-z0-9\\-_.]/i', $class_name)) {
        FeiError($class_name . "类名称错误,请检查。");
    }
    // 检查是否该类已经实例化,直接返回已实例对象,避免再次实例化
    if (TRUE != $force_inst) {
        if (isset($GLOBALS['G_Fei']["inst_class"][$class_name])) {
            return $GLOBALS['G_Fei']["inst_class"][$class_name];
        }
    }
    // 如果$sdir不能读取,则测试是否仅路径
    if (NULL != $sdir && !import($sdir) && !import($sdir . '/' . $class_name . '.php')) {
        return FALSE;
    }
    $has_define = FALSE;
    // 检查类定义是否存在
    if (class_exists($class_name, FALSE) || interface_exists($class_name, FALSE)) {
        $has_define = TRUE;
    } else {
        if (TRUE == import($class_name . '.php')) {
            $has_define = TRUE;
        }
    }
    if (FALSE != $has_define) {
        $argString = '';
        $comma = '';
        if (NULL != $args) {
            for ($i = 0; $i < count($args); $i++) {
                $argString .= $comma . "\$args[{$i}]";
                $comma = ', ';
            }
        }
        eval("\$GLOBALS['G_Fei']['inst_class'][\$class_name]= new \$class_name({$argString});");
        return $GLOBALS['G_Fei']["inst_class"][$class_name];
    }
    FeiError($class_name . "类定义不存在,请检查。");
}
Beispiel #6
0
 /**
  * 按规则验证数据
  * @param values    验证值
  */
 private function checkrules($values)
 {
     $this->checkvalues = $values;
     foreach ($this->verifier["rules"] as $rkey => $rval) {
         $inputval = isset($values[$rkey]) ? $values[$rkey] : '';
         foreach ($rval as $rule => $rightval) {
             if (method_exists($this, $rule)) {
                 if (TRUE == $this->{$rule}($inputval, $rightval)) {
                     continue;
                 }
             } elseif (NULL != $this->add_rules && isset($this->add_rules[$rule])) {
                 if (function_exists($this->add_rules[$rule])) {
                     if (TRUE == $this->add_rules[$rule]($inputval, $rightval, $values)) {
                         continue;
                     }
                 } elseif (is_array($this->add_rules[$rule])) {
                     if (TRUE == FeiClass($this->add_rules[$rule][0])->{$this->add_rules[$rule][1]}($inputval, $rightval, $values)) {
                         continue;
                     }
                 }
             } else {
                 FeiError("未知规则:{$rule}");
             }
             $this->messages[$rkey][] = isset($this->verifier["messages"][$rkey][$rule]) ? $this->verifier["messages"][$rkey][$rule] : "{$rule}";
         }
     }
     // 返回FALSE则通过验证,返回数组则未能通过验证,返回的是提示信息。
     return NULL == $this->messages ? FALSE : $this->messages;
 }