본문 바로가기

php/코드이그나이터(CI3)

php exec 실행안될때 확인

반응형
$command = "sqlldr aaa/aaaa@123123123:1521/orcl \
                       control='".$this->arr_sqlldr_filename['ctl']."' \
                          data='".$this->data_file.".dat' \
                          bad='".$this->arr_sqlldr_filename['bad']."' \
                          discard='".$this->arr_sqlldr_filename['dsc']."' \
                          log='".$this->arr_sqlldr_filename['log']."'";
echo($command);

$this->arr_execute_query[$this->idx_execute_query++]= array("method"=>__METHOD__, "query"=>$command);

exec("/usr/lib/oracle/12.2/client64/bin/".$command, $output, $return_var);

print_r($return_var);
echo("<br>");
echo($return_var);
exit;

 

위 같이 코드를 짜고 실행을 돌리는데 실행이 안되는 경우가 생겼다.

생각을 해봤다.

1. 권한이 없는가?

권한은 있다. 실제 같은 서버의다른 파일에서 exec 프로그램을 실행하는 경우가 있는데 잘만 실행되었다.

2. 함수사용법이 틀렸나?

exec("실행명령어","결과물","리턴값"); 으로 이루어져 있으므로 틀리지않았다.

3. 오타가 있는가?

없었다. $command 를 프린트해봐서 직접 서버에서 실행시켜보니 잘만실행이 되었다.

4. 다른 명령어는 실행이 되는가?

실행되었다. 똑같은 컨트롤러에 다른 라인에서 exec 를 하드코딩으로 명령어를 날려봤더니 잘만 실행되었다.

위에 1,2,3,4 에 모두 해당되지 않는다면 변수를 확인해봐야된다.

원인은 $command 변수였다.

$command 라는 변수를 선언할 때 가독성을 위해 줄바꿈하며 정의해 놓았다.

하지만 exec 외부파일 실행 명령어에서 리눅스만 그런진 몰라도 줄바꿈까지 인식을 해버리는 상황이 된 것이다.

변수를 선언하는 경우 해당 변수가 문제라면 줄바꿈을 확인하자

'php > 코드이그나이터(CI3)' 카테고리의 다른 글

파일다운로드  (0) 2024.05.12
파일업로드  (0) 2024.05.12
코드이그나이터3, 세션생성오류  (0) 2024.04.18
php sftp로 폴더 업로드  (2) 2024.04.18
php 서버내의 폴더, 파일 압축  (0) 2024.04.18