所以我使用PHP执行mysql命令来备份/恢复数据库。在localhost上它没有问题,因为我必须查明可执行文件。但在服务器上它不起作用。这就是我使用的PHP代码:
public function backup() {
$backup = $this->backups.'/'.$this->db_name.'_backup_'.date('Y').'_'.date('m').'_'.date('d').'.sql';
$cmd = "mysqldump --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name > $backup";
try {
system($cmd);
return $this->encode('Error',false,'Backup Successfuly Complete');
} catch(PDOException $error) {
return $this->encode('Error',true,$error->getMessage());
}
}
public function restore($backup) {
$cmd = "mysql --opt -h $this->db_host -p $this->db_pass -u $this->db_user $this->db_name < $backup";
try {
exec($cmd);
return $this->encode('Error',false,'Restore successfuly complete');
} catch(PDOException $error) {
return $this->encode('Error',true,$error->getMessage());
}
}
请对那里的任何变量进行抽象,我想找出为什么命令不在服务器上工作。
如果命令实际执行正确,我该如何检查PHP?因为使用try
方法,我总能得到肯定的答案。
答案 0 :(得分:2)
“请对那里的任何变量进行抽象” - 无论如何我希望你好好利用escapeshellarg()
在webserver进程的上下文中可能找不到没有绝对路径的mysqldump,例如:因为它根本不在其搜索路径中(或根本不存在)。您可能希望尝试通过在命令中附加2>&1
来将STDERR重定向到STDOUT以获取错误消息。