В xyz
This commit is contained in:
@ -1,68 +0,0 @@
|
||||
<?php
|
||||
@session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);
|
||||
//if(isset($_SESSION['REMOTE_ADDR']) && $_SESSION['REMOTE_ADDR'] != $_SERVER['REMOTE_ADDR']) unset($_SESSION["USER_ID"]); //Делаемся не авторизованным если зашли с другого ip адреса
|
||||
if (isset($_REQUEST['id'])) $id = $_REQUEST['id']; else $id = '';
|
||||
|
||||
$width = 115; //Ширина изображения
|
||||
$height = 40; //Высота изображения
|
||||
$font_size = 14; //Размер шрифта
|
||||
$let_amount = 5; //Количество символов, которые нужно набрать
|
||||
$fon_let_amount = 40; //Количество символов, которые находятся на фоне
|
||||
$path_fonts = getcwd().'/fonts/'; //Путь к шрифтам
|
||||
|
||||
//$letters = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','9');
|
||||
$letters = array('0','1','2','3','4','5','6','7','8','9');
|
||||
//$colors = array('100','200','150','170','190','210','190','160','170','190','210'); //для тёмного стиля
|
||||
$colors = array('50','100','75','85','95','105','90','80','85','95','105'); //Для светлого стиля
|
||||
|
||||
$src = imagecreatetruecolor($width,$height);
|
||||
//$fon = imagecolorallocate($src,58,58,58); //Для тёмного стиля
|
||||
$fon = imagecolorallocate($src,241,241,241); //Для светлого стиля
|
||||
imagefill($src,0,0,$fon);
|
||||
|
||||
$fonts = array();
|
||||
$dir=opendir($path_fonts);
|
||||
while($fontName = readdir($dir))
|
||||
{
|
||||
if($fontName != "." && $fontName != ".." && pathinfo($fontName, PATHINFO_EXTENSION)=='ttf')
|
||||
{
|
||||
$fonts[] = $fontName;
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
|
||||
for($i=0;$i<$fon_let_amount;$i++)
|
||||
{
|
||||
$color = imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100);
|
||||
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||
$size = rand($font_size-2,$font_size+2);
|
||||
imagettftext(
|
||||
$src,
|
||||
$size,
|
||||
rand(0,45),
|
||||
rand((int)($width*0.1),(int)($width-$width*0.1)),
|
||||
rand((int)($height*0.2),$height),
|
||||
$color,
|
||||
$font,
|
||||
$letter
|
||||
);
|
||||
}
|
||||
|
||||
for($i=0;$i<$let_amount;$i++)
|
||||
{
|
||||
$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],rand(20,40));
|
||||
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||
$size = rand((int)($font_size*2.1-2),(int)($font_size*2.1+2));
|
||||
$x = (int)(($i+0.9)*$font_size + rand(4,7));
|
||||
$y = (int)((($height*2.3)/3) + rand(0,5));
|
||||
$cod[] = $letter;
|
||||
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
|
||||
}
|
||||
|
||||
$_SESSION['secpic'.$id] = implode('',$cod);
|
||||
|
||||
header ("Content-type: image/gif");
|
||||
imagegif($src);
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
//Для одностраничного приложения с AJAX запросами для определения времени жизни сесии
|
||||
//$prolong==true для продления виртуальной сессии
|
||||
function startSession($prolong=true)
|
||||
{
|
||||
$sessionLifetime = 3600; //В секундах (время жизни должно быть меньше чем session.gc_maxlifetime там значение по умолчанию: 1440/60=24 минутs (60*60=3600 то это час))
|
||||
if (!@session_start()){
|
||||
return false;
|
||||
}
|
||||
$t = time();
|
||||
if(!isset($_SESSION['lastactivity']) || $prolong){
|
||||
$_SESSION['lastactivity']=$t;
|
||||
}
|
||||
if ( $t-$_SESSION['lastactivity'] >= $sessionLifetime )
|
||||
{
|
||||
$t=$_SESSION['lastactivity'];
|
||||
//session_unset(); Удалить все переменные сессии (устарела)
|
||||
//$_SESSION = array();
|
||||
session_reset(); // Удалить все переменные сессии
|
||||
$_SESSION['lastactivity']=$t;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -24,7 +24,7 @@ $(document).ready(function() {
|
||||
|
||||
var swfu = new SWFUpload(
|
||||
{
|
||||
upload_url : "upload.php",
|
||||
upload_url : "upload.xyz",
|
||||
flash_url : "swfupload.swf",
|
||||
button_placeholder_id : "uploadButton",
|
||||
|
||||
|
||||
@ -1,514 +0,0 @@
|
||||
<?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)
|
||||
{
|
||||
if(!$text) return '';
|
||||
$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;
|
||||
$sql="select main.p_getaccess(:user_id,:key) as acc;";
|
||||
$stmt = $db->prepare($sql);
|
||||
if(isset($_SESSION['USER_ID']))
|
||||
$stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT);
|
||||
else
|
||||
$stmt->bindValue(':user_id', 0, PDO::PARAM_INT);
|
||||
$stmt->bindValue(':key', $key, PDO::PARAM_STR);
|
||||
$res=null;
|
||||
try
|
||||
{
|
||||
$res=$stmt->execute();
|
||||
}catch (Exception $e)
|
||||
{
|
||||
echo $e->getMessage();
|
||||
}
|
||||
if($res && $stmt->rowCount()>0)
|
||||
{
|
||||
while ($row = $stmt->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 getFilesTree($dir,$cut="",$result = null){
|
||||
if($result==null)
|
||||
$result = new stdClass();
|
||||
|
||||
if (is_dir($dir))
|
||||
{
|
||||
$result->list = array();
|
||||
|
||||
$dh = opendir($dir);
|
||||
if ($dh)
|
||||
{
|
||||
while (($file = readdir($dh)) !== false)
|
||||
{
|
||||
if($file == '..' || $file == '.') continue;
|
||||
|
||||
if(is_dir($dir.DIRECTORY_SEPARATOR.$file)){
|
||||
$sub = new stdClass();
|
||||
$sub->name=$file;
|
||||
$sub->path=$dir.DIRECTORY_SEPARATOR.$file;
|
||||
if($cut) $sub->path = str_replace($cut, "",$sub->path);
|
||||
array_push($result->list, $sub);
|
||||
getFilesTree($dir.DIRECTORY_SEPARATOR.$file, $cut, $sub);
|
||||
}else{
|
||||
$sub = new stdClass();
|
||||
$sub->name=$file;
|
||||
$sub->path=$dir.DIRECTORY_SEPARATOR.$file;
|
||||
if($cut) $sub->path = str_replace($cut, "",$sub->path);
|
||||
array_push($result->list, $sub);
|
||||
}
|
||||
|
||||
}
|
||||
closedir($dh);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
//Генерация пароля
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -1,172 +0,0 @@
|
||||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Вернуть строку по DOMNode
|
||||
* @param DOMNode $node Узел XML
|
||||
* @return string
|
||||
*/
|
||||
function getXML($node)
|
||||
{
|
||||
if($node==null) return '';
|
||||
return $node->ownerDocument->saveXML($node);
|
||||
}
|
||||
/**
|
||||
* Найти первый попавшийся узел с заданным именем nodeName.
|
||||
* @param DOMNode $node Узел.
|
||||
* @param string $nodename Название узла.
|
||||
* @return DOMNode Найденный узел либо null.
|
||||
*/
|
||||
function findNode($node, $nodename)
|
||||
{
|
||||
if($node==null) return null;
|
||||
$nextNode = $node->firstChild;
|
||||
while ($nextNode != null)
|
||||
{
|
||||
if($nextNode->nodeName==$nodename)
|
||||
{
|
||||
return $nextNode;
|
||||
}
|
||||
$nextNode=$nextNode->nextSibling;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Найти первый попавшийся узел с заданным именем nodeName и атрибутом $attribute со значением $val.
|
||||
* @param <type> $node
|
||||
* @param <type> $nodename
|
||||
* @param <type> $attribute
|
||||
* @param <type> $val
|
||||
* @return <type>
|
||||
*/
|
||||
function findNodeOnAttribute($node, $nodename,$attribute,$val)
|
||||
{
|
||||
if($node==null) return null;
|
||||
$nextNode = $node->firstChild;
|
||||
while ($nextNode != null)
|
||||
{
|
||||
if(($nextNode->nodeName==$nodename)&&($nextNode->getAttribute($attribute)==$val))
|
||||
{
|
||||
return $nextNode;
|
||||
}
|
||||
$nextNode=$nextNode->nextSibling;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Вернуть первый попавшийся узел среди всех дочерних (без рекурсии).
|
||||
* @param XMLNode $node Родительский узел.
|
||||
* @param String $nodename Название узла.
|
||||
* @return XMLNode Найденный узел
|
||||
*/
|
||||
function findFirstNode($node, $nodename)
|
||||
{
|
||||
$mas=array();
|
||||
$pos=0;
|
||||
$mas[$pos] = $node->firstChild;
|
||||
while ($mas[$pos])
|
||||
{
|
||||
if($mas[$pos]->nodeName==$nodename)
|
||||
{
|
||||
return $mas[$pos];
|
||||
}
|
||||
if($mas[$pos]->firstChild)
|
||||
{
|
||||
$pos++;
|
||||
$mas[$pos]=$mas[$pos-1]->firstChild;
|
||||
}else
|
||||
{
|
||||
//если не идёт дальше пытаемся подняться в верх по дереву
|
||||
while (true)
|
||||
{
|
||||
$mas[$pos] = $mas[$pos]->nextSibling;
|
||||
if (!$mas[$pos])
|
||||
{
|
||||
if($pos>0){ $pos--; }else{ break; }
|
||||
}else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
//рекурсию не буду использовать, обойдусь массивом вложенности
|
||||
function findFirstNodeOnAttribute($node, $nodename,$attribute,$val)
|
||||
{
|
||||
$mas=array();
|
||||
$pos=0;
|
||||
$mas[$pos] = $node->firstChild;
|
||||
while ($mas[$pos])
|
||||
{
|
||||
if(($mas[$pos]->nodeName==$nodename)&&($mas[$pos]->getAttribute($attribute)==$val))
|
||||
{
|
||||
return $mas[$pos];
|
||||
}
|
||||
if($mas[$pos]->firstChild)
|
||||
{
|
||||
$pos++;
|
||||
$mas[$pos]=$mas[$pos-1]->firstChild;
|
||||
}else
|
||||
{
|
||||
//если не идёт дальше пытаемся подняться в верх по дереву
|
||||
while (true)
|
||||
{
|
||||
$mas[$pos] = $mas[$pos]->nextSibling;
|
||||
if (!$mas[$pos])
|
||||
{
|
||||
if($pos>0){ $pos--; }else{ break; }
|
||||
}else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
//найти узелы по пути "node1->node2"
|
||||
function findNodeOnPath($node, $path)
|
||||
{
|
||||
if($node==null) return null;
|
||||
$params=explode("/",$path);
|
||||
for($i=0;$i<count($params);$i++)
|
||||
{
|
||||
if($node==null) return null;
|
||||
$node=findNode($node,$params[$i]);
|
||||
}
|
||||
return $node;
|
||||
}
|
||||
/**
|
||||
* Вернёт первую CDATA секцию если её нет то создаст.
|
||||
* @param DOMNode $node Узел XML.
|
||||
* @return DOMCdataSection Узел CDATA либо null.
|
||||
*/
|
||||
function getCdata($node)
|
||||
{
|
||||
if($node==null) return null;
|
||||
$result=findNode($node,'#cdata-section');
|
||||
if($result==null)
|
||||
{
|
||||
$result=$node->ownerDocument->createCDATASection('');
|
||||
$node->appendChild($result);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить строку данных из первой попавшейся CDATA.
|
||||
* @param DOMNode $node Узел XML.
|
||||
* @return String Строка результата
|
||||
*/
|
||||
function getCdataValue($node)
|
||||
{
|
||||
$n=findNode($node,'#cdata-section');
|
||||
if($n!=null)
|
||||
{ return $n->nodeValue;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user