Использование сценария PHP: почему mysqldump не создает дамп файла sql?

Хе, я новичок в PHP и пытаюсь использовать mysqldump используя скрипт php.
Я уже пробовал использовать команду, и процесс дампа прошел успешно.
Ситуация такова, что при попытке выполнить дамп с помощью локального компьютера дамп завершается успешно.
Но когда код передается на сервер, mysqldump не работает. Я пробовал почти решение, связанное с темами mysqldump, но все же оно не работает. Я надеюсь, что кто-то может направить меня. TQ

<?php

/*-----------------------------------------------
MYSQLDUMP FOR SERVER
------------------------------------------*/$dbhost = "*****";
$dbuser = "*****";
$dbpass = "*****";
$dbname = "*****";

//set date today
$today=date("d-m-Y");

//set file name
$filename = "leave_".$today.".sql";

//MYSQLDUMP

//For Server
$command = sprintf("/usr/bin/mysqldump --opt -h%s -u%s -p%s %s     >/var/www/html/leave/leave/backup/%s",

//for local
//$command = sprintf("c:\AppServ\MySQL\bin\mysqldump --opt -h%s -u%s -p%s %s > %s",

$dbhost,
$dbuser,
$dbpass,
$dbname,
$filename
);
system($command);/*-------------------------------------------------------------
TO SAVE FILE SQL INTO LOCAL
---------------------------------------------------------------*/

$file = "leave_".$today.".sql";
if(!$file)
{
// File doesn't exist, output error
die('File not found');
}
else
{
// Set headers to ask user where to save file.
header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=$file");

// Read the file from disk
readfile($file);}?>

1

Решение

Ладно, на самом деле я уже решаю эту проблему спустя несколько дней после того, как я отправил вопрос. К сожалению, у меня не было достаточно репутации, чтобы опубликовать ответ. Итак, поехали.

Вот несколько вещей, которые нужно Принять к сведению: —

  1. Обязательно использовать абсолютный путь для дампа MySQL.
  2. Попробуйте использовать —opt (опция по умолчанию для дампа MySQL). Прочитайте больше Вот.
  3. Для варианта, если использовать краткую форму, не нужно иметь (-). например: —p. Используйте (-), когда используете полную форму. Например: — пароль. Поэтому используйте «-p» вместо «—p» (также применяется для других).
  4. попробуйте ‘shell_exec’ или ‘system’, если mysqldump не работает на ‘exec’.
  5. попробуйте избежать пробела между опцией и переменной. Например: -p $ dbpass

* Также имейте в виду, это включает в себя разрешение, может ли системная команда выполняться из php или нет.

1

Другие решения

Я предполагаю, что ваш php разрешает выполнение команд через system ().

вы не работаете в безопасном режиме или, если вы используете, safe_mode_exec_dir содержит все необходимые вам команды

0

По вопросам рекламы [email protected]