39 заметок с тегом

php РСС

Ctrl +  Позднее

7 декабря 2010, 13:26

PHP: finish end tags in piece of HTML (close HTML tags)

Иногда нужно вывести кусок html, не весь, и что бы не сломать дизайн, многие «разработчики» (помню даже в яндексе такое видел), вставляют такой код:
</p></li></ul></td></tr></th></table></div>

Как говорится — это пиздец, потому рекомендую велосипед ниже, так как времени изобретать свой не нашлось :)
/**
 * close all open xhtml tags at the end of the string
 *
 * @param string $html
 * @return string
 * @author Milian Wolff <mail@milianw.de>
 */
 
function closetags($html) {
	#put all opened tags into an array
	preg_match_all('#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
	$openedtags = $result[1];
	
	#put all closed tags into an array
	preg_match_all('#</([a-z]+)>#iU', $html, $result);
	$closedtags = $result[1];
	$len_opened = count($openedtags);
	
	# all tags are closed
	if (count($closedtags) == $len_opened) {
		return $html;
	}
	$openedtags = array_reverse($openedtags);
	
	# close tags
	for ($i=0; $i < $len_opened; $i++) {
		if (!in_array($openedtags[$i], $closedtags)){
			$html .= '</'.$openedtags[$i].'>';
		} else {
			unset($closedtags[array_search($openedtags[$i], $closedtags)]);
		}
	}
	return $html;
}
php

20 июня 2010, 16:57

Лучший xml2array

Немного наобламывавшись с предыдущим парсером, решил поискать что-то получше. Просмотрев с 50 парсеров, которые тупо не могли справится с моим примером xml, я таки нашёл тот, который это сделал очень быстро и без проблем.
function xml2array(&$string) {
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parse_into_struct($parser, $string, $vals, $index);
    xml_parser_free($parser);
    $mnary=array();
    $ary=&$mnary;
    foreach ($vals as $r) {
        $t=$r['tag'];
        if ($r['type']=='open') {
            if (isset($ary[$t])) {
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            $cv['_c']=array();
            $cv['_c']['_p']=&$ary;
            $ary=&$cv['_c'];
        } elseif ($r['type']=='complete') {
            if (isset($ary[$t])) { // same as open
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            
            if (isset($r['value'])) $cv['_v'] = $r['value'];
        } elseif ($r['type']=='close') {
            $ary=&$ary['_p'];
        }
    }    
    
    _del_p($mnary);
    return $mnary;
}
function _del_p(&$ary) {
    foreach ($ary as $k=>$v) {
        if ($k==='_p') unset($ary[$k]);
        elseif (is_array($ary[$k])) _del_p($ary[$k]);
    }
}

Последняя функция удаляет результаты рекурсий ;)



php

9 июня 2010, 10:18

Сравнение таблиц в двух БД (и больше) Избранное

Когда дохера работы, начинаешь страдать такой ерундой :)
Раз в несколько месяцев приходится сравнивать БД, и каждый раз в ручную. Один даже раз софт сутки искал, но он ужасен, весь. Немного пострадав, минут 30, получился такой код:
  • собираем всё в масcив;
  • выводим всё красиво в табличках;
  • подключаем jQ и делаем удобную «обёрточку»;
  • ...
  • Profit
<?php
  $user  = "root";
  $userp = "";
  mysql_connect("localhost", $user, $userp) or die(mysql_error());
	$table2compare = array("test1", "test2");
	$comparedtables = array(); $i = 0;
  foreach ($table2compare as $tablename){
  	$comparedtables["title"][$i] = $tablename;
    $db = mysql_query("SHOW TABLES IN $tablename");
    while($dbt = mysql_fetch_array( $db )){
      $table = mysql_query("SHOW COLUMNS FROM $dbt[0] FROM $tablename ");
      while($tbf = mysql_fetch_array( $table ))
      	$comparedtables["tables"][$dbt[0]][$i][] = $tbf;
    }
    $i++;
  }
	echo "<table><tr>";
	for ($j = 0; $j < $i; $j++) 
		echo "<td>".$comparedtables["title"][$j]."</td>";
	echo "</tr>";
	foreach ($comparedtables["tables"] as $table => $fields) {
		echo "<tr>";
		for ($j = 0; $j < $i; $j++) {
			if ($j > 0) $eq = $fields[$j] == $fields[0]; else $eq = true;
			echo "<td valign='top' ".(!$eq ? "style='background: #fcc;'" : "").">";
			if (empty($fields[$j])) continue;
			echo "<span>$table</span><br><table rules=all frame=box cellpadding='2'>
            <tr>
            	<td>Field</td>
            	<td>Type</td>
            	<td>Null</td>
            	<td>Key</td>
            	<td>Default</td>
            	<td>Extra</td>
            </tr>";
  		foreach ($fields[$j] as $field)
	      echo "<tr>
	      				<td>$field[0]</td>
	      				<td>$field[1]</td>
	      				<td>$field[2]</td>
	        			<td>$field[3]</td>
	        			<td>$field[4]</td>
	        			<td>$field[5]</td>
	        		</tr>";
      echo "</table></td>";
    }
    echo "</tr>";
  }
  
  echo "</table>";
  mysql_close();
?>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
	$(function(){
	  $("table table").hide();
	  $("table span").click(function(){
	  	$(this).next().next().toggle();
	  }).css({"cursor":"pointer"});
	});
</script>
javascript   mysql   php

12 апреля 2010, 11:04

PHP: Тырим погоду и пробки с яндекса :)

Сам яндекс жадная сволочь, прямой ссылки не даёт на состояние пробок. Зато у него есть выджет для вин7, в котором я нашёл ссылку на нужный мне xml.
http://export.yandex.ru/bar/reginfo.xml

Дальше что нам нужно? :)
  1. открываем наш файл
  2. конвертируем в нашу любимую кодировку
  3. xml бахаем в масив
  4. ...
  5. Профит
ps: местоположение определяется автоматически, по айпи, что бы выбрать другой город, нужно пользоваться анонимными проксями, скорее всего ;)

pps: немного покопавшись, секунд 5 :D нарыл всё нужное.
Для определения региона нужна переменная ncrnd
http://export.yandex.ru/bar/reginfo.xml?ncrnd=8412

Что бы получить код региона, у шмяндекса есть форма
http://tune.yandex.ru/region/





php

14 марта 2010, 23:53

PHP: выводим первые 3 предложения (можно любые 3)

echo implode(".",array_slice(explode (".", $bigtext), 0, 3))
  • Делим текст через точки на массив
  • Отрезаем первые 3 элемента массива
  • Делаем из массива обратно текст используя точку %)
php

24 февраля 2010, 10:25

php: первый и последний в массиве %)

// значения
$first = reset($array);
$last = end($array);
// ключи
$first = reset(array_keys($array));
$last = end(array_keys($array));
php

21 декабря 2009, 15:49

PHP: in_string (аналог in_array)

function in_string($needle, $haystack, $insensitive = 0) {
	if ($insensitive) {
		return (false !== stristr($haystack, $needle)) ? true : false;
	} else {
		return (false !== strpos($haystack, $needle)) ? true : false;
	}
}	
Как видим, это просто stristr и strpos ;)

13 декабря 2009, 14:03

Утилит полезных пост 2

Сегодня речь пойдёт о утилитах для Мускула (MySQL).
Первая это php-утилита Sypex Dumper универсальный дампер БД (сделан нашими ребятами)
  • можно просто и быстро создать резервную копию (бэкап, дамп)
  • работает очень быстро с огромными БД
  • есть куча фич (свой cmd, cron)
Вторая — javascript-утилита WWW SQL Designer — для создания структуры БД, установки связи между таблицами и всё это в удобном GUI
  • очень простая и удобная
  • установка — просто залил на сервер
  • сохранение/загрузка результатов
  • експорт в SQL и XML
  • в демке всё круто видно %)

11 декабря 2009, 13:13

Утилит полезных пост

Первая это php-утилита Admiter
  • php MySQL Admin одним файлом, всегда мечтал ;)
  • умеет всё что нужно, но не такой мощный как PhpMyAdmin
Вторая это javascript-утилита DD_roundies
  • она от автора супер PNG-fix для ИЕ6
  • css-selectors для выбора применяемых элементов
  • работает очень быстро и просто, одни бонусы :)
  • умеет за одно делать прозрачными png-рисунки

26 ноября 2009, 23:59

Сколько баблишка?

Валюта в международном формате Возможные вариации Результат
RUR рублей, руб., RUR, RUB, rubles, р. рублей
UAH гривен, гр. UAH, грн., гривен
EUR евро, евр., просто значок € перед или после цены, EUR, Euro, Evro (обрабатываем опечатки) евро
USD значок $, USD, долларов, у.е., зелёных :), dollar*, долар (опечатки) долларов США
<?php
/*************************************************************
* Функция определения валюты из строк вида "1000 рублей", "10 USD" и т. п.
* На входе строка, на выходе код валюты (RUR, USD, UAH, EUR)
* или false, если не удалось определить. 
* Также false выйдет если определилось несколько валют в строке.
* Автор функции - BrokenBrake.biz
*************************************************************/
function currencer($str)
{
	$pattern['RUR'] = "/[^гГuU][рРRr][Уу\.uU]/u";
	$pattern['USD'] = "/\\\$|[UuдД][sSnNоО]|[уУ][\.\s]*[еЕ]|[зЗ][еЕ]|[бБ][аА][кК][сС]/u";
	$pattern['EUR'] = "/€|[eEЕе][UuВвvV]/u";
	$pattern['UAH'] = "/[гГUu][AaрР]/u";
	
	foreach ($pattern as $key => $val)
	{
		if (preg_match($val, $str)) $currency[] = $key;
	}
	if (isset($currency[1]) OR !isset($currency[0]))return false;
	else return $currency[0];
} // echo currencer('1000 зелёных')
?>


8 сентября 2009, 2:12

PHP: get google.PR end yandex.QI (тИЦ)

Стало интересно, как всякие сервисы определяют ПР и тИЦ. Тогда как с Яндексом всё предельно ясно, то для Гугла нужны не кислые танцы с бубном.

Из просмотренных мною алгоритмов для гугла, я пришёл к выводу, что большинство выдраны с виндового гугл-тулбара, и работаю с периодическим успехом на разных системах и платформах. Попытки сделать этот алгоритм универсальным не увенчались успехом, но был найден другой, отличный от всех способ, который работает везде на 100%! Дальше по-порядку:

Яндекс:
  • урл должен быть полный с хттп
  • берем иксымель с яндексбара http://bar-navig.yandex.ru/
  • получаем тИЦ
Гугль:
  • урл не важно, но лучше с хттп (вероятность бана айпи меньше)
  • вычисляем Хеш урла (алгоритм XTEA)
  • вычисляем ЧекСум урла
  • отправлям всё через сокеты, притворясь браузером на один, из многих, айпи гугла
  • нам нужны только первые 30 байт
  • ищем строчку типа «Rank_1:1:Х», где Х наш ПР
  • получаем ПР


4 сентября 2009, 15:10

PHP: Как открыть большой xml(файл) для работы с php

Считать fread может небольшой файл, и зная это ограничение, мы читаем файл по 8к, пока не кончится. Дальше перекодируем и конвертируем в массив, и сразу начинаем работать ;)
$handle = fopen("http://site.com/export.xml", "rb");
$contents = '';

while (!feof($handle)) $contents .= fread($handle, 8192);

fclose($handle);
$contents = xml2array(utf8_to_cp1251($contents));

// незабываем делать unset($contents, $handle)

4 сентября 2009, 15:01

PHP: utf8 to cp1251

Используя коды наших символов в утф8 и цп1251, находим последовательность операций для их превращения, и в итоге мы получаем небольшую функцию
function utf8_to_cp1251($s){
    for ($c=0;$c<strlen($s);$c++){
       $i=ord($s[$c]);
       if ($i<=127) $out.=$s[$c];
           if ($byte2){
               $new_c2=($c1&3)*64+($i&63);
               $new_c1=($c1>>2)&5;
               $new_i=$new_c1*256+$new_c2;
           if ($new_i==1025){
               $out_i=168;
           } else {
               if ($new_i==1105){
                   $out_i=184;
               } else {
                   $out_i=$new_i-848;
               }
           }
           $out.=chr($out_i);
           $byte2=false;
           }
       if (($i>>5)==6) {
           $c1=$i;
           $byte2=true;
       }
    }
    return $out;
}

4 сентября 2009, 14:57

PHP: xml to array

Вкратце, по прегмачалл, с помощью регекспа, разбиваем тело на массив тегов, дальше этот массив превращаем в нужный нам, со всеми вложенностями.
function xml2array($xml) {
        $xmlary = array();
               
        $reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
        $reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';

        preg_match_all($reels, $xml, $elements);

        foreach ($elements[1] as $ie => $xx) {

                $xmlary[$ie]["name"] = $elements[1][$ie];
               
                if ($attributes = trim($elements[2][$ie])) {
                        preg_match_all($reattrs, $attributes, $att);
                        foreach ($att[1] as $ia => $xx)

                                $xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia];
                }

                $cdend = strpos($elements[3][$ie], "<");
                if ($cdend > 0) {

                        $xmlary[$ie]["text"] = substr($elements[3][$ie], 0, $cdend - 1);
                }

                if (preg_match($reels, $elements[3][$ie]))

                        $xmlary[$ie]["elements"] = xml2array($elements[3][$ie]);
                else if ($elements[3][$ie]) {

                        $xmlary[$ie]["text"] = $elements[3][$ie];
                }
        }

        return $xmlary;

}

27 августа 2009, 8:16

PHP: BBcode to HTML

Даже объяснять нечего ;)
function bb2html($text){
  $bbcode = array("<", ">",
                "[LIST]", "[*]", "[/LIST]", 
                "[IMG]", "[/IMG]", 
                "[B]", "[/B]", 
                "[U]", "[/U]", 
                "[I]", "[/I]",
                '[COLOR=', "[/COLOR]",
                "[SIZE=", "[/SIZE]",
                '[URL=', "[/URL]",
                "[MAIL=", "[/MAIL]",
                "[CODE]", "[/CODE]",
                "[QUOTE]", "[/QUOTE]",
                "[FONT=", "[/FONT]",
                ']');
  $htmlcode = array("<", ">",
                "<ul>", "<li>", "</ul>", 
                "<img src=\"", "\">", 
                "<b>", "</b>", 
                "<u>", "</u>", 
                "<i>", "</i>",
                "<span style=\"color:", "</span>",
                "<span style=\"font-size:", "</span>",
                '<a href="', "</a>",
                "<a href=\"mailto:", "</a>",
                "<code>", "</code>",
                "<bloquote>", "</bloquote>",
                "<span style=\"font-family:", "</span >",
                '">');
  $newtext = str_replace($bbcode, $htmlcode, $text);
  $newtext = nl2br($newtext);
  return $newtext;

}
php

18 июня 2009, 14:40

Как вывести все переменные пхп (php)

<pre>
 <?php  print_R(get_defined_vars())?>
</pre>

16 мая 2009, 15:17

PHP File Manager Избранное

Иногда, после того, как скрипт на сервере создаст какой-то файл, или распакует архив, мы не можем получить доступ по фтп к этому же файлу, а нам нужно срочно его обновить! Да ещё нету доступа к си-панели, или любой другой панели хостинга.

На помощь приходит любой PHPFileManager. Если поискать через google, то их можно найти очень-очень много, но многие из них убоги по функционалу, а другие уж очень громоздкие.

Меня интересовали только три критерия:
  • функциональность
  • Доступ к командной строке, средствами php
  • весь менеджер в одном файле
После хорошо десятка менеджеров, выбор пал на скрипт с таким же названием PHPFileManager %) Тем более он free!!

Работать с ним легко и просто, скачиваете архив, один его файлик замысловато переименовываете и бросаете где-то на хостинг по фтп ;) а дальше карты в руки!



ЗЫ: простой хинт, что бы изменить права на все файлы и папки в каталоге, используйте для chmod флаг -R, например
 chmod -R 777 templates/* 
php

20 апреля 2009, 21:35

Сколько лет/год/года, возраст то какой? :)

function letkov($vozrast) {
	if ($vozrast > 9) $vozrast = substr($vozrast,-2);
	$tmp = substr($vozrast,-1);
	if ($vozrast > 10 & $vozrast < 15) return "лет";
	if($tmp == 1) return "год";
	if($tmp > 1 & $tmp < 5) return "года";
	return "лет";

}

upd 24.05.09 thx 2 Александр Улизько

26 мая 2008, 15:17

Книги по програмингу (старенькие, запыленные)

Книги по MySQL
Структуризированный язык запросов (SQL)
Системы обработки информации — язык баз данных SQL
MySQL и mSQL
Введение в SQL
Введение в реляционные базы данныx
ОСНОВЫ ПРОЕКТИРОВАНИЯ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ
Версия пакета MySQL : 3.20.29
Мартин Грубер: Понимание SQL
Книги по CGI
CGI Developer’s Guide
CGI Programming Unleashed
CGI reference
CGI — Общий Интерфейс Шлюзов
Oписание CGI
CGI.pm — a Perl5 CGI Library
Книги по HTML
HTML учёбник
Изучение HTML 3.2 на примерах
HTML-справочник
Практическое руководство по HTML
Словарь тагов
Руководство по стилям для создания online гипертекста 
Clean up your Web pages with HTML TIDY
Книги по CSS
WebClub | Спецификация CSS1
Рекомендация W3C | Спецификация CSS2
Книги по JS
Центром Информационных Технологий: JavaScript
Практическое введение в программирование на JavaScript
ВВЕДЕНИЕ В JAVASCRIPT
JavaScript Bible 4th Edition
JS object model
Руководство по JavaScript
JavaScript: Краткое введение и справочникПримеры!
Книги по PHP
PHP 4
Учебник РНР
Руководство по PHP
PHPMySQL Programming
about php rus
cgi   css   css2   html   javascript   mysql   php