function infrajs_seo_saveitem($name, $item) { $dirs = infra_dirs(); @mkdir($dirs['data'] . 'seo/'); $src = $dirs['data'] . 'seo/' . infra_tofs($name) . '.json'; $data = infra_loadJSON($src); if (!$data) { $data = array('items' => array()); } $r = false; if (is_string($item['keywords'])) { $keys = explode(',', $item['keywords']); foreach ($keys as $k => $v) { $keys[$k] = trim($v); } $keys = array_values(array_unique($keys)); $item['keywords'] = $keys; } foreach ($data['items'] as $k => $it) { if ($it['data'] != $item['data']) { continue; } $data['items'][$k] = $item; $r = true; break; } if (!$r) { $data['items'][] = $item; } file_put_contents($src, infra_json_encode($data)); return $src; }
function infrajs_seo_init() { //Делается при каждой пробежки $store =& infrajs::store(); $store['seo'] = array(); $store['seolayer'] = array(); $conf = infra_config(); if (!$conf['seo']['seo']) { return; } if (!$conf['seo']['robots']) { return; } infra_admin_cache('infrajs_seo_init', function () { if (!infra_theme('robots.txt')) { $data = array(); $data['host'] = $_SERVER['HTTP_HOST']; $data['root'] = infra_view_getRoot(); $html = infra_template_parse('*seo/sitemap.tpl', $data, 'robots') . "\n"; $dirs = infra_dirs(); file_put_contents('robots.txt', $html); } }); }
<?php $dirs = infra_dirs(); if (!is_dir($dirs['cache'] . 'xlsx/')) { mkdir($dirs['cache'] . 'xlsx/'); } if (!is_dir($dirs['cache'] . 'docx/')) { mkdir($dirs['cache'] . 'docx/'); } if (!is_dir($dirs['cache'] . 'mht/')) { mkdir($dirs['cache'] . 'mht/'); }
public static function parse($src) { $src = infra_theme($src); if (!$src) { return; } $args = array($src); return infra_cache(array($src), 'mhtparse', function ($src) { $conf = infra_config(); $imgmaxwidth = $conf['files']['imgmaxwidth']; $previewlen = $conf['files']['previewlen']; $filename = infra_theme($src); $fdata = infra_srcinfo($src); if ($fdata['ext'] == 'php') { $data = infra_loadTEXT($filename); } else { $data = file_get_contents($filename); } $ans = array(); if ($fdata['ext'] == 'mht') { $p = explode('/', $filename); $fname = array_pop($p); $fnameext = $fname; //$fname=basename($filename); preg_match("/^(\\d*)/", $fname, $match); $date = $match[0]; $fname = infra_toutf(preg_replace('/^\\d*\\s+/', '', $fname)); $fname = preg_replace('/\\.\\w{0,4}$/', '', $fname); $ar = preg_split('/------=_NextPart_.*/', $data); if (sizeof($ar) > 1) { //На первом месте идёт информация о ворде... unset($ar[0]); unset($ar[sizeof($ar) - 1]); } $ar = array_values($ar); $dirs = infra_dirs(); $folder = $dirs['cache'] . 'mht/' . md5($src) . '/'; @mkdir($folder); $html = ''; for ($i = 0, $l = sizeof($ar); $i < $l; ++$i) { if (!$ar[$i]) { continue; } $d = preg_split("/\n/", $ar[$i], 6); $j = -1; do { ++$j; } while (@$d[$j][0] !== 'C' && $j <= 5); if ($j >= 5) { /* не нашли Content-Location: file:///C:/0FCF1655/file9909.files/header.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii" */ continue; } $location = preg_replace('/Content-Location: /', '', $d[$j]); $location = trim($location); $encoding = preg_replace('/Content-Transfer-Encoding: /', '', $d[$j + 1]); $type = preg_replace('/Content-Type: /', '', $d[$j + 2]); $content = $d[5]; $name = basename($location); if (preg_match("/text\\/html/", $type) || preg_match('/Subject:/', $type)) { $html .= $content; } else { @file_put_contents($folder . $name, base64_decode($content)); //Сохраняем картинку или тп... } } if (!$html) { $html = ''; } $html = preg_replace("/=\r\n/", '', $html); $html = preg_replace("/\\s+/", ' ', $html); $html = preg_replace("/^.*<body .*>\\s*/U", '', $html, 1); $html = preg_replace("/\\s*<\\/body>.*/", '', $html, 1); $images = array(); preg_match_all('/src=3D".*\\.files\\/(image.+)"/U', $html, $match, PREG_PATTERN_ORDER); for ($i = 0, $l = sizeof($match[1]); $i < $l; $i = $i + 2) { $min = $match[1][$i + 1]; if (!$min) { $min = $match[1][$i]; } $images[$min] = $match[1][$i]; //Каждая следующая картинка есть уменьшенная копия предыдущей оригинального размера } $html = preg_replace("/<\\!--.*-->/U", '', $html); $html = preg_replace("/<!\\[if !vml\\]>/", '', $html); $html = preg_replace("/<!\\[endif\\]>/", '', $html); $html = preg_replace('/=3D/', '=', $html); $html = preg_replace('/align="right"/', 'align="right" class="right"', $html); $html = preg_replace('/align="left"/', 'align="left" class="left"', $html); $html = preg_replace('/align=right/', 'align="right" class="right"', $html); $html = preg_replace('/align=left/', 'align="left" class="left"', $html); $html = infra_toutf($html); //Виндовые файлы хранятся в cp1251 $folder = infra_toutf($folder); $html = preg_replace('/ src=".*\\/(.*)"/U', ' src="' . $folder . '${1}"', $html); $html = preg_replace('/<span class=SpellE>(.*)<\\/span>/U', '${1}', $html); $html = preg_replace('/<span lang=.*>(.*)<\\/span>/U', '${1}', $html); $html = preg_replace('/<span class=GramE>(.*)<\\/span>/U', '${1}', $html); $html = preg_replace("/<span style='mso.*>(.*)<\\/span>/U", '${1}', $html); $html = preg_replace("/<span style='mso.*>(.*)<\\/span>/U", '${1}', $html); $html = preg_replace("/<span style='mso.*>(.*)<\\/span>/U", '${1}', $html); $html = preg_replace("/<span style='mso.*>(.*)<\\/span>/U", '${1}', $html); $html = preg_replace('/ class=MsoNormal/U', '', $html); $html = preg_replace('/<a name="_.*>(.*)<\\/a>/U', '${1}', $html); //Приводим к единому виду маркерные списки $patern = '/<p class=MsoListParagraphCxSp(\\w+) .*>(.*)<\\/p>/U'; $count = 3; do { preg_match($patern, $html, $match); if (sizeof($match) == $count) { $pos = strtolower($match[1]); $text = $match[2]; $text = preg_replace('/^.*(<\\/span>)+/U', '', $text, 1); $text = '<li>' . $text . '</li>'; if ($pos == 'first') { $text = '<ul>' . $text; } if ($pos == 'last') { $text = $text . '</ul>'; } $html = preg_replace($patern, $text, $html, 1); } else { break; } } while (sizeof($match) == $count); $title = $fname; $patern = '/<img(.*)>/U'; $count = 2; do { preg_match($patern, $html, $match); if (sizeof($match) == $count) { $sfind = $match[1]; //$sfind='<img src="/image.asdf">'; preg_match("/width=(\\d*)/", $sfind, $match2); $w = trim($match2[1]); preg_match("/height=(\\d*)/", $sfind, $match2); $h = trim($match2[1]); if (!$w || $w > $imgmaxwidth) { $w = $imgmaxwidth; } preg_match('/src="(.*\\/)(image.*)"/U', $sfind, $match2); $path = trim($match2[1]); $small = $match2[2]; preg_match('/alt="(.*)".*/U', $sfind, $match2); $alt = trim(@$match2[1]); $alt = html_entity_decode($alt, ENT_QUOTES, 'utf-8'); preg_match('/align="(.*)".*/U', $sfind, $match2); $align = trim($match2[1]); $align = html_entity_decode($align, ENT_QUOTES, 'utf-8'); $big = $images[$small]; if (!$big) { $big = $small; } $isbig = preg_match('/#/', $alt); if ($isbig) { $alt = preg_replace('/#/', '', $alt); } //$i="<IMG title='$alt' src='?*imager/imager.php?w=$w&h=$h&src=".($path.$big)."' align='$align' class='$align' alt='$alt'>"; $i = "<IMG src='?*imager/imager.php?w={$w}&h={$h}&src=" . ($path . $big) . "' align='{$align}' class='{$align}'>"; //urlencode решает проблему с ie7 когда иллюстрации с адресом содержащим пробел не показываются if ($isbig) { $i = "<a target='about:blank' href='?*imager/imager.php?src=" . urlencode($path . $big) . "'>{$i}</a>"; } //$i.='<textarea style="width:500px; height:300px">'.$i.'</textarea>'; $html = preg_replace($patern, $i, $html, 1); } else { break; } } while (sizeof($match) == $count); $patern = "/###\\{(.*)\\}###/U"; //js код do { preg_match($patern, $html, $match); if (sizeof($match) > 0) { $param = $match[1]; $param = strip_tags($param); $param = html_entity_decode($param, ENT_QUOTES, 'utf-8'); $param = preg_replace('/(‘|’)/', "'", $param); $param = preg_replace('/(“|«|»|”)/', '"', $param); $html = preg_replace($patern, $param, $html, 1); } else { break; } } while (sizeof($match) > 1); $patern = "/####.*<table.*>(.*)<\\/table>.*####/U"; do { preg_match($patern, $html, $match); if (sizeof($match) > 0) { $param = $match[1]; $param = preg_replace('/style=".*"/U', '', $param); $param = preg_replace("/style='.*'/U", '', $param); $html = preg_replace($patern, '<table class="table table-striped">' . $param . '</table>', $html, 1); } else { break; } } while (sizeof($match) > 1); $ans['images'] = array(); foreach ($images as $img) { $ans['images'][] = array('src' => $folder . $img); } } else { $html = $data; $images = array(); preg_match_all('/<img.*src="(.*)".*>/U', $html, $match, PREG_PATTERN_ORDER); for ($i = 0, $l = sizeof($match[1]); $i < $l; $i++) { $images[] = array('src' => $match[1][$i]); //Каждая следующая картинка есть уменьшенная копия предыдущей оригинального размера } $ans['images'] = $images; } $r = preg_match('/<h.*>(.*)<\\/h.>/U', $html, $match); if ($r) { $heading = strip_tags($match[1]); } else { $heading = false; } $ans['heading'] = $heading; preg_match_all('/<a.*href="(.*)".*>(.*)<\\/a>/U', $html, $match); $links = array(); foreach ($match[1] as $k => $v) { $title = strip_tags($match[2][$k]); if (!$title) { continue; } $links[] = array('title' => $title, 'href' => $match[1][$k]); } $ans['links'] = $links; $html = trim($html); $html = html_entity_decode($html, ENT_COMPAT, 'UTF-8'); $html = preg_replace('/ /U', '', $html); //bugfix списки в mht порождаются адский символ. в eval-е скрипта недопустим. $ans['html'] = $html; return $ans; }, $args); }
function &imager_makeInfo($src) { $info = imager_readInfo($src); if ($info) { return $info; } $dirs = infra_dirs(); $dir = $dirs['data'] . 'imager/'; @mkdir($dir); $dir .= '.notwater/'; @mkdir($dir); $i = ''; $orig = $dir . infra_forFS($src); while (is_file($orig)) { $orig = $orig . $i; $i .= 'i'; } $r = copy($src, $orig); //по адресу orig не существует файла было проверено if (!$r) { die('Не удалось сохранить оригинал'); } $info = array(); $info['host'] = $_SERVER['HTTP_HOST']; $info['size'] = filesize(infra_tofs($orig)); $info['date'] = date('j.m.Y'); $info['orig'] = infra_toutf($orig); return $info; }
public static function addFiles(&$pos, $dir = false) { $conf = infra_config(); $props = array('producer', 'article'); if (!isset($pos['images'])) { $pos['images'] = array(); } if (!isset($pos['texts'])) { $pos['texts'] = array(); } if (!isset($pos['files'])) { $pos['files'] = array(); } if (!$dir) { $dir = array(); $pth = $conf['catalog']['dir']; if (infra_forr($props, function &($name) use(&$dir, &$pos) { $rname = infra_seq_right($name); $val = infra_seq_get($pos, $rname); if (!$val) { return true; } $dir[] = $val; $r = null; return $r; })) { return; } if ($dir) { $dir = implode('/', $dir) . '/'; $dir = $pth . $dir; } else { $dir = $pth; } } $dir = infra_theme($dir); if (!$dir) { return false; } if (is_dir($dir)) { $paths = glob($dir . '*'); } elseif (is_file($dir)) { $paths = array($dir); $p = infra_srcinfo($dir); $dir = $p['folder']; } infra_forr($paths, function &($p) use(&$pos, $dir) { $d = explode('/', $p); $name = array_pop($d); $n = infra_strtolower($name); $fd = infra_nameinfo($n); $ext = $fd['ext']; //if(!$ext)return; if (!is_file($dir . $name)) { return; } //$name=preg_replace('/\.\w{0,4}$/','',$name); /*$p=pathinfo($p); $name=$p['basename']; $ext=strtolower($p['extension']);*/ $dirs = infra_dirs(); $dir = preg_replace('/^' . str_replace('/', '\\/', $dirs['data']) . '/', '*', $dir); $name = infra_toutf($dir . $name); if ($name[0] == '.') { return; } $im = array('png', 'gif', 'jpg'); $te = array('html', 'tpl', 'mht', 'docx'); if (infra_forr($im, function ($e) use($ext) { if ($ext == $e) { return true; } })) { $pos['images'][] = $name; } elseif (infra_forr($te, function ($e) use($ext) { if ($ext == $e) { return true; } })) { $pos['texts'][] = $name; } else { if ($ext != 'db') { $pos['files'][] = $name; } } $r = null; return $r; }); $pos['images'] = array_unique($pos['images']); $pos['texts'] = array_unique($pos['texts']); $pos['files'] = array_unique($pos['files']); }
/** * Кэширумеая функция, основной разбор. */ public static function parse($src) { $args = array($src, $imgmaxwidth, $previewlen); $param = infra_cache(array($src), 'docx_parse', function ($src, $imgmaxwidth, $previewlen, $re) { $conf = infra_config(); $imgmaxwidth = $conf['files']['imgmaxwidth']; $previewlen = $conf['files']['previewlen']; $cachename = md5($src); $dirs = infra_dirs(); $cachefolder = $dirs['cache'] . 'docx/' . $cachename . '/'; //В винде ингда вылетает о шибка что нет прав удалить какой-то файл в папке и как следствие саму папку //Обновление страницы проходит уже нормально //Полагаю в линукс такой ошибки не будет хз почему возникает @docx_full_del_dir($cachefolder); $path = infra_theme($src); if (!$path) { return array(); } $xmls = docx_getTextFromZippedXML($path, 'word/document.xml', $cachefolder, $re); $rIds = array(); $param = array('folder' => $cachefolder, 'imgmaxwidth' => $imgmaxwidth, 'previewlen' => $previewlen, 'type' => $type, 'rIds' => $rIds); if ($xmls[0]) { $xmlar = docx_dom_to_array($xmls[0]); $xmlar2 = docx_dom_to_array($xmls[1]); foreach ($xmlar2['Relationships']['Relationship'] as $v) { $rIds[$v['Id']] = $v['Target']; } $param['rIds'] = $rIds; $html = docx_each($xmlar, '\\itlife\\files\\docx_analyse', $param); } else { $param['rIds'] = array(); $html = ''; } $param['html'] = $html; return $param; }, $args); unset($param['rIds']); unset($param['type']); unset($param['imgmaxwidth']); unset($param['previewlen']); unset($param['isli']); unset($param['isul']); unset($param['imgnum']); unset($param['folder']); return $param; }
function docx_get($src, $type = 'norm', $re = false) { $debug = $re; $conf = infra_config(); if (@$conf['files'] && @$conf['files']['imgmaxwidth']) { $imgmaxwidth = $conf['files']['imgmaxwidth']; } if (!$imgmaxwidth) { $imgmaxwidth = 1000; } $imgmaxwidth = (int) $imgmaxwidth; $previewlen = 150; $args = array($src, $type, $imgmaxwidth, $previewlen); $dhtml = infra_cache(array($src), 'docx_parse', function ($src, $type, $imgmaxwidth, $previewlen, $debug) { $cachename = md5($src); $dirs = infra_dirs(); $cachefolder = $dirs['cache'] . 'docx/' . $cachename . '/'; //В винде ингда вылетает о шибка что нет прав удалить какой-то файл в папке и как следствие саму папку //Обновление страницы проходит уже нормально //Полагаю в линукс такой ошибки не будет хз почему возникает @docx_full_del_dir($cachefolder); $xmls = docx_getTextFromZippedXML($src, 'word/document.xml', $cachefolder, $debug); $rIds = array(); $param = array('com' => array(), 'folder' => $cachefolder, 'imgmaxwidth' => $imgmaxwidth, 'previewlen' => $previewlen, 'type' => $type, 'rIds' => $rIds); if ($xmls[0]) { $xmlar = docx_dom_to_array($xmls[0]); $xmlar2 = docx_dom_to_array($xmls[1]); foreach ($xmlar2['Relationships']['Relationship'] as $v) { $rIds[$v['Id']] = $v['Target']; } $param['rIds'] = $rIds; $html = docx_each($xmlar, 'docx_analyse', $param); } else { $param['rIds'] = array(); $html = ''; } /*if($debug){ echo $html; echo '<textarea style="width:600px; height:400px">'; echo $html; echo '</textarea>'; echo '<pre>'; print_r($xmlar); }*/ if ($type == 'preview' || $type == 'news') { $p = explode('/', $src); $fname = array_pop($p); $s = infra_toutf($fname); $data = infra_nameinfo($s); //$p=explode("/",$src); //$fname=array_pop($p); //preg_match("/^(\d*)/",$fname,$match); //$fname=infra_toutf(preg_replace('/^\d*/','',$fname)); //$fname=preg_replace('/\.\w{0,4}$/','',$fname); //$fname=trim($fname); //$date=$match[0]; $patern = '/###cut###/U'; $d = preg_split($patern, $html); if (sizeof($d) > 1) { $html = preg_replace($patern, '', $html); $preview = $d[0]; } else { $temphtml = strip_tags($html, '<p>'); //preg_match('/^(<p.*>.{'.$previewlen.'}.*<\/p>)/U',$temphtml,$match); preg_match('/(<p.*>.{1}.*<\\/p>)/U', $temphtml, $match); if (sizeof($match) > 1) { $preview = $match[1]; } else { $preview = $html; } } $preview = preg_replace('/<h1.*<\\/h1>/U', '', $preview); $preview = preg_replace('/<img.*>/U', '', $preview); $preview = preg_replace('/<p.*>\\s*<\\/p>/iU', '', $preview); $preview = preg_replace("/\\s+/", ' ', $preview); $preview = trim($preview); preg_match('/<img.*src=["\'](.*)["\'].*>/U', $html, $match); if ($match && $match[1]) { $img = $match[1]; } else { $img = false; } $filetime = filemtime($src); $data['modified'] = $filetime; if (@$param['links']) { $data['links'] = $param['links']; } if (@$param['heading']) { $data['heading'] = $param['heading']; } //title - depricated if (@$data['name']) { $data['title'] = $data['name']; } if ($img) { $data['img'] = $img; } if (@$param['images']) { $data['images'] = $param['images']; } if ($preview) { $data['preview'] = $preview; } return array($data, $param['com']); } else { return array($html, $param['com']); } }, $args, $re); //$html=$dhtml[0]; //кэш этого место в infrajs в getHTML return $dhtml; }