2011-11-24 2 views
3

나는 Windows machin에서 PHP를 사용하고 있습니다. 또한 Dev C++를 사용합니다. 나는 완벽하게이 명령을 사용하여 CMD에서 .cpp 파일을 컴파일 할 수 있습니다 : 이제컴파일 C++ 파일 PHP를 사용하여

g++ hello.cpp -O3 -o hello.exe 

을 제가 PHP 시스템() 함수를 사용하여 동일한 명령을 실행하려고 노력하고, 그래서 다음과 같습니다

시스템 ("g ++ c : \ wamp \ www \ grader \ hello.cpp -O3 -o C : \ wamp \ www \ grader \ hello.exe");

하지만 컴파일되지 않습니다. 나는 길을 잃었습니다. 무엇이 실종 됐는지 말해주십시오.

나는이 질문에 고개를 내가 필요 정확히 이잖아,하지만 난 거기에 내 경우를위한 유용한 솔루션을 찾을 수 couldnt한다 :

Php script to compile c++ file and run the executable file with input file

+1

어떤 오류가 발생합니까? – robert

+0

'g ++'이 설치되어 있고, Windows 서버의 PATH에 표시되어 있습니까? –

+0

또한 PHP를 실행하는 계정에'c : \ wamp \ www \ grader' 디렉토리에 대한 수정 권한이 있는지 확인 하시겠습니까? – Anthony

답변

3

두 가지 : 당신은

  1. 을 큰 따옴표를 사용하고 경로 안쪽에 \를 이스케이프하지 않습니다.
  2. g ++에 대한 전체 경로를 사용하고 있지 않습니다.

첫 번째 문자는 \가 중요하므로 그 문자열에 특별한 의미가 있습니다 (새 행을 \ n 알고있을 수도 있음). 두 번째 것은 PHP 환경이 다른 검색 경로를 가질 수 있으므로 중요합니다. .

해결책이

system("c:\\path\\to\\g++ c:\\wamp\\www\\grader\\hello.cpp -O3 -o C:\\wamp\\www\\grader\\hello.exe"); 

이 또는 큰 따옴표의 intead, 작은 따옴표를 사용할 수 있습니다 수 있습니다, 그들은

system('c:\path\to\g++ c:\wamp\www\grader\hello.cpp -O3 -o C:\wamp\www\grader\hello.exe'); 

diffeent 덜 엄격한 탈출 규칙을 사용하거나/대신 \의 사용하는 Windows에서도 지원됩니다. 많은 사람들이 추악한 첫 번째, 및 Windows ;-)

+0

감사합니다. 첫 번째 방법을 사용했는데 효과가있었습니다. g ++에 대한 PATH 규칙을 작성한 이후로 g ++에 대한 전체 경로가 필요하지 않다고 생각했습니다. – Nazar

6

사용하여 PHP exec 명령에 마지막으로 나쁜 스타일을 고려하는 반면

system("c:/path/to/g++ c:/wamp/www/grader/hello.cpp -O3 -o C:/wamp/www/grader/hello.exe"); 

은 당신이 할 것은, 당신의 선택입니다.

echo exec('g++ hello.cpp -O3 -o hello.exe'); 

.

PHP에서 다른 간부 & 시스템 명령의 온 가족이있어 여기를 참조 :

http://www.php.net/manual/en/ref.exec.php 

을 당신이 변수로 출력을 원하는 경우 사용

$variable = exec('g++ hello.cpp -O3 -o hello.exe'); 

즉 '아무튼 경우 그런 다음 g ++가 경로에서 사용 가능하고 로그인을 실행하기에 충분한 권한으로 로그인했는지 확인하십시오.

PHP가 본질적으로 웹 서버에 의해 실행되고 있다는 것도 알 수 있습니다 (cmd 프롬프트에서 PHP를 실행하지 않는 한). 웹 서버 사용자 ID에는 G ++가있는 폴더에 대한 쓰기 권한이 없을 수 있습니다. 출력 파일을 만들려고합니다.

일시적으로 출력 폴더의 'Everybody'에 대한 쓰기 권한을 부여하면 해당 폴더에 있는지 확인합니다.

+0

답장을 보내 주셔서 감사합니다. 귀하의 접근 방법을 찾으려고 노력할 것입니다. 내가 윈도우 명령 행에 익숙하지 않기 때문에 (나는 리눅스 배경에서왔다) 나는 윈도우 관례에 익숙하지 않다. 나는 리눅스에서 shell_exec()를 사용하여 잘 동작했다. – Nazar

+0

PHP의 매뉴얼 페이지는 모든 차이점을 설명 할 것입니다. 그러나 나는 당신의 루트 이슈가 퍼미션 관련이 될 것이라고 확신 할 것이다. 어떻게 지내는지 알려줘. :-) – shawty

+0

실제로 권한이 아니 었습니다. 문제는 g ++의 전체 경로와 함께있었습니다. 내 PATH에 g ++가 있었기 때문에 전체 경로를 작성할 필요가 없다고 생각했습니다. 명백하게 나는 필요로한다 :) – Nazar

0

모두에게 감사드립니다. 나는 위의 게시물에 주어진 코드를 실행하려고 시도하고 그것은 매력처럼 일했습니다.

나는 내 브라우저

$var = exec("g++ C:/wamp/www/cpp/hello.cpp -O3 -o C:/wamp/www/cpp/hello.exe"); 
echo $var; 

EXE 파일이 생성됩니다를 사용하여 다음 코드를 실행. 내가 exe 파일을 실행할 때 결과를 볼 수 있지만 브라우저에서 위의 코드를 실행하면 결과가 웹 페이지에 표시되지 않습니다. 모든 사용자에게 전체 액세스 권한을 부여했지만 여전히 웹 페이지에 결과를 표시하지 않습니다.

내가 컴파일 된 C++ 프로그램에서 결과를 얻고 일부 jquery 하이 차트가있는 웹 페이지에 표시하려는 시뮬레이션 어닐링에 대한 프로젝트를 수행하고 있으므로이 작업에 대한 도움이 필요합니다.

다시 한번 감사 드리며, 제게 많은 도움을 주었고 많이 배웠습니다.