2011-05-08 8 views
0

이렇게 다른 질문이 있지만 내가 보았던 답변이 없기 때문에 신선한 질문을하고 있습니다.mysqldump는 PHP 시스템()을 통해 빈 파일을 생성합니다.

내가이 명령 system()을 통해 mysqldump를 사용하려고 해요 :

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/'; 
$backup_name = $backup_path . $dbname . '.backup.' . date('l.dS.F.Y.g.iA') . '.sql'; 

$command = 'mysqldump ' . $dbname . ' -u ' . $dbuser . ' -p' . $dbpasswd . ' > ' . $backup_name; 

system($command, $returned); 

print_r($returned); 

$returned 출력 127 제로 KB의 크기가 백업 폴더에있는 빈 파일, 지금은 $command 에코 때 그것을 터미널에 입력하면 완벽하게 작동하여 데이터베이스의 전체 백업을 생성합니다. 이것은 내가 이해하지 못하는 부분이며, 왜 system() 호출에서 잘 작동하지 않지만 터미널에서 정상적으로 작동합니까?

+0

지정한 사용자 계정에 "파일"권한이 필요합니까? –

답변

0

귀하의 문제가 아니라 당신이하지 않는 일 수 있었다 backups 디렉토리에 쓸 수있는 권한이 있어야합니다.

당신이 코드를 실행하면 :

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/'; 
file_put_contents("{$backup_path}test-file.txt", "test data"); 

파일이 백업 디렉토리에 표시 하는가를?

웹 서버 사용자가 글을 쓸 수 있도록 디렉토리 사용 권한을 수정하지 않아도됩니다. chmod 777은 쉬운 솔루션이지만 사용 권한을 넓게 남겨 둘 것입니다.

0

위의 Andrei의 답변에 동의해야합니다. 공유 호스팅 회사의 수에

다음 작품 : 당신이 (등 파일 이름, 암호) 당신의 주장에 어디 공백이있는 경우

$command = 'mysqldump --opt --host='.$host.' --user='.$mysql_username.' --password=\''.$mysql_password.'\' '.$dbname.' > \''.$filename.'\''; 
exec($command); 

주의 따옴표를 사용합니다. PHP에서는 위의 인용 부호와 같이 백 슬래시를 사용해야 할 수도 있습니다. 선행 또는 후행 공백은 일반적으로 좋지 않지만 클라이언트가 0 바이트 mysqldump 파일이 비어있는 것으로 판명 된 클라이언트를 만났습니다. 따옴표로 문제가 해결되었습니다. 인수를 쉘에서 이스케이프해야 할 수도 있습니다. 두 번째는 암호의 끝에 두 개의 공백이

-password='password ' db_name > 'my file.sql' 
-password=password db_name > my file.sql 

하는 것으로하지만, 심지어 HTML은 무시할 수

다음 두 줄

은 매우 다르다.

아마도 멍청한 놈들을 언급해야합니다 ... 작동하지 않는 이유를 찾기 전에 수동으로 설정에 연결할 수 있는지 확인하십시오. - 호스트가 올바른지 확인하십시오. localhost 또는 yourdb.website.com - 사용자 이름과 암호가 작동하는지 확인하십시오.

관련 문제