LINUX.ORG.RU

cgi , си atoi и getenv


0

0

Не получается в простенькой cgi программе забрать переменную окружения(getenv("CONTENT_LENGTH")) и перевести ее в int

Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char *argv[])
{
// Читаем переменные среды, установленные веб-сервером
char *query_string = getenv("QUERY_STRING");
char *request_method = getenv("REQUEST_METHOD");
char *post_data;
int post_length = 0; // Длина тела запроса
setvbuf(stdin,NULL,_IONBF,0);//Отключение буферизации
setvbuf(stdout,NULL,_IONBF,0);
if(strcmp(request_method, "POST"))
{ // Если получен POST-запрос,
post_length = atoi(getenv("CONTENT_LENGTH"));
if(post_length!=0) // если она не нулевая,
{
post_data = (char*)malloc(post_length+1); // выделяем память для буфера,
fread(post_data, post_length, 1, stdin); // читаем со стандартного ввода тело запроса,
post_data[post_length] = '\0'; // завершаем строку нулевым байтом.
}
}

// Выводим заголовок ответа...
printf("Content-type: text/html\r\n\r\n");

// и его тело:
printf("<h1>Здравствуйте!</h1>\r\n");
printf("<p>Параметры : %s\r\n", request_method);

//if (strlen(query_string)) {
printf("<p>Параметры GET-формы: %s\r\n", query_string);
// }

//if (post_length!=0) {
printf("<p>Параметры POST-формы: %s (длина тела запроса: %d CL: %s)\r\n", post_data, post_length,getenv("CONTENT_LENGTH"));
free(post_data); // не забываем освободить выделенную в строке 17 память
//}

return 0;
}

в строке post_length = atoi(getenv("CONTENT_LENGTH"));
post_length всегда равен 0.

HELP...

anonymous

Какой веб-сервер? Может он переменные окружения не выставляет. Ты перед тем как atoi делать распечатал бы переменные.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Сервер lighttpd. вот этот printf: printf("<p>Параметры POST-формы: %s (длина тела запроса: %d CL: %s)\r\n", post_data, post_length,getenv("CONTENT_LENGTH")); выдает post_length==0; getenv("CONTENT_LENGTH")==17; т.е. переменные он выставляет.

anonymous
()
Ответ на: комментарий от Reset

Сервер lighttpd.
вот этот printf:
printf("<p>Параметры POST-формы: %s (длина тела запроса: %d CL: %s)\r\n", post_data, post_length,getenv("CONTENT_LENGTH"));
выдает post_length==0; getenv("CONTENT_LENGTH")==17;
т.е. переменные он выставляет.

Извеняюсь за форматирование постом выше(поторопился)

anonymous
()
Ответ на: комментарий от mky

lonki-lomki, mky - Большое спасибо!

P.S. - невнимательность - ЗЛО!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.