Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Простой вопрос


Автор: RYB 10.5.2007, 21:44
Вот так случилось, что мне пришлось "поработать" с перлом (найти и запустить прогу на хосте).
Есть скрипты, один из которых главный.
Я понимаю что вопрос не из ряда умных, но:

как выполнить этот скрипт??

И вообще pl и cgi файлы отличаються?

P.S.
На самом хосте я пробовал следущее: указал pl как cgi, но во время выполнения появилась 500-я ошибка сервера.


Автор: nitr 10.5.2007, 21:52
тут все перебрали (все варианты незапуска скриптов)
http://forum.vingrad.ru/forum/topic-149280/kw-траблы-скриптов-cgi.html

Автор: RYB 10.5.2007, 22:09
Скажи, nitr, а если даже перл скрипт аля твоя подпись не работает?

Автор: nitr 10.5.2007, 22:47
RYB, таааааак... снова начинается...
прочел весь топик? Хоть понял чего там писали? Аля моя подпись - НЕ-CGI-скрипт!
Код

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print '<html><body><h1> :) </h1></body></html>';

и проверь все пункты!!! я перечислил более разпространенные, остальное уже нюансы, которые разбирают отдельно. В том посте все описано. Да и ещё - а вообще перл есть? smile) и Апач настроен? smile

Автор: RYB 11.5.2007, 11:36
Перл есть, апач настроен(правда я не знаю как), так как хост находится на ho.com.ua.
Код

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print '<html><body><h1> :) </h1></body></html>';

Тоже не работает  smile 

Автор: Nab 11.5.2007, 12:03
1. Если на ho.com.ua, то файл должен и иметь расширение .cgi, права 755б должен быть расположен в cgi-bin, а не в htdocs...
У себя в панели можно включить ведение логов, и они будут находиться в каталоге logs.

2. Ответ 
Цитата(RYB @  11.5.2007,  11:36 Найти цитируемый пост)
Тоже не работает  smile
, на этом форуме боюсь не прокатит, нужно как минимум привести ошибку выдаваемую броузером и желательно логи сервера, 
также желательно привести строку которой вызывали скрипт, ну и опишите что из первого пункта сделано smile

Автор: RYB 11.5.2007, 18:41
С ошибкой запуска cgi простого скрипа я уже разобрался:
Код

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
print '<H1>hello</H1>';

При этом разницы нет в какой папке скрипт находиться.
 smile 

А как запустить программу, которая состоит из pl файлов в браузере на выполнение?  smile 

Автор: korob2001 11.5.2007, 19:11
Попробуй так:
http://your_domain.ru/cgi-bin/script.cgi

Разумеется вместо your_domain и script.cgi подставь свои значения.

PS:
Модератор: Название темы должно отражать суть вопроса.

Автор: RYB 11.5.2007, 19:21
Цитата

Попробуй так:
http://your_domain.ru/cgi-bin/script.cgi

Разумеется вместо your_domain и script.cgi подставь свои значения.


Спасибо, такое тоже работает.

А как быть с pl?
Как его переделать в сgi?

Код

#!/usr/bin/env perl

use strict;
use FindBin qw($RealBin);
use lib "$RealBin";
use lib "$RealBin/src";
use lib "$RealBin/src/deps";

use Time::HiRes qw(time usleep);
use Carp::Assert;


sub __start {
    use ErrorHandler;
    use XSTools;
    srand();


    ##### BASIC INITIALIZATION #####

    use Translation;
    use Settings qw(%sys);
    use Utils::Exceptions;

    eval "use OpenKoreMod;";
    undef $@;
    parseArguments();
    Settings::loadSysConfig();
    Translation::initDefault(undef, $sys{locale});

    use Globals;
    use Interface;
    $interface = Interface->loadInterface($Settings::default_interface);
    selfCheck();


    ##### LOAD OPENKORE MODULES #####

    use Utils::PathFinding;
    require Utils::Win32 if ($^O eq 'MSWin32');
    require 'functions.pl';

    use Modules;
    use Log;
    use Utils;
    use Plugins;
    use FileParsers;
    use Network::Receive;
    use Network::Send ();
    use Commands;
    use Misc;
    use AI;
    use AI::CoreLogic;
    use AI::Attack;
    use Skills;
    use Actor;
    use Actor::Player;
    use Actor::Monster;
    use Actor::You;
    use Actor::Party;
    use Actor::Portal;
    use Actor::NPC;
    use Actor::Pet;
    use Actor::Unknown;
    use ActorList;
    use Interface;
    use ChatQueue;
    use TaskManager;
    use Task;
    use Task::WithSubtask;
    use Task::TalkNPC;
    use Utils::Benchmark;
    use Utils::HttpReader;
    use Utils::Whirlpool;
    use Poseidon::Client;
    Modules::register(qw/Utils FileParsers
        Network::Receive Network::Send Misc AI AI::CoreLogic
        AI::Attack AI::Homunculus Skills
        ChatQueue Actor Actor::Player Actor::Monster Actor::You
        Actor::Party Actor::Unknown Actor::Item Match Utils::Benchmark/);


    ##### MAIN LOOP #####
    # Note: Further initialization is done in the mainLoop() function in functions.pl.

    Benchmark::begin("Real time") if DEBUG;
    $interface->mainLoop();
    Benchmark::end("Real time") if DEBUG;

    main::shutdown();
}

# Parse command-line arguments.
sub parseArguments {
    eval {
        if (!Settings::parseArguments()) {
            print $Settings::usageText;
            exit 1;
        }
    };
    if (my $e = caught('IOException', 'ArgumentException')) {
        print "Error: $e\n";
        if ($e->isa('ArgumentException')) {
            print $Settings::usageText;
        }
        exit 1;
    } elsif ($@) {
        die $@;
    }
}

# Perform some self-checks to ensure everything is OK.
# Precondition: $interface is initialized.
sub selfCheck {
    use Globals qw($interface);

    if ($^O eq 'MSWin32' && !defined(getprotobyname("tcp"))) {
        $interface->errorDialog(TF(
            "Your Windows TCP/IP stack is broken. Please read\n" .
            "  %s\n" .
            "to learn how to solve this.",
            "http://www.visualkore-bot.com/faq.php#tcp"));
        exit 1;
    }

    # If Misc.pm is in the same folder as openkore.pl, then the
    # user is still using the old (pre-CVS cleanup) source tree.
    # So bail out to prevent weird errors.
    if (-f "$RealBin/Misc.pm") {
        $interface->errorDialog(T("You have old files in the OpenKore folder, which may cause conflicts.\n" .
            "Please delete your entire OpenKore source folder, and redownload everything."));
        exit 1;
    }

    if (!defined &XSTools::majorVersion) {
        $interface->errorDialog(TF("Your version of the XSTools library is too old.\n" .
            "Please read %s", "http://www.openkore.com/aliases/xstools.php"));
        exit 1;
    } elsif (XSTools::majorVersion() != 4) {
        $interface->errorDialog(TF("Your version of XSTools library is incompatible.\n" .
            "Please read %s", "http://www.openkore.com/aliases/xstools.php"));
        exit 1;
    } elsif (XSTools::minorVersion() < 3) {
        $interface->errorDialog(TF("Your version of the XSTools library is too old. Please upgrade it.\n" .
            "Please read %s", "http://www.openkore.com/aliases/xstools.php"));
        exit 1;
    }
}

sub shutdown {
    Plugins::unloadAll();
    # Translation Comment: Kore's exit message
    Log::message(T("Bye!\n"));
    Log::message($Settings::versionText);

    if (DEBUG && open(F, ">:utf8", "benchmark-results.txt")) {
        print F Benchmark::results("mainLoop");
        close F;
        print "Benchmark results saved to benchmark-results.txt\n";
    }
}

__start() unless defined $ENV{INTERPRETER};



Автор: korob2001 11.5.2007, 19:25
Измени расширение c .pl на .cgi
Какое расширение использовать зависит от настроек сервера, на некоторых серверах вообще можно расширение не ставить.
Но и с тем и другим расширением скрипт может быть CGI приложением.

Автор: RYB 11.5.2007, 20:10
Я менял разширение, добавлял в настройки сервера распознание pl как cgi, но результат один:
Ошибка на сервере 500.

Такое было даже с 
Код

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print '<html><body><h1> :) </h1></body></html>';


 но в коде:
Код

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
print '<H1>hello</H1>';

ошибок нет.

Значит, имеет значение заголовок файла, и если скрипт правильный перл, то это не значит что он будет запускаться на сервере как cgi.

Скажите, какой заголовок написать?
Я пробовал 
Код

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
...

но это не пошдошло.

Автор: nitr 11.5.2007, 20:48
RYB, вообще запустите perl -w имя_скрипта.cgi, исходник которого вы указали выше... думаю у вас такие же проблемы, что и у человека, пост которого я давал выше...
Напишите ответ... что выдала данная команда.

Автор: nitr 11.5.2007, 21:45
RYB, выложи логи...

Добавлено через 1 минуту и 15 секунд
сначала перечитай этот пост сначала ;)

Автор: RYB 11.5.2007, 22:03
Я закачал Active Perl, запустил эту прогу - она работает (правда говорит что не может открыть кофиг файл, но это уже мелочи).



Автор: nitr 11.5.2007, 22:21
Цитата(nitr @  11.5.2007,  21:45 Найти цитируемый пост)
сначала перечитай этот пост сначала ;)

я это незря сказал, не кажется ? smile
Так вот, Nab, сказал где там на хостинге можно глянуть логи... их выложить стоит, чтобы помогли, а то телепатия тут не практикуется (к сожалению smile)) )

Автор: RYB 11.5.2007, 22:35
 smile 

suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: openkore.cgi 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)