#!/usr/bin/perl -w # Змініть на ваш шлях до Perl, якщо потрібно
use strict;
use warnings;
use File::Find;
use CGI qw(:standard);
# Отримати запит з форми
my $query = param('query') || ''; # Якщо порожній, нічого не робити
# Якщо запит порожній, вийти
if (!$query) {
print header();
print start_html(-title => 'Пошук');
print "
Введіть запит для пошуку.
";
print end_html();
exit;
}
# Вивести HTTP-заголовок і початок HTML
print header(-charset => 'UTF-8');
print start_html(-title => "Результати пошуку за '$query'");
print "Результати за запитом '$query':
\n";
# Читати весь файл одразу (для простоти)
undef $/;
# Рекурсивний пошук по директорії (замініть на ваш веб-корінь)
find(
sub {
# Пропустити файли, що починаються з крапки (наприклад, .htaccess)
return if ($_ =~ /^\./);
# Тільки HTML-файли (додайте інші розширення, якщо потрібно: /\.html?$/i)
return unless (\( _ =~ /\.html \)/i);
# Повний шлях
my $full_path = $File::Find::name;
# Перевірити, чи файл, читабельний
return if -d $full_path; # Пропустити директорії
return unless -r $full_path;
# Відкрити та прочитати файл
open(my $fh, '<', $full_path) or return;
my $content = <$fh>;
close($fh);
# Шукати запит (нечутливий до регістру, екранувати спецсимволи)
my $escaped_query = quotemeta($query);
return unless ($content =~ /$escaped_query/i);
# Витягти заголовок: з або ім'я файлу
my $page_title = $_;
if ($content =~ /(.*?)<\/title>/is) {
$page_title = $1;
}
# Вивести результат як посилання (відносний шлях)
my $relative_path = $full_path;
$relative_path =~ s/^\/home\/user\/public_html//; # Адаптуйте під ваш корінь
print "- $page_title
\n";
},
'/home/user/public_html' # Замініть на ваш веб-корінь, наприклад /var/www/html
);
print "
\n";
print "Якщо нічого не знайдено, перевірте запит або файли.
";
print end_html();