strony www, sklepy internetowe, oprogramowanie

Archiwum z 2011/04

polecenia symfony2 spod konsoli

Wtorek, kwiecień 19th, 2011

Zaczynamy naukę symfony 2. Zapewne większa część osób które próbują swoich sił z symfony 2 miało już do czynienia z wersjami symfony < 2. W poprzednich wersjach zostaliśmy przyzwyczajeni do wygodnego dostępu do tasków poprzez szybką komendę

symfony

W nowej wersji stety/niestety zostało to zmienione i obecnie, aby dostać się do tasków musimy korzystać ze składni:

php app/console

Nawiązuje to bardziej do nowej struktury aplikacji w symfony. Przykładowo, aby wykonać czyszczenie cache nie skorzystamy już z wygodnego

symfony cc

ale będziemy musieli wywołać komendę:

php app/console cache:clear

Aby wyświetlić wszystkie standardowe taski na wzór poprzedniego symfony wywołujemy po prostu php app/console

Automatyczny backup plików i bazy danych

Niedziela, kwiecień 17th, 2011

Jeżeli ktoś z Was dysponuje dedykowanym serwerem i chciałby cyklicznie wykonywać backup plików i bazy danych bądź chciałby zabezpieczać dane ze swojego komputera – rozwiązaniem może być skrypt uruchamiany poprzez Cron’a. Rozwiązanie to jest skuteczne w przypadku systemów Linux. Nasz przykład będzie opierał się o system FreeBSD.

W pierwszej kolejności opiszmy schemat działania. W kolejnych krokach wygląda to w sposób następujący:

  1. utworzenie katalogu tymczasowego w którego nazwie będzie dzisiejsza data
  2. utworzenie wewnątrz katalogu tymczasowego katalogu na pliki i oddzielnego na dump bazy danych
  3. utworzenie backupu bazy danych i zapisanie w naszej lokalizacji
  4. utworzenie backupu plików w naszej lokalizacji
  5. usunięcie ewentualnych plików SVN
  6. spakowanie wszystkiego do formatu tar.gz
  7. wysłanie informacji o utworzeniu kopii na naszego maila
  8. czyszczenie plików tymczasowych
  9. zakończenie skryptu

Na podstawie tego schematu możemy utworzyć niezbędny kod.

#!/bin/sh
# utworzenie zmiennej wykorzystanej do budowania ścieżki
BACKUP_DIR=backup_"`/bin/data +%d_%m_%Y`"
# utworzenie katalogu tymczasowego z datą
/bin/mkdir /usr/home/uzytkownik/$BACKUP_DIR
# utworzenie katalogu na pliki wewnątrz katalogu tymczasowego
/bin/mkdir /usr/home/uzytkownik/$BACKUP_DIR/www
# utworzenie backupu bazy danych
/usr/local/bin/mysqldump -u user -phaslo nazwa_bazy > /usr/home/uzytkownik/$BACKUP_DIR/dump.sql
# backup plików
/bin/cp -rf /sciezka/katalog_z_plikami/* /usr/home/uzytkownik/$BACKUP_DIR/www/
# usuniecie plików SVN jeżeli takie istnieją
/bin/rm -rf `/usr/bin/find /usr/home/uzytkownik/$BACKUP_DIR/www/ -type d -name .svn`
# spakowanie wszystkiego do pliku tar.gz
/usr/bin/tar -zcvf /usr/home/uzytkownik/$BACKUP_DIR.tar.gz /usr/home/uzytkownik/$BACKUP_DIR/*
# utworzenie tresci maila o stworzeniu backupu
/usr/bin/touch /usr/home/uzytkownik/$BACKUP_DIR/mail.txt && /bin/echo "NASZA TREŚĆ WIADOMOŚCI">/usr/home/uzytkownik/$BACKUP_DIR/mail.txt
# wysyłka wiadomości

/usr/bin/mail -s "tytul wiadomosci" "adresat@domena.pl" # usuniecie katalogu tymczasowego
/bin/rm -rf /usr/home/uzytkownik/$BACKUP_DIR
# zakończenie skryptu
exit

Skrypt tez zapisujemy pod dowolną nazwą a następnie przyznajemy mu prawa wykonywania 0777 i możemy już uruchamiać.
Należy zwrócić uwagę na ścieżki poleceń i plików – muszą one być ścieżkami bezwzględnymi. Mogą one również różnić się od tu podanych, które obowiązują w FreeBSD.

Jeżeli chcemy, możemy również plik ten uruchamiać poprzez crona np komendą:
1 1 * * * root cd /usr/home/uzytkownik && ./nasz_plik.sh

MySQL Multi Delete – usuwanie przy wykorzystaniu wielu tabel

Poniedziałek, kwiecień 4th, 2011

Załóżmy że mam złożone zapytanie którego zadaniem jest pobieranie danych z dwóch tabel połączonych ze sobą poprzez LEFT JOIN.

Zapytanie będzie miało postać podobną do:

SELECT * FROM table1 as t1 LEFT JOIN table2 as t2 ON (t1.property1=t2.property1 AND t1.property2=t2.property2) WHERE t1.property3=123 AND t1.property4 IS NOT NULL

Jak teraz sprawnie przekształcić to zapytanie w usuwanie?

Musimy skorzystać z mechanizmu nazywanego w MySQL “Multi Delete” . Modyfikujemy zapytanie do postaci następuącej:

DELETE t1 FROM table1 as t1 LEFT JOIN table2 as t2 ON (t1.property1=t2.property1 AND t1.property2=t2.property2) WHERE t1.property3=123 AND t1.property4 IS NOT NULL

W formule dodajemy po prostu tabelę z której chcemy usuwać. Równie dobrze moglibyśmy usuwać jednocześnie z dwóch tabel modyfikując początek zapytania do postaci:

DELETE t1,t2 FROM …

Więcej na ten temat można doczytać na stronie MySQL : http://dev.mysql.com/doc/refman/5.0/en/delete.html