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ディレクトリにありますか?
コードに問題がありますか?私は書き込みモードでもファイルに書き込みます。私はコードが正常に動作していると思います。助言がありますか ?以前のコメントの
だあなたはあなたのCGIファイルの権限を確認しましたか?多くの場合、/ var/wwwを所有し、スクリプト/プロセスを実行するためにApacheによって使用される特別なユーザ 'nobody 'が存在します。 'Newcgi.txt'が作成されるはずですが、与えられたパスは相対パスなので、 – karastojko
もし '/ home/user/Desktop/newcgi.txt'だけ作成すれば、デスクトップには何も作成されていません。私は 'chmod 777 newcgi.txt'を変更しました。しかし、何も/ var/www/htmlに作成されていません。 – user2986042
CGIプロセスをHTTPでやってしまったのですか、Apacheがエラーを返しましたか?それが動作すれば、 'ofstream :: open()'で得られたstdoutにエラーを出力し、失敗の理由を確認することができます。 – karastojko