2011-05-08 21 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()コールでうまくいかないのですが、ターミナルでうまく動作しますか?あなたは-p

でそれを指定した場合でも、あなたがパスワードを入力する必要がありますmysqldumpを実行しているとき、これは役に立つはずですので

+0

を確認してい指定されたユーザーアカウントに必要な「ファイル」権限を持っていますか? –

答えて

0

あなたの問題はよくそうしないことが考えられbackupsディレクトリに書き込む権限があります。

あなたがコードを実行した場合:

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

は、バックアップディレクトリ内のファイル表示されていますか?

Webサーバーユーザーが書き込むことができるように、ディレクトリのアクセス許可を変更する必要がない場合。 chmod 777は簡単な解決策ですが、権限を広げたままにしておきます。

0

私は上記のアンドレイの答えに反対しなければなりません。

共有ホスティング企業の数で次の作品:

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

慎重に、あなたはどこでもあなたの引数引用符を使用する(ファイル名、パスワードなど)でのホワイトスペースを持っている場合。 PHPでは、上記のようにバックスラッシュを使用する必要があります。前または後ろのスペースは、通常、悪い考えですが、私はこれが空の0バイトのmysqldumpファイルの原因であることが判明したクライアントに遭遇しました。引用符で囲んで問題を解決しました。引数をシェルでエスケープする必要があるかもしれません。

次の2行はかなり異なっている:

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

注秒1はまた、パスワードの最後に二つのスペースを持っていますが、でも、HTMLはそれを無視すること。

私はおそらく...初心者のために言及し、それが動作していない理由の、例えばを探して前に手動設定で接続できることを確認してください - ホストが正しいことを確認してください。ローカルホストまたはyourdb.website.com - ユーザ名とパスワード仕事

関連する問題