Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zipowanie plików
atom90
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 11.06.2014

Ostrzeżenie: (0%)
-----


Witam od pewnego czasu mam dziwny problem.

Skrypt, który używałem do pakowania/ robienia kopii zapasowej zawsze działał.
Od pewnego czasu nie potrafi poradzić sobie z prawdopodobnie wiekszą ilościa plików. Mimo to, że wcześniej wykonywał te kopie.
Przykładowo stosuje go do kopii wordpresów. teraz niestety, nie kończy wykonanie skryptu Tworząc plik:
2017-10-16-backup.zip.VVlEF3

czyli w którymś momencie kończy wykonywać się i nie dochodzi do:
$zip->close();


Tutaj kod skryptu:
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));
//if((strpos($relativePath, 'BackUp') !== false) || (strpos($relativePath, 'zipper') !== false)){

//Dla m-foto/ bez sklepu
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 plików zakończony";


?>



Może ktoś wie dlaczego tak się dzieje?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sabat24
post
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Najprościej podziel to na jakieś paczki. Zlicz wielkość poszczególnych plików, by wyestymować czas pracy skryptu i np. dodawaj do archiwum po X plików. Zapisz w bazie, czy w jakimś pliku, na czym skończyłeś i w kolejnym kroku dodaj kolejne pliki do archiwum. Nie musisz od razu stworzyć całego archiwum. Możesz dodawać pliki do już stworzonego częściowo archiwum.
Możesz też zliczać czas pracy skryptu, by wyrobić się zamknąć archiwum, nim skrypt przekroczy 30 sekund.

Możesz także spróbować zwiększyć limit czasu pracy skryptu. Niektóre hostingi pozwalają na to, aczkolwiek to nie rozwiąże nigdy problemu, że trafi się jakieś wielkie archiwum, które i tak przekroczy ten czas.

Alternatywnie odpalaj skrypt z lini poleceń, która zazwyczaj ma większe (niekiedy nieograniczone) limity czasu pracy skryptu. Ale tego się dowiedz od firmy, gdzie masz serwer.

Ten post edytował sabat24 16.10.2017, 13:36:35
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 03:11