Я работаю над функцией для базы данных PostgreSQL, чтобы, когда клиент выдает дамп базы данных, дамп предлагается для загрузки.Этот моментальный снимок впоследствии можно будет использовать для восстановления базы данных с помощью.Тем не менее, я не могу понять, как это сделать.Когда пользователь нажимает кнопку, выполняется AJAX-вызов на сервер, для которого сервер выполняет следующий код:
if($_POST['command'] == 'dump'){
$dump = $table->Dump();
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename=/"'.$dump.'/"');
}
Где $table->Dump()
выглядит следующим образом:
public function Dump(){
$filename = dirname(__FILE__)."/db_Dump.out";
exec("pg_dump ".$this->name." > $filename");
return $filename;
}
Дамп еще не сделан.Любые советы по этому поводу?
Этот подход, однако, не работает.Я думал, что установки заголовков будет достаточно, чтобы вызвать загрузку, но, видимо, я ошибся.Итак, каков будет правильный способ создания загрузки?
Редактировать 1 , @stevevls:
if($_POST['command'] == 'dump'){
$dump = $table->Dump();
$fh = fopen($dump, 'r') or die("Can't open file");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename=/"'.$dump.'/"');
$dumpData = fread($fh, filesize($fh));
fclose($fh);
echo $dumpData;
}
Я все еще не получаю ничего, какхотя загрузка.
Редактировать 2 , @ себя
Мне удалось получить возвращаемое значение, казалось, что проверка, если команда далабыл «свалка» никогда не был достигнут.Я исправил это, и теперь я получаю сообщение об ошибке в команде pg_dump.Теперь я получаю
sh: cannot create ../database/db_Dump.sql: Permission denied
Могу поспорить, что это связано с тем, что php не разрешено запускать pg_dump, но как я могу заставить систему разрешить ее запуск?
Редактировать 3 , @ себя
После решения проблемы с помощью pg__dump (я добавил www-data, пользователя Apache в моей системе, в список sudoers, который устранил проблему. Такжеустановка правильных разрешений для каталога для записи также удобна.) Теперь я получаю db_Dump.sql в виде простого текста вместо диалогового окна сохранения как.Есть идеи на этот счет?