Вывод случайной картинки из директории

В категории Подсказки от 4 сентября, 2011. Автор admin

<?

// картинки брать здесь

$image_dir = ‘images/slideshow’;

$count = 0;

// читаем директорию с картинками

if ($handle = opendir($image_dir)) {

// масивчик

$retval = array();

while (false !== ($file = readdir($handle))) {

if (($file <> «.») && ($file <> «..»)) {

$retval[$count] = $file;

$count = $count + 1;

}

}

closedir($handle);

}

// перемешиваем масивчик

shuffle($retval);

// берем

$file_name = $retval[0];

// выводим картинку 600х900

echo «\t

<ul><img src=»images/slideshow/$file_name» alt=»» width=»900″ /></ul>

\n»;

?>

Тэги: ,

Тестирование хостинга

В категории Статьи от 3 сентября, 2011. Автор admin

Переменные среды
Для начала тестирования посмотрим переменные среды (окружения) своего хостинга и список доступных нам программ. Для этого в папке cgi-bin создадим свою папку с именем для примера, test и запаролируем ее, чтобы была только для себя любимого.
Поместим туда небольшой скрипт, установим ему права 755 и запустим его, обратившись к нему из браузера по адресу, например – http://vash_domen/cgi-bin/test/peremennye-sredy.pl
Мы увидим массу всяких сведений, по большей части не очень интересных, в частности о параметрах своего браузера.
Некоторые из переменных действительно нужны, например PATH, где находится список папок исполняемых программ, SCRIPT_FILENAME, содержит полный путь к данному скрипту и т.д. Иногда бывает полезно при отладке своих скриптов взлянуть на переменные среды, поэтому есть смысл скопировать их и сохранить в каком-нибудь текстовом файле на домашнем компьютере.
Взгляните на пример переменных среды хостинга:
пример переменных среды на моем хостинге
В скриптах все «вспомогательные» строки будут по возможности записаны максимально кратко и (или) не будут приведены, но будет подразумеваться, что они есть.
Скрипт, выводящий переменные среды:

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
my $t=’Переменные среды’;
print «Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr><pre>»;
# будет подразумеваться, что строки выше имеются
print «$_\t$ENV{$_}\n» foreach (sort(keys %ENV)); # сам скрипт
# будет подразумеваться, что такая или подобная нижняя строчка имеется
print «<hr></pre></body></html>»;

В скрипте просто перебираются все имеющиеся ключи хеша %ENV и выводятся на дисплей и ключи и их значения.
Переменные среды можно изменять (удалять, дополнять). Так например, для большей безопасности рекомендуется удалять потенциально опасные ключи (если они есть) в начале каждого своего скрипта:
#!/usr/bin/perl
delete @ENV{qw(IFC CDPATH ENV BASH_ENV)};

и если Вы не используете каких-то программ, кроме скажем Perl, можно также удалить и переменную PATH:
#!/usr/bin/perl
delete $ENV{‘PATH’};
# или добавить к ней значение, например:
$ENV{‘PATH’} .=’:/usr/sbin’;
# или установить новое значение:
$ENV{‘PATH’} =’/usr/bin’;

Список ПО
Получим список установленных и доступных нам программ (команд) на хостинге. Все эти программы располагаются в папках, которые перечислены в переменной PATH. На самом деле программ и команд гораздо больше, но именно в этих папках ОС ищет команды для запуска и именно их Вам предоставляет хостинг.
Какая-то часть установленных программ наверняка приведена на сайте хостера, но указать их все просто нереально.
Маленький скрипт выведет на дисплей содержимое каждой папки, указанной в PATH:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
my $t=’Список установленных программ’;
print «Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr><pre>»;
my @d = split ‘:’, $ENV{‘PATH’};
# при желании Вы можете добавить и другие папки для просмотра содержимого:
push @d, ‘/usr/sbin’;
# или сами укажите другие папки @d = qw(/home/papka /public_html); и т.д.
use File::Find;
find sub { print $File::Find::name, -d && ‘/’, «\n»; }, @d;
print «<hr></pre></body></html>»;

Программ в этих папках довольно много, лично у меня на хостинге свыше 1200 (без содержимого папки /usr/sbin). Большая часть навряд ли пригодится, но все-таки неплохо сохранить этот список у себя на домашнем компьютере.
Привожу маленькие фрагменты списков программ:
Фрагмент списка программ в папке /bin     Фрагмент списка программ в папке /usr/bin     Фрагмент списка программ в папке /usr/local/bin
В большинстве случаев можно узнать, что делает та или иная программа, запустив ее с такими ключами —help -h -?, а можно просто «сказать» man команда.
Некоторые из этих программ могут пригодится для получения более полной информации о системе, поэтому имеет смысл присмотреться к программам, содержащим в названии stat, info, conf и т.п. А запустить программу (команду) можно например из скрипта «командной строки».

Список модулей Perl
Можно получить и список модулей Perl, установленных на хостинге, хотя такой список как правило приведен на сайте хостера. Для этого достаточно вместо переменной массива @d указать встроенный массив @INC:
find sub { print $File::Find::name, -d && ‘/’, «\n»; }, @INC;

Заметим, что полученный таким образом список модулей содержит не только список «главных» или «основных» модулей, но и файлы документации к модулям, файлы примеров использования модулей и файлы для их тестирования. Бывает любопытно взглянуть.
А посмотреть содержимое любого файла можно простой командой: cat (путь)файл, например используя скрипт «своего шелла».
Конфигурация системы и Perl на хостинге
На момент установки Perl в систему собирается масса данных о ее (и Perl) конфигурации в модуле Config.pm, которая доступна для нас через простой скрипт:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use Config qw(config_sh myconfig);
my $t=’Конфигурация системы и Perl’;
print «Content-type: text/html\n\n<html><head><title>$t</title></head><body><h2>$t</h2><hr>»;
print ‘Конфигурация системы:<br><pre>’, config_sh(), ‘</pre>’;
print ‘<hr>Конфигурация Perl:<br><pre>’, myconfig(), ‘</pre>’;
print «<hr></body></html>»;

Всего доступно около 900 различных параметров системы, таких как местоположение различных программ, модулей, указание их версий, разрядности некоторых переменных, флаги, описание сигналов прерываний, их коды и прочее.
И что немаловажно – каждое возможное значение описано в документации к модулю Config, правда на «простом английском языке». Заметим, что далеко не каждый параметр установлен, многие имеют значение undef или define.

Тэги: , ,