![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 03:11 |