2014-04-25 2 views
0

생성 된 sql 파일을 서버 a에서 서버 b로 전송해야합니다. 현재 나는 성공하지 않고 다음을 시도했다.PHP에서 파일 전송

// Some SQL executions to fill and update the tables 
(..) 

// Filename pattern 
$fileName = "dump_".date("Y-m-d-H_i_s").".sql"; 

// Dump the tables and saves the output in dump directory 
$dump = "mysqldump -u$USER -p$PASS $DB ".$this->dumpTables." > " . $this->path."dumps/". $fileName; 

// Transfer the lastest sql file to the origin 
$command = "scp " . $this->path."dbbackup/" . $fileName . " [email protected]:/PATH/dumps" . $fileName; 

system($command, $retvalOrigin); 
if ($retvalOrigin != 0) { 
     fwrite($this->logFileInstance, $this->date() . "Something went wrong! \r\n"); 
     fwrite($this->logFileInstance, $this->date() . "$command! \r\n"); 
} 

뭐가 문제 야?

내가 직접 명령을 실행하면 모든 것이 잘됩니다. 따라서 권한 문제는 없습니다. 내 오류 로그에 예기치 않은 로그 항목이 없습니다. vars없이 명령을 복사하고 이것을 새로운 PHP 파일에 넣고 이것을 호출하면 오류가 다시 발생하지 않습니다 .. 처음에는 thougt scp가 나를 싫어합니다. 그 이유는 "scp"를 "rsync -ave ". 저에게 오류는 없지만 파일을 원본 서버에 복사하지 않습니다 (다시 오류 로그가 없습니다!).

는 SCP -> $ retvalOrigin = 1, 원본 서버, 오류 로그에는 파일

는 rsync를 -> $ retvalOrigin = 0, 원본 서버, 오류 로그에는 파일

그래서 요점 무엇 없습니다 ?

편집 :

경로, 실행중인 사용자와 www가 데이터에 대한 SSH 키 절대 - 더 이상 필요없이 로그인, $ RETVAL는 만 1/0, 및 NO 그것을 위해 사용하지 않습니다에 포함 cron

+0

php.net :'return_var 인수가 있으면 실행 된 명령의 반환 상태가이 변수에 기록됩니다. '. '$ retvalOrigin'에 더 많은 정보가있을 가능성이 높습니다. 그 값을'print_r '해보십시오. – Michiel

+0

@Michiel 그것은 1/0을 포함하고 있습니다. 그래서 도움이되지 않을까요? 다른 명령도 괜찮습니다. 예상 출력 (예 : ls) – Tyralcori

+0

알겠습니다. scp 명령에'-v' 플래그를 추가하거나'exec' 명령으로 전환 해보십시오. – Michiel

답변

1

scp 명령을 사용하는 사용자 (대부분 www-data)는 시스템 사용자뿐만 아니라 인증없이 scp를 사용할 수있는 권한이 있어야합니다.

또한 절대 경로를 사용해야합니다.

더 나은 오류보고를 위해서는 오류 메시지를 저장하는 데 'exec'를 사용하십시오. 'system'은 오류를 직접 출력하고 cron에서 사용할 때 가장 많이 손실됩니다.

exec($command, $commandOutput, $retvalOrigin); 

또한 명령에 유효한 쉘이 필요한 경우 shell_exec를 시도 할 수 있습니다.

+0

터미널에서 SAME 명령을 실행하려고하면 모든 것이 잘됩니다 .. Absoulte paths : CHECK! www-data와 사용자는 rsync/scp를 사용할 수있는 모든 권한을 가지고 있습니다. 연결하는 사용자가 키를 추가 했으므로 입력 할 암호가 없습니다. 인증이 필요하지 않습니다. 임원도 같은 효과가 있습니다. – Tyralcori

+0

www-data 사용자가 ssh 키를 사용할 수 있습니까? –

+0

"www-data"사용자는이 프로세스에 관여하지 않습니다. 사용자는 두 시스템에서 파일을 읽고 쓰거나 추가 할 수있는 권한을가집니다. ssh-key가 주어 지므로 auth가 필요하지 않습니다. – Tyralcori