Вопрос:
Я нашел много вещей для Perl, но ничего для C++. Сейчас я запускаю Ubuntu, но я довольно неопытен, поэтому простые инструкции будут потрясающими. Я только что написал небольшую C++ программу, выполненную для работы в CGI, и мне нужно проверить ее. Благодарю!
Лучший ответ:
Вам не нужно делать ничего особенного; просто скомпилируйте его в исполняемый файл с именем *.cgi (или еще что), и убедитесь, что у вас есть
AddHandler cgi-script .cgi
(или еще что-то) в конфигурации сервера или .htaccess или еще что-то.
(Отказ от ответственности: Прошло много лет с тех пор, как я это сделал, поэтому я могу что-то забыть. Но я думаю, это должно быть все, что вам нужно.)
Ответ №1
Для программ C++ нет ничего особенного. CGI-программы выполняются веб-сервером. Таким образом, предпосылки те же, что и для Perl Scripts/programs.
Ниже приведены некоторые подсказки, позволяющие запустить и запустить программу CGI C++.
-
Поместите простой исполняемый файл в каталог cgi-bin и сделайте его исполняемым на веб-сервере. Подготовьте простую программу, возвращающую действительный ответ CGI, например
#include <iostream> using namespace std; int main() { cout << «Content-Type: text/html» << endl << endl; cout << «Hello to Apache and Firefox!» << endl; return 0; }
-
Выполните программу в командной строке и убедитесь, что вывод начинается со следующих строк. Обеспечьте пустую строку после Content-Type.
$ ./hello_world Content-Type: text/html Hello to Apache and Firefox!
-
Увеличьте LogLevel для отладки и просмотра журналов ошибок веб-сервера. Найдите журнал доступа, журнал ошибок и файл suexec.log. Просмотрите журнал с виртуального хоста, который вы используете, и в главном error.log. В моей системе Ubuntu файлы находятся в /var/log/apache2 и называются access.log, error.log и suexec.log. Одна из моих последних проблем заключалась в том, что “каталог доступен для записи другими:…”
-
При использовании DLL убедитесь, что библиотеки все еще доступны на веб-сервере. Установите RPATH для указания на пользовательский каталог с библиотеками. В этом контексте ldd и objdump -x <executable> | grep RPATH objdump -x <executable> | grep RPATH – ваши друзья.
-
(Этот совет из документации Apache не работал для меня: следите за вводом и выводом, используя директиву ScriptLog от модуля mod_cgi Apache. ScriptLog должен использоваться только на сервере разработки. Дополнительные сведения доступны на странице mod_cgi.)
-
Дополнительные советы приведены в статье ” Отладка проблем веб-сервера Apache”.