Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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 :/
Go to the top of the page
+Quote Post
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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.
Go to the top of the page
+Quote Post
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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....
Go to the top of the page
+Quote Post
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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ć....
Go to the top of the page
+Quote Post
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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ś
Go to the top of the page
+Quote Post
nospor
post
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

Go to the top of the page
+Quote Post
atom90
post
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
Go to the top of the page
+Quote Post
sabat24
post
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.
Go to the top of the page
+Quote Post
atom90
post
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ć?
Go to the top of the page
+Quote Post
sabat24
post
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 20:32