![]() |
![]() ![]() |
![]() |
![]()
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: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Wlacz logowanie bledow i sprawdz na czym sie wykrzacza.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Kod error_reporting = E_ALL & ~E_NOTICE error_log = /errors.log log_errors = On utworzyłem plik dałem mu prawa do zapisu i nic nie ma tam :/ |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Drobna dygresja: czemu uwazasz ze E_NOTICE to nie blad?
Gdzie dales te zmiany? Zrestartowales serwer www by zmiany weszly w zycie? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
zrobilem na przykladzie home.pl (tam np mam jedna ze stron). dzialac to dziala. bo wywolalem specjalnie blad np funkcje ktora nie istnieje. zapisuje do tego pliku.
Ale sam skrypt wykonuje sie bez bledu i go nie notuje. ale plik nie zostaje poprawnie stworzony. Moze na localu sproboje to zasymulowac, tylko jak poprawnie utworzyc taki log. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
ok, uzyj tego do wyswietlenia stanu
http://php.net/manual/en/ziparchive.getstatusstring.php -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ale gdzie, jak to się używa....
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
zgodnie co napisali w manualu, funkcja zwraca blad/status zip. No to albo sobie wyswietl to co zwraca ta funkcja albo sobie zapisz do pliku/logu.... A gdzie? A chociazby przed zamknieciem/close() zipa tudziez za
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
w string mam dac to gdzie sie zapisuje?
echo $zip ZipArchive::getStatusString(); bo naprawde nie wiem jak to użyć.... |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
$zip->close();
echo $zip->getStatusString(); echo "BackUp plików zakończony"; zakladam ze widzisz na ekranie text 'BackUp plików zakończony' -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie nie. Ostatnie co widze to jedna ze sciezek po której skrypt chodził.
wiec do tej lini jakby nie dociera. I do funkcji, która podałeś |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No to ewidentnie skrypt sie wywala i musi pluc bledem.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
z listingow jak wyswietlam te sciezki to konczy sie tak:
/local/wp-content/plugins/updraftplus/includes/updraft-notices.php /local/wp-content/plugins/updraftplus/in urwana sciezka i kuniec |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 Dołączył: 13.09.2007 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Wygląda na przekroczenie czasu wykonywania albo przekroczenie pamięci czy innego zasobu. Czasami na niektórych hostingach nie wyrzuca o tym błędu, bo taki skrypt jest zwyczajnie zestrzeliwany przez jakiegoś demona na serwerze, który dba o niską zasobożerność. Odpal to lokalnie przez CLI i zobacz wtedy.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 0 Dołączył: 11.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
na xampie jak odpalilem:
Fatal error: Maximum execution time of 30 seconds exceeded in /PRACA/www/langpartest/zipper/ziper.php on line 26 Warning: Unknown: Cannot destroy the zip context in Unknown on line 0 to jest 26 linia foreach ($files as $name => $file) lub 46 wskazal: Fatal error: Maximum execution time of 30 seconds exceeded in /PRACA/www/langpartest/zipper/ziper.php on line 46 $zip->addFile($filePath, $relativePath); Czyli wychodzi na to, że jak jest za dużo plików to skrypt zbyt długo się wykonuje co powoduje jego nie ukończenie? Coś w tym da się zrobić? |
|
|
![]()
Post
#16
|
|
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: 21.08.2025 - 06:42 |