2013-03-04 6 views
2

В моем файле cpp я печатаю некоторые сообщения отладки в стандартный поток вывода std :: cout. Когда я использую этот файл и запускаю исполняемый файл с помощью сервера Apache. Где будут печататься отладочные сообщения. Я не вижу их напечатанных в/var/lib/httpd/error_log.Стандартный поток вывода Apache

Заранее спасибо.

+0

«запустить исполняемый файл с использованием сервера Apache», вы запускаете исполняемый файл как программу CGI? – kay

+1

Возможно, вы захотите ознакомиться с библиотекой [Cgicc] (http://www.gnu.org/software/cgicc/) для такого проекта. Кроме того, в качестве быстрого теста вы можете попытаться написать сообщения из вашего кода на C++ в файл (который имеет необходимые разрешения), просто чтобы убедиться, что он фактически выполняется. –

+0

@MihaiTodor Я попробовал вывод в файл. Это работает именно так. Я использую свою исполняемую форму Cpp как скрипт, который работает в Apache. – PMat

ответ

3

Единственная причина, вы должны использовать веб-сервер Apache для запуска программы C++, если ваш делать CGI скрипт

Проверьте это: http://en.wikipedia.org/wiki/Common_Gateway_Interface


Процесс здесь является то, что Apache, веб-сервер, запускает вашу программу и использует вывод (std :: cout) в качестве источника страницы.

Источником страницы может быть html или обычный текст. Единственная проблема заключается в том, что сервер не знает, поэтому вы даете ему небольшой намек на начало вашего вывода. Он называется заголовком.

Если Выведение HTML вы должны напечатать:

Content-Type: текст/html

затем два переводы строк.

или если вы хотите, чтобы веб-сервер для интерпретации данных в виде обычного текста, необходимо сначала напечатать

Content-Type: текст/равнина

также следует два переводов строк.


Например, программа C++, которая должна работать будет выглядеть примерно так:

параметры
#include <iostream> 

int main() 
{ 
    //output header, then one newline, then another, paired with a flush. 
    std::cout << "Content-type: text/plain\n" << std::endl; 
    //now your output 
    //calculation... 
    std::cout << "Hello World" << std::endl; 
    return 0; 
} 

Любой веб-сервер может быть запрошен с некоторыми предварительно установленными переменными окружения. Читайте статью, связанную с Википедии.


EDIT:

Я извиняюсь, The Content-type: text/html и Content-type: text/plain был правильным, но я уже говорил ранее они требовали новой линии. Я ошибался, им нужны две новые линии

Если вы впервые видите это сообщение, то не беспокойтесь об этом.

+0

Я бы предположил, что стандартный вывод может быть доступен из perl при запуске программы или, возможно, perl или веб-сервер apache перенаправляет вывод в/dev/null или что-то в этом роде. Я бы сказал, отредактировав вопрос, чтобы указать, что вы используете perl, из вашего вопроса, который, как я думал, у вас возникли проблемы с C++ вообще. Проблема здесь в том, что ваш код perl, а не сервер, а не исполняемый файл. – 2013-03-05 21:08:58

Смежные вопросы