2
Apache에서 CGI를 사용하여 파일에 내용을 쓰고 싶습니다.아파치와 함께 CGI에서 파일을 생성하지 않는 이유는 무엇입니까?
내 HTML 파일 :
CGI 스크립트를 호출하는 아약스 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
에서 생성 된 모든 파일을 볼 수 없습니다. 왜 이런 일이 일어나는거야? 새 파일은 어디에 만들어야합니까? 아파치 디렉토리에 있나요?
모든 코드 문제가 있습니까? 쓰기 모드로 파일에 쓰고 있습니다. 나는 코드가 잘 동작하고 있다고 생각한다. 어떤 제안? 이전 코멘트
당신이 당신의 CGI 파일의 권한을 확인 했이다, (
httpd.conf
내에서 구성) 작업 디렉토리입니까? '/ var/www'를 소유하고 스크립트/프로세스를 실행하기 위해 아파치에서 사용되는 특별한 사용자'nobody '가 종종있다. 'Newcgi.txt'가 만들어지면, 주어진 경로는 상대적입니까? – karastojko만약 내가'/ home/user/Desktop/newcgi.txt' 만 만들면 Desktop에서도 아무것도 생성되지 않습니다. 나는'chmod 777 newcgi.txt'를 바 꾸었습니다. 하지만 아무것도/var/www/html에 만들지 않습니다. – user2986042
HTTP를 통해 CGI 프로세스에 충돌 했습니까? 아니면 Apache가 오류를 반환합니까? 그것이 작동한다면,'ofstream :: open()'에 의해 얻어진 stdout에 에러를 출력하고 실패의 이유가 무엇인지 볼 수있다. – karastojko