2016-10-19 9 views
2

私はApacheでCGIを使ってファイルにいくつかの内容を書きたいと思っています。ApacheでCGIにファイルが作成されないのはなぜですか?

私のHTMLファイル:CGIスクリプトを呼び出すためのAjax HTTPメソッドを使用して

。私はCGIに議論を伝えていません。最後に私はdivに応答テキストを表示しています。

<!DOCTYPE html> 
<html> 
<head> 

<script> 

var xhttp; 

function loadDoc() { 

    try{ 

      xhttp = new XMLHttpRequest(); 

      xhttp.onreadystatechange = function() { 

       if (this.readyState == 4 && this.status == 200) { 
        document.getElementById("message").innerHTML = this.responseText; 
       } 
      }; 

      xhttp.open("POST","mycgi.cgi",true); 
      xhttp.send(); 


    }catch (exception){ 

      alert("Request failed: " + exception.message); 
     } 
} 

</script> 

</head> 


<body> 

<h2>sample ajax</h2> 

<button type="button" onclick="loadDoc()">Change Content</button> 

<div id ="message" /> 

</body> 
</html> 

cgi.cppファイル

ここで私は書き込みモードでファイルを作成し、そのファイルにいくつかの内容を書き込むと、正常に近いです。レスポンステキストをHTMLに返信します。

#include <unistd.h> 
    #include <iostream> 
    #include <vector> 
    #include <string> 

    #include "cgicc/Cgicc.h" 
    #include "cgicc/HTTPHTMLHeader.h" 
    #include "cgicc/HTMLClasses.h" 

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

    using namespace std; 
    using namespace cgicc; 

    int main(int argc, char **argv) 
    { 

    Cgicc cgi;  

     try { 

     ofstream myfile; 
     myfile.open ("Newcgi.txt",ios::out); 
     cout<<"Content-Type: text/html\n\n"; 
     myfile << "Writing this to a file.\n"; 
     cout<<"Sucessfully write"; 
     myfile.close(); 

     } 
     catch(exception& e) { 

     } 

    return 0; 

    } 

しかし、私は/var/apache2または/var/www/htmlで作成した任意のファイルを見ることができません。なぜこれが起こっているのですか?新しいファイルはどこに作成する必要がありますか?それはApacheディレクトリにありますか?

コードに問題がありますか?私は書き込みモードでもファイルに書き込みます。私はコードが正常に動作していると思います。助言がありますか ?以前のコメントの

+0

だあなたはあなたのCGIファイルの権限を確認しましたか?多くの場合、/ var/wwwを所有し、スクリプト/プロセスを実行するためにApacheによって使用される特別なユーザ 'nobody 'が存在します。 'Newcgi.txt'が作成されるはずですが、与えられたパスは相対パスなので、 – karastojko

+0

もし '/ home/user/Desktop/newcgi.txt'だけ作成すれば、デスクトップには何も作成されていません。私は 'chmod 777 newcgi.txt'を変更しました。しかし、何も/ var/www/htmlに作成されていません。 – user2986042

+0

CGIプロセスをHTTPでやってしまったのですか、Apacheがエラーを返しましたか?それが動作すれば、 'ofstream :: open()'で得られたstdoutにエラーを出力し、失敗の理由を確認することができます。 – karastojko

答えて

1

概要:あなたのCGIファイルの

  • チェック特権。しばしば特別なユーザーを所有し、/var/wwwを所有し、Apacheがスクリプト/プロセスを実行するために使用されます。
  • C++ CGIプロセスがApacheにヒットしたかどうかを確認します.HTML経由で応答を返しますか。
  • ofstream::is_open()が返すファイルの作成場所を確認します。 CGIプロセスによって作成されたファイルを格納するための良い候補者が(httpd.conf内で設定されます)/tmpcgi-bin作業ディレクトリは、多くの場合、それは/var/www/cgi-bin/
関連する問題