среда, 8 января 2014 г.

md5sum - индикатор прогресса, он же progress bar

Иногда очень хочется, чтобы md5sum выводил какой-то индикатор прогресса.
У него нет такой встроенной возможности, однако unix-way заключается в том, чтобы все программы делали своё дело, пусть небольшое, но хорошо.
Поэтому для этой цели используем pv.
В Debian/Ubuntu/Mint можно установить командой:
 sudo aptitude install pv

В CentOS/Fedora/RHEL:
sudo yum install pv
И потом просто вместо:
md5sum filename
запускаем
pv filename | md5sum

В итоге получаем наглядный прогресс-бар и примерную оценку оставшегося времени:
$ pv downloaded_2012-05.tar | md5sum
14.1GB 0:04:16 [54.1MB/s] [====>                        ] 20% ETA 0:16:55

вторник, 7 января 2014 г.

PHP - встроенный веб-сервер и .htaccess

Как известно, в PHP 5.4 и PHP5.5 появился встроенный веб-сервер, который сильно ускоряет разработку. Не надо ставить apache2, nginx, php-fpm и так далее.
Однако, он не поддерживает работу с .htaccess. Из-за чего возникают проблемы.
Например, если у вас в URL есть точки, например:
/site/page/1.json
То PHP будет искать такой файл на диске, а не обрабатывать запрос вашим index.php (как бы он сделал в случае с запросом вида /site/page/1).
Эту проблему легко решить, используя routing скрипт. Например, можно создать routing.php  с содержанием вида:
<?php
if (file_exists(__DIR__ . '/' . explode('?', $_SERVER['REQUEST_URI'], 2)[0])) {
  return false; // serve the requested resource as-is.
} else {
  include_once 'index.php';
}
Он проверяет наличие файла, и если такого файла нет - отдает запрос на работу вашему index.php.

explode нужен для того, чтобы, если есть файл вида 23.css, а запрос шёл вида 23.css?x=1, то php всё-таки постарался бы отдать статический файл.
А после этого запускаем php с указанием этого файла:
php -S 8080 -t /var/www/sitedir routing.php