Witam,
muszę napisać projekt w C, który będzie obsługiwał MySQL. Jako, że nie przepadam za winapi, a także nie chciałem korzystać z gotowych komponentów np. wxWidgets, lub borlandowskiego buildera, postanowiłem napisać swój projekt w postaci skryptu cgi z wykorzystaniem formularzy html.
Po kilku dniach udało mi się w końcu skompilować prosty program w wxDev-C++ przy pomocy kompilatora GCC, z użyciem bibliotek libmysql i cgi-util. Niestety, kiedy wrzucam go na mój serwer apache, nie zawsze działa poprawnie. Jeśli w kodzie pojawia się funkcja mysql_real_connect()
, która nawiązuje połączenie z baza danych, skrypt się nie uruchamia. Problem nie występuje jednak, gdy wspomnianej funkcji nie ma, chociaż w kodzie pojawia się inna funkcja z tej biblioteki - mysql_get_client_info()
- wyświetlająca wersje klienta MySQL.
Przykład kodu:
#include <stdio.h>
#include <stdlib.h>
#include "cgi-util.h"
#include <windows.h>
#include <winsock.h>
#include <mysql.h>
int main(void)
{
MYSQL *conn;
int res;
int i;
/*conn=mysql_init(NULL);*/
res=cgi_init();
printf("Content-type: text/html\n");
printf("\n");
printf("Wersja mysql %s",mysql_get_client_info());
printf("<h1>Hello World</h1>\n");
/*if (mysql_real_connect(conn,"localhost","aartek","123456","test",0,NULL,0))
printf("Polaczylem z baza danych");*/
printf("%s\n",cgi_getentrystr("imie"));
cgi_quit();
return 0;
}
Powyższy kod wyświetla się poprawnie. Natomiast po od komentowaniu lini z mysql_init()
i mysql_real_connect()
przestaje działać, Apache wyświetla błąd Internal Server Error, a jego logi wyglądają nastepująco:
[Sun Aug 07 1340 2011] [error] [client 127.0.0.1] Premature end of script headers: C7v1.cgi, referer: http://localhost/cgi/
[Sun Aug 07 1323 2011] [error] [client 127.0.0.1] client denied by server configuration: C:/httpd-2.2-x64, referer: http://localhost/cgi/
[Sun Aug 07 1323 2011] [error] [client 127.0.0.1] client denied by server configuration: C:/httpd-2.2-x64, referer: http://localhost/cgi/
[Sun Aug 07 1323 2011] [error] [client 127.0.0.1] client denied by server configuration: C:/httpd-2.2-x64, referer: http://localhost/cgi/
[Sun Aug 07 1323 2011] [error] [client 127.0.0.1] client denied by server configuration: C:/httpd-2.2-x64, referer: http://localhost/cgi/
[Sun Aug 07 1324 2011] [error] [client 127.0.0.1] Premature end of script headers: C7v1.cgi, referer: http://localhost/cgi/
Problem leży w kodzie, konfiguracji serwera czy w bibliotekach? Co zrobić, żeby to zadziałało?
Dodam jeszcze, że w konsoli działa poprawnie i połączenie z bazą zostaje nawiązane.
Załączam paczkę z instrukcją, bibliotekami i nagłówkami potrzebnymi do skompilowania projektu MySQL+CGI w wxDev-C++ lub Dev-C++:
http://dl.dropbox.com/u/5532105/cgi_mysql.rar
gg:6221487