2016-07-11 3 views
0

PHP의 shell_exec 함수를 사용하여 C 프로그램의 바이너리 .exe 파일을 실행하고 있습니다.php shell_exec를 사용하여 출력 파일을 캡처하는 바이너리 파일 실행

My C 프로그램은 입력 텍스트 파일을 사용하고 출력시 여러 텍스트 파일을 만듭니다. 웹 프론트 엔드와 통합하기 위해 php의 shell_exec 함수를 사용하여 쉘 스크립트를 실행하는데,이 쉘 스크립트는 바이너리 C .exe 파일을 호출합니다.

이 바이너리 .exe 파일, 입력 텍스트 파일, 쉘 스크립트 및 PHP 파일은 서버 측에 있습니다. 테스트 목적으로 chmod 777에 서버 쪽에서 언급 한 파일에 대한 액세스 권한을 부여했습니다.

다음 PHP 실행 쉘 스크립트의 추출물이다 :

에코 shell_exec ('쉬 segments.sh 2> & 1'); > segments.sh

./auto_import.exe input_file.txt

을 -terms -이

다음과 같이

지금, 여기에 내가 쉘 스크립트와 쉘 스크립트를 실행하고하면 바이너리 .EXE 파일을 실행합니다

auto_import는 C 바이너리 .exe 파일입니다.

터미널에서 쉘 스크립트를 개별적으로 실행하면 올바른 결과를 얻을 수 있습니다. 출력은 4-5 개의 다른 텍스트 파일이됩니다.

그러나 PHP로 쉘 스크립트를 호출 할 때 어떤 출력도 얻을 수 없으며 텍스트 파일 수인 이진 파일의 출력을받는 방법을 모르겠습니다.

에 의해 호출되는 PHP 파일 쉘 스크립트에서

:

에코 shell_exec ('쉬 /path/segments.sh 2> & 1'내가 예를 들어, 내 파일에 대한 절대 경로를 제공하는 시도

);

쉘 스크립트

이진 파일

에코 shell_exec ('SH/경로/진 2> & 1')는 다음과 같이 호출; 다음과 같이

은 또한 간부 기능을 사용하고 있습니다 :

$ cmd를 = "/auto_import.exe input_file.txt -terms"; echo exec ($ cmd, $ output);

이 문제와 관련하여 도움을 주시겠습니까?

답변

0

정확하게 이해하면 명령이 실행되고 파일이 생성되므로 PHP로 지금 읽고 있어야합니다. 당신이 라인으로 파일 라인을 읽고 다음과 같이 "는 fgets"를 사용하는 것을 고려해야 할 경우

<?php 
$fileName = 'somefilethatyougenerated.txt'; 
$file = fopen($fileName, "r") or die("Unable to open file!"); 
$content = fread($file,filesize($fileName)); 
// manipulate contents here 
fclose($myfile); 
?> 

: How to read a file line by line in php

+0

없음 헤이든의 shell_exec 여기서 일하지 않는 다음과 같이 그렇게하는 한 가지 방법은 . –

+0

Vivek 질문에 대한 명확한 설명이 필요합니다. 지금은 약간 모호합니다. shell_exec이 실제로 파일을 실행하지 않는다면 경로와 관련된 문제가 가장 자주 발생합니다.shell_exec (예 : shell_exec ("/ usr/home/gary/php/binary.exe") 대신에 shell_exec (예 : shell_exec)와 같이 * 절대 * "binary.exe"). –

+0

나는 절대 경로도 사용했다. 그러나 그것은 효과가 없었습니다. –