Kodowanie (szyfrowanie) skryptów PHP

PHP - Tips & Tricks Komentarze (1) »

PHP to język skryptowy. Ma to swoje zalety (np. nie trzeba się martwić tym, że są różne systemy operacyjne i dokonywać kompilacji kodu źródłowego dla każdej z platform). Jednak zaleta języka PHP może być też jego wadą. Gdy napiszesz dość ciekawy skrypt, to ktoś może podpatrzeć źródła i np. wypuścić swój skrypt w którym wykorzysta co ciekawsze rozwiązania algorytmiczne, nad którymi Ty siedziałeś kilka nocy. Ciężko również jest napisać skrypt który by był licencjonowany (np. ograniczenie czasowe albo ograniczenie na domenę bo ktoś kto choć trochę zna PHP może wyciąć kilka odpowiednich linijek kodu i funkcja sprawdzająca legalność instalacji zawsze zacznie zwracać wartość true).

Jeśli chcesz zakodować skrypt to możesz skorzystać albo z darmowych narzędzi zaciemniających kod (opiszę je w najbliższym czasie), albo skorzystać z odpowiedniego programu szyfrującego pliki. Istnieje na rynku kilka rozwiązań. Czytaj dalej »

Tagi: , , , , ,

Jak wysyłać błędy wykonania skryptu w PHP na e-maila?

PHP - Tips & Tricks Komentarze (1) »

Pisząc skrypt w języku PHP nie zawsze jesteśmy pewni efektów. Czasami w najmniej spodziewanym momencie może się pojawić błąd. Oto przykładowy skrypt:

$b=0;
$a=100/$b;

Oczywiście na ekranie pojawi się komunikat błędy podobny do tego: Warning: Division by zero in /home/user/public_html/katalog/err.php on line 3

Oczywiście jest to celowy przykład błędu. Zazwyczaj jest tak, że wartość zmiennej b nie jest na sztywno przypisana, ale np. jest pobierana z bazy i masz pewność, że nigdy nie będzie zerem, ale na skutek kilku nieprzewidzianych okoliczności, jednak jej wartość wynosi zero i pojawia się owy błąd z dzieleniem przez zero.

Najprościej by było przed dzieleniem dać jakiegoś if’a w celu zabezpieczenia się przed taką sytuacją, ale tutaj znów nie zawsze da się przewidzieć takie sytuacje. Również testując własny kod nie zawsze się wyłapie wszystkie błędy. Niestety, ale wypluwane błędny na ekran nie wyglądają zbyt profesjonalnie. Często jest tak, że twórca aplikacji nic nie wie o pojawiających się sporadycznie błędach do czasu, aż ktoś mu nie napisze maila. Jednak internauci nie zawsze są skłonni napisać e-maila do administratora z informacją o napotkanym błędzie i często okazuje się, że administrator serwisu o owym błędzie dowiaduje się np. pół roku po napisaniu skryptu bo coś tam przez przypadek zaglądnął na stronę i akurat mu się pojawił błąd.

Można jednak bardzo łatwo w PHP dodać własną obsługę błędów. Co byś powiedział, gdyby w razie wystąpienia takiego błędu został wysłany Tobie raport wprost na skrzynkę e-mail? Wystarczy tylko napisać jedną prostą funkcję i nakazać interpreterowi PHP, aby w razie wystapienia błędu owa funkcja została wywołana. Czytaj dalej »

Tagi:

Jak włączyć obsługę plików z rozszerzeniem php przez php5 lub php4?

PHP - Tips & Tricks 3 komentarze »

Wczoraj na jednym hostingu zainstalowałem klasę phpmailer. Wyrzucało jakieś błędy. Po krótkiej analizie okazało się, że pliki php są domyślnie interpretowane przez php4. Miałem do wyboru dwie opcje:

  • znaleźć jakąś starszą wersję klasy phpmailer kompatybilną z php4 (co jest głupotą, bo prędzej czy później na serwerze domyślnie zostanie włączona obsługa php5, więc nie ma sensu instalować przestarzałych bibliotek)
  • zmusić jakoś serwer do tego, aby pliki z rozszerzeniem php był interpretowane domyślnie przez interpreter php5

Wybrałem to drugie rozwiązanie. Okazało się, że wystarczy do pliku .htaccess dopisać aż jedną linijkę Czytaj dalej »

Tagi: , , ,

PHP – pisanie większych projektów – zarządzanie dokumentami

PHP - Tips & Tricks 2 komentarze »

Jedną z ważniejszych rzeczy jest organizacja. Załóżmy, że podejmujesz pracę nad jakimś większym projektem. Z pewnością będziesz pomiędzy sobą z zleceniobiorcą wysyłał sporo „papierków” (mam tutaj na myśli większe projekty tworzone przez np. pół roku a nie jakiś 100 linijkowy skrypt wykonujący jakąś jedną prostą czynność). No i u mnie często sytuacja wyglądała tak, że dany plik zapisywałem na pulpicie, czasem na pendrive. Mając 2 komputery można naprawdę się nieźle pogubić i np. za jakiś czas zacząć analizować starszą wersję dokumentu. Dlatego ważne jest, aby już na początku na np. dysku C:\ założyć folder NazwaProjektu a w nim różne podfoldery i tylko i tam przechowujemy wszelkie dokumenty związane z projektem. Ja w tamtym folderze mam następujące podfoldery:

  • Dokumentacje – trzymam tam różnego rodzaju dokumentacje np. projekt bazy danych, dokumentacja API mojego modułu współpracującego z innym modułem mojego projektu, informacja jak zainstalować mój moduł itp.
  • Content – trzymam tam różnego rodzaju treści. Tworząc np. moduł Programu Partnerskiego oprócz tworzenia kodu należy też na stronie wprowadzić jakieś treści np. FAQ, regulamin, treść ofertowa na stronie głównej
  • Grafika – jako że nie jestem grafikiem, więc robotę się zleca podwykonawcy. Trzymam tam wszelkiego rodzaju pliki otrzymane od grafika
  • Baza wiedzy – różnego rodzaju pomysły (w postaci zwykłych plików DOC lub ODT), jakieś raporty, artykuły mogące być inspiracją przy wprowadzaniu jakiś usprawnień w przyszłości
  • Backupy – starsze wersje modułu (czasem się przydaje, jak np. coś w nowszej wersji nie działa, to mogę szybko rzucić okiem na starszą wersję modułu czy przez przypadek w nowszej wersji z wadliwej funkcji np. nie usunąłem jakiejś linii)
  • Testy – pisząc większy projekt często jest tak, że się zleca testy np. znajomym (opracowuję scenariusz testowy w którym dokładnie opisałem co mają obklikać a dane osoby obklikują i piszą swoje uwagi) Następnie analizuję dokumenty, oczywiste usterki poprawiam, a te mniej oczywiste często są powodem dyskusji podczas których kilkukrotnie wysyłamy sobie dany dokument z kolejno dopisanymi przez siebie komentarzami (jest to oczywiste, że nie zawsze w 100% zrozumiem co miał na myśli tester, czasem jego uwaga może być dyskusyjna itp.)
  • Todo – mój ulubiony folder zawierający listę zadań do zrobienia 😉
  • Inne – pozostałe pliki nie pasujące do powyższych kategorii

Oczywiście ta struktura folderów może u Ciebie być nieco inna. Ja podałem tylko uśredniony przykład z kilku moich projektów. Dzięki tej metodzie mam na dysku względny porządek i nie marnuję czasu na szukanie jakiegoś dokumentu czy też nie muszę się zastanawiać, która wersja danego dokumentu jest najnowsza). Warto jest również pliki datować tj. zawrzeć w nazwie datę np. todo-10-06-2010.odt dzięki czemu szybko znajdziesz najaktualniejszy plik). Wysyłając pliki pomiędzy sobą (np. raport ze scenariusza testów, który wysyłasz do testera, on do Ciebie i tak kilka razy) warto jest włączyć rejestrator zmian, wtedy od razu widać, kto co w danym dokumencie dopisał

Tagi: ,

PHP – pisanie większych projektów – porady

PHP - Tips & Tricks Komentarze (0) »

Ten wpis powstał na bazie moich doświadczeń podczas pisania większych skryptów w PHP. Postaram się tutaj udzielić kilka słów odnośnie tego, jak należy pisać skrypty w PHP, aby później było jak najmniej pracy przy ewentualnej rozbudowie. Jako przykłady ilustrujące omawiane zagadnienia dość często będę się odwoływał do PP Mapa Zdrowia, który wdrożyłem. Czytaj dalej »

Tagi: , , , ,

print_r

PHP - Tips & Tricks Komentarze (1) »

Bardzo wygodną funkcją w języku PHP jest funkcja print_r. Funkcja ta wyświetla „w czytelny sposób” zawartość obiektu, bądź tablicy (bądź zwykłej zmiennej, ale do wyświetlenia zmiennej wystarczy zwykła instrukcja echo).

Przykładowo mając taki kawałek kodu:

<?php
$a[0][0]='0x0';
$a[0][1]='0x1';
$a[1][0]='1x0';
$a[1][1]='1x1';
print_r($a);
?>

funkcja wyświetli w przeglądarce:
Array ( [0] => Array ( [0] => 0x0 [1] => 0x1 ) [1] => Array ( [0] => 1x0 [1] => 1x1 ) )

Niezbyt czytelnie, bo zamiast znaczników <br> są używane entery i dopiero po zaglądnięciu do źródła zobaczymy ową tablicę wyświetloną w czytelniejszy sposób:

Array
(
    [0] => Array
        (
            [0] => 0x0
            [1] => 0x1
        )

    [1] => Array
        (
            [0] => 1x0
            [1] => 1x1
        )

)

Jak widzisz, od razu jest to o wiele czytelniejsze, chociaż niezbyt wygodne jest zaglądanie do źródła! Jednak funkcja print_r ma dodatkowo drugi parametr (jego brak oznacza, że jest on ustawiony na false), który oznacza, czy funkcja ma zwracać wartość! Tą wartością jest owy string! Czyli można nieznacznie podrasować naszą funkcję, aby wyświetlała ową zawartość tablicy w dużo „czytelniejszy” sposób:

<?php
$a[0][0]='0x0';
$a[0][1]='0x1';
$a[1][0]='1x0';
$a[1][1]='1x1';
$output = print_r($a, true);
$output = str_replace(" ", "&nbsp;", $output);
$output = nl2br($output);
echo($output);
?>

Jak widzisz, mała rzecz, o której nie każdy wie, a naprawdę ułatwia pracę!

Tagi: , ,

Jak napisać aplikację, która wysyła SMSy?

PHP - Tips & Tricks Komentarze (1) »

Czasami zachodzi potrzeba otrzymania SMSa z aplikacji. Oto przykładowe zastosowania, które mi przychodzą do głowy:

  • może to być jakiś raport dla administratora (np. informacja o tym, że klient złożył nowe zamówienie, informacja o kończącym się miejscu na dysku twardym, bądź prosty skrypt może monitorować stany magazynowe i wysyłać SMSa, gdy dany produkt „się kończy”)
  • może to być SMS dla klienta (np. informacja o tym, że przesyłka została nadana, albo prośba o odebranie maila w celu poznania szczegółów dotyczących finalizacji zamówienia)
  • jeśli masz numery telefonów klientów i ich daty urodzenia (np. podpisujesz z klientami umowy i masz ich numery PESEL), to możesz wysyłać SMSem życzenia urodzinowe 🙂 Napisanie prostej aplikacji, która to robi to góra jedno popołudnie pracy 🙂

Pewnie Tobie przychodzi 10 innych pomysłów na wykorzystanie SMSów 🙂  Co prawda większość z tych rzeczy można wysłać na maila, ale maila zawsze można przeoczyć, albo zbyt późno przeczytać (w szczególności, gdy wysyłamy informacje krytyczne np. o kończących się zapasach na magazynie ma to wielkie znaczenie, aby być jak najszybciej i jak najsprawniej poinformowanym o danym problemie)

Można skorzystać z darmowych bramek SMS, ale mają one następujące wady:

  • są darmowe
  • raz chodzą a raz nie
  • zawsze coś może się zmienić o czym nie będziesz poinformowany i np. po pół roku się dowiesz, że nie otrzymywałeś SMSów z krytycznymi raportami, bo coś się zepsuło
  • niektóre bramki mają zabezpieczenia w postaci konieczności przepisania znaków z obrazka (prawie nie do przejścia przez prosty skrypt, owe algorytm owego zabezpieczenia ciągle może się zmieniać)

Dlatego warto jest skorzystać z usług płatnych bramek SMS. Dzięki temu nie zawracasz sobie głowy jakimiś pierdołami technicznymi i masz gwarancję, że SMS do Ciebie dojdzie (jeśli marudzisz, że wysłanie do SMSa kosztuje od kilkunastu do dwudziestu groszy, to znaczy, że ta funkcjonalność, nie jest Tobie potrzebna ;-)) (bo jak nazwać sytuację, gdy klient składa zamówienie za np. 100 zł a Ty marudzisz, że wysłanie SMSa kosztuje np. 20 groszy?)

Czytaj dalej »

Tagi: , , ,

Jak z poziomu PHP „odpalić” dany adres URL?

PHP - Tips & Tricks 3 komentarze »

Czasami istnieje potrzeba wywołania z poziomu skryptu jakiegoś adresu URL, tak jakby użytkownik wpisał go w przeglądarkę internetową. Przykładem może być integracja formularza rejestracyjnego, z oprogramowaniem do wysyłania mailingów (e-mail każdego, użytkownika który zakłada w serwisie konto od razu z automatu jest dodawany przykładowy adres URL do wywołania to http://www.domena.pl/xxx/add.php?email=). Pozostaje pytanie, jak to zrobić?

Najprościej jest spróbować „otworzyć” dany adres URL, tak jakbyśmy otwierali plik. Ot wpisujemy w kodzie funkcję fopen(‚http://xxxx….”, „r”); ale nie zawsze to zadziała (czasami serwery ze względów bezpieczeństwa są tak skonfigurowane, że funkcja fopen otwiera tylko pliki lokalne). Tutaj z pomocą przychodzi biblioteka cURL. Czytaj dalej »

Tagi: ,

Walidacja adresu e-mail

PHP - Tips & Tricks 4 komentarze »

Tworząc jakikolwiek formularz rejestracyjny (bądź formularz zamówienia) zazwyczaj użytkownik musi podać swój adres e-mail. Jest to jak najbardziej zrozumiałe – jeśli jesteś właścicielem sklepu internetowego, to musisz mieć e-mail klienta, aby poinformować go o kolejnych etapach realizacji zamówienia (np. wysłać mail o tym, że właśnie wyszła przesyłka). Czasami istnieje konieczność poinformowania klienta o chwilowych problemach (np. informacja o opóźnieniu, gdyż z jakiegoś powodu towar będzie na magazynie dopiero za kilka dni itp.)

Dodatkowo w przypadku formularza zamówienia warto jest zachęcać klientów do podawania telefonu kontaktowego (w razie jakichkolwiek problemów można szybko i sprawnie się skomunikować z klientem poprzez wykonanie telefonu).

Jak widać – adres e-mail jest jedną z ważniejszych rzeczy, jaką podaje osoba wypełniająca formularz. Dlatego trzeba zadbać, aby e-mail podany przez użytkownika był prawidłowy. Jednym ze sposobów na sprawdzenie adresu e-mail jest wysłanie na owy adres specjalnego linka weryfikacyjnego. Jeśli dana osoba kliknie w link to znaczy, że otrzymała e-mail, a więc e-mail jest prawidłowy. Jednak gdy dana osoba popełni jakiś błąd, to może w nieskończoność czekać na e-mail, który nie dojdzie. Dlatego też warto jest weryfikować „z grubsza” adres e-mail, czy ma prawidłowy format (tj. jeśli ktoś wpisze np. to system przepuści taki adres pomimo, że pewnie on nie istnieje, ale za to odsieje on różnego rodzaju błędne e-maile w stylu: bla (przypadkowo dodana spacja podczas pisania w pośpiechu)).

Poniżej podaję gotową funkcję, która weryfikuje poprawność adresu e-mail. Znalazłem ją na stronie http://ocaoimh.ie Co ciekawe funkcja jest dobra, gdyż nie przepuszcza e-maili z „polskimi ogonkami” (np. czasami ktoś odruchowo zamiast nowako wpisuje nowakó). Niektóre znalezione w internecie funkcje do walidacji adresu e-mail mają tę wadę, że przepuszczają takie błędne adresy. Czytaj dalej »

Tagi: , ,

Jak zrobić przekierowanie na inną stronę?

PHP - Tips & Tricks 4 komentarze »

Czasami zachodzi potrzeba przekierowania internauty na inną stronę. Np. piszesz prosty skrypt logowania i „formularz wysyła dane” do pliku login.php. W przypadku wpisania błędnego loginu/hasła plik login.php jeszcze raz wyświetla formularz logowania z stosownym komunikatem. Natomiast w przypadku podania prawidłowej pary login/hasło chcesz, aby użytkownik został przekierowany np. do pliku panel.php (oczywiście musisz zadbać o to, że jeśli sesja nie została poprawnie utworzona to plik panel.php się buntuje i przekierowywuje
użytkownika do formularza logowania, albo wyświetla komunikat błędu). Poniżej przedstawiam prosty sposób, na przekierowanie użytkownika na inną stronę (UWAGA: wcześniej nie może nic zostać wyświetlone na ekranie podobnie jak to ma miejsce z tworzeniem sesji czy też zapisywaniem ciasteczek)

header("Location: panel.php\n\n");

Zamiast panel.php należy podać nazwę innego pliku, na który chcemy przekierować internautę (można podać też pełną formę adresu łącznie z http:// np. http://www.onet.pl). Nie zapomnij o tym, że na końcu funkcji header powinny się znaleźć znaki przejścia do nowej linii (\n)

Tagi: , , ,

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się