Archiwum miesiąca: 2008-5

Podział zawartości na linie uwzględniają znaki końca linii w php


Jak zrobić aby mając sporą ilość tekstu do obróbki podzielić ją na mniejsze porcję do tabeli - dzieląc ze względu na znaki końca linii?
Korzystając z funkcji split() możemy próbować to zrobić wywołując prostą metodę:

$content_by_line = split("\n", $content);

Niestety to nie wszystko - pamiętajmy o tym, że środowisko internetowe to dwa światy: M$ Windowsy i reszta świata, czyli Unixy, linuxy, BSD, Solaris, itp.

W tym przypadku musimy pamiętać o uwględnieniu również kolejnego złożenia, gdzie występuje zarówno \n jak \r. Jak to zrobić? Przykład takie zastosowania wygląda następująco:

$content_by_line = split("[\n|\r]", $content);

W tym momencie dostajemy tabele z ładnie podzielonymi liniami, które możemy wykorzystać i operować na tak podzielonych częściach tekstu. Dostęp do nich wydaje się być dużo łatwiejszy niż do całego dużego i niełatwego w obróbce zbioru danych tekstowych. Korzystając z tak dobranej funkcji split nasze dane poddadzą się funkcjom przetwarzającym a nasze algorytmy zostaną uporządkowe i uproszczone. Kod programu przez to stanie się czytelniejszy i łatwy do analizy dla innych. Uzyskamy w ten sposób przejrzysty tekst oraz nie musimy się martwić czy nasz skrypt obrobi Windowsy czy też resztę systemów.

 

Opublikowane w kategriach: PHP, VI

Jaka jest kolejność interpretowania elementów zapytania SQL


Podstawowe zapytanie SQL wygląda tak:


SELECT DISTINCT TOP (lista)
FROM (LewaTabela)
(typ łączenia) JOIN (PrawaTabela)
ON ([warunek])
WHERE (warunek)
GROUP BY (lista)
WITH (CUBE | ROLLUP)
HAVING (warunek)
ORDER BY (lista)


W jakiej kolejności jest interpretowane? Poniżej lista wg kolejności:


1. FROM (LewaTabela)
2. ON (warunek)
3. (typ łączenia) JOIN (PrawaTabela)
4. WHERE (warunek)
5. GROUP BY (lista)
6. WITH (CUBE | ROLLUP)
7. HAVING (warunek)
8. SELECT
9. DISTINCT
10. ORDER BY (lista)
11. TOP (lista)


Serwer SQL najpierw wykona FROM z tabel, potem warunki dla FROM, nastepnie jak ma być grupowane, sumowane - na końcu zapytanie SELECT

Oznacza to, że wszystko musi być zdefiniowane w porządku w jakim SQL będzie to wyliczał (aliasy, pola wyliczane, itp).

 

Opublikowane w kategriach: MySQL, DB, Windows

Baza MySQL - tworzenie backupu bazy danych


W celu wykonania całego backupu bazy danych MySQL należy stworzyć skrypt, który przykładowo wygląda tak:


#!/bin/sh
SUFFIX=`date "+%Y_%m_%d-%H_%M_%S"`

# Backup wszystkich baz danych
/usr/bin/mysqldump -u backup -pNaszeHaslo --all-databases | gzip -c > /backup/mysqldump_all_databases$SUFFIX.gz



Krótki opis co w skrypcie zostało zawarte:
- pierwsza linia to wskazanie interpretera dla skryptu
- druga linia to stworzenie znacznika czasowego, który użyjemy w nazwie pliku backupu
- ostatnia linia to faktyczne wykonanie zrzutu bazy danych:
parametr -u po którym podajemy nazwę użytkownika uprawnionego do dostępu do bazy danych
parametr -o oraz nasze silne i nieznane nikomu haslo
parametr --all-databases - ten przełącznik wskazuje, że nie chcemy podawać jednej nazwy bazy danych, tylko zależy nam na zrzucie całej struktury MySQL (łącznie z bazami zawierającymi wewnętrzne info MySQL).
I taki skrypt puszczamy w cronie w naszym systemie operacyjnym typu linux lu w harmonogramie zadań dla systemu typu M$.

 

Opublikowane w kategriach: Linux, Debian, DB, MySQL, Security

Baza MySQL - odtwarzanie z backupu bazy danych


Robimy sobie backupy w celu zabezpieczenia naszej bazy danych MySQL przed rozsypaniem. Nadchodzi chwila kiedy ten backup ma nam się przydać - MySQL wyleciał w powietrze i niecierpliwie czekamy czy da się coś uratować. Na tym etapie dobrze jest wykonać takie sprawdzenie przed faktycznym problemem, np. na systemie testowym, który sobie gdzieś na boku postawimy.

W celu przywrócenia bazy danych z backupu należy zlokalizować plik z backupu (##link-54##) wykonanego poleceniem mysqldump w celu użycia go do odtworzenia.
Należy użyć polecenia mysql z podaniem niezbędnych danych:
1. Dla przywrócenia bazy danych Klienci:
mysql -u root -pHasloMocne Klienci < mysqldump.sql

2. Dla przywrócenia całego pliku (wszystkie bazy):
mysql -u root -pHasloMocne < mysqldump.sql

3. Można odrazu użyć plik spakowany do odtworzenia:
gunzip < mysqldump.sql.gz | mysql -u root -pHasloMocne Klienci

4. W celu wczytania za jednym razem więcej niż jednego pliku mysqldumpa należy użyć polecenia:
cat backup1.sql backup.sql | mysql -u root -pHasloMocne

Wykonanie jednej z powyższych komend będzie skutkowało przywróceniem zawartości bazy z chwili kiedy był wykonany backup - tutaj należy mieć na uwadze dwie rzeczy:
- im częściej robimy backup tym aktualniejsza baza po odtworzeniu
- im rzadziej robimy backup tym mniej miejsca potrzebujemy na jego przechowywanie

 

Opublikowane w kategriach: Linux, Debian, DB, MySQL, Security

Komentarze w bazie danych Mysql dla zapytania


Pisząc zapytania sql dla serwera MySQL zmieniamy je w różny sposób, kasujemy część zapytania, na nowo piszemy część treści, poprawiamy już istniejące wpisy lub ich część. Niekiedy przydałoby się gdyby była możliwość tylko zakomentować część wyrażenia zamiast ją odrazu w całości usunąć. Lepszym wyjściem jest mieć dużo więcej tekstu, z którego dużo jest zakomentowane i w każdej chwili możemy na nowo użyć to co już mamy. Mamy wtedy możliwość bez utraty już przerabianych pomysłów na ich ponowne zastosowanie lub zapamiętanie, że już taką metodę lub sposób zastosowaliśmy - co więcej w komentarzu dodać możemy adnotację odnośnie wykonywanych zmian i modyfikacji. Dzięki temu każdy kawałek, każdą zmianę możemy adekwatnie oznaczyć.

Komentarze w różnych językach programowania zapisywane są na różne sposoby, spotykane są gwiazdki, ukosniki i ich różne kombinacje.
Sprawa w MySQL wygląda dosyć prosto do tego celu tez używa się ukośnika i gwiazdki.

W celu szybkiego zakomentowania części zapytania dla Mysql należy użyć tagów /* komentarz */.

Przykładowo dla zapytania które ma postać:

Select id
from table
where id<>0
and id<> 13

można wykonać kometarz na tym zapytaniu i dostajemy taki kawałek kodu:

Select id
from table
where id<>0
/*and id<> 13*/

 

Opublikowane w kategriach: MySQL, PHP

Jak w php usunąć znaki, które są spoza ASCII


Pracując z różnego rodzaju skryptami i stronami w PHP stykamy się z obróbką tekstu. Do tego dochodzi znajomość zagadnień związanych ze znakami, które stanowią część alfabetu dla danego języka, a które nie są dostępne w innymi Państwie. Znaczący problem bywał do tej pory z polskimi znakami, gdyż jak wiemy polskim standardem jest ISO-8859-2 natomiast M$ narzucił nam własny standard windows-1250, który jest z krajowym standardem nie kompatybilny.
Ciekawiej sytuacj wygląda gdy mamy do czynienia ze znaczkami, których ni jak nie da się podejść w naszym języku, mam tu na myśli znaki typu äó. Znaki te mogły się tu znaleźć np. po przekodowaniu znaków krajowych danego języka na utf-8.
W tej sytuacji możemy użyć w języku PHP tzw. podstawiania przy użyciu dopasowania z wyrażeniami regularnymi. Przy ich pomocy można z łatwością za pomocą prostych składni pozbyć się sporej grupy niepotrzebnych znaczków.

Przykład jak usunąć znaki tzw. nie ASCII:

$string = "Remove these characters: äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);

W pierwszej linii mamy przykład tekstu gdzie na końcu są znaki nie do rozczytania.
Druga linia zawiera funkcję, która za pomocą wyrażeń regularnych zrobi podmianę:
- pierwszy argument to wyrażenie definiujące, że wszystkie znaki spoza ASCII 20-7F powinny być zmienione
- drugi argument mówi, że zmieniamy na puste
- trzeci argument to nasz tekst

 

Opublikowane w kategriach: Ascii, PHP

Funkcja w Javascript do obcinania niepotrzebnych białych znaków


Istnieje możliwość zrealizowania w języku Javascript mechanizmu, który obetnie nam tzw. białe znaki na początku i na końcu łańcucha znakowego. Funkcja ta normalnie jest implementowana w innych popularnych językach programowania i nazywana jest ona jako trim(). Wyposażenie języka programistycznego w ten element zaoszczędza czasu i daje szansę na przyspieszenie kodowania - jest na tacy więc można od razu wykorzystać. Inaczej jest w JavaScript, który tej funkcji nie posiada.
W tej sytuacji lepiej jest mieć pod ręką działający przykład. Jak to zrobić żeby kod zadziałał w sposób, którego byśmy oczekiwali i spełnił nasz wymagania? Czy jest szybki sposób na wypełenienie luki brakującej funkcji?
Należy wykorzystać funkcję do podmiany oraz ustalić filtry. Przykład takiego rozwiąznia:

str1 = " Nasz łańcuch znakowy ";
str2 = str1.replace(/^\s+|\s+$/g, '');

Jako wynik otrzymamy łańcuch znakowy (str2) bez niepotrzebnych białych znaków.
W przypadku zastsowania wyrażeń regularnych niezbędna staje się znajomośc kodów wykorzystywanych w tej funkcji. W bardzo prosty sposób jesteśmy w stanie pozbyć się nie potrzebnych nam w danej chwili wpisów - w podanym przypadku znaków białych (spacje, tabulatory, itp.)

 

Opublikowane w kategriach: HTML, JavaScript

VIM ukrywanie grup tesktu dla edycji wskazanego pliku np strony napisanej w php


Aby uruchomić dosyć przyjemną cechę ułatwiającą edycję pliku należy do pliku jako komentarz wpisać następujący tekst:

/* VIM Settings {{{
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* soft-stop-width: 4
* c indent on
* End:
* vim600: sw=4 ts=4 sts=4 cindent fdm=marker et
* vim<600: sw=4 ts=4
* }}} */

Kluczowy jest tutaj wpis: fdm=marker - powoduje on, że to co zamkniemy w następującą konstrukcję:

/* komentarz jakis sobie wpisalem {{{ */
function test() {
echo ("test");
}
* }}} */

będzie widoczne jako:
+-- 4 wierszy: komentarz jakis sobie wpisalem ----

Teraz kluczowe skróty klawiszowe:
- zo - otwiera blok, na którym stoi kursor
- zc - ukrywa blok, na którym stoi kursor
- zM - ukrywa wszystkie bloki
- zR - otwiera wszystkie bloki

 

Opublikowane w kategriach: Debian, HTML, JavaScript, Perl, PHP, VI

Sprawdzanie po protokole NetBIOS w linux debian


nbtscan to aplikacja która pozwala na skanowanie sieci IP w celu uzyskania informacji z netBIOS.
Realizowane jest to przez wysłanie zapytania do każdego wskazanego przez parametry adresu.
Następnie jest wyświetlana informacja w formacie zrozumiałym dla Nas.
Dla każdej odpowiedzi jest wyświetlany adres IP, nazwa NetBIOS, zalogowana osoba oraz adres MAC (ethernet).

W celu instalacji w linux debian odpalamy:
apt-get install nbtscan

 

Opublikowane w kategriach: Debian, Linux, Network

Jak pobrać aktualny adres strony w php bez adresu i parametrów


W celu zdobycia w php nazwy aktualnego wywołania, która nie będzie zawierać adresu internetowego ani parametrów wywołania (typu id=1&cośtam=2) należy użyć zmiennej:
$_SERVER['PHP_SELF']

Przykładowe wywołanie będzie wyglądało następująco:
< a href='< ?=$_SERVER['PHP_SELF']? >' >Porady oraz informacje< /a>

 

Opublikowane w kategriach: HTML, PHP

Ochrona przed atakiem Brute Force dla zadanej usługi typu pop3, ssh, itp


W przypadku gdy w logach pojawi się seria logowań do usługi, dla dużej liczby powtórzeń istnieje uzsadanione przypuszczenie, że mamy do czynienia z atakiem brutalnym, czyli próbowane są po kolei pary użytkownik i hasło.
Z pomocą w tej sytuacji przychodzi iptables - firewall na linux ie.
Proponuję następujące dwie reguły, które odetną atakującego:
iptables -I INPUT -p tcp --dport 110 -i eth0 -m state --state NEW -m recent --set
(110 - port pop3, eth0 - interfejs wejściowy)
Powyższa reguła czeka na połączenia na pop3 (port 110) poprzez interfejs eth0. Możesz zduplikować tą regułkę dla każdej innej usługi typu ssh (port 22), itp.

oraz druga regułka:
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 2 -j DROP
Mówi ona iptables żeby odrzucał każde trzecie połączenie z atrybutem NEW, które pochodzi z tego samego IP w czasie 60 sekund.

 

Opublikowane w kategriach: Network, Linux, Debian, Security

Szukanie pakietu który zawiera program w debian


W celu odnalezienia nazwy pakietu do zainstalowania w linux debian należy uruchomić polecenie:

apt-file --fixed-string search /usr/bin/dig

po jego wykonaniu otrzymamy następującą informację:

dnsutils: usr/bin/dig

 

Opublikowane w kategriach: Debian, Apt, Linux

Nie działa funkcja imagecreatefromjpeg dla php


Próbujesz odpalić funkcję do ładowania i manipulacji na obrazkach pod apache/php i nie ma rezultatu? Używasz funkcji imagecreatefromjpeg i nic się nie produkcuje?
Koniecznie doinstaluj bibliotekę php-gd

Dla debiana to będzie polecenie:
apt-get install php4-gd
lub
apt-get install php5-gd

Odpowiednią wersję wybierz w zależności od zainstalowanego silnika php w wersji 4 lub 5.

Na koniec apachectl restart i ... powinno działać.

 

Opublikowane w kategriach: Apt, Debian, HTML, Linux, PHP

Zmiana hasła w bazie danych MySQL dla konkretnego usera


Nie możesz zmienić hasła poprzez interfejs phpMyAdmin? Hasło jest zapomniane?
Istnieje możliwość zmiany tego hasła z palca:
użyj następujących poleceń:
update user set password=password('haslo_skomplikowane') where user='uzytkownik';
flush privileges;

Aby uruchomić powyższe komendy należy z poziomu interpretera odpalić:
mysql -p -u root

use mysql;

Po zmianie hasła można korzystać z nowego :)

 

Opublikowane w kategriach: MySQL

Ustawienie poczty głosowej w Plus GSM


W celu ustawienia przekazywania połączeń w GSM należy zdefiniować numer, na który rozmowy mają być przekazywane.
W przypadku sieci Plus GSM na dzień dzisiejszy (marzec 2008) jest to numer +48 601 222 222.
Teraz wystarczy wejść w ustawienia następnie przekazywanie połączeń i dla wskazanego rodzaju przekierowania (np. gdy nie odbieram) ustawić przekazywanie na numer +48 601 22 22 22 - dla tego przykładu można wybrać jeszcze po jakim czasie ma być przekierowanie (np. 25 sekund to jakieś 5 dzwonków).
Numer +48601222222 jest opisywany jako numer dostępowy do skrzynki głosowej w przypadku dzwonienia z zagranicy.

 

Opublikowane w kategriach: Gsm

TINYDNS: przykładowa konfiguracja autorytarnego serwera dns


Przesiadając się na nowy system DNS, który jest bezpieczniejszy od innych należy przygotować skrypt startowy.
Przykładowa tresć takiego skryptu, który będzie nam odpalał instancje TinyDNS zawiera kilka opcji.

Przykładowy plik do uruchamiania (run):


#!/bin/sh
exec 2>&1
exec envuidgid tinydns envdir ./env softlimit -d300000 /usr/local/bin/tinydns

Co oznaczją te wpisy?

exec envuidgid tinydns ... - tinydns to użytkownik który będzie odpalał proces

... envdir ./env softlimit -d300000 /usr/local/bin/tinydns - to reszta argumentów, która będzie odpalona

Opcja -d300000 - ogranicza segment stosu do 300kbajtów.


W katalogu root/zones/master można wrzucić pliki opisujące strefy (domeny). Przykładowy skrypt do zbierania plików stref do bazy tinydns:


#!/bin/sh
PATH=$PATH:/usr/local/bin
export PATH
cd /etc/tinydns/root
cat << EOF > mydata
# This is an automatically generated file.
# If you wish to change the contents please edit the files in
# /etc/tinydns/root/master/zones and
# /etc/tinydns/root/slave/zones

EOF
cat zones/master/* >> mydata
#cat zones/slave/* >> mydata
make

# could do an rsync here

 

Opublikowane w kategriach: Debian, DNS, Linux, Network, Security

Thunderbird - obsługa OpenPGP


Aby używać w programie pocztowym Thunderbird szyfrowania poczty (typu PGP) należy użyć rozszerzenia Enigmail

 

Opublikowane w kategriach: email, Network, Security

Na wesoło ;)

Mała Zosia mówi do mamy:
- Pójdę do kiosku kupić zeszyt...
- Mowy nie ma! - zakazuje matka - Leje deszcz, pogoda taka, że psa szkoda wypędzić z domu. Tatuś pójdzie kupić Ci zeszyt.