<?php /** * @descr Helper for getting currency values from cbr.ru * @param (string) $code Code of currency you need * @param (string) [$date] Date of day you need (format: "d/m/Y") * @param (string) [$template] Template for html-making where ?c will be currency charcode, ?n will be nominal and ?v will be currency value in rubbles **/ function getCbrCurrency( $code, $date = '', $template = '' ) { $date = $date ? $date : date( "d/m/Y" ); if ( strlen( $GLOBALS['___XML'][$date] ) > 50 || $GLOBALS['___XML'][$date] = file_get_contents( "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date" ) ) { $xml = simplexml_load_string( $GLOBALS['___XML'][$date] ); foreach ( $xml->Valute as $o ) { if ( $o->CharCode == $code ) { return array( 'CharCode' => (string)$o->CharCode[0], 'Nominal' => (string)$o->Nominal[0], 'Value' => (string)$o->Value[0], 'html' => $template ? str_replace( array( '?c', '?n', '?v' ), array( (string)$o->CharCode[0], (string)$o->Nominal[0], (string)$o->Value[0] ), $template ) : '', ); } } } return false; } print_r( getCbrCurrency ( 'USD', '', '<span>?c:</span> ?v р.' ) );
Получение котировок валют с сайта ЦБР (пример использования SimpleXML)
Полезная функция "service" для bash-а
function service() { if [ $# -ne 2 ] ; then echo "usage: service name action" return 1 else if [ -f /etc/rc.d/$1 ] ; then . /etc/rc.d/$1 $2 else if [ -f /usr/local/etc/rc.d/$1 ] ; then . /usr/local/etc/rc.d/$1 $2 else echo "service $1 not found" fi fi fi }
Правильный парсер html
Как вы делаете парсер (скрипт, который выдёргивает некую информацию с некой страницы)? Вставляете кучу strpos, preg_match и прочее "прицеливание"?
Предлагаю вашему вниманию абсолютно другой способ: Simple HTML DOM Parser - скрипт, который позволяет работать с DOM документа, а конекретнее, использовать css-селекторы для поиска нужных элементов.
Маленький пример:
<?php // загружаем библиотеку require './simplehtmldom/simple_html_dom.php'; // будем парсить гугл :) $d = file_get_html ( 'http://www.google.com/search?hl=en&q=%D1%8B%D1%80%D0%BE%D0%BB%D0%B2%D0%B0&aq=f&oq=&aqi=' ); // селектор результатов foreach($d->find('li.g') as $snippet) { $r = array(); $r['link'] = $snippet->find( 'h3.r a', 0 )->href; // ссылка $r['title'] = $snippet->find( 'h3.r', 0 )->plaintext; // заголовок // убираем лишнее $snippet->find( 'div.s cite', 0 )->innertext = ''; $snippet->find( 'div.s span', 0 )->innertext = ''; $r['snippet'] = $snippet->find( 'div.s', 0 )->plaintext; // сниппет $rez[] = $r; } // показываем.. print_r( $rez );
Вот так легко и элегантно можно парсить сниппеты гугла :) Кстати, библиотеку лучше качать из транка svn - там версия выше + мануал обширнее.
Как выполнять функции прямо в heredoc и double-quoted строках
Многие сталкивались с этой проблемой.. надеюсь мой способ поможет кому-то кроме меня выполнять функции, выражения и многое другое прямо в heredoc или строке в двойных кавычках. Иногда очень полезная штуковина :)
<?php // Функция-хак $__eval = create_function( '$c', 'return $c' ); // Проверяем.. define( 'constant_str', 'smth string' ); define( 'constant_int', 8 ); $x = 6; $y = 2; function z( $x, $y ) { return $x * $y; } // Примеры использования // Синтаксис: {$__eval( [expressions|variables|constants|functions|object->methods|etc] )} echo "1st: {$__eval(4+5)} text\r"; // выводит '1st: 9 text' echo "2nd: {$__eval(constant_str)} and text\r"; // выводит '2nd: smth string and text' echo <<<HEREDOC 3rd: {$__eval( z($x, $y) + constant_int / 2)} and text again HEREDOC; // выводит '3rd: 20 and text again'
Чем залить большие большие дампы mysql на сервер - BigDump
Порой приходится заливать большие или даже огромные дампы и возникают серьёзные проблемы - чреез phpMyAdmin не хватает памяти, да и загрузка очень долгая - приходится идти на разные ухищрения.
Можно делить дамп на несколько меньших запросов, но это довольно муторно - представьте, поделить гигабайтовый дамп на 100 или больше файлов - с ума сойдёшь.. Можно, конечно, залить дамп и через консоль, но далеко не все хостеры предоставляют эту возможность.
Поэтому, необходим скрипт, который сам делил бы большой дамп на несколько частей и частями его заливал. Такой скрипт есть :) называется он BigDump. Очень прост в использовании: заливаете скрипт, в ту же папку дамп, прописываете в скрипте данные для соединения с mysql и всё, считайте дело сделано :)
Проверял на дампах больше 1 ГБ, работает как часы. Один нюанс - иногда приходится также настроить размеры запросов, на которые делит скрипт дамп.. но это не проблема.
Расширенный file_get_contents или про cURL можно забыть
Меня всегда озадачивал вопрос - почему все так и норовят везде и всюду использовать cURL, восхваляя его? Почему просто не использовать встроенные функции вместо сторонней библиотеки, которая, к тому же, ещё и установлена не у всех? Итак, открываем завесу тьмы и развеиваем бытующее мнение о "несамостоятельности" php..
В php существует замечательная вещь - контекст потоков. Эти контексты содержат в себе наверно весь функционал cURL (список врапперов/протоколов с описаниями) - ещё ни одна задача не заставила меня использовать cURL.
Чтобы не остаться голословным, маленький пример реализации POST запроса из мануала на встроенных функциях:
<?php $postdata = http_build_query( array( 'var1' => 'some content', 'var2' => 'doh' ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context);