2016-03-21 11 views
0

Ich versuche, eine Nachricht vom Webclient über JavaScript oder JQuery an den Apache2-Webserver auf Debian Jessie, ein kompiliertes C-Programm, das eine POSIX message_queue sendet, aber ich kann es nicht zur Arbeit bringen.Problem beim Ausführen serverseitigen CGI-Code aus Javascript oder JQuery

Ich habe die folgenden Dateien in meinem cgi-Verzeichnis: root @ asus:/var/www/cgi-ist # ls -l -rwxr-xr-x 1 www-data www-data 59008 20. März 17: 47 mq_client.cgi -rwxr-xr-x 1 www-daten www-data 115 Mär 17 18:14 test.pl

mq_client.cgi ist eine C-kompilierte ausführbare Datei, die die POSIX-Nachricht generiert. Wenn ich lachlan @ asus ausführen: ~ $ /var/www/cgi-bin/mq_client.cgi wird die richtige Nachricht vom Server gesendet und empfangen.

Test.pl ist ein Perl-SCRPT, die HTML-Code erzeugt, und wenn ich ausführen lachlan @ asus: ~ $ /var/www/cgi-bin/test.pl das funktioniert gut auch und gibt die Ausgabe: Inhalt -type: text/html Nur testen.

Wenn ich die Chrom-Webserver wie folgt verwenden: http://localhost/cgi-bin/test.pl ich das richtige Ergebnis erhalten: ‚Just Testing‘

Ich habe jedoch den mq_client.cgi Code nicht in der Lage zu bekommen, vom Webserver auszuführen . Ich habe viele Websites durchsucht und viele Optionen wie unten beschrieben ausprobiert.

Dies ist mein Code von „index.html“ (Beachten Sie die Fehler nur auftreten, wenn ich die Taste drücken)

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script type="text/javascript" src="js/jq_182.js"></script> 
    <script type="text/javascript"> 

    function mapToggle(){ 
     // different options as indicated below 
     } 
    </script> 
    </head> 
    <body> 
     <div id = "label"> </div> 
     <form action = "" class = "mapButton"> 
      <p> <button type= "button" onclick = "mapToggle()" class = "button2property"> Map Toggle </button> </p>   
      </form> 
    </body> 
</html> 

Die verschiedenen Optionen, die ich versucht habe (einer nach dem anderen) in der Lage oben angegeben sind :

// Option 1.

var site = 22;   
$.ajax({type: "PUT", url: "/cgi-bin/mq_client.cgi", async: false, data: site}); 

Dies ergibt folgende 2 Fehler in Chrom: Synchron XMLHttpRequest auf dem Hauptthread ist dep wegen seiner nachteiligen Auswirkungen auf die Erfahrung des Endbenutzers. Weitere Informationen finden Sie unter https://xhr.spec.whatwg.org/. jq_182.js: 2 PUT http://localhost/cgi-bin/mq_client.cgi 500 (Internal Server Error)

// Option 2.

var site = 22;   
$.ajax({type: "GET", url: "/cgi-bin/mq_client.cgi", async: false, data: site}); 

Dies ergibt folgende 2 Fehler: Synchron XMLHttpRequest auf dem Hauptthread wegen seiner veraltet nachteilige Auswirkungen auf die Erfahrung des Endbenutzers. Weitere Informationen finden Sie unter https://xhr.spec.whatwg.org/. jq_182.js: 2 GET http://localhost/cgi-bin/mq_client.cgi 500 (Internal Server Error)

// Option 3.

var myRequest = new XMLHttpRequest(); 
myRequest.open("GET", "/cgi-bin/mq_client.cgi"); 
myRequest.send(); 

Dies gibt den folgenden Fehlercode: index2.html: 21 GET http://localhost/cgi-bin/mq_client.cgi 500 (Internal Server Fehler)

// Option 4.

src = "/cgi-bin/mq_client.cgi"; 

Es werden keine Fehler in Chrom angegeben, aber es gibt auch keine Meldung gesendet

// Option 5.

var img = new Image(); 
img.src = "/cgi-bin/mq_client.cgi"; 

Fehler führt: GET http://localhost/cgi-bin/mq_client.cgi 500 (Internal Server Error)

// Option 6. Auch der Dateiname in index.shtml geändert

<!--#exec cmd="/cgi-bin/mq_client.cgi" --> 

Es werden keine Fehler in Chrom angegeben, aber es gibt keine Nachrichten

gesendet

// Option 7.

var client = new XMLHttpRequest(); 
client.open("post", "/cgi-bin/mq_client.cgi", true);  

Keine Fehler in Chrom angegeben sind, aber es gibt keine gesendeten Nachrichten.

// Option 8.

var client = new XMLHttpRequest(); 
var formx = new FormData(); 
formx.append("dummy","data"); 
client.open("post", "/cgi-bin/mq_client.cgi", true);  
client.setRequestHeader("Content-Type", "multipart/form-data"); 
client.send(formx);  

Fehler: index2.html: 45 POST http://localhost/cgi-bin/mq_client.cgi 500 (Internal Server Error)

ich viele Hinweise überprüft haben und ihre Vorschläge versucht, aber noch nicht gelöst das Problem.

Irgendwelche Ideen auf, wo man nach dem Problem sucht, würde geschätzt werden. Lachlan

Der serverseitige Code generiert eine POSIX-Nachrichtenwarteschlange: Der Servercode sendet eine POSIX-Nachricht an einen Server. Der Code ist wie folgt:

int main(void) { 
    char msg[5]; 

    // Open queue already created 
    mqd_t mQueue = mq_open("q1", O_WRONLY, NULL); 
    if (mQueue == (mqd_t) -1){ 
     puts("Queue Open Failed\n"); 
     return EXIT_FAILURE; 
     } 
    puts("Queue Opened\n"); 

    // Send Message 
    msg[0] = 22; 
    if (mq_send(mQueue, msg, 5, 1) == -1){ 
      puts("Queue Send Failure\n"); 
      return EXIT_FAILURE; 
      } 
    puts("Message Sent\n"); 
    mq_close(mQueue); 
    return EXIT_SUCCESS; 
} 

Hier ist der Server-Code ist die Nachrichtenwarteschlange zu empfangen:

int main(void) { 
    char msg[MAX_MSG_SIZE]; 
    unsigned int prio; 
    ssize_t msgLength = 0; 

    // Create queue 
    struct mq_attr attr; 
    attr.mq_maxmsg = 4; 
    attr.mq_msgsize = 5;    
    mQueue = mq_open(“q1”, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO, &attr); 
    if (mQueue == (mqd_t) -1){ 
     puts("Queue Create Failed\n"); 
     return EXIT_FAILURE; 
     } 
    puts("Queue Created\n"); 

    // get message - This blocks 
    msgLength = mq_receive(mQueue, msg, MAX_MSG_SIZE, &prio); 
    if (msgLength == -1){ 
     puts("Queue Read Failure\n"); 
     return EXIT_FAILURE; 
     } 

    printf("Message Received: %i\n", (int)msg[0]); 
    mq_close(mQueue); 
    return EXIT_SUCCESS; 
} 

Die Berechtigungen für den Zugriff auf den Server-Warteschlange sind: S_IRWXU | S_IRWXG | S_IRWXO

die Berechtigungen für den CGI-Code ausgeführt wird, sind: -rwxr-xr-x 1 www-data www-data 59008 20. März 17.47 mq_client.cgi

Wenn dies ein Berechtigungsproblem ist, dass Sie vorschlagen können, Welche Berechtigungen fehlen?

+0

Alle Ihre Beispiele entweder (a) Melden Sie das Ergebnis nicht oder (b) Melden Sie das Ergebnis als internen Serverfehler. Sie müssen die Serverprotokolle lesen (und möglicherweise mehr Debugging zu Ihrem serverseitigen Code hinzufügen), um die Details des Serverfehlers zu finden. Abweichungen von der Anfrage zu machen, ohne zu verstehen, warum der Server einen Fehler verursacht, ist ein sehr schlechter Ansatz für das Debugging. – Quentin

+0

Der Servercode sendet eine POSIX-Nachricht an einen Server.Der Code lautet wie folgt: int main (void) { \t mqd_t mQueue; \t char msg [5]; \t // Öffnen Sie eine bereits erstellte Nachrichtenwarteschlange \t mQueue = mq_open (mQname, O_WRONLY, NULL); \t if (mQueue == (mqd_t) -1) { \t \t puts ("Fehler beim Öffnen der Nachrichtenwarteschlange \ n"); \t \t zurück EXIT_FAILURE; \t \t} \t puts ("Nachrichtenwarteschlange geöffnet \ n"); \t // Nachricht senden \t msg [0] = 22; \t if (mq_send (mQueue, msg, 5, 1) == -1) { \t \t \t puts ("Sendefehler der Nachrichtenwarteschlange \ n"); \t \t \t zurück EXIT_FAILURE; \t \t \t} \t puts ("Nachricht gesendet \ n"); \t puts ("Nachrichtenwarteschlange geschlossen \ n"); \t mq_close (mQueue); \t zurück EXIT_SUCCESS; } – lachlan

+0

Der Servercode sendet eine POSIX-Nachricht an einen Server. Der Code lautet wie folgt: int main (void) { \t char msg [5]; \t // Offene Warteschlange bereits erstellt \t mqd_t mQueue = mq_open ("q1", O_WRONLY, NULL); \t if (mQueue == (mqd_t) -1) { \t \t puts ("Öffnen der Warteschlange fehlgeschlagen \ n"); \t \t zurück EXIT_FAILURE; \t \t} \t puts ("Warteschlange geöffnet \ n"); \t // Nachricht senden \t msg [0] = 22; \t if (mq_send (mQueue, msg, 5, 1) == -1) { \t \t \t puts ("Sendefehler in der Warteschlange \ n"); \t \t \t zurück EXIT_FAILURE; \t \t \t} \t puts ("Nachricht gesendet \ n"); \t mq_close (mQueue); \t zurück EXIT_SUCCESS; } – lachlan

Antwort

0

Ich fand endlich einen anderen Beitrag, der das Problem zu lösen half. Ja, es war ein Berechtigungsproblem. Die Programmberechtigungen überschreiben die Berechtigungen für die Nachrichtenwarteschlange. Sobald dies angesprochen wurde, war das Problem gelöst. Mit freundlichen Grüßen Lachlan

Verwandte Themen