반응형
$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 |