Files
Metadata_PHP/metadata/include/tools.php

473 lines
15 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// Из файла file.js делаем file_v123456789.js добавив время
function getScript($path)
{
if (file_exists($_SERVER['DOCUMENT_ROOT'].$path))
{
return '<script src="'.beforeLast($path,'.').'_v'.filectime($_SERVER['DOCUMENT_ROOT'].$path).'.'.afterLast($path,'.').'"></script>'."\n";
}
return '';
}
//Функция для перевода текста без применения GetText "trt("
function trt($text)
{
global $db,$Schema;
$result='';
$sql='select translation from '.$Schema.'_translations where del=false and language_id='.$_SESSION["LNG"].' and identifier=\''.$text.'\';';
//$sql='select translation from main._translations where del=false and language_id=(select id from main._languages where short_name=\''.$_SESSION["LNG"].'\') and identifier=\''.$text.'\';';
$res = NULL;
try
{
$res = $db->query($sql);
}catch (Exception $e)
{
echo $e->getMessage();
}
if($res!=NULL && $res->rowCount()>0)
{
while ($row = $res->fetch(PDO::FETCH_NUM))
{
$result=$row[0];
}
}else
{
$result=str_replace("_", " ", $text);
}
return $result;
}
//Перевод для строки в которой встречаются подстроки вида: trt('')
function trts($text)
{
$result='';
$pLen=4; //Длина преамбулы trt(
$cut=0;
$from = 0; // Позиция поиска для итерации
while (true)
{
$pos1 = strpos($text, 'trt(', $from);
if($pos1 !== false)
{
$from = $pos1+$pLen+1;
$pos2 = false;
if($text[$pos1+$pLen] == '"') $pos2 = strpos($text, '")', $from);
if($text[$pos1+$pLen] == '\'') $pos2 = strpos($text, '\')', $from);
if($pos2 !== false)
{
$result.=substr($text, $cut, $pos1 - $cut );
$toTranslate=substr($text, $pos1+$pLen+1, $pos2 - $pos1 - $pLen-1 );
$result.=trt($toTranslate);
$cut=$pos2+2;
$from = $pos2;
}
}else break;
}
$result.=substr($text, $cut); //Копируем остатки
return $result;
}
//Выбираю из текста ${конкретные} слова для перевода
function trs($text)
{
$pos1=0;
while(true)
{
$pos1 = strpos($text, '${',$pos1);
if($pos1 !== false)
{
$pos2 = strpos($text, '}', $pos1);
if($pos1 !== false)
{
$sub=substr($text,$pos1+2,$pos2-$pos1-2);
$text=substr($text,0, $pos1).trt($sub).substr($text,$pos2+1);
}else
{
break;
}
}else
{
break;
}
}
return $text;
}
//Получить разрешения для текущего пользователя
function getAccess($key)
{
global $db;
$result=false;
if(isset($_SESSION['USER_ID']))
$sql="select main.p_getaccess(".$_SESSION['USER_ID'].",'".$key."') as acc;";
else
$sql="select main.p_getaccess(0,'".$key."') as acc;";
try
{
$res = $db->query($sql);
}catch (Exception $e)
{
echo $e->getMessage();
}
if($res!=NULL && $res->rowCount()>0)
{
while ($row = $res->fetch(PDO::FETCH_NUM))
{
$result=$row[0];
}
}
return $result;
}
function delPHPExt($fName)
{
$pos = strrpos($fName, '.')+1;
if(strtolower(substr($fName,$pos))=='php')
{
return substr($fName,0,$pos).'VIRUS';
}else {
return $fName;
}
}
function getURLText($url,$data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, trim($url));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_HEADER,0); //Change this to a 1 to return headers
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = trim(curl_exec($ch));
curl_close($ch);
return $data;
}
// array imageResize (string $src, string $dest, integer $width, integer $height);
// $src - имя исходного файла
// $dest - имя генерируемого файла
// $width, $height - максимальные ширина и высота генерируемого изображения
// возвращает массив (0=>$width, 1=>$height) с шириной и высотой получившегося изображения
function imageResize ($src, $dest, $width, $height)
{
if (!file_exists($src)) return false;
if (($size=getimagesize($src))===false) return false;
$format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));
$icfunc='imagecreatefrom'.$format;
if (!function_exists($icfunc)) return false;
$x_ratio=$width/$size[0];
$y_ratio=$height/$size[1];
$ratio=min($x_ratio, $y_ratio);
$use_x_ratio=($x_ratio==$ratio);
$new_width=$use_x_ratio?$width:floor($size[0]*$ratio);
$new_height=!$use_x_ratio?$height:floor($size[1]*$ratio);
$new_left=$use_x_ratio?0:floor(($width-$new_width)/2);
$new_top=!$use_x_ratio?0:floor(($height-$new_height)/2);
$isrc=$icfunc($src);
$idest=imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
//Пишем в файл
if ($format=='jpeg') imagejpeg($idest, $dest, 70);
else if ($format=='gif') imagegif($idest, $dest);
else imagepng($idest, $dest, 7);
imagedestroy($isrc);
imagedestroy($idest);
return array($new_width, $new_height);
}
//Залить недостающие края заданным цветом (использую для фото без прозрачности для удобства в HTML верстке)
function imageFillBorder($src, $dest, $width, $height){
if (!file_exists($src)) return false;
if (($size=getimagesize($src))===false) return false;
$format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));
// создание jpg изображения
if ($format=='jpeg')
{
if(!$oldImg = imagecreatefromjpeg($src))
{
error_log('Error imagecreatefromjpeg '.$_SERVER['REQUEST_URI']);
}
}else if ($format=='gif') $oldImg = imagecreatefromgif($src);
else $oldImg = imagecreatefrompng($src);
//Создаю новое изображение
$newImg=imagecreatetruecolor($width, $height);
$background_color = imagecolorallocate($newImg, 255, 255, 255);
imagefill($newImg, 0, 0, $background_color);
//Ищем центр
$x = ($width - imagesx($oldImg)) / 2;
$y = ($height - imagesy($oldImg)) / 2;
imagecopy($newImg, $oldImg, $x, $y, 0, 0, imagesx($oldImg), imagesy($oldImg));
//Пишем в файл
if ($format=='jpeg') imagejpeg($newImg,$dest);
else if ($format=='gif') imagegif($newImg,$dest);
else imagepng($newImg,$dest);
// освобождаем память
imagedestroy($oldImg);
imagedestroy($newImg);
}
//Водяной знак (размножит по поверхности одного изображения другое)
function watermark($src,$stm)
{
if (!file_exists($src) || !file_exists($stm)) return false;
if (($size=getimagesize($src))===false) return false;
$format=strtolower(substr($size['mime'],strpos($size['mime'],'/')+1));
// создание водяного знака в формате png
$watermark = imagecreatefrompng($stm);
// получаем ширину и высоту
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// создание jpg изображения
if ($format=='jpeg')
{
if(!$image = imagecreatefromjpeg($src))
{
error_log('Error imagecreatefromjpeg '.$_SERVER['REQUEST_URI']);
}
}else if ($format=='gif') $image = imagecreatefromgif($src);
else $image = imagecreatefrompng($src);
//Выясняем количество повторов по оси X и по Y
$dx=ceil($size[0] / $watermark_width);
$dy=ceil($size[1] / $watermark_height);
imagealphablending($image, true);
imagealphablending($watermark, true);
// создаём новое изображение
for($y=0;$y<$dy;$y++)
for($x=0;$x<$dx;$x++)
imagecopy($image, $watermark, $x * $watermark_width, $y * $watermark_height, 0, 0, $watermark_width, $watermark_height);
//Пишем в файл
if ($format=='jpeg') imagejpeg($image,$src);
else if ($format=='gif') imagegif($image,$src);
else imagepng($image,$src);
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
}
//вернёт только цифры
function getInt($str)
{
$res='';
for($i=0;$i<strlen($str);$i++)
{
if($str[$i]=='-'||$str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
$res.=$str[$i];
}
return $res;
}
//вернёт только цифры
function getUInt($str)
{
$res='';
for($i=0;$i<strlen($str);$i++)
{
if($str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
$res.=$str[$i];
}
return $res;
}
//вернёт только цифры
function getPhoneNum($str)
{
$res='';
for($i=0;$i<strlen($str);$i++)
{
if($str[$i]=='+'||$str[$i]=='0'||$str[$i]=='1'||$str[$i]=='2'||$str[$i]=='3'||$str[$i]=='4'||$str[$i]=='5'||$str[$i]=='6'||$str[$i]=='7'||$str[$i]=='8'||$str[$i]=='9')
$res.=$str[$i];
}
return $res;
}
function translit($str)
{
$rus = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
$lat = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z', 'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F', 'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a', 'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch', 'y', 'y', 'y', 'e', 'yu', 'ya');
return str_replace($rus, $lat, $str);
}
//Расширение файла транслитерованное в строчных буквах
function getExtension($fileName)
{
return strtolower(translit(substr($fileName, strrpos($fileName, '.') + 1)));
}
//Проверка емайла на валидность
function is_email($email)
{
if (function_exists("filter_var"))
{
$s=filter_var($email, FILTER_VALIDATE_EMAIL);
return !empty($s);
}
$p = '/^[a-z0-9!#$%&*+-=?^_`{|}~]+(\.[a-z0-9!#$%&*+-=?^_`{|}~]+)*';
$p.= '@([-a-z0-9]+\.)+([a-z]{2,3}';
$p.= '|info|arpa|aero|coop|name|museum|mobi)$/ix';
return preg_match($p, $email);
}
function deleteTempFiles($dir)
{
$time_sec=time(); // текущее время
if (is_dir($dir))
{
$dh = opendir($dir);
if ($dh)
{
while (($file = readdir($dh)) !== false)
{
if($file == '..' || $file == '.') continue;
$time_file=filemtime($dir.$file); // время изменения файла
$time=$time_sec-$time_file; // тепрь узнаем сколько прошло времени (в секундах)
if($time>24*60*60) unlink($dir.$file);
}
closedir($dh);
}
}
}
//Генерация пароля
function getPassword($max)
{
$chars="qazxswedcvfrtgbnhyujmkiolp1234567890";
$size=StrLen($chars)-1;
$password='';
while($max--)
$password.=$chars[rand(0,$size)];
return $password;
}
//Полный путь к текущему URL включая http и название скрипта
function selfURL()
{
if(!isset($_SERVER['REQUEST_URI'])){ $suri = $_SERVER['PHP_SELF']; }
else { $suri = $_SERVER['REQUEST_URI']; }
$s = empty($_SERVER["HTTPS"]) ? '' : (($_SERVER["HTTPS"] == "on") ? "s" : "");
$sp=strtolower($_SERVER["SERVER_PROTOCOL"]);
$pr = substr($sp,0,strpos($sp,"/")).$s;
$pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $pr."://".$_SERVER['SERVER_NAME'].$pt.$suri;
}
//Путь без файла пример: http://truemisha.ru
function selfDomain()
{
//if(!isset($_SERVER['REQUEST_URI'])) $suri = $_SERVER['PHP_SELF'];
//else $suri = $_SERVER['REQUEST_URI'];
$s = empty($_SERVER["HTTPS"]) ? '' : (($_SERVER["HTTPS"] == "on") ? "s" : "");
$sp=strtolower($_SERVER["SERVER_PROTOCOL"]);
$pr = substr($sp,0,strpos($sp,"/")).$s;
$pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $pr."://".$_SERVER['SERVER_NAME'].$pt;//.$suri;
}
//Строка до последнего найденого символа если символа нет то всю строку
function beforeLast(&$str,$ch)
{
return substr($str, 0, strrpos($str, $ch));
}
//Строка после последнего найденого символа если символа нет то всю строку
function afterLast(&$str,$ch)
{
return substr($str, strrpos($str, $ch)+strlen($ch));
}
//Строка до первого попавшегося символа
function beforeFirst(&$str,$ch)
{
return substr($str, 0, strpos($str, $ch));
}
//Строка после первого попавшегося символа
function afterFirst(&$str,$ch)
{
return substr($str, strpos($str, $ch)+strlen($ch));
}
/**
* Вернёт подстроку если символа нет то всю строку
* @param string $str
* @param string $chr
* @return string Подстрока
*/
function cutStr(&$str,$chr)
{
$pos = strpos($str, $chr);
if($pos===false)
{
return $str;
}else
{
$buf = substr($str, 0, $pos);
$str = substr($str, $pos + strlen($chr));
return $buf;
}
}
//Вырезаеи всё после заданого разделителя удаляя разделитель если разделителя нет возвращает всю строку
//$fstr - Разделитель
//$num - На каком разделителе остановиться
function cutAfterLast(&$sstr,$fstr,$num = 1)
{
$sub='';
$pos=strlen($sstr);
for($i=0;$i<$num;$i++)
{
$pos = strripos($sstr, $fstr, $pos-strlen($sstr)-1);
if($pos === false) { break; }
}
if($pos === false)
{
$sub=$sstr;
$sstr='';
return $sub;
}else
{
$sub = substr( $sstr , $pos + strlen($fstr));
$sstr = substr( $sstr , 0, $pos);
return $sub;
}
}
//Зачем коментил?
//Отрезаем от строки всё до заданой подстроки если подстроки нет отрезается вся строка
function cutBeforeFirst(&$sstr,$fstr)
{
$sub='';
$pos = strpos($sstr, $fstr);
if($pos === false)
{
$sub=$sstr;
$sstr='';
return $sub;
}else
{
$sub = substr( $sstr , 0, $pos);
$sstr = substr( $sstr , $pos + strlen($fstr));
return $sub;
}
}