Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja exec() i backup
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
korad1
Moze macie jakies przykłady z wykorzystaniem funkcji exec() i uruchamianiem polecen w linux, szczegolnie zalezalo by mi, gdyby ktos mial tworzenie backupow w postgresie ( pg_dump .....) z wykorzystaniem funkcji exec()
mhs
Nie mam pod reka postgresa w zwiazku z czym nie mam mozliwosci sprawdzic ale rozwiazanie dla Mysql'a na Win typu:


  1. <?php
  2. exec(&#092;"mysqldump --databases baza -u user -pHASLO > c:sql.sql\");
  3. ?>


działa bez problemów.

Wydaje mi się, że analogicznie postępując można to również zrobić dla pg.
korad1
niestety u mnie niedziala
  1. <?php
  2.  exec(&#092;"pg_dump -Oc nazwa_bazy > plik.sql\");
  3. ?>

zreszta nawet uzycie
  1. <?php
  2. echo exec(&#092;"whoami\");
  3. ?>

nie działa
moze trzeba by cos pozmieniac w php.ini , moze safe_mode=On tutaj bruździ
Kamis
Pg_dump:

  1. <?php
  2. exec(&#092;"pg_dump -Oc nazwa_bazy > /sciezkadozapisu/plik.sql\");
  3. ?>


Dla whoami:

  1. <?php
  2. $kto = exec(&#092;"whoami\");
  3. echo &#092;"User $kto\";
  4. ?>


Działa ?
mhs
Cytat(korad1 @ 2005-05-25 21:04:22)
moze trzeba by cos pozmieniac w php.ini , moze safe_mode=On tutaj bruździ

prawdopodobnie tak, w trybie bezpiecznym korzystanie funkcji exec (i innych) jest ograniczone
korad1
ustawienie safe_mode=Off spowodowalo ze
  1. <?php
  2.  echo exec(&#092;"whoami\");
  3. ?>

zaczelo dzialac, natomiast
  1. <?php
  2.  
  3. exec(&#092;"pg_dump -Oc nazwa_bazy > /sciezkadozapisu/plik.sql\");
  4.  
  5. ?>

w dalszym ciagu nie dziala
Kamis
Hmm oczywiście "sciezkadozapisu" to jest np. "/home/korad1/plik.dmp"

To rozwiązanie jest oczywiście postackie bo:
a ) robiąc pierwszy raz bacqp bazy tworzysz plik.dmp i zapisujesz w nim bazę...
b ) robiąc drugi raz bacqp zapisujesz plik.dmp jeszcze raz (tamten jest "kasowany")

Wszystko przez wprowadzenie znaczka skierowania strumienia > oznacza to nadpisywanie. A >> dopisywanie smile.gif

Przydało by się również jakaś zmienna np. w php pobranie czasu (date). i w ten sposób oznaczanie plików (zamiast "plik.dmp" było by "010605.dmp").
korad1
Oczywiscie racja ze kolejen pliki z kopia bazy powinny byc pod innymi nazwami , co by sie nie nadpisywaly.
Natomiast sciezka dostepu jest u mnie katalog
  1. <?php
  2.  exec(&#092;"pg_dump -Oc nazwa_bazy > /var/lib/pgsql/plik.sql\");
  3. ?>


Problem w tym ze baza w dalszym ciagu nie chce sie utworzyc niezaleznie od wskazanaego katalogu
Kamis
Najpierw w wierszu poleceń wydaj "pg_dump -Oc nazwa_bazy > /var/lib/pgsql/plik.sql" jeśli robi Ci plik.sql...

Coś mie się wydaje, że zamieszałeś z tymi -Oc... Poczytaj w manualu i najpierw zrób to z lini komend... podpowiem, że może trzeba kombinować z pg_dump -u passwd. Zobacz jak mhs zrobił to dla mysql i zamień to na psql smile.gif
korad1
wpisujac pg_dump.... z wiersza poleceń dziala od dawna , problem jest ze zrobieniem tego z poziomu php i funkcji exec().
Trudno zrobie to najwyzej z pozimu komend sql
  1. copy nazwa_tabeli TO 'nazwa_pliku.sql'

bo w ten sposob bez problemu zapisuje mi na dysku.

Zalozmy ze jest przycisk [kopia], uzytkowanik go naciska , po stronie serwera robia sie kopie wybranych tabel , jak zrobic zeby zapisane kopie przeslac do uzytkownika a po stornie uzytkownika pojawilo sie okienko do przegladania katalogow aby wybrac miejsce do zapisu tych kopii

Przy wysylaniu pliku na serwer wystarczy do przegladania dysku <input type=file> jak zrobic to w druga strone
Kamis
Nie no bez jaj... zrób to tak jak Ci mówię z podaniem usera i hasła do bazy... przecie jakby normalnie można było wydawać komendy tak z php bez hasła itp. to zwiększyło by to włam... pomyśl... zobacz na pierwszy przykład z mysql'a i zrób to na pgsql. Nie poddawaj się tak łatwo exclamation.gif! smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.