Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][AJAX]PHP + AJAX?
Forum PHP.pl > Forum > Przedszkole
atom90
Witam

Chciałbym napisać skrypt, który Tworzy kopie zapasową plików na serwerze.

Mam przygotowany wstepny skrypt w php:

Kod
<?php
$when=date("Y-m-d");
if (!file_exists('../BackUp')) {
    mkdir('../BackUp', 0777, true);
    echo 'Utworzono katalog BackUp <br>';
}
else{

}

// Get real path for our folder
$rootPath = realpath('../');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('../BackUp/'.$when.'-backup1.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();

$relativePath = substr($filePath, strlen($rootPath) + 1);
if((strpos($relativePath, 'BackUp') !== false) || (strpos($relativePath, 'zipper') !== false)){
//Omija katalog Backupu i skryptu
}

// Add current file to archive
else{
  echo $relativePath."<br>";
$zip->addFile($filePath, $relativePath);
}
}
}

// Zip archive will be created only after closing object
$zip->close();
echo "BackUp Gotowy";
//Remove zipper.php
//unlink("zipper.php");

?>


Problem w tym, że chciałbym aby informacje zostały wyświetlane na bieżąco o procesie działania skryptu.
Wystarczy mi przykład działania czegoś takiego, że np wprowadza w dane elementy dane rzeczy z przebiegu skryptu.

próbowałęm coś takiego, ale to chyba zły pomysł i zresztą nie działa tongue.gif

Kod
$( document ).ready(function() {
      var auto_refresh = setInterval(
      function ()
      {
      $('#load_updates').load('ziper.php').fadeIn("slow");
      }, 10000); // refresh every 10000 milliseconds

});

Pyton_000
zapisuj sobie informacje do sesji o postępie, a potem w ajax z interval odpytuj o wartość z sesji jakiś inny skrypt. (albo ten samtylko na początkui z warunkiem o samo info)
atom90
Troche mnie nakierowałeś, ale jakoś bym musiał widzieć skrypt o podobnym działaniu jaki potrzebuje. Coś się wykonuje w pętli w php. I widze przebieg kazdego wykonania petli ale nie caly naraz jak sie wykona skrypt tylko nadpisujace sie pole dynamicznie zmieniajace i na koncu np informacje o zakonczeniu tego procesu
Pyton_000
No ale co Ty chcesz. Odpalasz jakąś akcję w Ajax. Na początku skryptu który coś tam mieli ustawiasz pusty progress w Session i aktualizujesz w zależności od potrzeb.
Potem odpalasz (w trakcie działania) kolejny Ajax ale już do miejsca/slryptu który odczyta wartość progresu z Sesji i wyświetli. Tyle.
atom90
Hej... Właśnie mam problem z połączeniem tego z ajaxem. Specjalnie nie znam się na tym i pewnie to trywialne, ale jeszcze dla mnie czarna magia.

aktualnie kod wygląda tak:
Kod
<?php
session_start();
$when=date("Y-m-d");
if (!file_exists('../BackUp')) {
    mkdir('../BackUp', 0777, true);
    echo 'Utworzono katalog BackUp <br>';
}
else{

}

// Get real path for our folder
$rootPath = realpath('../');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('../BackUp/'.$when.'-backup.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();

$relativePath = substr($filePath, strlen($rootPath) + 1);
if((strpos($relativePath, 'BackUp') !== false) || (strpos($relativePath, 'zipper') !== false)){

}

// Add current file to archive
else{
  $_SESSION["show_path"]=$relativePath;
  //echo $relativePath."<br>";
  echo '<pre>' . print_r($_SESSION["show_path"], TRUE) . '</pre>';
$zip->addFile($filePath, $relativePath);
}
}
}

// Zip archive will be created only after closing object
$zip->close();
echo "BackUp Gotowy";
//Remove zipper.php
//unlink("zipper.php");

?>


zapisałem to w sesji, ale bladego pojecia nie mam jak zabrac sie za uruchomienie skryptu za pomoca ajaxa, a potem odswiezania procesu dzialania skyptu. a dokladnie zwracania tego co w sesji sie zapisuje.(nadpisuje)

odpalilem to takim skryptem:

Kod
jQuery(document).ready(function($){
                var resp = $("#response");
                $.ajax({
                    type: "POST", // Method type GET/POST
                    url: "ziper.php", //Ajax Action url
                    data: {},

                    // Before call ajax you can do activity like please wait message
                    beforeSend: function(xhr){
                        resp.html("Please wait...");
                    },

                    //Will call if method not exists or any error inside php file
                    error: function(qXHR, textStatus, errorThrow){
                        resp.html("There are an error");
                    },

                    success: function(data, textStatus, jqXHR){
                        resp.html(data);
                    }
                });
            });



pozostalo mi zamienic w php echo na rzeczywiste wyswietlanie sesji... tylko tu utknąłem

Hej. Widze, że cisza. Ogólnie długo szukałem i nie potrafiłem znaleźć odpowiedzi na mój problem.
Ogólnie poprostu nie wiem jak to wyciągnąć z php do js. Bladego pojęcia nie mam...

To tak naprawde pewnie spowolni lekko działanie, ale przynajmniej będzie dobry efekt wizualny i da mi widok, że coś naprawde się wykonuje, niż czekanie az komunikat się zmieni po zakończeniu procesu. lub wyświetle na koniec wszystkie sciezki, które były zipowane.

Proszę jeszcze raz o pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.