linux — Exec php tar команда для динамического резервного копирования сайта

Я хотел бы сделать резервную копию моего сайта с помощью команды tar и exec из php, и я написал небольшой скрипт для этого, но ничего не происходит … где я ошибаюсь? У меня php 5.6.5 и хостинг linux с включенным exec и командой tar … поэтому у меня есть все материалы для написания моей маленькой резервной копии в личных целях … кто-нибудь может мне помочь?

<?php
$root = $_SERVER['DOCUMENT_ROOT'];
# root is /web/htdocs/www.example.com/home/
$name = "backup_" . date("[d-m-Y][H-i]") . ".tar.gz";
# name is backup_[25-02-2015][18-57].tar.gz
$salt = "*.gz";
# salt is the file I want to exclude so is backup_[25-02-2015][18-57].tar.gz
if ((substr($_SERVER['DOCUMENT_ROOT'],-1,1) == "/") && (substr($_SERVER['PHP_SELF'],0,1) =="/")) {
$sdir = $_SERVER['DOCUMENT_ROOT'] . substr(dirname($_SERVER['PHP_SELF']),1);
} else {
$sdir = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']);
}
# sdir is /web/htdocs/www.example.com/home/bak/ and is the path when the script lives
# out is the output
# oky is the success o failed exec command
function backup()  {
exec("tar -cvf $sdir/$name $root/* --exclude='$sdir/$salt' ", $out, $oky);
}
backup();
if (!$oky) {
echo "$out: Backup Completed!";
} else {
echo "$out: Backup Not Completed!";
}
?>

0

Решение

$oky а также $out являются локальными переменными. Они не установлены вне функции. $sdir, $name а также $root не определены внутри функции.

Метод 1 — Параметры:

function backup($sdir,$name,$root,$salt)  {
exec("tar -cvf $sdir/$name $root/* --exclude='$sdir/$salt' ", $out, $oky);
return array("oky"=>$oky, "out"=>$out);
}

$result = backup($sdir, $name, $root, $salt);

if (!$result["oky"]) {
echo $result["out"].": Backup Completed!";
} else {
echo $result["out"].": Backup Not Completed!";
}

Способ 2 — Не используйте функцию:

exec("tar -cvf $sdir/$name $root/* --exclude='$sdir/$salt' ", $out, $oky);

if (!$oky) {
echo "$out: Backup Completed!";
} else {
echo "$out: Backup Not Completed!";
}

Метод 3 — Глобальные переменные:

function backup()  {
global $sdir,$name,$root,$salt,$oky,$out;
exec("tar -cvf $sdir/$name $root/* --exclude='$sdir/$salt' ", $out, $oky);
}

backup();

if (!$oky) {
echo "$out: Backup Completed!";
} else {
echo "$out: Backup Not Completed!";
}
1

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

Других решений пока нет …

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