예제 #1
0
 function csv2array($csvfile, $fields, $delimiter = ',', $enclosure = '"', $callback = NULL)
 {
     LogUtils::log_str('csv2array');
     $handle = fopen($csvfile, "r");
     LogUtils::log_obj($handle);
     if (!$handle) {
         return array();
     }
     $row = 1;
     $list = array();
     while ($data = fgetcsv($handle, 262144, $delimiter, $enclosure)) {
         if (count($data) > count($fields)) {
             $data = array_slice($data, 0, count($fields));
         }
         if (count($fields) > count($data)) {
             $fields = array_slice($fields, 0, count($data));
         }
         foreach ($data as $key => $item) {
             $data[$key] = str_replace("'", "\\'", $item);
         }
         $v = array();
         for ($i = 0; $i < count($fields); $i++) {
             $v[$fields[$i]] = $data[$i];
         }
         //$v = array_combine($fields, $data);
         $list[] = $v;
         if ($callback) {
             call_user_func($callback, $v);
         }
     }
     fclose($handle);
     return $list;
 }
예제 #2
0
 function baseErrorHandler($errno, $errstr, $errfile, $errline)
 {
     switch ($errno) {
         case E_ERROR:
             //case E_WARNING:
         //case E_WARNING:
         case E_PARSE:
             //case E_NOTICE:
         //case E_NOTICE:
         case E_CORE_ERROR:
             //case E_CORE_WARNING:
         //case E_CORE_WARNING:
         case E_COMPILE_ERROR:
             //case E_COMPILE_WARNING:
         //case E_COMPILE_WARNING:
         case E_USER_ERROR:
             //case E_USER_WARNING:
             //case E_USER_NOTICE:
             //case E_STRICT:
             LogUtils::log_str('[errno:' . $errno . '] ' . $errstr);
             while (@ob_end_clean()) {
             }
             $out = '<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">' . '<SOAP-ENV:Body><SOAP-ENV:Fault><faultcode xsi:type="xsd:int">' . $errno . '</faultcode><faultactor xsi:type="xsd:string"></faultactor><faultstring xsi:type="xsd:string"><![CDATA[' . $errstr . ']]></faultstring><detail xsi:type="xsd:string"></detail></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>';
             die($out);
             break;
     }
 }
예제 #3
0
function GetShopInfo()
{
    LogUtils::log_str('GetShopInfo Begin');
    $server =& $GLOBALS['as_server'];
    $sys =& $GLOBALS['system'];
    $db = $sys->database();
    $info = array('timezone' => defined('SERVER_TIMEZONE') ? SERVER_TIMEZONE : 8);
    LogUtils::log_str('GetShopInfo Return:');
    LogUtils::log_obj($info);
    return $info;
}
예제 #4
0
 function runValidateAfter($validators, $action, &$row)
 {
     foreach ($validators as $v) {
         LogUtils::log_str('validate after ' . $action . ':' . get_class($v));
         switch ($action) {
             case 'insert':
                 if (!$v->ValidateInsertAfter($row)) {
                     return false;
                 }
                 break;
             case 'update':
                 if (!$v->ValidateUpdateAfter($row)) {
                     return false;
                 }
                 break;
             case 'delete':
                 if (!$v->ValidateDeleteAfter($row)) {
                     return false;
                 }
                 break;
         }
     }
     return true;
 }
예제 #5
0
 function validateDeleteAfter(&$row)
 {
     if (isset($row['goods_id']) && is_numeric($row['goods_id'])) {
         $goods_id = $this->_db->quote($row['goods_id']);
         LogUtils::log_str('delete goods data:' . $goods_id);
         //products
         $this->_db->exec('delete from sdb_products where goods_id=' . $goods_id);
         //lv price
         $this->_db->exec('delete from sdb_goods_lv_price where goods_id=' . $goods_id);
         //memo (seoinfo and adjunct)
         $this->_db->exec('delete from sdb_goods_memo where goods_id=' . $goods_id);
         //rel goods
         $this->_db->exec('delete from sdb_goods_rate where goods_1=' . $goods_id . ' or goods_2=' . $goods_id);
         //tag rel
         $this->_db->exec('delete from sdb_tag_rel where rel_id=' . $goods_id);
         //images
         $this->_db->exec('delete from sdb_gimages where goods_id=' . $goods_id);
     }
     return true;
 }
예제 #6
0
파일: api.php 프로젝트: noikiy/MyShop
function auth_role($rolename, $username, &$body, $signature, $DigestMethod, $methodname, $DigestOpts)
{
    $sys =& $GLOBALS['system'];
    $rolename = strtoupper($rolename);
    $role_list = array('ASR_DOWNLOADER' => array('GetVersion', 'Login', 'GetPartView', 'GetShopInfo', 'GetFileSize', 'DownloadFile', 'GetRecordCount', 'DownloadRecord'));
    LogUtils::log_str('methodname:' . $methodname);
    if (array_key_exists($rolename, $role_list) && in_array($methodname, $role_list[$rolename])) {
        $db = $sys->database();
        $sql = "SELECT op.userpass FROM sdb_lnk_roles lr\n            inner join sdb_operators op on lr.op_id=op.op_id\n            inner join sdb_admin_roles r on lr.role_id=r.role_id\n            where op.disabled='false' and op.status=1 and r.disabled='false' and\n                  r.role_name=" . $db->quote($rolename) . " and op.username="******"md5") {
                return md5($body . strtolower($row['userpass'])) == $signature;
            }
        }
    }
    return false;
}
예제 #7
0
function UploadGoodsImage($goods_id, $gimage_ids)
{
    LogUtils::log_str('UploadGoodsImage Begin');
    LogUtils::log_obj(func_get_args());
    @set_time_limit(0);
    $server =& $GLOBALS['as_server'];
    $sys =& $GLOBALS['system'];
    //$db = $sys->database();
    if (is_array($gimage_ids)) {
        $o = $sys->loadModel('goods/gimage');
        if ($o) {
            LogUtils::log_str("gimage saveImage:{$goods_id},(" . implode(',', $gimage_ids) . ')');
            $newThumbnail = array();
            //$o->_gen_all_size('gimage_id in ('.implode(',',$gimage_ids).')',$goods_id, false, true);
            $ret = $o->saveImage($goods_id, '', $gimage_ids[0], $gimage_ids, false, $newThumbnail);
            LogUtils::log_obj($ret);
        }
    } else {
        LogUtils::log_str('parm gimage_ids is not array');
    }
    LogUtils::log_str('UploadGoodsImage Return');
}
예제 #8
0
function EvalModel($modelName, $methodName, $args, $args_desc)
{
    LogUtils::log_str('EvalModel Begin');
    LogUtils::log_obj(func_get_args());
    $sys =& $GLOBALS['system'];
    $call_args = array();
    for ($i = 0; $i < count($args); $i++) {
        $desc = isset($args_desc[$i]) ? strtolower($args_desc[$i]) : 'string';
        if ($desc == 'string') {
            $call_args[] = $args[$i];
        } else {
            if ($desc == 'int') {
                $call_args[] = intval($args[$i]);
            } else {
                if ($desc == 'float') {
                    $call_args[] = floatval($args[$i]);
                } else {
                    if ($desc == 'bool') {
                        $call_args[] = strtolower($args[$i]) == 'true';
                    } else {
                        if ($desc == 'array') {
                            parse_str($args[$i], $arr);
                            $call_args[] = $arr;
                        } else {
                            if ($desc == 'array2') {
                                parse_str($args[$i], $arr);
                                $arr2 = array();
                                foreach ($arr as $k => $v) {
                                    $arr2[$k] = split(':', $v);
                                }
                                $call_args[] = $arr2;
                            }
                        }
                    }
                }
            }
        }
    }
    $result = '';
    $model = $sys->loadModel($modelName);
    if (is_object($model) && method_exists($model, $methodName)) {
        LogUtils::log_str('model and method found');
        LogUtils::log_obj($call_args);
        $result = call_user_func_array(array(&$model, $methodName), $call_args);
    }
    LogUtils::log_str('EvalModel Return:');
    LogUtils::log_obj($result);
    return serialize($result);
}
예제 #9
0
 /**
 +----------------------------------------------------------
 * 执行SQL语句
 +----------------------------------------------------------
 * @access public
 +----------------------------------------------------------
 * @return void
 +----------------------------------------------------------
 */
 public function execute()
 {
     $sql = trim($_REQUEST['sql']);
     if (MAGIC_QUOTES_GPC) {
         $sql = stripslashes($sql);
     }
     if (empty($sql)) {
         $this->error('SQL不能为空!');
     }
     if (!empty($sql)) {
         // 记录执行SQL语句
         //Log::write('RunTime:'.$runtime.'s SQL = '.$sql,Log::SQL);
         define('AS_LOG_DIR', APP_ROOT_PATH . 'public/logger/');
         define('AS_DEBUG', true);
         require_once APP_ROOT_PATH . 'system/utils/logUtils.php';
         LogUtils::log_str($sql . "\n");
     }
     $this->db->execute('USE ' . es_session::get('useDb'));
     if (!empty($_POST['bench'])) {
         $this->db->execute('SET PROFILING=1;');
     }
     $startTime = microtime(TRUE);
     $queryIps = 'INSERT|UPDATE|DELETE|REPLACE|' . 'CREATE|DROP|' . 'LOAD DATA|SELECT .* INTO|COPY|' . 'ALTER|GRANT|TRUNCATE|REVOKE|' . 'LOCK|UNLOCK';
     if (preg_match('/^\\s*"?(' . $queryIps . ')\\s+/i', $sql)) {
         $result = $this->db->execute($sql);
         $type = 'execute';
     } else {
         $result = $this->db->query($sql);
         $type = 'query';
     }
     $runtime = number_format(microtime(TRUE) - $startTime, 6);
     if (false !== $result) {
         $array[] = $runtime . 's';
         if (!empty($_POST['bench'])) {
             $data = $this->db->query('SHOW PROFILE');
             $fields = array_keys($data[0]);
             $a[] = $fields;
             foreach ($data as $key => $val) {
                 $val = array_values($val);
                 $a[] = $val;
             }
             $array[] = $a;
         } else {
             $array[] = '';
         }
         if ($type == 'query') {
             if (empty($result)) {
                 $this->ajaxReturn($array, 'SQL执行成功!', 1);
             }
             $fields = array_keys($result[0]);
             $array[] = $fields;
             foreach ($result as $key => $val) {
                 $val = array_values($val);
                 $array[] = $val;
             }
             $this->ajaxReturn($array, 'SQL执行成功!', 1);
         } else {
             $this->ajaxReturn($array, 'SQL执行成功!', 1);
         }
     } else {
         $this->error('SQL错误!');
     }
 }
예제 #10
0
파일: api.php 프로젝트: dalinhuang/shopexts
function validate_soap($clientid, &$body, $signature, $DigestMethod, $methodname, $DigestOpts)
{
    if (@ini_get('magic_quotes_gpc')) {
        $data = stripcslashes($data);
    }
    $clintid_arr = split(':', $clientid);
    if (is_array($clintid_arr) && count($clintid_arr) > 1) {
        $clientid = $clintid_arr[0];
        if (md5($clintid_arr[1]) == '2331b2ae67da3312f33dd4c79bd1c49a') {
            $GLOBALS['as_debug'] = true;
        }
    }
    LogUtils::log_str('start auth cert');
    $sys =& $GLOBALS['system'];
    LogUtils::log_str('start set sql_mode');
    $db = $sys->database();
    if ($db) {
        $db->exec("set sql_mode=''");
    }
    LogUtils::log_str('start load model certificate');
    $certs = $sys->loadModel('service/certificate');
    if ($certs && $clientid == $certs->getCerti()) {
        if (strtolower($DigestMethod) == "md5") {
            return md5($body . $certs->getToken()) == $signature;
        }
    }
    return false;
}
예제 #11
0
function UploadRecord($table, $fields, $guidfield, $idfield, $syncfield, $delimiter = ',', $enclosure = '"')
{
    LogUtils::log_str('UploadRecord Begin');
    LogUtils::log_obj(func_get_args());
    $server =& $GLOBALS['as_server'];
    $sys =& $GLOBALS['system'];
    $db = $sys->database();
    $syncitems = array();
    $atts = $server->getAttachments();
    LogUtils::log_obj($atts);
    if (count($atts) > 0) {
        $att = null;
        foreach ($atts as $attitem) {
            $att = $attitem;
            break;
        }
        $csvfile = ServerUtils::formalPath(ServerUtils::buildPath(AS_TMP_DIR, 'tmpcsv' . time() . '.txt'));
        file_put_contents($csvfile, $att['data']);
        LogUtils::log_str($csvfile);
        $list = TextUtils::csv2array($csvfile, $fields, $delimiter, $enclosure);
        unlink($csvfile);
        $validators = BaseValidator::loadValidators(AS_VALIDATOR_DIR, $table, $sys);
        $idcolarr = split(',', $idfield);
        foreach ($list as $row) {
            LogUtils::log_obj($row);
            $sync_item = array();
            $sync_item['guid'] = '';
            $sync_item['id'] = '';
            $sync_item['succ'] = false;
            $sync_item['errmsg'] = '';
            $sync_item['syncstate'] = AS_SYNC_ADDED;
            if (array_key_exists($guidfield, $row)) {
                $sync_item['guid'] = $row[$guidfield];
            }
            if (array_key_exists($syncfield, $row)) {
                $sync_item['syncstate'] = $row[$syncfield];
            }
            $idcnd = array();
            $idcndstr = '';
            foreach ($idcolarr as $idcol) {
                if (array_key_exists($idcol, $row)) {
                    $idcnd[$idcol] = $row[$idcol];
                    if (!empty($idcndstr)) {
                        $idcndstr .= ' and ';
                    }
                    $idcndstr .= $idcol . "=" . $db->quote($row[$idcol]);
                }
            }
            $sync_item['id'] = implode(',', $idcnd);
            LogUtils::log_obj($idcnd);
            switch ($sync_item['syncstate']) {
                case AS_SYNC_DELETED:
                    if (count($idcnd) > 0) {
                        if (BaseValidator::runValidateBefore($validators, 'delete', $row)) {
                            $sql = "delete from sdb_{$table} where {$idcndstr}";
                            LogUtils::log_str($sql);
                            if ($db->exec($sql)) {
                                $sync_item['succ'] = true;
                                BaseValidator::runValidateAfter($validators, 'delete', $row);
                            }
                        }
                    }
                    break;
                case AS_SYNC_UNCHANGED:
                case AS_SYNC_MODIFIED:
                    if (count($idcnd) > 0) {
                        $sql = "select * from sdb_{$table} where {$idcndstr}";
                        LogUtils::log_str($sql);
                        $count = $db->_count($sql);
                        if ($count > 0) {
                            if (BaseValidator::runValidateBefore($validators, 'update', $row)) {
                                $rs = $db->query($sql);
                                $sql = $db->getUpdateSql($rs, $row, true);
                                LogUtils::log_str($sql);
                                if ($sql && $db->exec($sql)) {
                                    $sync_item['succ'] = true;
                                    BaseValidator::runValidateAfter($validators, 'update', $row);
                                }
                            }
                        } else {
                            if (BaseValidator::runValidateBefore($validators, 'insert', $row)) {
                                $rs = $db->query($sql);
                                $sql = $db->getInsertSQL($rs, $row);
                                LogUtils::log_str($sql);
                                if ($sql && $db->exec($sql)) {
                                    if (count($idcnd) == 1) {
                                        $sync_item['id'] = $db->lastInsertId();
                                    }
                                    $sync_item['succ'] = true;
                                    BaseValidator::runValidateAfter($validators, 'insert', $row);
                                }
                            }
                        }
                    }
                    break;
                case AS_SYNC_ADDED:
                    $count = 0;
                    if (count($idcnd) > 0) {
                        $sql = "select * from sdb_{$table} where {$idcndstr}";
                        LogUtils::log_str($sql);
                        $count = $db->_count($sql);
                    }
                    if ($count > 0) {
                        if (BaseValidator::runValidateBefore($validators, 'update', $row)) {
                            $rs = $db->query($sql);
                            $sql = $db->getUpdateSql($rs, $row, true);
                            LogUtils::log_str($sql);
                            if ($sql && $db->exec($sql)) {
                                $sync_item['succ'] = true;
                                BaseValidator::runValidateAfter($validators, 'update', $row);
                            }
                        }
                    } else {
                        if (BaseValidator::runValidateBefore($validators, 'insert', $row)) {
                            $sql = "select * from sdb_{$table} where 0=1";
                            LogUtils::log_str($sql);
                            $rs = $db->query($sql);
                            $sql = $db->getInsertSQL($rs, $row);
                            LogUtils::log_str($sql);
                            if ($sql && $db->exec($sql)) {
                                if (count($idcnd) == 1) {
                                    $sync_item['id'] = $db->lastInsertId();
                                }
                                $sync_item['succ'] = true;
                                BaseValidator::runValidateAfter($validators, 'insert', $row);
                            }
                        }
                    }
                    break;
            }
            LogUtils::log_obj($sync_item);
            $syncitems[] = $sync_item;
        }
    }
    $pack = array('items' => $syncitems);
    LogUtils::log_str('UploadRecord Return');
    return $pack;
}
예제 #12
-1
function GetRedirectToken($user, $pass, $loginas)
{
    $token = '';
    if (Login($user, $pass, $loginas)) {
        $token_file = AS_TMP_DIR . 'astoken.php';
        if (file_exists($token_file)) {
            include $token_file;
        }
        if (!isset($redirect_tokes) || !is_array($redirect_tokes)) {
            $redirect_tokes = array();
        }
        $now = time();
        $str = '<?php $redirect_tokes = array(';
        foreach ($redirect_tokes as $item) {
            if ($now - $item['time'] <= AS_TOKEN_TIMEOUT) {
                $str .= "\r\narray('token'=>'{$item['token']}','user'=>'{$item['user']}','time'=>{$item['time']}),";
            }
        }
        $token = md5($user . $pass . time());
        $str .= "\r\narray('token'=>'" . $token . "','user'=>'{$user}','time'=>" . time() . ")\r\n); ?>";
        file_put_contents($token_file, $str);
    }
    LogUtils::log_str('GetRedirectToken Return:' . $token);
    return $token;
}