Archive for the ‘Веб’ Category

Список поисковиков для webalizer

Monday, September 1st, 2008

Список поисковых систем для webalizer-а, на 100% не претендует, но основную массу покрывает.

Читать дальше »»»

Закрываем паролем папку на веб-сервере

Sunday, June 15th, 2008

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

Для этой цели сделан скрипт, его достаточно закинуть по ftp в нужную папку, предварительно установив требуемые значения переменных $user и $password, выполнить и удалить. Обязательное условие - наличие прав на запись в выбранную директорию.

<?

$user = 'user';
$password = 'mypass';

$dir = getcwd();

if( ! is_writeable( $dir ) )
{
print 'directory is not writeable.';
exit;
}

$hta = $dir . '/.htaccess';
$htp = $dir . '/.htpasswd';

$fh = @fopen( $htp, 'a' );

if( ! $fh )
{
print '.htpasswd open error.';
exit ;
}

fwrite( $fh, $user . ':' . crypt( $password ) . "\n" );

fclose( $fh );

$fh = @fopen( $hta, 'a' );

if( ! $fh )
{
print '.htaccess open error.';
exit;
}

$s = "AuthType Basic\n" .
"AuthName Private\n" .
"AuthUserFile $htp\n" .
"Require valid-user\n";

fwrite( $fh, $s );

fclose( $fh );
?>

Если запись в папку нежелательна, то вот такой скрипт сгенерит содержимое файлов:


<pre>
<?
$user = '1';
$password = '1';

$dir = getcwd();

$htp = $dir . '/.htpasswd';

print "-- .htpasswd\n";
print $user . ':' . crypt( $password ) . "\n\n";

$s = "AuthType Basic\n" .
"AuthName Private\n" .
"AuthUserFile $htp\n" .
"Require valid-user\n";

print "-- .htaccess\n";
print $s;
?>
</pre>

Блокируем повторный запуск php-скрипта из crontab

Wednesday, April 23rd, 2008

Нередко приходится встречатся с ситуацией когда скрипт, запускаемый из crontab-а не успевает отработать за положенное ему время, стартует еще одна его копия, а потом еще, еще и еще… Вовремя не заметить - может и сервер лечь.

Господам програмерам зачастую фиолетово на эти проблемы, так что приходится спасаться самому. Вот такой несложный код в начале php-скрипта, с использованием ф-ии flock не даст запустится второй копии:

$fh_lock = fopen( ‘/tmp/myscript.lock’, ‘w’ );

if( ! ( $fh_lock && flock( $fh_lock, LOCK_EX | LOCK_NB ) ) )
exit;

Предполагается, что имя lock-файла уникально для каждого скрипта, но так же можно и группу скриптов блокировать при необходимости, используя одинаковые. Так же предполагается, что скрипты выполняются с правами одного и того же user-а, в противном случае нужно дополнительно установить на lock-файл необходимые права доступа.

Используем fork в PHP

Thursday, January 31st, 2008

Несложный пример использования ф-ии fork в скрипте на PHP. В данном случае, с помощью fork, поддерживаем одновременно работающими 5 процессов.


<?

function run_thread()
{
$pid = pcntl_fork();

if( $pid == -1 )
die( "fork error" );

if( ! $pid )
{
// child process

echo "run process\n";
do_work();

exit( 0 );
}
}

function do_work()
{
sleep( rand( 2, 5) );
echo "done\n";
}

$numproc = 5;

for( $i = 1; $i <= $numproc; $i++ )
run_thread();

while( 1 )
{
pcntl_wait( $status );

run_thread();
}

?>

Geolizer по-быстрому

Tuesday, October 16th, 2007

Для тех кто не знает, geolizer - очень полезная штука, представляет собой webalizer с патчем для статистики по странам.

Следующий набор команд я использую для установки geolizer на CentOS-е:

yum install geoip-devel gd-devel

wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-src.tar.bz2
wget http://sysd.org/proj/geolizer_2.01-10-patch.20050520.tar.bz2

tar jxf webalizer-2.01-10-src.tar.bz2
tar jxf geolizer_2.01-10-patch.20050520.tar.bz2

patch -p0 < geolizer_2.01-10-patch/geolizer.patch

cd webalizer-2.01-10

./configure –enable-geoip

make && make install

rm -Rf geolizer_2.01-10-patch webalizer-2.01-10