2014-11-05 9 views
1

안녕하세요, 저는 PHP에 익숙하며 PHP 스크립트를 사용하여 mysqldump를 사용하려고합니다.
이미 명령 사용을 시도했으며 덤프 프로세스가 성공적입니다.
상황에 따라 로컬 컴퓨터를 사용하여 덤프를 시도하면 덤프가 성공합니다.
그러나 코드가 서버로 전송되면 mysqldump가 작동하지 않습니다. mysqldump 주제와 관련된 거의 솔루션을 시도했지만 여전히 작동하지 않는다. 나는 누군가가 나를 인도 할 수 있기를 바랍니다. TQPHP 스크립트 사용 : mysqldump가 sql 파일을 덤프하지 않는 이유는 무엇입니까?

<?php 

/*----------------------------------------------- 
MYSQLDUMP FOR SERVER 
------------------------------------------*/ 


$dbhost = "*****"; 
$dbuser = "*****"; 
$dbpass = "*****"; 
$dbname = "*****"; 

//set date today 
$today=date("d-m-Y"); 

//set file name 
$filename = "leave_".$today.".sql"; 

//MYSQLDUMP 

//For Server 
$command = sprintf("/usr/bin/mysqldump --opt -h%s -u%s -p%s %s  >/var/www/html/leave/leave/backup/%s", 

//for local 
//$command = sprintf("c:\AppServ\MySQL\bin\mysqldump --opt -h%s -u%s -p%s %s > %s", 

$dbhost, 
$dbuser, 
$dbpass, 
$dbname, 
$filename 
); 
system($command); 



/*------------------------------------------------------------- 
TO SAVE FILE SQL INTO LOCAL 
---------------------------------------------------------------*/ 

$file = "leave_".$today.".sql"; 
if(!$file) 
{ 
    // File doesn't exist, output error 
     die('File not found'); 
} 
else 
{ 
// Set headers to ask user where to save file. 
header('Pragma: anytextexeptno-cache', true); 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private", false); 
header("Content-Type: text/plain"); 
header("Content-Disposition: attachment; filename=$file"); 

// Read the file from disk 
readfile($file); 


} 



?> 
+0

오류가 있습니까? 왜 mysqldump를하고 싶습니까?이 작업을 수행하기 위해서는 서버에서 열려야하는 많은 권한이 필요하다는 것을 알고 있습니까? – Saikios

+0

시스템 명령을 PHP에서 실행할 수 있는지 여부를 확인하십시오. 여러 번, 시스템 및 exec 명령은 권한 문제로 인해 php 파일에서 작동하지 않습니다. – WisdmLabs

+0

@Saikios 오류가 없습니다. 단지 덤프 파일이 전혀 없습니다. 나는 echo 명령을 시도했지만 여전히 오류는 없다. 귀하의 두 번째 질문에 대한, 나는 PHP 스크립트를 사용하여 데이터베이스를 백업하기 위해 상사의 작업을 가지고. 그래서 나는 mysqldump와 쿼리를 시도했다. 단 하나의 성공은 mysqldump 다. 둘 다 로컬에서 실행된다. 문제는 스크립트가 서버로 전송 될 때 발생합니다. 물론 이미 사용자 이름과 암호도 변경합니다. –

답변

1

이 좋아 필요은 safe_mode_exec_dir 모든 명령을 포함, 안전 모드에서 실행하거나하지 않습니다. 불행히도, 나는 대답을 게시하기에 충분한 명성을 얻지 못했습니다. 그래서 여기에 우리가 간다. 덤프 MySQL의에 대한 절대 경로를 사용

  1. 의무 - 다음은

    TAKE 주에 필요 몇 가지 있습니다.
  2. --opt (MySQL 덤프의 경우 기본 옵션)를 사용해보십시오. 더 읽기 here.
  3. 옵션의 경우 약식을 사용하는 경우에는 (-)을 사용할 필요가 없습니다. 예 : -p. 전체 양식을 사용할 때 (-)를 사용하십시오. 예 : --password. 따라서 '- p'대신 '-p'를 사용하십시오 (다른 옵션에도 적용됨).
  4. mysqldump가 'exec'에서 작동하지 않으면 'shell_exec'또는 'system'을 입력하십시오.
  5. 옵션과 변수 사이에 공백을 두지 마십시오. 예 : -p $ dbpass

* 또한 염두에두면 시스템 명령을 PHP에서 실행할 수 있는지 여부도 포함됩니다.

0

php가 system()을 통해 명령을 실행할 수 있다고 가정합니다. 당신이 경우

당신은 실제로 이미이 며칠 후 나는 질문을 게시 한 후 문제 해결, 당신은

+0

이 '안전 모드'가 코드에 영향을 미칠 수있는 이유는 모르겠지만 안전 모드가 '켜짐'상태가되면 mysqldump에 영향을 미칠 수 있다고하는 기사가 있습니다. 그래서, 나는 그것을 체크한다, 그것은 이미 'off'모드에있다. 위에서 언급 한 것에 대해 더 자세히 설명 할 수 있는가? –

+0

안전 모드가 해제 된 경우 내 답장을 무시할 수 있습니다. 나는 내가 도울 수 있는지 더 확인하고보고하려고 노력할 것이다. – Sambhav