Список поисковиков для webalizer
Monday, September 1st, 2008Список поисковых систем для webalizer-а, на 100% не претендует, но основную массу покрывает.
Список поисковых систем для webalizer-а, на 100% не претендует, но основную массу покрывает.
Иногда возникает потребность запаролить папку на веб-сервере, сама по себе задача тривиальная, но бывает к сайту есть только 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>
Нередко приходится встречатся с ситуацией когда скрипт, запускаемый из 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. В данном случае, с помощью 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 - очень полезная штука, представляет собой 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