Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Полезные (интересные и оригинальные) решения

Автор: koc
Дата сообщения: 13.06.2009 14:21
ничего особо сверхъестественного или оригинального, просто удобная (на мой взгляд) обертка для работы со строковыми функциями в виде статического класса. Скачать можно здесь

Там же и скрин того, что выведет файл example.php. Документации пока нет.

В project issues можно писать о найденных багах и предложенях.
Автор: Mars803
Дата сообщения: 28.07.2009 19:06
Ой
Автор: Scary Zet
Дата сообщения: 08.08.2009 19:02

Цитата:
Использование бит в повседневной жизни (например для хранения данных выбора нескольких значений из небольших списков)

[...]

теперь как считывать.. Тут все просто.. если нам необходимо проверить, входит ли выбранное нами значение в то самое уникальное число, используем в запросе:

Код:
$sql = "SELECT * FROM `table` WHERE `unfield` & ".pow(2, ind);


Ваш запрос к БД будет работать очень медленно, так как выборка будет произведена полным перебором строк таблицы. Не стоит так делать.
Автор: Noen
Дата сообщения: 04.09.2009 10:59
Редирект 404 ошибки. (Error 404)
Классической проверкой было (то что предлагают на большинстве страниц в Интернете)

Код: $f = @fopen($myFile, 'r');
if (!empty($f)) {

.....

} else {
header('Status: 404');
header('HTTP/1.1 404 Not Found');
exit;
}
Автор: IFKey
Дата сообщения: 10.09.2009 18:10
Недавно столкнулся с проблемой кодировок, это привело к появлению функции меняющей кодировку значений всего массива:
Цитата:
function iconv_arr($in,$out,$arr)
{
foreach($arr as $key => $value)
{
if(is_array($value))
$arr[$key]=iconv_arr($in,$out,$value);
else
$arr[$key]=iconv($in,$out,$value);
}
return $arr;
}

Пример работы:
Цитата:
iconv_arr("UTF-8","windows-1251",$arr);

Автор: Cheery
Дата сообщения: 20.10.2009 22:21
Собрал тут по кускам проверку валидности мыла..
Работает и под Windows, но с версии выше 5.2

Код:
define('return_email','noreply@domain');
function win_getmxrr($hostname, &$mxhosts, &$mxweight=false) {
if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') return;
if (!is_array ($mxhosts) ) $mxhosts = array();
if (empty($hostname)) return;
$exec='nslookup -type=MX '.escapeshellarg($hostname);
@exec($exec, $output);
if (empty($output)) return;
$i=-1;
foreach ($output as $line) {
$i++;
if (preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.+)$/i", $line, $parts)) {
$mxweight[$i] = trim($parts[1]);
$mxhosts[$i] = trim($parts[2]);
}
if (preg_match('/responsible mail addr = (.+)$/i', $line, $parts)) {
$mxweight[$i] = $i;
$mxhosts[$i] = trim($parts[1]);
}
}
return ($i!=-1);
}

// Define
if (!function_exists('getmxrr')) {
function getmxrr($hostname, &$mxhosts, &$mxweight=false) {
return win_getmxrr($hostname, $mxhosts, $mxweight);
}
}


function verify_email($em,$connect=true)
{
$em=filter_var($em, FILTER_SANITIZE_EMAIL);
if(filter_var($em,FILTER_VALIDATE_EMAIL)) //email looks valid
{
if(!$connect) return true;
list(,$domain)=split('@',$em);
getmxrr($domain, $mxhosts, $weights);
if(!empty($mxhosts)) // there is at least one MX record
{
$lowest=array_keys($weights, min($weights));
if(is_array($lowest))$lowest=$lowest[0];
$domain=$mxhosts[$lowest]; // MX server with lowest priority number
}
// probe connection to the remote SMTP server
$code = 0;
$fp = @fsockopen($domain, 25, $errno, $errstr, 3);
if ($fp) {
send_command($fp, 'HELO '.$_SERVER["HTTP_HOST"]);
send_command($fp, 'MAIL FROM:<'.return_email.'>');
$erg = send_command($fp, 'RCPT TO:<'.$em.'>');
send_command($fp, 'QUIT');
fclose($fp);
$code = intval(substr($erg, 0, 3));
}
if ($code==250||$code==451) return true; //valid email address. 451 for greylisting - might be the correct one
}
return false;
}

function send_command($fp, $out){
fwrite($fp, $out . "\r\n");
return get_data($fp);
}
function get_data($fp){
$s="";
stream_set_timeout($fp, 2);

for($i=0;$i<2;$i++)
$s.=fgets($fp, 1024);

return $s;
}
Автор: OlegKor
Дата сообщения: 03.11.2009 20:04
Приветствую всех!
не знаю на счет интересности и оригинальности, но вот буквально вчера "кровь из носу" понадобилось склонение ФИО в дательный падеж ... И по Инету ничего толком не нашел. Пришлось написать самостоятельно...

Предлагаю Вашему вниманию три функции (Для Фамилии, Имени и Отчества отдельно) И еще одно замечание, делалось мной для украинского языка (но я думаю для русского не сложно будет подправить)

Фамилия в Дательном падеже


Код: // Фамилия в Дательном падеже
function padezSurname ($surname, $sex = 0){

$result = '';

$l = mb_substr(trim($surname),-1,1,"utf-8");

if($sex == 1) { // Если Пол мужской = 1
switch ($l)
{
case 'о': case 'и': case 'я': case 'а':
$result = $surname;
break;

case 'й':
$len = mb_strlen($surname,"utf-8")-2;
$result =mb_substr(trim($surname), 0,$len ,"utf-8").'ому';
break;

default:
$result = $surname . "у";
}
} elseif($sex == 0) { // Если Пол женский = 0

switch ($l)

{
case 'о': case 'и': case 'б': case 'в': case 'г': case 'д': case 'ж': case 'з': case 'і': case 'ї': case 'к': case 'л': case 'м': case 'н': case 'п': case 'р': case 'с': case 'т': case 'ф': case 'х': case 'ц': case 'ч': case 'ш': case 'щ': case 'ь':
$result = $surname;
break;

case 'а':
$len = mb_strlen($surname,"utf-8")-1;
$result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій';
break;

default:
$len = mb_strlen($surname,"utf-8")-2;
$result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій';
}
}

return $result;
}
Автор: 2007GhOsT2007
Дата сообщения: 22.11.2009 21:59
Есть хорошая функция - call_user_func_array, но она удобна в том случае, если параметрами передаются существующие значения. Бывает появляется необходимость передать параметры функции в виде нескольких вложенных функций... Возможно решение не совсем оригинальное, а цель редко встречающаяся, но все же, решил поделиться им.

Код: print(call_func_recurs(array("date", "d.m.Y", array("strtotime", "2009-11-22 00:00:00"))));

function call_func_recurs($a) {
if (is_array($a)) {
for ($i = 0; $i <= count($a); $i++) {
if (is_callable($a[$i])) {
$funct = $a[$i];
unset($a[$i]);
continue;
}
if (is_array($a[$i]))
$a[$i] = call_func_recurs($a[$i]);
}
} else return $a;
if ($funct)
$res = call_user_func_array($funct, $a);
else return $a;
return $res;
}
Автор: karabasss
Дата сообщения: 29.11.2009 12:54
Тоже решил пару кусков из своих исходников выдрать
Распаковщик zip-ов. Пригодится тем у кого php без --with-zip
Поддерживает только методы сжатия deflate и no_compression.
Большинство зипов по умолчанию зажаты именно deflate, так что 95% архивов открывает без проблем. Запароленные не распаковывает.
Распаковывает также и вордовский docx (для чего, собственно, и был сделан, т.к. популярная либа PclZip, спотыкалась на куче нулей, которые ворд щедро пихает в свои файлы, видимо для того, чтобы размер файла не казался подозрительно маленьким )

Код:
<?php
// Radchand (C) radchand(a)mail.ru

$GLOBALS['unzip_error'] = 'Ok'; // Строка с описанием ошибки

/** Главная (и единственная) низкоуровняя ф-я для распаковки архива
// @desc Распаковывает текущий файл в архиве.
// Предназначана для работы в цикле.
// Если $target не задан, то просто перемещает указатель на следующий файл в архиве не распаковывая.
// Чтобы распаковать все файлы в архиве нужно вызывать эту ф-ю с одним и тем же handle до тех пор пока она не вернет false
// Аргументы:
// @param $file - имя файла или handle (возвращает fopen)
// @param $target - имя файла для распаковки, если не совпадает, то просто перемещает указатель в архиве на следующий файл, но возващает имя файла, его размер и пр.
// true - распаковывает любой файл
// @return Возвращает ассоциативный массив:
// FName - имя файла,
// Date, Time - дата и время в 2-х байтном MS-DOS формате,
// ExtractedLen - размер,
// Data - содержимое файла,
// Extra - дополн. данные
// если произошла какая-то ошибка, то возвращает false, скорее всего, последующие вызовы тоже вернут false, т.к. наверняка указатель сползет
// в случае ошибки из-за неподдерживаемого алгоритма распаковки, все же можно прочитать список файлов ($target=false)
*/
function Unzip($file, $target=false)
{
$h = is_string($file) ? fopen($file, 'rb') : $file;
if($h===false)
{ $GLOBALS['unzip_error'] = "Can't open file"; return FALSE; }
$offset = ftell($h);
// ReadLocalFileHeader
$hdr = unpack('V1Sign/v1Ver/v1Flags/v1Method/v1Time/v1Date/V1CRC/V1DataLen/V1ExtractedLen/v1FNameLen/v1ExtraLen', fread($h, 30));
if($hdr['Sign'] == 0x02014b50)
{ $GLOBALS['unzip_error'] = 'End of file'; return FALSE; }
if($hdr['Sign'] != 0x04034b50)
{ $GLOBALS['unzip_error'] = 'Invalid sign!'; return FALSE; }
if($hdr['Flags'] & 0x0008) // Descriptor after data. Need read directory at first.
{ $GLOBALS['unzip_error'] = 'Descriptor after data'; return FALSE; }

$hdr['Offset'] = $offset;
$hdr['FName'] = fread($h, $hdr['FNameLen']);
if($target == $hdr['FName'] || $target === true)
{
if($hdr['Method']!=8 && $hdr['Method']!=0) // only deflate & no_compression method implemented
{ $GLOBALS['unzip_error'] = 'Only deflate & no_compression method implemented'; return FALSE; }
if($hdr['ExtraLen']>0)
$hdr['Extra'] = fread($h, $hdr['ExtraLen']);
if($hdr['DataLen']>0)
{
$hdr['Data'] = fread($h, $hdr['DataLen']);
if($hdr['Flags'] & 0x0001)
{ $GLOBALS['unzip_error'] = 'Encrypted'; return FALSE; }
if($hdr['Method'] == 8)
$hdr['Data'] = gzinflate($hdr['Data']); // deflate
}
if(strlen($hdr['Data']) != $hdr['ExtractedLen']) // bad length
{ $GLOBALS['unzip_error'] = 'Bad length'; return FALSE; }
if(crc32($hdr['Data']) != $hdr['CRC'])
{ $GLOBALS['unzip_error'] = 'Bad CRC'; return FALSE; }
}
else
fseek($h, $hdr['ExtraLen']+$hdr['DataLen'], SEEK_CUR);
if(is_string($file)) fclose($h);
return $hdr;
}

// Пара утилиток

/** @desc возвращает список файлов в архиве
* @param путь к архиву */
function ZipList($file)
{
$ret = array();
$h = fopen($file,'rb');
do {
$data = Unzip($h);
if(isset($data['FName']))
$ret[] = $data['FName'];
} while($data && !feof($h));
fclose($h);
return $ret;
}

/** @desc возвращает содержимое заданного файла из архива
* @param путь к архиву
* @param путь (имя файла) в архиве
*/
function UnzipFile($arcfile, $file)
{
$h = fopen($arcfile, 'rb');
do {
$data = Unzip($h, $file);
if(isset($data['Data']))
{
fclose($h);
return $data['Data'];
}
} while($data && !feof($h));
fclose($h);
return false;
}

/** @desc возвращает ассоц. массив [имяфайла]=содержимое со всеми файлами из архива
* @param путь к архиву */
function UnzipAll($arcfile)
{
$ret = array();
$h = fopen($arcfile, 'rb');
do {
$data = Unzip($h, $file);
if($data && isset($data['FName'], $data['Data']))
$ret[$data['FName']] = $data['Data'];
} while($data && !feof($h));
fclose($h);
return $ret;
}
?>
Автор: suppalib
Дата сообщения: 01.12.2009 10:03
Народ, кто может помочь?.... Нужно сделать "кнопку", которая будет запускать сначала одну программу, выполнять в ней какие-то действия, а потом другую .... У меня затуп .... Даже не знаю как эту хрень обозвать
Автор: Vladson1980
Дата сообщения: 07.01.2010 19:01
Небольшая "XOR-илка" на примитивном алгоритме (практической пользы конечно не много, но мало ли кому надо...)

Код: <?php
/**
* Usage:
* string vladson_crypt1(string data, array seeds)
*
* Example:
* $encoded = vladson_crypt1('123456', array(1, 2, 3));
* $decoded = vladson_crypt1($encoded, array(1, 2, 3));
**/

function vladson_crypt1 ($str, $keys) {
    $str = str_split($str);
    foreach($str as $key=>$val) {
        array_push($keys, (array_sum($keys)&255)*2);
        if (end($keys) > 255)
            array_push($keys, array_pop($keys)-255);
        array_shift($keys);
        $str[$key] = chr(ord($val)^end($keys));
    }
    return implode($str);
}
?>
Автор: KossMoss
Дата сообщения: 20.05.2010 16:56
Функция Alert
Выводит переменную в виде сообщения Alert через Javascript, без вывода на экран (отлично подходит для замены print_r и echo для отладки приложений). Работает с массивами

function alert($value=''){
        if (is_array($value))$value=str_replace("\n",'\\n',print_r($value,true));
        echo "<script>alert('".str_replace("\r",'',str_replace('\\','\\\\',$file.$line).$variable.str_replace("'",'\\\'',str_replace("\n",'\\n',$value)))."')</script>";
}
Автор: RunetMan
Дата сообщения: 11.08.2010 11:31
Лепим "копирайт" на ZIP-архив

Код: <?php

$filepath = 'my_archive.zip';

$zip = new ZipArchive;

if ($zip->open($filepath) === TRUE)

{

//$zip->addFile('/papka/ReadMe_sait.RU.txt', 'ReadMe_sait.RU.txt');

$zip->setArchiveComment('адрес_сайта - супер-пупер-мего сайт!');

$zip->addFromString('адрес_сайта.RU.txt','Скачано с sait.RU');

$zip->close();

echo'гуд';

}

else

{

echo'ой!';

}

?>
Автор: fogx
Дата сообщения: 17.08.2010 12:36
Эта функция принимает 4 переменных
$chislo -- число которому необходимо окончание
$n1 -- текст при еденице (товар, день, рубль)
$n2 -- текст при двух еденицах (товара, дня, рубля)
$n5 -- текст при пяти еденицах (товаров, дней, рублей)


Код:
function true_end($chislo,$n1,$n2,$n5){
$chislo=(int)$chislo;
$ch=substr($chislo,-1);
if ($ch==1){
if (strlen($chislo)>1) $result=substr($chislo,-2,1)==1?$n5:$n1;
else $result=$n1;
}elseif($ch>1&&$ch<5){
if (strlen($chislo)>1) $result=substr($chislo,-2,1)==1?$n5:$n2;
else $result=$n2;
}else{
$result=$n5;
}
return $result;
}
Автор: poyt
Дата сообщения: 01.12.2010 02:56
fogx
Зачем тут используются функции strlen и substr???

Мне больше нравиться другое решение этого вопроса.
Когда передаётся массив вместо нескольких переменных.

Код: /**
* Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
* @param $number Integer Число на основе которого нужно сформировать окончание
* @param $endingsArray Array Массив слов или окончаний для чисел (1, 4, 5),
* например array('яблоко', 'яблока', 'яблок')
* @return String
*/
function getNumEnding($number, $endingArray) {
$number = $number % 100;
if ($number>=11 && $number<=19) {
$ending=$endingArray[2];
}
else {
$i = $number % 10;
switch ($i) {
case (1): $ending = $endingArray[0]; break;
case (2):
case (3):
case (4): $ending = $endingArray[1]; break;
default: $ending = $endingArray[2];
}
}
return $ending;
}
Автор: 1010
Дата сообщения: 08.12.2010 12:50
Делает ч/б копии для всех фаилов в папке


Код:     public function imageCreateGr($append = '_1') {
        foreach ($this->files as $file) {
            $create = 'imagecreatefrom'.$file['typename'];
            $save = 'image'.$file['typename'];

            $im = $create($file['pathname']);
            
            if($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
                $pos = stripos($file['name'], '.'.$file['type']);
                $name = substr($file['name'], 0, $pos);

                $save($im, $this->dir.DIRECTORY_SEPARATOR.$name.$append.'.'.$file['type']);
            }

            imagedestroy($im);
            unset($im);
        }
    }
Автор: The_S
Дата сообщения: 19.12.2010 01:06

Код: // Вычисляет "самый маленький хэш" чего угодно на основе crc32
// Результат 6 - 7 символов [a-z0-9]
function TinyHash() {
    $Value = func_get_args();
    $Crc = crc32(serialize($Value));
    $Crc = sprintf('%u', $Crc);
    $Hash = base_convert($Crc, 10, 36);
    return $Hash;
}
Автор: Uhehesh
Дата сообщения: 10.01.2011 15:02
Иногда требуется знать не только значение переменной, но и её имя. Для этого, я написал следующую функцию:


Код:
function getvarname(&$var)
{
$data = rand(0, 9000) . rand(0, 9000) . rand(0, 9000);
$value = $var;
$var = $data;
foreach($GLOBALS as $key => $val)
{
if($val == $data) $result = $key;
}
$var = $value;
return $result;
}
Автор: fd8080
Дата сообщения: 06.02.2011 10:27
ХОРОШЬ
Автор: The_S
Дата сообщения: 25.02.2011 14:16
Думаю по теме:
Одна фирма проводит своеобразный конкурс на "самую полезную функцию" на PHP. Призы (Ноут, Zend Studio 8, Книга).

Принять участие в конкурсе, отправив свою функцию (или класс) можно тут http://projects.westhost.com/contest/php/

Список решений: http://projects.westhost.com/contest/php/snippet/listing
На данный момент ~ 125 штук.

Довольно все стандартные и примитивные (типа ЧПУрлов и т.п.) , но есть и реально оригинальные и полезные.
Автор: Netsu
Дата сообщения: 04.05.2011 04:01
Функция ресайзит картинки, в том числе анимированные gifы. Если будет не хватать памяти, то выведет ошибку, но не прервет работу скрипта. Требуется imagick.
$image['md5'] - название файла
200 - ширина получившейся картинки


Код: function parse_make_thumb($image) {

// создаем превью
if ($image['width'] <= 200) {

file_put_contents("thumbs/".$image['md5'].".".$image['type'], file_get_contents("images/".$image['md5'].".".$image['type']));
return;

} else {

$xscale = $image['width'] / 200;
$new_width = round($image['width'] * (1 / $xscale));
$new_height = round($image['height'] * (1 / $xscale));

}

$thumb = new Imagick();

try {

$thumb->readImage("images/".$image['md5'].".".$image['type']);

}

catch (ImagickException $e) {

echo "<center><h3>Непотянуло файл: ".$image['md5'].".".$image['type']."</h3></center>";
return 0;

}
//делаем превью, размер меньше, чем у фона, чтобы было куда впихнуть тень
// $thumb->thumbnailImage($new_width, $new_height);
if ($thumb->getNumberImages() > 1) {

foreach ($thumb as $frame) {

$frame->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);

}
//записываем картинку
$thumb->writeImages("thumbs/".$image['md5'].".".$image['type'], 1);

} else {

// $thumb->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);

try {

$thumb->thumbnailImage(200, null);

}

catch (ImagickException $e) {

echo "<center><h3>Непотянуло файл: ".$image['md5'].".".$image['type']."</h3></center>";
return 0;

}

$thumb->writeImage("thumbs/".$image['md5'].".".$image['type']);

}
//подчищаем за собой
$thumb->destroy();

return;

}
Автор: alyent
Дата сообщения: 15.06.2011 02:58
удалено...
Автор: IFKey
Дата сообщения: 01.03.2012 14:45
Мой класс для вывода графиков Google Chart Tools: http://code.google.com/intl/ru-RU/apis/chart/interactive/docs/gallery.html
Класс:
Цитата:
<?
class googleChart
{
var $addColumn = array();
var $addRows = array();
var $options = array();

function chartAddColumn($title,$type='number')
{
$this->addColumn['type'][] = $type; # string | number
$this->addColumn['title'][] = $title;
}

function chartOptions($option,$param)
{
$this->options['option'][] = $option;
$this->options['param'][] = $param;
}

function chartAddRows($title,$param=array())
{
$this->addRows['title'][] = $title;
$this->addRows['param'][] = $param;
}

function chartAddColumnFunc($addColumn)
{
if (empty($addColumn)) {return false;}
foreach ($addColumn['title'] as $k=>$v) {
$r .= "data.addColumn('".$addColumn['type'][$k]."', '".$addColumn['title'][$k]."');\n";
}
return $r;
}

function chartAddRowsFunc($addRows)
{
if (empty($addRows)) {return false;}
foreach ($addRows['title'] as $k=>$v) {
$r .= "\n['".$addRows['title'][$k]."',".$this->chartAddRowsFuncParam($addRows['param'][$k])."],";
}
$r = $this->deLostChar($r);
return $r;
}

function chartOptionFunc($options)
{
if (empty($options)) {return false;}
foreach ($options['option'] as $k=>$v) {
$r .= "\n".$options['option'][$k].": ".$options['param'][$k].",";
}
$r = $this->deLostChar($r);
return $r;
}

function chartAddRowsFuncParam($addRowsParam=array())
{
foreach ($addRowsParam as $v) {
$r .= $v.',';
}
$r = $this->deLostChar($r);
return $r;
}
# $type: BarChart, PieChart, LineChart, ComboChart, ColumnChart, CandlestickChart, BubbleChart, AreaChart
# options('title', 'заголовок');
# options('is3D', 'true'); # для PieChart
function chartDraw($title,$divName,$type='BarChart')
{
print '
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
'.$this->chartAddColumnFunc($this->addColumn).'
data.addRows([
'.$this->chartAddRowsFunc($this->addRows).'
]);
var options = {
'.$this->chartOptionFunc($this->options).'
};
var chart = new google.visualization.'.$type.'(document.getElementById("'.$divName.'"));
chart.draw(data, options);
}
</script>';

$this->addColumn = array();
$this->addRows = array();
$this->options = array();
}
}
?>

Использование:

Цитата:
<?
$gChart=new googleChart;

$gChart->chartAddColumn('day','string');
$gChart->chartAddColumn('хосты','number');
$gChart->chartAddColumn('хиты','number');

$gChart->chartOptions('title',"'Статистика посещений'");

$gChart->chartAddRows('за сегодня',array(10,18));
$gChart->chartAddRows('за неделю',array(75,232));
$gChart->chartAddRows('за месяц',array(334,749));

$gChart->chartDraw('Статистика посещений','chart_div','BarChart');
?>
<div id="chart_div" style="width:700px;height:200px;"></div>
Реализован не весь функционал предоставленный гуглом, так что можете доработать по своему вкусу
Автор: vof4ikWP
Дата сообщения: 21.06.2012 19:58
Генерация имени папки с порядковыми номерами


Код:
function getNextDirName($directory = './', $prefix = 'store')
{
    $founded = preg_grep('/' . $prefix . '/i', scandir($directory));
    return $prefix . (max(array_map('intval', array_map('str_replace',
        array_fill(0, count($founded), $prefix),
        array_fill(0, count($founded), ''), $founded))) + 1);
}
Автор: The_S
Дата сообщения: 01.07.2012 14:43

Цитата:
перевод xml текста в php массив 1 строкой

Это простой метод для XML-ки без атрибутов, но если есть аттрибуты, то они потеряются.
XML to Array без потери атрибутов.
http://whoooopblog.appspot.com/xml.txt
Автор: KazZan
Дата сообщения: 04.07.2012 10:23
Насчет XML, дали мне как то задание по синхронизации двух хмл,вроде ничего сложного,использовал обыкновенные функции парсера XML... небольшие трудности возникли при правильной организации xml структуры из ассоциативного массива в готовую законченную структуру DOM хмл. И тогда я наткнулся на довольно интересный класс предлагающий решить эту задачу.
вот собсно ссылка(мож кому пригодитцо) http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes/
Автор: Ruslanski
Дата сообщения: 21.07.2012 00:28
Ребята помогите пожалуйста разобраться с iframe кодом,
Автор: kwadrox1980
Дата сообщения: 07.09.2012 15:02
Помогло спасибо!
Автор: hawik
Дата сообщения: 28.09.2012 11:55
Простая функция для записи лога в файл, с временем.
Удобна для отладки или записи критических ситуаций.


Код:
function toLog($str) {

    $logfilename = "runs.log"; // log filename
    $fp = fopen ($logfilename, "a");
    $s_time = date("Y-m-d H:i:s");
    fputs($fp, $s_time. "=>".$str ."\n");
    fclose($fp);
}
Автор: R3Pa4eK
Дата сообщения: 11.11.2012 10:49

Код:
function validusername($username) {
//Функция для проверки имени пользователя (при регистрации, например)
    if ($username == "")
     return false;

    $allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".
        "абвгдеёжзиклмнопрстуфхшщэюяьъАБВГДЕЁЖЗИКЛМНОПРСТУФХШЩЭЮЯЬЪ";

    for ($i = 0; $i < strlen($username); ++$i)
     if (strpos($allowedchars, $username[$i]) === false)
     return false;

    return true;
}

function validemail($email) {
//Проверка мыла
return preg_match('/^[\w.-]+@([\w.-]+\.)+[a-z]{2,6}$/is', $email);
}

function validfilename($name) {
//Проверка имени файла
return preg_match('/^[^\0-\x1f:\\\\\/?*\xff#<>|]+$/si', $name);
}

function format_comment($text, $strip_html = true) {
//bb-code и не только
    $s = $text;
$s = preg_replace_callback("#\[code\](.*?)\[/code\]#si","code_nobb",$s);
    $s = str_replace(" ", " &nbsp;", $s);
    $s = nl2br($s);
    
    $bb[] = "#\[img\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#i";
    $html[] = "<img class=\"linked-image\" src=\"\\1\" border=\"0\" alt=\"\\1\" title=\"\\1\" />";
    $bb[] = "#\[img=([a-zA-Z]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\2\" align=\"\\1\" border=\"0\" alt=\"\\2\" title=\"\\2\" />";
    $bb[] = "#\[img\ alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\2\" align=\"\\1\" border=\"0\" alt=\"\\1\" title=\"\\1\" />";
    $bb[] = "#\[img=([a-zA-Z]+) alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\3\" align=\"\\1\" border=\"0\" alt=\"\\2\" title=\"\\2\" />";
    $bb[] = "#\[kp=([0-9]+)\]#is";
    $html[] = "<a href=\"http://www.kinopoisk.ru/level/1/film/\\1/\" rel=\"nofollow\"><img src=\"http://www.kinopoisk.ru/rating/\\1.gif/\" alt=\"Kinopoisk\" title=\"Kinopoisk\" border=\"0\" /></a>";
    $bb[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
    $html[] = "<a href=\"\\1\" title=\"\\1\">\\1</a>";
    $bb[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
    $html[] = "<a href=\"http://\\1\" title=\"\\1\">\\1</a>";
    $bb[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    $html[] = "<a href=\"\\1\" title=\"\\1\">\\2</a>";
    $bb[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    $html[] = "<a href=\"http://\\1\" title=\"\\1\">\\3</a>";
    $bb[] = "/\[url=([^()<>\s]+?)\]((\s|.)+?)\[\/url\]/i";
    $html[] = "<a href=\"\\1\">\\2</a>";
    $bb[] = "/\[url\]([^()<>\s]+?)\[\/url\]/i";
    $html[] = "<a href=\"\\1\">\\1</a>";
    $bb[] = "#\[mail\](\S+?)\[/mail\]#i";
    $html[] = "<a href=\"mailto:\\1\">\\1</a>";
    $bb[] = "#\[mail\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/mail\]#i";
    $html[] = "<a href=\"mailto:\\1\">\\2</a>";
    $bb[] = "#\[color=(\#[0-9A-F]{6}|[a-z]+)\](.*?)\[/color\]#si";
    $html[] = "<span style=\"color: \\1\">\\2</span>";
    $bb[] = "#\[(font|family)=([A-Za-z ]+)\](.*?)\[/\\1\]#si";
    $html[] = "<span style=\"font-family: \\2\">\\3</span>";
    $bb[] = "#\[size=([0-9]+)\](.*?)\[/size\]#si";
    $html[] = "<span style=\"font-size: \\1\">\\2</span>";
    $bb[] = "#\[(left|right|center|justify)\](.*?)\[/\\1\]#is";
    $html[] = "<div align=\"\\1\">\\2</div>";
    $bb[] = "#\[b\](.*?)\[/b\]#si";
    $html[] = "<b>\\1</b>";
    $bb[] = "#\[i\](.*?)\[/i\]#si";
    $html[] = "<i>\\1</i>";
    $bb[] = "#\[u\](.*?)\[/u\]#si";
    $html[] = "<u>\\1</u>";
    $bb[] = "#\[s\](.*?)\[/s\]#si";
    $html[] = "<s>\\1</s>";
    $bb[] = "#\[li\]#si";
    $html[] = "<li>";
    $bb[] = "#\[hr\]#si";
    $html[] = "<hr>";
    
    $s = preg_replace($bb, $html, $s);
    
    return $s;
}

Страницы: 12345678910

Предыдущая тема: Perl: Полезные решения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.