2

phpスクリプトでテーブルを操作する前に、データベース全体をバックアップしたいので、mysqldumpの使用を検討しました。

shell_exec()を使用してmysqldumpコマンドを実行し、次のように成功したかどうかを確認しようとしました。

$command = 'mysqldump -u username -ppassword database > /path/database.sql';
$result = shell_exec($command);

if(!is_null($result)) {
  echo 'Error during backup';
else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}

しかし、ファイルを書き込めないパス(既存のディレクトリがない、またはシェルプロンプトで拒否されたアクセス許可を返す必要があるパス)を指定した場合でも、$resultが常にnullであることに気付きました。

私は何が欠けていますか?

4

3 に答える 3

4

これは私のために働いた:

$command = 'mysqldump -u username -ppassword database > /path/database.sql';
system($command, $output);

if($output != 0) {
  echo 'Error during backup';
else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}
于 2013-02-20T13:59:51.603 に答える
1

マニュアルから:

戻り値
実行されたコマンドからの出力。エラーが発生した場合はNULL

ただし、スクリプトの出力をファイルにリダイレクトしています。

mysqldump -u username -ppassword database > /path/database.sql
                                          ^^^^^^^^^^^^^^^^^^^^

0mysqldumpが標準のリターンコードを生成する可能性があります(私は本当に知りませんOKerror。その場合は、別のPHP関数が必要ですが、そのメカニズムを使用する必要があります。

string exec ( string $command [, array &$output [, int &$return_var ]] )
                                                   ^^^^^^^^^^^^^^^^
于 2013-02-14T10:51:50.553 に答える
1

-uと-pの間のすべてのスペースを削除する必要があり、varialbesも「exec()」を使用します

$command = "mysqldump -u$username -p$password database > /home/yourusername/public_html/database.sql";
exec($command,$result, $output);

if($output != 0) {
  echo 'Error during backup';
}else {
  echo 'Database saved';
  // rest of the php script to modify the database (create/drop tables etc)
}
于 2014-06-30T11:00:18.300 に答える