2016-10-19 1 views
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에서 생성 된 모든 파일을 볼 수 없습니다. 왜 이런 일이 일어나는거야? 새 파일은 어디에 만들어야합니까? 아파치 디렉토리에 있나요?

모든 코드 문제가 있습니까? 쓰기 모드로 파일에 쓰고 있습니다. 나는 코드가 잘 동작하고 있다고 생각한다. 어떤 제안? 이전 코멘트

+0

당신이 당신의 CGI 파일의 권한을 확인 했이다, (httpd.conf 내에서 구성) 작업 디렉토리입니까? '/ var/www'를 소유하고 스크립트/프로세스를 실행하기 위해 아파치에서 사용되는 특별한 사용자'nobody '가 종종있다. 'Newcgi.txt'가 만들어지면, 주어진 경로는 상대적입니까? – karastojko

+0

만약 내가'/ home/user/Desktop/newcgi.txt' 만 만들면 Desktop에서도 아무것도 생성되지 않습니다. 나는'chmod 777 newcgi.txt'를 바 꾸었습니다. 하지만 아무것도/var/www/html에 만들지 않습니다. – user2986042

+0

HTTP를 통해 CGI 프로세스에 충돌 했습니까? 아니면 Apache가 오류를 반환합니까? 그것이 작동한다면,'ofstream :: open()'에 의해 얻어진 stdout에 에러를 출력하고 실패의 이유가 무엇인지 볼 수있다. – karastojko

답변

1

요약 : 당신의 CGI 파일의

  • 확인 권한. 종종 특별한 사용자 nobody이 있으며이 스크립트는 /var/www이며 Apache가 스크립트/프로세스를 실행하는 데 사용됩니다.
  • C++ CGI 프로세스가 Apache에 의해 공격 받았는지 확인하십시오. HTTP를 통한 응답을 반환합니까?
  • ofstream::is_open()이 무엇을 반환하는지 확인하고 파일을 만들려고합니다. 좋은 후보가 CGI 프로세스에 의해 파일을 만들어 저장하는 것은 /tmpcgi-bin 종종는 /var/www/cgi-bin/
관련 문제