/** * * @param string $logFileName 日志文件名 */ function __construct($logFileName = null) { // 取得云平台 日志模块 $this->cloudEngineLog = CloudHelper::getCloudModule(CloudHelper::CLOUD_MODULE_Log); // 初始化日志引擎 $this->cloudEngineLog->initLog($logFileName); }
/** * 构造函数 * * 一个配置的简单例子 * * $config = array( * "savePath" => $dataPathRoot . '/upload/image', * "pathFix" => $dataPathRoot, * 'urlPrefix' => $dataUrlPrefix, * "maxSize" => 1000, //单位KB * "allowFiles" => array(".gif", ".png", ".jpg", ".jpeg") * ); * * @param string $fileField 表单名称 * @param array $config 配置项 * @param bool $base64 是否解析base64编码,可省略。若开启,则$fileField代表的是base64编码的字符串表单名 */ public function __construct($fileField, $config, $base64 = false) { // 取得云引擎的 Storage 模块 $this->cloudStorage = CloudHelper::getCloudModule(CloudHelper::CLOUD_MODULE_STORAGE); $this->fileField = $fileField; $this->config = $config; $this->stateInfo = $this->stateMap[0]; $this->upFile($base64); }
/** * 取得数据库引擎,如果数据库引擎没有初始化,我们这里会做初始化 */ public static function getDbEngine() { if (null == static::$dbEngine) { global $f3; // 初始化全站数据库 static::$tablePrefix = $f3->get('sysConfig[db_table_prefix]'); // 获得云平台的数据库引擎 $cloudModuleDb = CloudHelper::getCloudModule(CloudHelper::CLOUD_MODULE_DB); static::$dbEngine = $cloudModuleDb->getDb(); } return static::$dbEngine; }
if (!defined('BZF_PHP_VERSION_REQUIRE')) { die('illegal call, please call index.php'); } define('INSTALL_PATH', dirname(__FILE__)); define('INSTALL_DIR', basename(INSTALL_PATH)); // 包含整个系统的初始化 require_once INSTALL_PATH . '/../protected/bootstrap.php'; // ---------------------------------------- 1. 设置系统运行环境 -------------------------------------- // 设置工作时区 if ($f3->get('sysConfig[time_zone]')) { date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 设置网站唯一的 key,防止通用模块之间的冲突 RouteHelper::$uniqueKey = 'BZFRouteHelper'; // ------------ 2. 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 ------------ CloudHelper::initCloudEnv(PluginHelper::SYSTEM_INSTALL); // RUNTIME_PATH 必须要有读写权限 @file_put_contents(RUNTIME_PATH . '/install.write', 'install.write'); if ('install.write' != @file_get_contents(RUNTIME_PATH . '/install.write')) { die('错误:[' . RUNTIME_PATH . ']必须有读写权限'); } unlink(RUNTIME_PATH . '/install.write'); // ---------------------------------------- 3. 开启系统日志 -------------------------------------- // 设置一个 fileLogger 方便查看所有的日志输出 $fileLogger = new \Core\Log\File('install.log'); $logger->addLogger($fileLogger); unset($fileLogger); /* * **************** 如果是调试模式,在这里设置调试 ************************ */ if ($f3->get('DEBUG')) { // 调试模式,关闭缓存 $f3->set('CACHE', false);
/** * 从网络抓取图片进入相册 * * @param $f3 */ public function Fetch($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_post'); // 参数验证 $validator = new Validator($f3->get('POST')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); $imageUrl = $validator->required('图片地址不能为空')->validate('imageUrl'); if (!$this->validate($validator)) { goto out_fail; } // 抓取图片,伪装成浏览器防止被某些服务器阻止 $webInstance = \Web::instance(); $webInstance->engine('curl'); $request = $webInstance->request($imageUrl, array('user_agent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)')); if (!$request || isset($request['http_code']) && 200 != $request['http_code']) { $this->addFlashMessage('抓取失败,请检查你的抓取地址'); goto out; } // 把图片保存到 Storage 中 $cloudStorage = CloudHelper::getCloudModule(CloudHelper::CLOUD_MODULE_STORAGE); // 图片文件先保存到临时文件中 $tempSrcFilePath = $cloudStorage->getTempFilePath(); file_put_contents($tempSrcFilePath, $request['body']); // 上传目录 $dataPathRoot = $f3->get('sysConfig[data_path_root]'); $saveFilePathRelative = 'upload/image/' . date("Y/m/d") . '/' . date("YmdHis") . '_' . rand(1, 10000) . strtolower(strrchr($imageUrl, '.')); // 文件上传到 Storage if (!$cloudStorage->moveFileToStorage($dataPathRoot, $saveFilePathRelative, $tempSrcFilePath)) { $this->addFlashMessage('保存文件到存储失败,失败'); goto out; } @unlink($tempSrcFilePath); // 保存 goods_gallery 记录 $imageOriginalFileRelativeName = $saveFilePathRelative; $pathInfoArray = pathinfo($imageOriginalFileRelativeName); //生成头图 $imageFileRelativeName = $pathInfoArray['dirname'] . '/' . $pathInfoArray['filename'] . '_' . $f3->get('sysConfig[image_width]') . 'x' . $f3->get('sysConfig[image_height]') . '.jpg'; StorageImageHelper::resizeImage($dataPathRoot, $imageOriginalFileRelativeName, $imageFileRelativeName, $f3->get('sysConfig[image_width]'), $f3->get('sysConfig[image_height]')); //生成缩略图 $imageThumbFileRelativeName = $pathInfoArray['dirname'] . '/' . $pathInfoArray['filename'] . '_' . $f3->get('sysConfig[image_thumb_width]') . 'x' . $f3->get('sysConfig[image_thumb_height]') . '.jpg'; StorageImageHelper::resizeImage($dataPathRoot, $imageOriginalFileRelativeName, $imageThumbFileRelativeName, $f3->get('sysConfig[image_thumb_width]'), $f3->get('sysConfig[image_thumb_height]')); //保存 goods_gallery 记录 $goodsGalleryService = new GoodsGalleryService(); // ID 为0,返回一个新建的 dataMapper $goodsGallery = $goodsGalleryService->_loadById('goods_gallery', 'img_id=?', 0); $goodsGallery->goods_id = $goods_id; $goodsGallery->img_desc = '网络下载图片'; $goodsGallery->img_original = $imageOriginalFileRelativeName; $goodsGallery->img_url = $imageFileRelativeName; $goodsGallery->thumb_url = $imageThumbFileRelativeName; $goodsGallery->save(); $this->addFlashMessage('抓取图片成功'); //清除缓存,确保商品显示正确 ClearHelper::clearGoodsCacheById($goodsGallery->goods_id); out: // 释放资源 unset($request); unset($webInstance); RouteHelper::reRoute($this, RouteHelper::makeUrl('/Goods/Edit/Gallery', array('goods_id' => $goods_id), true)); return; // 成功从这里返回 out_fail: RouteHelper::reRoute($this, '/Goods/Search'); }
require_once PROTECTED_PATH . '/Core/Cloud/CloudHelper.php'; // ---------------------------------------- 1. 设置系统运行环境 -------------------------------------- // 加载全局变量设置 $f3->config(PROTECTED_PATH . '/Config/supplier.cfg'); // 根据环境变量的不同,加载对应的环境变量设置,开发环境和生产环境的配置显然是不一样的 $f3->config(PROTECTED_PATH . '/Config/supplier-' . $f3->get('sysConfig[env]') . '.cfg'); // 设置工作时区 if ($f3->get('sysConfig[time_zone]')) { date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 设置网站唯一的 key,防止通用模块之间的冲突 RouteHelper::$uniqueKey = 'SUPPLIER'; AuthHelper::$uniqueKey = 'SUPPLIER'; OrderBasicService::$orderSnPrefix = 'SUPPLIER'; // ------------ 2. 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 ------------ CloudHelper::initCloudEnv(PluginHelper::SYSTEM_SUPPLIER); // ---------------------------------------- 3. 开启系统日志 -------------------------------------- // 设置系统的日志 $todayDateStr = \Core\Helper\Utility\Time::localTimeStr('Y-m-d'); $todayDateArray = explode('-', $todayDateStr); // 设置一个 fileLogger 方便查看所有的日志输出,按照 年/月/年-月-日.log 输出 $fileLogger = new \Core\Log\File($todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.supplier.log'); // 我们不打印 DEBUG 级别的日志,不然数据量太大了 $fileLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($fileLogger); unset($fileLogger); /* * **************** 如果是调试模式,在这里设置调试 ************************ */ if ($f3->get('DEBUG')) { // 调试模式,关闭缓存 $f3->set('CACHE', false); // 调试模式下,弄一个 fileLogger 方便查看所有的日志输出
date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 设置 session 在多个子域名之间共享 if ($f3->get('sysConfig[cookie_domain]')) { $f3->set('JAR.domain', $f3->get('sysConfig[cookie_domain]')); } // 设置网站唯一的 key,防止通用模块之间的冲突 RouteHelper::$uniqueKey = 'MOBILE'; OrderBasicService::$orderSnPrefix = 'MB'; ReferHelper::$orderReferStorageKey = 'BZFOrderRefer'; // 记录系统订单来源 CartBasicService::$cartSystemId = \Core\Plugin\PluginHelper::SYSTEM_MOBILE; // 把几个网站的 key 设置成一样,配合 sysConfig[cookie_domain] 设置,就可以实现几个网站 统一登陆 AuthHelper::$uniqueKey = 'BZFAUTH'; // ------------ 2. 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 ------------ CloudHelper::initCloudEnv(PluginHelper::SYSTEM_MOBILE); // ---------------------------------------- 3. 开启系统日志 -------------------------------------- $todayDateStr = \Core\Helper\Utility\Time::localTimeStr('Y-m-d'); $todayDateArray = explode('-', $todayDateStr); // 设置一个 fileLogger 方便查看所有的日志输出,按照 年/月/年-月-日.log 输出 $fileLogger = new \Core\Log\File($todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.mobile.log'); // 我们不打印 DEBUG 级别的日志,不然数据量太大了 $fileLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($fileLogger); unset($fileLogger); // 设置支付日志,我们需要把所有的支付都记录到支付日志中方便以后查询,按照日期分目录存储 $fileLogger = new \Core\Log\File('PAYMENT/' . $todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.payment.log'); $fileLogger->sourceAllow[] = 'PAYMENT'; // 只接收支付日志 $logger->addLogger($fileLogger); // 把 $fileLogger 放到全局日志列表中
/** * 生成一个新的尺寸的图片,并且保存到缓存目录里面 * * @param string $dataPathRoot 数据存放的根目录 * @param string $imageFileRelativeName 源图片文件的相对路径名,相对于 $dataPathRoot * @param int $width * @param int $height * @param bool $crop 如果图片长宽比例不合适,是否剪切掉 * * @return string 返回相对于 $dataPathRoot 的新文件路径 */ public static function cropImageIfNotExist($dataPathRoot, $imageFileRelativeName, $width, $height) { $cloudStorage = CloudHelper::getCloudModule(CloudHelper::CLOUD_MODULE_STORAGE); $soureFilePath = $dataPathRoot . '/' . $imageFileRelativeName; // 源文件不存在,返回空 if (!$cloudStorage->fileExists($dataPathRoot, $imageFileRelativeName)) { printLog('[' . $soureFilePath . '] does not exist', __CLASS__, \Core\Log\Base::ERROR); return ''; } // 自动生成缩率文件,放在 Cache 目录下 $pathInfoArray = pathinfo($imageFileRelativeName); $targetDirPathRelative = static::$cacheDirName . '/' . $pathInfoArray['dirname']; $targetFilePathRelative = $targetDirPathRelative . '/' . $pathInfoArray['filename'] . '_' . $width . 'x' . $height . '_' . 'crop' . '.' . $pathInfoArray['extension']; if ($cloudStorage->fileExists($dataPathRoot, $targetFilePathRelative)) { goto out; } self::cropImage($dataPathRoot, $imageFileRelativeName, $targetFilePathRelative, $width, $height); printLog('crop [' . $soureFilePath . '] to [' . $dataPathRoot . '/' . $targetFilePathRelative . '] width [' . $width . '] height [' . $height . ']', __CLASS__); out: return $targetFilePathRelative; }
define('CONSOLE_PATH', dirname(__FILE__)); define('CONSOLE_DIR', basename(CONSOLE_PATH)); // 包含整个系统的初始化 require_once CONSOLE_PATH . '/../protected/bootstrap-console.php'; // 增加当前项目的 autoload 路径 $f3->set('AUTOLOAD', CONSOLE_PATH . '/;' . $f3->get('AUTOLOAD')); // 加载全局变量设置 $f3->config(PROTECTED_PATH . '/Config/console.cfg'); // 根据环境变量的不同,加载对应的环境变量设置,开发环境和生产环境的配置显然是不一样的 $f3->config(PROTECTED_PATH . '/Config/console-' . $f3->get('sysConfig[env]') . '.cfg'); // 设置工作时区 if ($f3->get('sysConfig[time_zone]')) { date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 CloudHelper::initCloudEnv(PluginHelper::SYSTEM_CONSOLE); $todayDateStr = \Core\Helper\Utility\Time::localTimeStr('Y-m-d'); $todayDateArray = explode('-', $todayDateStr); // 设置一个 fileLogger 方便查看所有的日志输出,按照 年/月/年-月-日.log 输出 $fileLogger = new \Core\Log\File($todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.console.log'); // 我们不打印 DEBUG 级别的日志,不然数据量太大了 $fileLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($fileLogger); unset($fileLogger); // 设置一个 consoleLogger,这样我们可以同步在控制台看到输出结果 $consoleLogger = new \Core\Log\Console(); $consoleLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($consoleLogger); //unset($consoleLogger); /* * **************** 如果是调试模式,在这里设置调试 ************************ */ if ($f3->get('DEBUG')) {
date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 设置 session 在多个子域名之间共享 if ($f3->get('sysConfig[cookie_domain]')) { $f3->set('JAR.domain', $f3->get('sysConfig[cookie_domain]')); } // 设置网站唯一的 key,防止通用模块之间的冲突 RouteHelper::$uniqueKey = 'BZFRouteHelper'; OrderBasicService::$orderSnPrefix = 'SB'; ReferHelper::$orderReferStorageKey = 'BZFOrderRefer'; // 记录系统订单来源 CartBasicService::$cartSystemId = PluginHelper::SYSTEM_SHOP; // 把几个网站的 key 设置成一样,配合 sysConfig[cookie_domain] 设置,就可以实现几个网站 统一登陆 AuthHelper::$uniqueKey = 'BZFAUTH'; // ------------ 2. 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 ------------ CloudHelper::initCloudEnv(PluginHelper::SYSTEM_SHOP); // ---------------------------------------- 3. 开启系统日志 -------------------------------------- $todayDateStr = \Core\Helper\Utility\Time::localTimeStr('Y-m-d'); $todayDateArray = explode('-', $todayDateStr); // 设置一个 fileLogger 方便查看所有的日志输出,按照 年/月/年-月-日.log 输出 $fileLogger = new \Core\Log\File($todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.shop.log'); // 我们不打印 DEBUG 级别的日志,不然数据量太大了 $fileLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($fileLogger); unset($fileLogger); // 设置支付日志,我们需要把所有的支付都记录到支付日志中方便以后查询,按照日期分目录存储 $fileLogger = new \Core\Log\File('PAYMENT/' . $todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.payment.log'); $fileLogger->sourceAllow[] = 'PAYMENT'; // 只接收支付日志 $logger->addLogger($fileLogger); // 把 $fileLogger 放到全局日志列表中
// 加载全局变量设置 $f3->config(PROTECTED_PATH . '/Config/manage.cfg'); // 根据环境变量的不同,加载对应的环境变量设置,开发环境和生产环境的配置显然是不一样的 $f3->config(PROTECTED_PATH . '/Config/manage-' . $f3->get('sysConfig[env]') . '.cfg'); // 设置工作时区 if ($f3->get('sysConfig[time_zone]')) { date_default_timezone_set($f3->get('sysConfig[time_zone]')); } // 设置网站唯一的 key,防止通用模块之间的冲突 RouteHelper::$uniqueKey = 'MANAGE'; AuthHelper::$uniqueKey = 'MANAGE'; AuthHelper::$enableCookieAuth = true; // manage 用到了 swfupload 用于上传图片,所以必须开启 CookieAuth OrderBasicService::$orderSnPrefix = 'MANAGE'; // ------------ 2. 初始化 云服务引擎,云服务引擎会设置好我们的运行环境,包括 可写目录 等 ------------ CloudHelper::initCloudEnv(PluginHelper::SYSTEM_MANAGE); // ---------------------------------------- 3. 开启系统日志 -------------------------------------- // 设置系统的日志 $todayDateStr = \Core\Helper\Utility\Time::localTimeStr('Y-m-d'); $todayDateArray = explode('-', $todayDateStr); // 设置一个 fileLogger 方便查看所有的日志输出,按照 年/月/年-月-日.log 输出 $fileLogger = new \Core\Log\File($todayDateArray[0] . '/' . $todayDateArray[1] . '/' . implode('-', $todayDateArray) . '.manage.log'); // 我们不打印 DEBUG 级别的日志,不然数据量太大了 $fileLogger->levelAllow = array(\Core\Log\Base::CRITICAL, \Core\Log\Base::ERROR, \Core\Log\Base::WARN, \Core\Log\Base::NOTICE, \Core\Log\Base::INFO); $logger->addLogger($fileLogger); unset($fileLogger); /* * **************** 如果是调试模式,在这里设置调试 ************************ */ if ($f3->get('DEBUG')) { // 调试模式,关闭缓存 $f3->set('CACHE', false); // 调试模式下,弄一个 fileLogger 方便查看所有的日志输出