Пример #1
0
 protected function postUpload($tmp_name, $filename)
 {
     if (strpos($filename, '..') !== false || strpos($filename, '.php.') !== false || preg_match('/\\.php$/', $filename)) {
         exit('illegal file type!');
     }
     WindFolder::mkRecur(dirname($filename));
     if (function_exists("move_uploaded_file") && @move_uploaded_file($tmp_name, $filename)) {
         @unlink($tmp_name);
         @chmod($filename, 0777);
         return filesize($filename);
     } elseif (@copy($tmp_name, $filename)) {
         @unlink($tmp_name);
         @chmod($filename, 0777);
         return filesize($filename);
     } elseif (is_readable($tmp_name)) {
         Wind::import('WIND:utility.WindFile');
         WindFile::write($filename, WindFile::read($tmp_name));
         @unlink($tmp_name);
         if (file_exists($filename)) {
             @chmod($filename, 0777);
             return filesize($filename);
         }
     }
     return false;
 }
 /**
  * 解析properties文件并返回一个多维数组
  * 
  * 载入一个由 filename 指定的 properties 文件,
  * 并将其中的设置作为一个联合数组返回。
  * 
  * @param string $filename 文件名
  * @return array
  */
 private function parse_properties_file($filename)
 {
     if (!is_file($filename) || !in_array(substr($filename, strrpos($filename, '.') + 1), array('properties'))) {
         return array();
     }
     $content = explode("\n", WindFile::read($filename));
     $data = array();
     $last_process = $current_process = '';
     foreach ($content as $key => $value) {
         $value = str_replace(array("\n", "\r"), '', trim($value));
         if (0 === strpos(trim($value), self::COMMENT) || in_array(trim($value), array('', "\t", "\n"))) {
             continue;
         }
         $tmp = explode('=', $value, 2);
         if (0 === strpos(trim($value), self::LPROCESS) && strlen($value) - 1 === strrpos($value, self::RPROCESS)) {
             $current_process = $this->trimChar(trim($value), array(self::LPROCESS, self::RPROCESS));
             $data[$current_process] = array();
             $last_process = $current_process;
             continue;
         }
         $tmp[0] = trim($tmp[0]);
         if (count($tmp) == 1) {
             $last_process ? $data[$last_process][$tmp[0]] = '' : ($data[$tmp[0]] = '');
             continue;
         }
         $tmp[1] = trim($tmp[1], '\'"');
         $__tmpValue = strtolower($tmp[1]);
         $tmp[1] = 'false' === $__tmpValue ? false : ('true' === $__tmpValue ? true : $tmp[1]);
         $last_process ? $data[$last_process][$tmp[0]] = $tmp[1] : ($data[$tmp[0]] = $tmp[1]);
     }
     return $data;
 }
Пример #3
0
 /**
  * 获得模板文件内容,目前只支持本地文件获取
  * 
  * @param string $templateFile
  * @return string
  */
 private function getTemplateFileContent($templateFile)
 {
     if (false === ($content = WindFile::read($templateFile))) {
         throw new WindViewException('[viewer.AbstractWindViewTemplate.getTemplateFileContent] Unable to open the template file \'' . $templateFile . '\'.');
     }
     return $content;
 }
Пример #4
0
 private static function _getMP3Audio()
 {
     self::$_audioVerify = '';
     $_len = Pw::strlen(self::$verifyCode);
     for ($i = 0; $i < $_len; $i++) {
         $_code = strtoupper(self::$verifyCode[$i]);
         self::$_audioVerify .= WindFile::read(self::$_audioPath . '/' . $_code . '.mp3', WindFile::READ);
     }
 }
Пример #5
0
 public static function uploadRequest($url, $file, $timeout = 30)
 {
     if (!function_exists('fsockopen')) {
         $urlArr = parse_url($url);
         $port = isset($urlArr['port']) ? $urlArr['port'] : 80;
         $boundary = "---------------------" . substr(md5(rand(0, 32000)), 0, 10);
         $header = "POST " . $urlArr['path'] . '?' . $urlArr['query'] . " HTTP/1.0\r\n";
         $header .= "Host: " . $urlArr['host'] . "\r\n";
         $header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n";
         if (!file_exists($file)) {
             return false;
         }
         $imageInfo = @getimagesize($file);
         $exts = array('1' => 'gif', '2' => 'jpg', '3' => 'png');
         if (!isset($exts[$imageInfo[2]])) {
             continue;
         }
         $ext = $exts[$imageInfo[2]];
         $filename = rand(1000, 9999) . '.' . $ext;
         $data = '';
         $data .= "--{$boundary}\r\n";
         $data .= "Content-Disposition: form-data; name=\"FileData\"; filename=\"" . $filename . "\"\r\n";
         $data .= "Content-Type: " . $imageInfo['mime'] . "\r\n\r\n";
         $data .= WindFile::read($file) . "\r\n";
         $data .= "--{$boundary}--\r\n";
         $header .= "Content-length: " . strlen($data) . "\r\n\r\n";
         $fp = fsockopen($urlArr['host'], $port);
         fputs($fp, $header . $data);
         $response = '';
         while (!feof($fp)) {
             $response .= fgets($fp, 128);
         }
         fclose($fp);
         preg_match("/Content-Length:.?(\\d+)/", $response, $matches);
         if (isset($matches[1])) {
             $response = substr($response, strlen($response) - intval($matches[1]));
         }
         return $response;
     } elseif (function_exists('curl_init')) {
         $curl = curl_init($url);
         curl_setopt($curl, CURLOPT_POST, true);
         curl_setopt($curl, CURLOPT_POSTFIELDS, $file);
         curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
         curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         $response = curl_exec($curl);
         curl_close($curl);
         return $response;
     } else {
         return false;
     }
 }
Пример #6
0
 /**
  * 存储附件,如果是远程存储,记得删除本地文件
  *
  * @param string $source 本地源文件地址
  * @param string $filePath 存储相对位置
  * @return bool
  */
 public function save($source, &$filePath)
 {
     $data = WindFile::read($source);
     $stuff = WindFile::getSuffix($source);
     $result = $this->_getCdn()->write($data, $stuff);
     if ($result) {
         Pw::deleteFile($source);
         $filePath = $result;
         return true;
     } else {
         return false;
     }
 }
Пример #7
0
 /**
  * 将给出的文件列表进行打包
  * 
  * @param mixed $fileList 文件列表
  * @param string $dst  打包文件的存放位置
  * @param method $packMethod 打包的方式,默认为stripWhiteSpaceByPhp
  * @param boolean $compress 打包是否采用压缩的方式,默认为true
  * @return boolean
  */
 public function packFromFileList($fileList, $dst, $packMethod = WindPack::STRIP_PHP, $compress = true)
 {
     if (empty($dst) || empty($fileList)) {
         return false;
     }
     $content = array();
     $this->readContentFromFileList($fileList, $packMethod, $content);
     $replace = $compress ? ' ' : "\n";
     $content = implode($replace, $content);
     $content = $this->callBack($content, $replace);
     $content = $this->stripNR($content, $replace);
     $content = $this->stripPhpIdentify($content, '');
     return WindFile::write($dst, '<?php' . $replace . $content . '?>');
 }
 /**
  * 编译模板并返回编译后模板地址及内容
  * 
  * <pre>
  * <i>$output==true</i>返回编译文件绝对路径地址和内容,不生成编译文件;
  * <i>$output==false</i>返回编译文件绝对路径地址和内容,生成编译文件
  * </pre>
  * 
  * @param string $template 模板名称 必填
  * @param string $suffix 模板后缀 默认为空 
  * @param boolean $readOnly 是否直接输出模板内容,接受两个值true,false 默认值为false
  * @param boolean $forceOutput 是否强制返回模板内容,默认为不强制
  * @return array(compileFile,content) <pre>
  * <i>compileFile</i>模板编译文件绝对地址,
  * <i>content</i>编译后模板输出内容,当<i>$output</i>
  * 为false时将content写入compileFile</pre>
  */
 public function compile($template, $suffix = '', $readOnly = false, $forceOutput = false)
 {
     $templateFile = $this->windView->getViewTemplate($template, $suffix);
     if (!is_file($templateFile)) {
         throw new WindViewException('[component.viewer.WindViewerResolver.compile] ' . $templateFile, WindViewException::VIEW_NOT_EXIST);
     }
     $compileFile = $this->windView->getCompileFile($template);
     if (!$this->checkReCompile($templateFile, $compileFile)) {
         return array($compileFile, $forceOutput ? WindFile::read($compileFile) : '');
     }
     /* @var $_windTemplate WindViewTemplate */
     $_windTemplate = Wind::getApp()->getComponent('template');
     $_output = $_windTemplate->compile($templateFile, $this);
     $readOnly === false && WindFile::write($compileFile, $_output);
     return array($compileFile, $_output);
 }
Пример #9
0
 /**
  * 编译模板并返回编译后模板地址及内容
  * <pre>
  * <i>$output==true</i>返回编译文件绝对路径地址和内容,不生成编译文件;
  * <i>$output==false</i>返回编译文件绝对路径地址和内容,生成编译文件
  * </pre>
  * 
  * @param string $template 模板名称 必填
  * @param string $suffix 模板后缀 默认为空
  * @param boolean $readOnly 是否直接输出模板内容,接受两个值true,false 默认值为false
  * @param boolean $forceOutput 是否强制返回模板内容,默认为不强制
  * @return array(compileFile,content) <pre>
  *         <i>compileFile</i>模板编译文件绝对地址,
  *         <i>content</i>编译后模板输出内容,当<i>$output</i>
  *         为false时将content写入compileFile</pre>
  */
 public function compile($template, $suffix = '', $readOnly = false, $forceOutput = false)
 {
     list($templateFile, $compileFile, $this->currentThemeKey) = $this->windView->getViewTemplate($template, $suffix);
     if (!is_file($templateFile)) {
         throw new WindViewException('[viewer.resolver.WindViewerResolver.compile] ' . $templateFile, WindViewException::VIEW_NOT_EXIST);
     }
     if (!$this->checkReCompile($templateFile, $compileFile)) {
         return array($compileFile, $forceOutput || $readOnly ? WindFile::read($compileFile) : '');
     }
     /* @var $_windTemplate WindViewTemplate */
     $_windTemplate = Wind::getComponent('template');
     $_output = $_windTemplate->compile($templateFile, $this);
     if (false === $readOnly) {
         WindFolder::mkRecur(dirname($compileFile));
         WindFile::write($compileFile, $_output);
     }
     return array($compileFile, $_output);
 }
Пример #10
0
 /**
  * 判断是否是子域名
  *
  * 此方法不够严谨,如果遇到主域名正好就是域名后缀的时候,类似www.info.com,www.net.cn时有bug。
  *
  * @param string $domain1        	
  * @param string $domain2        	
  */
 public static function isMyBrother($domain1, $domain2)
 {
     if ($domain1 == $domain2) {
         return true;
     }
     if (WindFile::getSuffix($domain1) != WindFile::getSuffix($domain2)) {
         return false;
     }
     $domain1 = str_replace(array('http://'), 'https://', $domain1);
     $domain2 = str_replace(array('http://'), 'https://', $domain2);
     $suffix = array('com', 'cn', 'name', 'org', 'net', 'edu', 'gov', 'info', 'pro', 'museum', 'coop', 'aero', 'xxx', 'idv', 'hk', 'tw', 'mo', 'me', 'biz');
     $preg = implode('|', $suffix);
     $domain1 = preg_replace("/(\\.({$preg}))*\\.({$preg})\$/iU", '', $domain1);
     $domain2 = preg_replace("/(\\.({$preg}))*\\.({$preg})\$/iU", '', $domain2);
     $r = explode('.', $domain1);
     $main1 = end($r);
     $r = explode('.', $domain2);
     $main2 = end($r);
     return $main1 == $main2;
 }
Пример #11
0
 /**
  * @param string $stylePackage
  * @param booelan $isManifestChanged
  * @return boolean
  */
 private function _doCss($stylePackage)
 {
     $file = $stylePackage . '/' . $this->manifest;
     $dir = $stylePackage . '/' . $this->cssDevDir;
     $_dir = $stylePackage . '/' . $this->cssDir;
     WindFolder::mkRecur($_dir);
     $files = WindFolder::read($dir, WindFolder::READ_FILE);
     foreach ($files as $v) {
         if (WindFile::getSuffix($v) === 'css') {
             $dev_css = $dir . '/' . $v;
             //待编译文件
             $css = $_dir . '/' . $v;
             //编译后文件
             $data = WindFile::read($dir . '/' . $v);
             $_data = $this->_compress($data);
             if (WindFile::write($css, $_data) === false) {
                 return new PwError('STYLE:style.css.write.fail');
             }
         }
     }
     return true;
 }
Пример #12
0
 public function doCompile()
 {
     $JS_DEV_PATH = Wind::getRealDir('PUBLIC:res.js.dev');
     $JS_BUILD_PATH = Wind::getRealDir('PUBLIC:res.js.build');
     Wind::import('Wind:utility.WindFolder');
     $files = $this->_getFiles($JS_DEV_PATH);
     foreach ($files as $file) {
         $newfile = $JS_BUILD_PATH . substr($file, strlen($JS_DEV_PATH));
         WindFolder::mkRecur(dirname($newfile));
         if (substr($file, -3) != '.js') {
             if (!copy($file, $newfile)) {
                 return new PwError('copy failed');
             }
             continue;
         }
         $content = WindFile::read($file);
         $compress = jscompress::pack($content);
         if (!WindFile::write($newfile, $compress)) {
             return new PwError('write failed');
         }
     }
 }
Пример #13
0
 /**
  * 查找未安装的风格
  *
  * @return array 未安装的风格名
  */
 public function getUnInstalledThemes()
 {
     $config = Wekit::load('APPCENTER:service.srv.PwInstallApplication')->getConfig('style-type');
     $themes = array();
     foreach ($config as $k => $v) {
         $dir = Wind::getRealDir('THEMES:' . $v[1]);
         $files = WindFolder::read($dir, WindFolder::READ_DIR);
         foreach ($files as $file) {
             if (WindFile::isFile($dir . '/' . $file . '/' . $this->manifest)) {
                 $themes[$k][] = $file;
             }
         }
     }
     if (empty($themes)) {
         return array();
     }
     $styles = array();
     foreach ($themes as $k => $v) {
         $r = $this->_styleDs()->fetchStyleByAliasAndType($v, $k, 'alias');
         $r = array_diff($v, array_keys($r));
         $r && ($styles[$k] = $r);
     }
     return $styles;
 }
Пример #14
0
 public function checkTxt($filename = '', $content = '')
 {
     if (!$filename && !$content) {
         return new PwError("DESIGN:upload.file.error");
     }
     if ($filename) {
         if (!($content = WindFile::read($filename))) {
             return new PwError("DESIGN:upload.file.error");
         }
     }
     $content = preg_replace("/\\/\\*(.+)\\*\\//", '', $content);
     $content = unserialize(base64_decode($content));
     $_array = array('page', 'segment', 'structure', 'module');
     foreach ($_array as $v) {
         if (!isset($content[$v])) {
             return new PwError("DESIGN:file.check.fail");
         }
     }
     $this->_content = $content;
     if ($filename) {
         WindFile::del($filename);
     }
     return true;
 }
Пример #15
0
 private function _getTemplate($path)
 {
     list($tpl, $compile) = $this->windViewerResolver->getWindView()->getViewTemplate($path);
     if (!$tpl) {
         return '';
     }
     return WindFile::read($tpl);
 }
Пример #16
0
 /**
  * 导出压缩包
  *
  */
 public function exportAction()
 {
     $alias = $this->getInput('alias', 'get');
     Wind::import('LIB:utility.PwZip');
     $dir = Wind::getRealDir('EXT:' . $alias);
     if (!is_dir($dir)) {
         $this->showError('fail');
     }
     $target = Wind::getRealPath('DATA:tmp.' . $alias . '.zip', true);
     PwApplicationHelper::zip($dir, $target);
     $timestamp = Pw::getTime();
     $this->getResponse()->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT');
     $this->getResponse()->setHeader('Expires', gmdate('D, d M Y H:i:s', $timestamp + 86400) . ' GMT');
     $this->getResponse()->setHeader('Cache-control', 'max-age=86400');
     $this->getResponse()->setHeader('Content-type', 'application/x-zip-compressed');
     $this->getResponse()->setHeader('Content-Disposition', 'attachment; filename=' . $alias . '.zip');
     $this->getResponse()->sendHeaders();
     @readfile($target);
     WindFile::del($target);
     $this->getResponse()->sendBody();
     exit;
 }
Пример #17
0
 /**
  * 自定义页面升级  start
  * 
  * @return boolean
  */
 protected function _designUpgrade()
 {
     Wind::import('SRV:design.srv.vo.PwDesignPortalSo');
     $vo = new PwDesignPortalSo();
     $vo->setIsopen(1);
     $list = $this->_getPortalDs()->searchPortal($vo, 0, 100);
     $dirList = array();
     foreach ($list as $k => $v) {
         if (empty($v['template'])) {
             $dirList[$k] = $v['id'];
         }
     }
     $dir = Wind::getRealDir('THEMES:portal.local.');
     $_dir = array();
     if (!is_dir($dir)) {
         return array();
     }
     if (!($handle = @opendir($dir))) {
         return array();
     }
     while (false !== ($file = @readdir($handle))) {
         if ('.' === $file || '..' === $file) {
             continue;
         }
         $fileName = $dir . $file;
         if (is_file($fileName)) {
             continue;
         } elseif (is_dir($fileName) && is_numeric($file)) {
             $key = array_search($file, $dirList);
             unset($dirList[$k]);
             if ((int) $file != $file) {
                 continue;
             }
             $tplPath = 'special_' . $file;
             Wind::import('SRV:design.dm.PwDesignPortalDm');
             $dm = new PwDesignPortalDm($file);
             $dm->setTemplate($tplPath);
             Wekit::load('design.PwDesignPortal')->updatePortal($dm);
             $this->copyRecur($fileName, $dir . $tplPath . '/');
         }
     }
     $srv = Wekit::load('design.srv.PwDesignService');
     foreach ($dirList as $k => $v) {
         $tplPath = 'special_' . $v;
         $result = $srv->defaultTemplate($k, $tplPath);
         if ($result) {
             WindFile::write($dir . $tplPath . '/template/index.htm', $this->_tpl());
             Wind::import('SRV:design.dm.PwDesignPortalDm');
             $dm = new PwDesignPortalDm($v);
             $dm->setTemplate($tplPath);
             Wekit::load('design.PwDesignPortal')->updatePortal($dm);
         }
     }
     @closedir($handle);
     return true;
 }
Пример #18
0
 private function _clear()
 {
     WindFolder::clearRecur(dirname($this->upgrade_temp), true);
     $useFtp = Wekit::cache()->get('system_upgrade_ftp');
     $phps = $this->_getPhps();
     $sql = PUBLIC_PATH . 'update.sql';
     if ($phps || file_exists($sql)) {
         if ($useFtp) {
             try {
                 $ftp = $useFtp['sftp'] ? new PwSftpSave($useFtp) : new PwFtpSave($useFtp);
                 $ftp->delete(str_replace(ROOT_PATH, '', $sql));
             } catch (WindFtpException $e) {
             }
         } else {
             WindFile::del($sql);
         }
         foreach ($phps as $php) {
             $file = PUBLIC_PATH . $php;
             if ($useFtp) {
                 $file = str_replace(ROOT_PATH, '', $file);
                 $ftp->delete($file);
             } else {
                 WindFile::del($file);
             }
         }
         $ftp && $ftp->close();
     }
     WindFile::del(DATA_PATH . 'upgrade/sql.tmp');
     Wekit::cache()->batchDelete(array('system_upgrade', 'system_upgrade_step', 'system_upgrade_db_step', 'system_upgrade_php_step', 'system_upgrade_ftp', 'system_upgrade_download_step', 'system_upgrade_info', 'system_upgrade_replace'));
 }
Пример #19
0
	/**
	 * 删除本地文件
	 *
	 * @param string $filename 文件绝对地址
	 * @return bool
	 */
	public static function deleteFile($filename) {
		return WindFile::del(WindSecurity::escapePath($filename, true));
	}
Пример #20
0
 public function generate()
 {
     $addons = Wekit::load('APPS:appcenter.service.srv.PwInstallApplication')->getConfig('style-type');
     $base = str_replace('/', '.', $addons[$this->style_type][1]);
     $this->defaultDir = Wind::getRealDir('THEMES:' . $base . '.default');
     if (!is_dir($this->defaultDir)) {
         return new PwError('APPCENTER:generate.style.unsupport');
     }
     $this->baseDir = Wind::getRealDir('THEMES:' . $base . '.' . $this->alias);
     if (is_dir($this->baseDir)) {
         return new PwError('APPCENTER:alias.exist');
     }
     WindFolder::mkRecur($this->baseDir);
     Wind::import('APPS:appcenter.service.srv.helper.PwSystemHelper');
     $writable = PwSystemHelper::checkWriteAble($this->baseDir . '/');
     if (!$writable) {
         return new PwError('APPCENTER:generate.copy.fail');
     }
     PwApplicationHelper::copyRecursive($this->defaultDir, $this->baseDir);
     $file = $this->baseDir . '/Manifest.xml';
     Wind::import('WIND:parser.WindXmlParser');
     $parser = new WindXmlParser();
     $manifest = $parser->parse($file);
     $manifest['application']['name'] = $this->name;
     $manifest['application']['alias'] = $this->alias;
     $manifest['application']['description'] = $this->description;
     $manifest['application']['version'] = $this->version;
     $manifest['application']['pw-version'] = $this->pwversion;
     $manifest['application']['website'] = $this->website;
     $manifest['application']['author-name'] = $this->author;
     $manifest['application']['author-email'] = $this->email;
     $parser = new WindXmlParser();
     $manifest = str_replace('><', ">\n\t<", $parser->parseToXml(array('manifest' => $manifest), Wind::getApp()->getResponse()->getCharset()));
     WindFile::write($this->baseDir . '/Manifest.xml', $manifest);
     return 'THEMES:' . $base . '.' . $this->alias;
 }
Пример #21
0
 public function doimportAction()
 {
     Wind::import('SRV:upload.action.PwWordUpload');
     Wind::import('LIB:upload.PwUpload');
     $bhv = new PwWordUpload();
     $upload = new PwUpload($bhv);
     if (($result = $upload->check()) === true) {
         $result = $upload->execute();
     }
     if ($result !== true) {
         $error = $result->getError();
         if (is_array($error)) {
             list($error, ) = $error;
             if ($error == 'upload.ext.error') {
                 $this->showError('WORD:ext.error');
             }
         }
         $this->showError($result->getError());
     }
     $source = $bhv->getAbsoluteFile();
     if (!WindFile::isFile($source)) {
         $this->showError('operate.fail');
     }
     $content = WindFile::read($source);
     pw::deleteAttach($bhv->dir . $bhv->filename, 0, $bhv->isLocal);
     $content = explode("\n", $content);
     if (!$content) {
         $this->showError('WORD:import.data.empty');
     }
     $wordService = $this->_getWordService();
     $typeMap = $this->_getWordDS()->getTypeMap();
     Wind::import('SRV:word.dm.PwWordDm');
     foreach ($content as $value) {
         list($word, $type, $replace) = $this->_parseTextUseInImport($value, $typeMap);
         if (!$word || !$type || $wordService->isExistWord($word)) {
             continue;
         }
         $dm = new PwWordDm();
         /* @var $dm PwWordDm */
         $dm->setWord($word)->setWordType($type);
         $replace = $this->_getWordDS()->isReplaceWord($type) ? $replace ? $replace : '****' : '';
         $dm->setWordReplace($replace);
         $this->_getWordDS()->add($dm);
     }
     $this->_getWordFilter()->updateCache();
     $this->showMessage('success');
 }
Пример #22
0
 /**
  * 清理安装过程中产生的临时信息
  *
  * step 5
  * 
  * @return void
  */
 public function clear()
 {
     list(, , $install) = $this->resolvedInstallation($this->tmpInstallLog);
     if (is_file($this->tmpInstallLog)) {
         WindFile::del($this->tmpInstallLog);
     }
     if ($install->getTmpPackage()) {
         WindFolder::rm($install->getTmpPackage(), true);
     }
     if ($install->getTmpPath()) {
         WindFolder::rm($install->getTmpPath(), true);
     }
 }
Пример #23
0
 protected function getImage($url, $path, $filename = "")
 {
     if ($url == "" || $path == "") {
         return false;
     }
     if (!$this->createFolder($path)) {
         return false;
     }
     $ext = strrchr($url, ".");
     if ($ext != ".gif" && $ext != ".jpg" && $ext != ".png") {
         return false;
     }
     $filename = $filename ? $filename : mt_rand(1, 999999) . '.' . $ext;
     $filename = $path . $filename;
     if ($this->store instanceof PwStorageFtp) {
         $ftp = Wekit::load('design.srv.ftp.PwDesignFtp');
         $ftp->download($this->image, $filename);
     } else {
         ob_start();
         echo $this->getContents($url);
         $img = ob_get_contents();
         ob_end_clean();
         WindFile::write($filename, $img);
     }
     return $filename;
 }
Пример #24
0
 public function install($patch)
 {
     $tmpfiles = $this->bakFiles = array();
     WindFolder::mkRecur($this->tmpPath);
     if ($this->ftp && !is_object($this->ftp)) {
         try {
             $this->ftp = $this->ftp['sftp'] ? new PwSftpSave($this->ftp) : new PwFtpSave($this->ftp);
         } catch (WindFtpException $e) {
             return false;
         }
     }
     foreach ($patch['rule'] as $rule) {
         $rule['filename'] = $this->sortFile($rule['filename']);
         $filename = ROOT_PATH . $rule['filename'];
         $search = base64_decode($rule['search']);
         $replace = base64_decode($rule['replace']);
         $count = $rule['count'];
         $nums = $rule['nums'];
         $str = WindFile::read($filename);
         $realCount = substr_count($str, $search);
         if ($realCount != $count) {
             return new PwError('APPCENTER:upgrade.patch.update.fail', array($patch['id']));
         }
         $bakfile = basename($rule['filename']) . '.' . Pw::time2str(WEKIT_TIMESTAMP, 'Ymd') . '.bak';
         $bakfile = $this->ftp ? dirname($rule['filename']) . '/' . $bakfile : dirname($filename) . '/' . $bakfile;
         $tmpfile = tempnam($this->tmpPath, 'patch');
         $replacestr = PwSystemHelper::replaceStr($str, $search, $replace, $count, $nums);
         WindFile::write($tmpfile, $replacestr);
         if ($this->ftp) {
             try {
                 $this->ftp->upload($filename, $bakfile);
                 $this->ftp->upload($tmpfile, $rule['filename']);
             } catch (WindFtpException $e) {
                 return false;
             }
         } else {
             if (!@copy($filename, $bakfile)) {
                 return new PwError('APPCENTER:upgrade.copy.fail', array($rule['filename']));
             }
             if (!@copy($tmpfile, $filename)) {
                 return new PwError('APPCENTER:upgrade.copy.fail', array($rule['filename']));
             }
         }
         $tmpfiles[] = $tmpfile;
         $this->bakFiles[] = $bakfile;
     }
     $this->_ds()->addLog($patch['id'], $patch, 2);
     return true;
 }
Пример #25
0
 /**
  * 对模块进行删除
  * PS:不是真正的删除,记录为isused = 0状态
  */
 public function deleteAction()
 {
     $moduleid = (int) $this->getInput('moduleid', 'post');
     $module = $this->_getModuleDs()->getModule($moduleid);
     if (!$module || $module['page_id'] < 1) {
         $this->showError('operate.fail');
     }
     Wekit::load('design.PwDesignPermissions');
     $permissions = $this->_getPermissionsService()->getPermissionsForModule($this->loginUser->uid, $moduleid);
     if ($permissions < PwDesignPermissions::IS_DESIGN) {
         $this->showError("DESIGN:permissions.fail");
     }
     Wind::import('SRV:design.bo.PwDesignPageBo');
     $pageBo = new PwDesignPageBo($module['page_id']);
     if ($pageBo->getLock()) {
         $this->showError('DESIGN:page.edit.other.user');
     }
     Wind::import('SRV:design.dm.PwDesignModuleDm');
     $dm = new PwDesignModuleDm($moduleid);
     $dm->setIsused(0);
     $resource = $this->_getModuleDs()->updateModule($dm);
     if ($resource instanceof PwError) {
         $this->showError($resource->getError());
     }
     //if (!$this->_getModuleDs()->deleteModule($moduleid)) $this->showMessage("operate.fail");
     $this->_getDataDs()->deleteByModuleId($moduleid);
     Wekit::load('design.PwDesignPush')->deleteByModuleId($moduleid);
     //删除导入数据的模版内容
     $dir = Wind::getRealDir('THEMES:portal.local.');
     $path = $dir . $pageBo->getTplPath() . '/template/';
     $files = WindFolder::read($path, WindFolder::READ_FILE);
     foreach ($files as $file) {
         $filePath = $path . $file;
         $content = WindFile::read($filePath);
         if (!$content) {
             continue;
         }
         $tmp = preg_replace('/\\<pw-list\\s*id=\\"' . $moduleid . '\\"\\s*>(.+)<\\/pw-list>/isU', '', $content);
         if ($tmp != $content) {
             WindFile::write($filePath, $tmp);
         }
     }
     $this->showMessage("operate.success");
 }
Пример #26
0
 public static function log($msg, $version, $start = false)
 {
     static $log;
     if (!$log) {
         $log = Wind::getRealDir('DATA:upgrade.log', true) . '/' . $version . '.log';
         WindFolder::mkRecur(dirname($log));
     }
     $status = $start ? WindFile::READWRITE : WindFile::APPEND_WRITEREAD;
     WindFile::write($log, "\r\n" . date('Y-m-d H:i') . '   ' . $msg, $status);
 }
Пример #27
0
 protected function getCacheArea()
 {
     $file = Wind::getRealPath('DATA:area.area.php', true);
     if (WindFile::isFile($file)) {
         return include $file;
     }
     return $this->updateCache();
 }
Пример #28
0
 /**
  * 存储附件,如果是远程存储,记得删除本地文件
  *
  * @param string $source 本地源文件地址
  * @param string $filePath 存储相对位置
  * @return bool
  */
 public function save($source, $filePath)
 {
     $this->_getFtp()->upload($source, $filePath, 'I');
     WindFile::del(WindSecurity::escapePath($source, true));
     return true;
 }
Пример #29
0
 /**
  * 递归的删除目录
  * 
  * @param string $dir 目录
  * @param Boolean $delFolder 是否删除目录
  */
 public static function clearRecur($dir, $delFolder = false)
 {
     if (!self::isDir($dir)) {
         return false;
     }
     if (!($handle = @opendir($dir))) {
         return false;
     }
     while (false !== ($file = readdir($handle))) {
         if ('.' === $file || '..' === $file) {
             continue;
         }
         $_path = $dir . '/' . $file;
         if (self::isDir($_path)) {
             self::clearRecur($_path, $delFolder);
         } elseif (WindFile::isFile($_path)) {
             WindFile::del($_path);
         }
     }
     $delFolder && @rmdir($dir);
     @closedir($handle);
     return true;
 }
Пример #30
0
 protected function deleteValue($key)
 {
     return WindFile::write($key, '');
 }