Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ograniczenia hostingu - kompresja zip przez bash lub php

11 views
Skip to first unread message

Tadziu

unread,
May 21, 2020, 6:31:37 AM5/21/20
to
Dzień dobry,

mam wykupiony hosting i jak na hostingu bywa są ograniczenia [home.pl]
(jest dostęp przez ssh także)

od parunastu godzin próbuję rozgryźć jak "oszukać" ów hosting co jest
możliwe, bo posiadam na nim parę stron na Joomli i oprogramowanie do
backupu "Akeeba Backup" radzi sobie nawet z paroma, parunastoma GB
danych. Wykonuje to specyficznie tj. rozprasza pakowanie na interwały
czasowe ...

Oczywiście jeśli ja próbuję to zrobić z poziomu prostego skryptu w PHP
to jeśli się wyrobi w ~90 sekundach [mało plików] to jest OK.

Natomiast, jeśli próbuję spakować większy katalog z podkatalogami to
nigdy nie dokończy procesu pakowania, urywa po ~90 sekundach.


<?php
$zipDATING = '_' . date('Y_m_d-H_i-s') . '_';
echo '<center><h2>',$zipDATING,'START</center>';

// zaczyna w katalogu gdzie jest i zipuje wszystkie podkatalogi i pliki
// tworzy zip-a katalog niżej jako nazwa aktualnego katalogu + data,czas

system("zip -r -1 -u
../arch_".basename(dirname(__FILE__)).$zipDATING."zip ./ ");
$zipDATING_stop = '_' . date('Y_m_d-H_i-s') . '_';
echo '<center><h2>',$zipDATING_stop,'STOP</center>';
?>

Proszę o wskazówki na co zwrócić uwagę, gdzie szukać rozwiązania, dodam
że z mojego zakresu wiedzy i testów
set_time_limit(0);
proc_nice(20);

lub wciśnięcie usleep(100000);

pętla_start
$oFiles[] = $sMyFP; // LIST FILE AS DONE
$oZip->addFile($sMyFP, $sFilePath); // APPEND TO THE ZIP FILE
usleep(100000);
pętla_stop

także nic nie daje,

z góry dziękuję za wskazówki,

pozdrawiam Tadziu.

--
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus

Roman Tyczka

unread,
May 21, 2020, 8:23:48 AM5/21/20
to
On Thu, 21 May 2020 12:31:31 +0200, Tadziu wrote:

> mam wykupiony hosting i jak na hostingu bywa są ograniczenia [home.pl]
> także nic nie daje,
>
> z góry dziękuję za wskazówki,
>
> pozdrawiam Tadziu.

Zmień hosting

--
pozdrawiam
Roman Tyczka

Rafal Podsiadly

unread,
May 21, 2020, 11:49:56 AM5/21/20
to
https://www.php.net/manual/en/info.configuration.php#ini.max-execution-time

sprawdź max_execution_time

ustaw set_time_limit(120);


lub pakuj pojedyncze pliki

albo dodawaj do spakowanego archiwum pliki pojedyncze.

Lemat

unread,
May 21, 2020, 1:03:58 PM5/21/20
to
W dniu 21.05.2020 o 12:31, Tadziu pisze:
> Dzień dobry,
>
> mam wykupiony hosting i jak na hostingu bywa są ograniczenia [home.pl]
> (jest dostęp przez ssh także)
>
> od parunastu godzin próbuję rozgryźć jak "oszukać" ów hosting co jest
> możliwe, bo posiadam na nim parę stron na Joomli i oprogramowanie do
> backupu "Akeeba Backup" radzi sobie nawet z paroma, parunastoma GB
> danych. Wykonuje to specyficznie tj. rozprasza pakowanie na interwały
> czasowe ...
>
> Oczywiście jeśli ja próbuję to zrobić z poziomu prostego skryptu w PHP
> to jeśli się wyrobi w ~90 sekundach [mało plików] to jest OK.
>
> Natomiast, jeśli próbuję spakować większy katalog z podkatalogami to
> nigdy nie dokończy procesu pakowania, urywa po ~90 sekundach.
>
>
> <?php
> $zipDATING = '_' . date('Y_m_d-H_i-s') . '_';
> echo '<center><h2>',$zipDATING,'START</center>';
>
> // zaczyna w katalogu gdzie jest i zipuje wszystkie podkatalogi i pliki
> // tworzy zip-a katalog niżej jako nazwa aktualnego katalogu + data,czas
>
> system("zip -r -1 -u
> .../arch_".basename(dirname(__FILE__)).$zipDATING."zip ./ ");
> $zipDATING_stop = '_' . date('Y_m_d-H_i-s') . '_';
> echo '<center><h2>',$zipDATING_stop,'STOP</center>';
> ?>
>
> Proszę o wskazówki na co zwrócić uwagę, gdzie szukać rozwiązania, dodam
> że z mojego zakresu wiedzy i testów
> set_time_limit(0);
> proc_nice(20);
>
> lub wciśnięcie usleep(100000);
>
> pętla_start
> $oFiles[] = $sMyFP;                     // LIST FILE AS DONE
> $oZip->addFile($sMyFP, $sFilePath);     // APPEND TO THE ZIP FILE
> usleep(100000);
> pętla_stop
>
> także nic nie daje,
>
> z góry dziękuję za wskazówki,
>
> pozdrawiam Tadziu.
>

Najpierw poczynię ważne założenie: zzipowanie pojedynczego pliku zajmuje
mniej niż połowa timeoutu skryptu na hostingu.

$czas=time();
pętla
$plik=array_pop($lista_plików_do_zziopwania)
$oZip->addFile($plik);
if ($czas+połowa timeoutu>time()) {
zapisz resztę z listy plików do zzipowania
header('Location: skieruj na siebie');
die();
}
koniec petli

--
Pozdrawiam
Lemat

Tadziu

unread,
May 22, 2020, 12:04:00 PM5/22/20
to
Roman Tyczka wrote:

> On Thu, 21 May 2020 12:31:31 +0200, Tadziu wrote:
>
> > mam wykupiony hosting i jak na hostingu bywa są ograniczenia
> > [home.pl] także nic nie daje,
> >
> > z góry dziękuję za wskazówki,
> >
> > pozdrawiam Tadziu.
>
> Zmień hosting

jest w palnach - ale nie rozwiązuje to obecnie problemu ...

Tadziu

unread,
May 22, 2020, 12:04:45 PM5/22/20
to
żdna ze zmian nie daje efektu, pakowanie pojedyńczych plików także...

Tadziu

unread,
May 22, 2020, 12:21:05 PM5/22/20
to
Dzięki za wskazówki,

napisałem skrypt który pakuje pliki, pojedyńczo [wiem mało wydajnie],

ale to dla testów...

Twój pomysł jest przedni, sprawdziłem zawsze się wysypuje skrypt po 140
sekundach,
header('Location: skieruj na siebie'); //rozumiam że wywołuję tu ten
sam skrypt PHP
https://www.php.net/manual/en/function.header.php

die(); //przerywa cały skrypt

i tu się zaczynają pytania?
jak zapisać listę pozostałych plików [chyba do pliku najlepiej] czy są
jakieś zmienne przekazywane po i przez header('Location ...);
+ informację o tym czy skrypt ma rozpocząć nowe archiwum lub
kontynuować poprzednie ...

z góry dziękuję za wskazówki ...

a ja zabieram się za test z samym header + die() i czymć na zasadzie
sleep czy będzie w kółko się mielić ...
pozdrawiam Tadziu

Rafal Podsiadly

unread,
May 23, 2020, 2:16:14 PM5/23/20
to
Czy na serwerze możesz używać crone?
Możesz używać skryptów sh?
Czy musisz używać PHP a nie możesz zwykłej funkcji ZIP --?
Czy możesz używać rename file po spakowaniu
*.suuces np.

Rafal Podsiadly

unread,
May 23, 2020, 2:21:23 PM5/23/20
to
Sproboj też wykorzystać flusch()

Rafal Podsiadly

unread,
May 23, 2020, 2:22:58 PM5/23/20
to
Ach ten słownik. Chodziło mi o flush ()
Jako przesłanie informacji o tym co się dzieje
Poczytaj o progres bar w PHP Ajax.

Tadziu

unread,
May 23, 2020, 4:57:44 PM5/23/20
to
crone nie, ale na innym serwerze mam crona i wywołuje nim za pomocą
wget-a php
wget --no-check-certificate --max-redirect=99999999
http://domena/sciezka/skrypty/s1.php

domyślam się do czego pijesz będę zapisywał plik tekstowy z sciezka i
nazwą do pierwszy raz tworzonego pliku, przy następnym wykonaniu
sprawdzam czy jest ten plik czy nie jeśli tak to odczytuje z niego
sciezke do archiwum i kontynuuje działanie,

na razie testuje jak zapisac pozostala tablice do pliku obczailem co
robi array_pop i to rozwiazuje pozostala czesc tablicy ...

dzialam dzieki za pomoc,

pozdrawiam Tadziu...

flusha sprawdze ale handle zaczelo dzialac gdy skrypt poprzedze
ob_start(); //Turn on output buffering

i srednio z ~ 30 min sie buja skrypt ale potem zabija go komunikat za
dużo przekierowan

Tadziu

unread,
May 24, 2020, 8:31:09 PM5/24/20
to
Dobry wieczór,

dużo się nauczyłem dzięki tej podpowiedzi ...

napisałem skrypt który działa poprawnie i wykonuje się
poprawnie około 1,5 godziny przy ~ 110 sec timeout-u

--------------------------------------------------------
test_header_die.php
--------------------------------------------------------
<?php
ob_start();
$czas=time();
$zipDATING = '_' . date('Y_m_d-H_i-s') . '_';
echo '<center><h4>',$zipDATING,'START</center>';
for ($x = 0; $x <= 200; $x++) {
echo "The number is: $x <br>";
sleep(1);
$zipDATING = '_' . date('Y_m_d-H_i-s') . '_';

$file = 'test.txt';
$roznica = $czas + 115;

if ( $roznica < time() ) {
$file = 'test.txt';
file_put_contents($file, "KONIEC\n\n" , FILE_APPEND | LOCK_EX);
header("Location: test_header_die.php");
die();
}
$zipDATING_stop = '_' . date('Y_m_d-H_i-s') . '_';
echo '<center><h2>',$zipDATING_stop,'STOP</center>';
$czas_roznica=time() - $czas;
echo '<center><h2>',$czas_roznica,' sekund</center>';
?>
--------------------------------------------------------
ale w innym skrypcie gdzie mam już pakowanie do zip-a


--------------------------------------------------------
wycinek przed pętlą
--------------------------------------------------------
$czas = time();
while( $files = array_pop( $files_to_save ) ){

$relativePath = substr($files, strlen($rootPath) + 1);
$zip->addFile($files, $relativePath);
if ( ($czas + $lokalny_tme_out) > time() ){
$zip->close(); //zamykam zipa
file_put_contents($plik_kontrolny2_bin, serialize($files_to_save));
header("Location: zip_another_append_test.php");
die();
}
}

czy jest jakiś wyjątek w PHP gdzie funkcja time() przestaje mieć rację
bytu?

z góry dziękuję za pomoc
0 new messages