Что-то забросил я бложек. Надо исправлять.
.
Понадобилось мне скачать музыку по большому списку. Так как список очень разносортный, скачивать можно только по одной песне. Естественно, делать это вручную мне никак не улыбалось. Готовых утилит для этого я не нашел, поэтому пришлось изобретать свой велосипед..
.
Выбор на источник музыки тут же пал на ВКонтакте. Где ещё можно найти столько музыки да ещё и бесплатно?
.
Тут же был написан небольшой скрипт на php, который вытягивает ссылки на треки и аккуратно кладёт их в файл, из которого их можно скачать любым удобным даунлоад менеджером.
Читать далее »
Давно я не писал про php.
.
Так вот. Понадобилось мне ограничить количество замен производимых функцией str_replace.
.
Тут же была найдена функция preg_replace поддерживающая нужную функциональность, но она дико тормозила, выедала кучу памяти, короче – не подходила.
.
Немного погуглив я вернулся к документации и в комментариях обнуружил нужный мне велосипед:
< ?php function getSingleReplaceCombinations($replace, $with, $inHaystack) { $splits = explode($replace, $inHaystack); $result = array(); for ($i = 1, $ix = count($splits); $i < $ix; ++$i) { $previous = array_slice($splits, 0, $i); $next = array_slice($splits, $i); $combine = array_pop($previous) . $with . array_shift($next); $result[] = implode($replace, array_merge($previous, array($combine), $next)); } return $result; } var_dump(getSingleReplaceCombinations("a", "x", "aba")); // result as mentioned above ?>
На выходе функция отдаёт массив со всеми возможными заменами.
Но, мне ведь нужна только одна замена, это решилось добавлением break в конце цикла:
Читать далее »
Неожиданная проблема возникла при переезде на другой хостинг.
WordPress после включения ЧПУ(permalinks) показывал только 404-ю ошибку, причём, даже на главной.
За неделю были выкурены все конфиги апача и php, но решение найдено не было и пришлось шаг за шагом разбирать что же там делает вордпресс, и почему отдаёт ошибку.
.
В итоге, зацепился за то, что параметры home и siteurl после установки нового вордпресса выглядят так: «http://site.ruhttp://site.ru», когда должны быть «http://site.ru».
.
Ещё немого поисков, и оказывается, что за формирование этого параметра отвечает функция «wp_guess_url()«, которая находится в файле «wp-includes/functions.php«.
.
Самая интересная строка в ней:
$url = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
Собственно, всё отлично и должно работать. Но посмотрев что возвращает каждый из параметров оказалось, что REQUEST_URI отдаёт полный путь вместе с доменом, т.е. выглядит примерно так: «http://site.ru/some_path», когда в документации написанно, что должен быть путь без домена: «/some_path»!
.
Желания искать причину бага уже не было(да и гугл выдаёт всего пару случаев, без решения) был быстро написан простой костыль, состоящий из двух файлов: .htaccess и req_url.php.
.htaccess:
php_value auto_prepend_file /full/path/req_url.php
.
req_url.php:
<?php $_SERVER['REQUEST_URI']=str_replace("http://".$_SERVER["HTTP_HOST"],"",$_SERVER['REQUEST_URI']); $_SERVER['REQUEST_URI']=str_replace("https://".$_SERVER["HTTP_HOST"],"",$_SERVER['REQUEST_URI']); ?>
Здесь в htaccess указанно правило, которое обязывает в начале всех скриптов запускать req_url.php, в котором, в свою очередь, написан простой фикс серверной переменной.
.
Оба эти файла находятся в корне папки с сайтами, дабы на всех сайтах всё отлично работало.
.
Теги: apache, nix, php, wordpressНе так давно я узнал, что в Ubuntu нет встроенного кэширования dns запросов. А у меня, хоть и достаточно быстрый интернет и хорошие пинги до dns серверов, но терять от 50 до 1000мс на запрос как-то не хочется.
.
Для огранизации dns кэширования будем использовать dnsmasq.
.
Читать далее »
Решил я тут, что зря мой железный друг простаивает по ночам. Раздача торрентов это отлично, но процессор то простаивает..
.
Нагружать его будет брутом md5. Но, так как, сам по себе процессор – большой скорости не даст, брутить будем на nVidia видеокарте с поддержкой CUDA.
.
Устанавливается всё банальным запуском бинарников с оф. сайта. Неплохой мануал можно найти здесь –
http://www.cs.virginia.edu/~csadmin/wiki/index.php/CUDA_Support (англ.)
.
Тут у меня возникла только 1 проблема:
error while loading shared libraries: libcudart.so.2: cannot open shared object file: No such file or directory
Решение хоть и описано, по ссылке выше, но оно не совсем подходит, так как файла libcudart.so.2 банально нет. Что бы починить, добавляем в ~/.profile следующие строки:
LD_LIBRARY_PATH=»/usr/lib:/usr/openwin/lib:/usr/dt/lib:/X11.6/lib:/X11.5/lib:/uva/lib:/gnu/lib:/usr/local/cuda/lib»
export LD_LIBRARY_PATH
Далее перелогинимся в системе и выполним команду:
$ sudo cp /usr/local/cuda/lib/libcudart.so.3 /usr/local/cuda/lib/libcudart.so.2
Для x64 Ubuntu Linux, выполним ещё одну:
$ sudo cp /usr/local/cuda/lib64/libcudart.so.3 /usr/local/cuda/lib64/libcudart.so.2
.
Теперь, перейдём собственно к бруту.
Читать далее »
