Firefox “Download Day 2008″

Ogólnie Brak Komentarzy »

Pomóż ustanowić rekord Guinnessa , zapisz się:
Download Day - Polish

Filtrowanie danych przekazywanych do serwera

Bezpieczeństwo, Klasy, PHP (1) Komentarz »

Pisząc jeden z kolejnych systemów wpadłem na pomysł żeby dane przekazywane za pomocą $_POST, $_GET, $_COOKIE filtrować za pomocą odpowiedniej klasy, podstawą projektu ma być odpowiednie nazewnictwo zmiennych, każda zmienna np. $_POST['intIlosc'] będzie poprzedzona prefiksem określającym jej rodzaj.

Rodzaje zmiennych:

  • integer - prefiks: int, np.: intIlosc, dopuszczalne wartości (1, 333, 55566)
  • numeric - prefiks: num, np: numWspolczynnik, dopuszczalne wartości (1.23, 1.8888, 33)
  • cena - prefiks price,np: priceCenNetto, dopuszczalne wartości (1.22, 2.33, 115.43)
  • string alfanumeryczny, prefiks anum, np.: anumMd5Id, dopuszczalne wartości ([A-z0-9])
  • czysty string - prefix clean, np.: cleanText, dopuszczalne wartości ( [A-z0-9], spacja, _) , dotyczy ciągu znaków z kontrolki input, wycinamy możliwe niebezpieczne wyrażenia, nie dopuszczamy wstrzyknięcia znaków specjalnych
  • HTML - prefix html, np: htmlMailTresc, htmlentities + słownikowe wycinanie niebezpiecznych wyrażeń (#xx, wartości hex, %, script, document.cookie)
  • data - prefix date, np: datePoczatek, dopuszczalne wartości (tutaj należy się zastanowić nad lokalizacją (albo podtypy, typ date: podtyp: iso-yyyy-mm-dd)
  • czas - prefix time, np.: timeNow (podobnie jak w przypadku daty)
  • użytkownika - prefix user, np: userInnyFormat, nie filtrowane przez globalną klasę, można przefiltrować samemu poprzez sprawdzenie za pomocą regexp.
  • regexp - predefiniowane w klasie rozszerzającej domyślną klasę - problem z nazewnictwem.

Metody klasy:

  • Odczyt pojedyńczej wartości,
  • Zapis, zmiana wartości istniejącej (automatyczne filtrowanie w momencie zapisu)
  • Odczyt pojedyńczej wartości (filtrowanie na etapie odczytu)
  • Odczyt wszystkich wartości jako tablica
  • Generowanie stringa kluczy i wartości GET ( do wykorzystania przy tworzeniu linków)
  • Szybkie ładowanie zmiennych za pomocą tablicy zmiennych, indeksowanych prefiksami typów.

Klasa byłaby wywołana przy każdym odświeżeniu strony, zmienne byłby by filtrowane automatycznie, przed ich odpowiednim wykorzystaniem (wyświetlaniem, budowaniem zapytań SQL, zmienne typu użytkownika filtrowane ręcznie.

XSS (Cross Site Scripting) o ataku słów kilka

Bezpieczeństwo, Javascript, PHP (4) Komentarze »

Bezpieczeństwo aplikacji internetowej jest bardzo ważnym elementem projektowania aplikacji, oczywiście chcielibyśmy aby każdy projekt był maksymalnie bezpieczny, lecz jak to bywa z wszelkiego rodzaju programami, pisane są przez ludzi, czego następstwem są błędy. Błędy, czy to popełniane przez niedopatrzenie, czy przez nieznajomość zagrożeń, niestety są bardzo powszechne, a czym aplikacja większa, tym większe prawdopodobieństwo na wystąpienie takiego błędu.

Dlaczego XSS może być bardzo groźny? A to dlatego że w większości przypadków pozwala na przejęcie sesji innego użytkownika systemu, co powoduje uzyskaniem przez atakującego pełnej kontroli nad systemem (oczywiście w przypadku przejęcia sesji administratora.

Na czym polega atak?

Tak “łopatologicznie” można to wytłumaczyć w następujących punktach

  1. Podstawą jest to że serwer i przeglądarka nie są w żaden sposób połączone ze sobą
  2. Aby serwer “wiedział” że użytkownik jest naprawdę danym użytkownikiem wysyła do przeglądarki “ciasteczko” (z ang. cookie) z tzw. “ID Sesji”,
  3. Gdy przeglądarka posiada swoje indywidualne ID Sesji, serwer jest w stanie zidentyfikować przeglądarkę.

Aby zdać sobie sprawę z niebezpieczeństwa musimy wyobrazić sobie sytuację gdy ktoś inny w jakiś bliżej nieokreślony sposób (może za pomocą magii :P) będzie w stanie wejść swoją przeglądarką z tym samym ID Sesji, z którym my jesteśmy związani z serwerem. Wtedy właśnie serwer będzie odpowiadał na żądania użytkownika posiadającego nasze ID, tak jakby on był naszą przeglądarką.

Jak przebiega atak?

Zasada działania jest banalna, znalezienie dziury w aplikacji i jej wykorzystanie już trochę mniej. W każdym razie aby przeprowadzić atak XSS, atakujący musi wstrzyknąć na atakowaną stronę złośliwy kod, złośliwy kod (najczęściej odpowiednio spreparowany Javascript) ma za zadanie przekazać ciasteczko ofiary do atakującego.

Scenariusz przykładowego ataku postaram się przedstawić poniżej.

Po pierwsze będziemy potrzebowali stronę na którą będziemy w stanie wstrzyknąć trochę kodu html, strona internetowa jest napisana w PHP i posiada system użytkowników z uprawnieniami posiada również pole służące do wyszukiwania danego ciągu znaków na podstronach.

1
<input type="text" name="szukaj" />

Przyjmijmy dla uproszczenia że dane z formularza są przesyłane metodą GET, więc po wpisaniu w pole ciągu znaków “cokolwiek” kliknięciu w przycisk submitujący będziemy mieli w polu adresu przeglądarki http://www.przyklad.pl/?szukaj=cokolwiek, przyjmijmy że strona zwraca komunikat: “Wyrażenie cokolwiek nie zostało znalezione”, natomiast po zatwierdzeniu w polu szukaj widzimy wyraz “cokolwiek”. Podglądając kod HTML kontrolki “szukaj” widzimy:

<input type="text" name="szukaj" value="cokolwiek" />

Teraz zróbmy krótki test: zamiast wyrazu “cokolwiek” postarajmy zamknąć tag input i wstawić za nim znacznik script który wyświetli nam alert.

<input type="text" name="szukaj" value=""><script>alert('dupa')</script><br class="" />

Czerwoną czcionką wyróżniłem ciąg znaków dzięki któremu jesteśmy w stanie wyświetlić prosty komunikat alert. Oczywiście jeżeli jesteśmy w stanie działać w javascript to idźmy trochę dalej, postarajmy się wyświetlić nasze ciasteczko

<input type="text" name="szukaj" value=""><script>alert(document.cookie)</script><br class="" />

Po tym wyskoczy nam okienko komunikatu z wyświetlonym PHPSESSID=q1y3w278ey3dsgafg87w4getrf

jeżeli jesteśmy w stanie w jakikolwiek sposób wyświetlić zawartość ciasteczka, to w większości przypadków jesteśmy też w stanie wysłać je na serwer np.: tworząc za pomocą javascript obrazek, którego parametr “src” będzie wskazywał na plik PHP umieszczony na naszym serwerze do którego za pomocą GET prześlemy to ciasteczko.

Podsumowując ten banalny przykład, musimy zdać sobie sprawę że zagrożenie XSS’em istnieje, i wystarczy tylko jedna nieprzefiltrowana kontrolka aby ucierpiał cały system lub wypłynęły z niego dane o użytkownikach.

Jak się bronić przed atakiem XSS?

Odpowiedź jest prosta w 100% nie obronisz się nigdy :), (abstrahując od sytuacji gdzie mamy system, w którym nie pozwalamy nikomu dodawać danych bardziej skomplikowanych niż liczby i ciągi alfanumeryczne). Możemy jednak zabezpieczyć się jak najbardziej aby znalezienie dziury atakującemu sprawiło jak najwięcej problemów. Wszystkie źródła odnoszące się do ataków XSS krzyczą: “Nie ufaj danym, które są przesyłane na serwer przez użytkownika”, całkowicie się z tym zgadzam.

  1. Filtrowanie danych - bardzo ciężki temat, moim pomysłem na odpowiednie filtrowanie danych jest rzutowanie typów przekazywanych poprzez $_GET i $_POST do skryptu na podstawie prefiksu ich nazwy np:
    • zmienne typu “integer” poprzedzamy ciągiem “int”; intJakasTamZmienna,
    • zmienne alfanumeryczne poprzedzamyciągiem “anum”; anumJakisCiagZnakowOdADoZi09
    • itp

    Filtrowanie takich zmiennych odbywało by się globalnie dla wszystkich plików skryptu, oczywiście zawsze są wyjątki od reguły więc musimy tutaj posiadać typ “Custom, który będzie filtrowany ręcznie.

  2. System obsługi sesji wiążący przeglądarkę użytkownika nie tylko po ID Sesji lecz także po jak największej ilości danych które są niezmienne w danej sesji:
    1. Adres IP przeglądarki
    2. Jej nazwę.
  3. Filtrowanie niebezpiecznych wyrażeń w stosunku do zapisywanego HTML’a w bazie - kolejny temat rzeka, w większości wypadków (lecz niestety nie we wszystkich) powinno pomóc zastosowanie htmlspecialchars lub htmlentitles w zależności od sytuacji + wycinanie wszystkich słów kluczowych potencjalnie niebezpiecznych takich jak eval, document.write, stringFromCharCode, javascript, vbscript, jest ich niestety od cholery. Podstawą tutaj jest żebyśmy wiedzieli co dokładnie ma być w bazie i nie przepuszczali żadnej innej możliwości.

Podsumowując ataki XSS zostały uznane przez OWASP jako największe zagrożenie w 2007 roku, więc nie należy ich ignorować. Jeżeli używasz gotowych systemów takich jak phpBB czy Wordpress, staraj się uaktualniać do najnowszej dostępnej wersji, programiści takich systemów bardzo często wypuszczają poprawki bezpieczeństwa, stare wersje są tym bardziej niebezpieczne, gdyż atakujący może bez problemu ściągnąć sobie kod źródłowy i przejrzeć go pod kątem wybranego ataku.

Pomysł na browsera (wyświetlanie rekordów z bazy danych)

AJAX, HTML, Javascript, Klasy, PHP, Szkice pomysłów Brak Komentarzy »

Zapisuję tutaj żeby nie zapomnieć i żeby mieć motywację aby w końcu zacząć coś pisać :)

Pisząc system internetowy każdy boryka się z problemem wyświetlania listy rekordów z bazy danych. Problem wydaje się trywialny, lecz nic z tego, wszystko jest super dopóki pobieramy dane z jednej tabeli, przy czym rekordy wyświetlamy jako tekst. Problem rozpoczyna się dopiero gdy okazuje się że nasza “Przeglądarka rekordów” dalej zwana z angielska “Browse” będzie potrzebowała innych funkcjonalności.

Poniżej postaram się przedstawić listę funkcjonalności uniwersalnej klasy Browsera, który moim zdaniem sprawdzał by się dobrze przy wykorzystaniu we wszystkich warunkach.

  • Podział rekordów na strony - to chyba podstawa w wyświetlaniu rekordów których ilości nie jesteśmy w stanie przewidzieć.
  • Nawigacja między “stronami” rekordów
    • Standardowe przyciski “następny”, “poprzedni”.
    • Wygodne i szybkie przejście pomiędzy stronami sąsiadującymi.
    • Przesunięcie na pierwszą i ostatnią stronę.
  • Wyszukiwanie rekordów:
    • Szukanie globalne dla wszystkich wyników zwracanych przez Browsa.
    • Szukanie po kolumnie.
    • Możliwość wyszukiwania zakresu:
      • liczb
      • dat
      • stringów
        • np: data od 2008-01-01 do 2008-01-30, wszystkie liczby od 2 do 55
    • Wyszukiwanie z wykorzystaniem operatora OR lub AND
      • nie tylko liczba=1 AND liczba=4, lecz także liczba=2 AND (liczba=4 OR liczba=66)
  • Sortowanie - po każdej możliwej kolumnie, która jest oczywiście sortowalna i jej sortowanie ma sens.
  • Grupowanie - ogólnie ciężki temat, ze względu na różnorodność możliwych zastosowań, podstawowe założenia grupowania w browsach”
    • grupowanie rekordów po kolumnie znakowej lub liczbowej
    • grupowanie po kolumnie typu data:
      • wybór po jakim okresie czasu budować grupowanie:
        • minuta
        • godzina
        • dzień
        • tydzień roboczy (czy to ma sens?)
        • tydzień
        • miesiąc
        • rok
      • grupowanie domyślnie po wszystkich wystąpieniach
  • Tworzenie widoku danych - problem w tym że nie zawsze chcemy wyświetlić rekordy w formie tabelarycznej (chodzi tutaj o przypisaniu rekordu tagowi w naszej tabelce).
    • System szablonów dla rekordu z przypisaniem kolumny w dane miejsce. Domyślnie dane byłyby umieszczone w tabeli.
    • Odpowiednie ustalenie stylów CSS dla poszczególnych elementów, aby łatwo zmienić skórkę browsera.
  • Odświeżanie danych przy wykonywanych akcjach sortowania, wyszukiwania, przełączania między stronami:
    • Używając technologii AJAX, dynamiczne przeładowanie strony w tle, parametry przekazujemy przez $_GET.
    • Standardowo przez odświeżenie strony i przekazanie odpowiednich parametrów w zmiennej $_GETPrzy dużej stronie dobrze używać AJAXa ponieważ znacznie odciąża on serwer, przykładem może być nasza-klasa.pl, w której to wszystkie akcje wykonywane są standardowo poprzez przeładowanie strony, co skutkuje komunikatem o przeciążeniu serwera, a wystarczyło by “trochę” przebudować skrypty i zysk w wydajności byłby ogromny przy liczbie użytkowników sięgającej 4 milionów (na obecną chwilę).
  • Akcje na browsie - możliwość przejścia z browsa do innego modułu z określonymi parametrami powiązanymi z rekordem, na którym chcemy wykonać daną czynność.
    • Przekierowanie do innego modułu za pomocą linku.
    • Wywołanie okienka (okno modalne ładowane Javascriptem) i załadowanie określonego modułu za pomocą AJAXa
    • Prosty system potwierdzający (np. usuwanie rekordu) - musiałby być elastyczny w dostosowaniu,
      • możliwość zdefiniowania komunikatu,
      • możliwość zdefiniowania akcji dla komunikatu,
        np: Czy usunąć? Tak / Nie, Co zrobić ? Usuń / Archiwizuj / Przekaż.
      • definiowalna forma obsługi akcji;
        • przekierowanie na daną stronę z parametrami w POST lub GET
        • wywołanie akcji AJAXem (POST lub GET)
          tutaj problem w definiowaniu jak system ma się zachować po wykonaniu akcji (jak na razie brak pomysłu :p)
  • Zagnieżdżanie browsów samych w sobie, dla przykładu mamy grupę produktów i po kliknięciu w nazwę grupy rozwija nam się lista produktów przypisanych do tej grupy
    • Problem: zachowanie stanowości przy odświeżaniu browsów nadrzędnych.
    • 2 wersje:
      • Dla małej ilości danych: ukryty DIV który po kliknięciu w przycisk pokazuje ukryty tag z danymi, dane są ładowane w czasie pobierania rekordów odpowiednie przy ładowaniu najprostszej wersji bez skomplikowanych Javascriptów, oraz przy małej ilości rekordów w browsie podrzędnym.
      • Ładowanie browsów podrzędnych za pomocą AJAXa, usuwanie z DOM przy chowaniu (może też opcja z ukrywaniem)
    • Problem: odpowiednie zaprogramowanie akcji
  • Kolumny:
    • Typy kolumn - różne typy danych są różnie wyświetlane, dla przykładu liczby powinny być wyświetlane od prawej strony, ciągi znaków od lewej (ustawienie domyślne z możliwością zmiany)
      • Liczba
        • int
        • float - formatowanie
        • waluta (z pre/post fixem zł euro itp.)
      • Tekst
      • Data
      • Wykres - mały wykres pokazujący wartość kolumny na podstawie określonych wartości przedziału.
      • Obraz
      • Akcja - kolumna akcji, na podstawie której możemy wykonać jakąś akcję powiązana z parametrami z tabeli
  • Parametry - globalny format parametrów, myślę tutaj o przekazywaniu wartości komórki, np.: id=2&id_kategorii=44, parametry muszą być budowane dla każdego wiersza w celu ich późniejszego przekazania do akcji.

Wykorzystywana technologia:

  • PHP5 (jak na razie chyba że wyjdzie 6) - jestem zdania żeby odchodzić od czwórki, piątka ma dużo więcej możliwości, nowe funkcje, nowy model obiektowy, same zalety :)
  • Warstwa wspomagająca połączenia z bazą danych - myślę że nie warto wyważać otwartych drzwi i warto skorzystać z gotowych klas pozwalających łączyć się z bazą. Poniżej linki do tych jakich kiedyś używałem (teraz tylko wybrać).
    • ADODB - duże możliwości, dużo dodatkowych modułów.
    • PEAR DB
  • Biblioteka wspomagająca pisanie Javascript:
    • JQuery - obecnie jej używam, jak dla mnie super, dużo dodatkowych modułów, upraszcza wyszukiwanie obiektów w DOM dzięki selektorom opartych na CSS, wspomaga AJAX, JSON
    • MooTools - spotkałem się z tym lecz niestety nie przetestowałem jeszcze, może warto się zastanowić?
    • Scriptaculus - kolejny framework JS. Też pisałem tylko trochę.
  • Prezentacja danych domyślnie w HTML
    • możliwość eksportu do innych formatów
      • PDF (Portable document format)
      • DOC (Microsoft Word)
      • CSV (Plik tekstowy z wartosciami oddzielonymi przecinkiem, lub innym)
      • XLS (Microsof Excel)
      • XML (wedle uznania)
      • ODF (nie znam ale pewnie warto jak OOXML nie będzie drugim standardem)
  • JAVASCRIPT - możliwość obsługi bez skryptów - dla prostego browsera - zachowanie funkcjonalności np.: przy wykorzystaniu na stronie dla komórek.

Wszystkie inne pomysły jakie wpadną mi do głowy w przyszłości postaram się również tutaj dołączyć.

Początki z programowaniem w PHP

PHP Brak Komentarzy »

Jeżeli zaczynasz swoją przygodę z PHP to dobrze trafiłeś, mam nadzieje że kilka poniższych rad będzie pomocnych.

Najważniejszą rzeczą bez której nie rozpoczniesz swojej przygody z PHP jest serwer WWW z zainstalowanym PHP. Tutaj na początek polecam Krasnala. Jest to pakiet z serwerem WWW Apache oraz z dołączonym do niego modułem PHP. Instalujesz Apache, PHP5 i MySQL i po zakończeniu instalacji masz już gotowy serwer WWW pod adresem 127.0.0.1 czy też inaczej localhost. Wpisz w przeglądarce www http://localhost po czym powinna pojawić się strona startowa Apacha. Strony umieszcza się w katalogu programu, Więcej szczegółów w dokumentacji projektu. Dla bardziej ambitnych osób polecam ściągnięcie sobie osobno najnowszej wersji Apache oraz PHP, instalujemy najpierw serwer WWW po czym instalujemy PHP, instalator wersji 5 bez problemu dołączy konfigurację do Apache i będziemy mogli cieszyć się naszym serwerem. Pozostaje jeszcze ściągnąć i zainstalować bazę danych MySQL i mamy gotowy do pracy serwer.

Kolejna sprawa to wybór odpowiedniego edytora, tutaj polemizował bym z osobami na grupach dyskusyjnych że najlepszy jest Notatnik (fuj), dobry edytor znacznie przyspiesza pracę nad projektem (jakikolwiek mały on nie był), a także pozwala wyeliminować większość błędów składni podczas pisania.

Wybór edytora przedstawiłem w moim poprzednim wpisie: Jaki darmowy edytor do PHP

Jak już posiadamy nasz wymarzony edytor możemy przystąpić do pisania skryptów, najbardziej niezbędnym w tym momencie narzędziem będzie PHP Manual, dzięki niemu będziemy w stanie dowiedzieć się w jaki sposób działają potrzebne nam funkcje.

Jeżeli zaczynasz przygodę z PHP, podstawą jest jakiś pomysł na to co chcesz pisać, na początek coś prostego, dla przykładu jakaś prosta aplikacja, np. książka adresowa, projekt jest o tyle dobry, że pozwala opanować najbardziej potrzebne obszary niezbędne chyba w każdym programowaniu:

  • Interakcja z użytkownikiem - czyli jak pobrać dane od użytkownika, jak je przetworzyć, jak wypluć wyniki które chcemy pokazać użytkownikowi aplikacji. Musisz tutaj opanować podstawy tworzenia list z danymi, oraz obsługi formularzy.
  • Połączenie z bazą danych - po co nam baza danych? A to po to żeby gdzieś zapisać dane które wpisujesz przez przeglądarkę. Wybór bazy danych będzie uzależniony będzie od tego jaka jest dostępna na naszym serwerze, zapewne będzie to baza MySQL; jedna z najbardziej popularnych w Polsce baz, znajdująca się u prawie każdego providera hostingu.
    • przy połączeniu z bazą oczywiście będziemy jeszcze musieli opanować podstawy języka SQL, czyli podsawowe zapytania do bazy, INSERT, UPDATE czy DELETE.

Jak to ugryźć? Oczywiście najlepiej poszukać jakiegoś kursu PHP jeżeli nie znasz żadnych podstaw. Po czym spróbować rozbić problem na mniejsze części:

  1. Spróbuj napisać prosty skrypt który będzie pobierał dane z formularza z kilku kontrolek, po zapisaniu którego będzie je wyświetlał na ekranie.
  2. Załóż nową bazę, stwórz w niej tabelę z 2 kolumnami (np.: id i nazwa) po czym zgodnie z jakimś tutorialem opanuj mistyczną sztukę operowania na rekordach, najpierw dodaj kilka za pomocą komendy INSERT INTO …, następnie spróbuj je wyedytować, po czym usuń niektóre z nich, za każdym razem monitoruj zmiany za pomocą komendy SELECT.
  3. Żeby wszystko grało do naszych podstaw potrzebujemy jeszcze połączenia do bazy, nie stosuj na początku żadnych bibliotek wspomagających połączenia z bazą, naucz się jak działa połączenie z wykorzystaniem funkcji (klas) znajdujących się w PHP. Przykład znajduje się na stronie manuala PHP
  4. Ok przypuszczalnie wiesz już wystarczająco żeby napisać swoją pierwszą aplikację, pamiętaj aby starać się tworzyć przejrzystą strukturę plików. Pomoże to Ci nie pogubić się gdy kodu będzie przybywać. Staraj się stosować odpowiednie nazewnictwo plików, żeby od razu kojarzyły ci się z funkcją jaką spełniają.
  5. Jeszcze jedna rada - staraj się nie zniechęcać - nie od razu Rzym zbudowano (czy jakoś tak)

Jak poradzisz sobie ze wszystkimi problemami podczas pisania malutkiej książki adresowej opartej o bazę danych, na pewno będziesz w stanie uatrakcyjnić swoją statyczną stronę internetową o interakcję z użytkownikiem (księga gości, system komentarzy, newsy itp.).

To tyle jeżeli chodzi o podejście do problemu rozpoczęcia pisania w języku PHP.

Edytory PHP, wybór darmowego edytora

Edytory, PHP (2) Komentarze »

Powyższe pytanie zadaje chyba każdy początkujący programista PHP. Ja również zadaje to pytanie co kilka miesięcy i staram się przejrzeć co mi chce powiedzieć google na ten temat.

Oczywiście odpowiedź nie jest taka prosta, a dodatkowo każda grupa zwolenników danego programu wychwala go pod niebiosa, mimo iż często nie jest to wychwalanie obiektywne.

Ja osobiście w edytorze PHP pisząc trochę bardziej skomplikowane skrypty niż licznik odwiedzin, potrzebuję następujących rzeczy:

  • Porządne podpowiadanie składni - nie chodzi tutaj o podpowiadanie listy funkcji, chodzi o podpowiadanie metod klas i ich właściwości;
    1
    
    $obiekt1-&gt;obiektWewnątrz-&gt;jakaśFunkcja($param);

    podpowiadanie zmiennych spoza pliku na którym obecnie się znajdujemy.

  • System szablonów kodu, które często się wpisuje; np: często używamy w danym projekcie funkcji, dzięki której możemy pobrać zmienną tablicową na podstawie wykonanego zapytania SQL, przypuśćmy że funkcja musi posiadać długą nazwę (bo takie są założenia projektu), oraz 5 parametrów do przekazania;
    1
    
    fuPobieranieDanychZbazyJakoTablica($param1, $param2, $param3);

    dobrze by było w tym wypadku mieć pod ręką szablon, dzięki któremu po wpisaniu np.: “fupd” w edytorze i wykonaniu kombinacji CTRL+SPACJA, ciąg znaków szblonu zamieni nam się w nazwę funkcji i pozwoli w prosty i szybki sposób wypełnić listę parametrów:

    1
    
    fuPobieranieDanychZbazyJakoTablica([kursor]-&gt;, [tab]-&gt;, [tab]-&gt;);[tab]
  • Szybka konwersja kodowania pliku pomiędzy formatami, oraz poprawne wykrywanie kodowania; Większość edytorów ma niestety z tym straszny problem, dzięki czemu tracimy strasznie dużo czasu żeby skonwertować plik z jednego kodowania na drugie. Jeżeli chodzi o Nas Polaków to edytor powinien wspomagać 3 podstawowe kodowania znaków, ISO-8859-2, Windows-1250, oraz UTF-8, bez tego niestety pracując nad różnymi projektami pisanymi przez równe osoby możemy mieć duży problem. Przeszukując grupy dyskusyjne często “fachowcy” odpowiadają ludziom “Po co chcesz używać kodowania Win-1250 przecież tak się nie pisze stron” - no super tylko co jeżeli ktoś napisał stronę w Win a ty masz ją poprawić? Może mam zrobić nową ? :)
  • Oczywiście pisząc coś w PHP niestety będziemy musieli korzystać ze znaczników HTML, czy to XML (jak kto woli), więc super byłoby gdyby nasz edytorek wspomagał podpowiadanie składni tych tagów. Jeżeli nie mamy grafika to jeszcze lepiej aby w miarę wygodnie pisało się CSS
  • Porządkowanie kodu - dla tych co często robią bałagan w kodzie.
  • Debugger - przy większych projektach warto używać, choć ja osobiście nie korzystam.
  • Możliwość połączenia z poziomu edytora z:
    • Serwerem FTP - to bardzo ułatwia eksportowanie zmian na serwer.
    • Serwerem WebDAV - w razie gdy ktoś potrzebuje (ja osobiście nie używam).
    • Oczywiście przy projektach kilku-osobowych ważną funkcjonalnością będzie możliwość połączenia z serwerem kontroli wersji np:
      • SVN - używam w pracy i nie wiem jak można pisać coś większego bez tego :)
      • CVS
    • Dodatkowo połączenie do bazy danych (MySQL, PostgreSQL, MSSQL, Oracle), oraz wykoananie (sprawdzenie zapytania SQL).
  • System pluginów i społeczność, która te pluginy rozwija (dzięki temu często uzyskujemy możliwość przekształcenia naszego prostego edytora w bardzo potężne narzędzie).
  • obsługa PHPDoc.

Ale do rzeczy. Ja osobiście używam 2 edytorów:

  • Eclipse PDT (PHP Development Tools) www.eclipse.org/pdt
    To opensource’owy kombajn wspomagający pisanie skryptów PHP, moim zdaniem najlepszy darmowy jaki znalazłem (a może jaki istnieje).
  • PSPAD Editor - Prosty edytorek, z podstawowym podpowiadaniem funkcji w PHP, kolorowaniem składni, szukaniem po wyrażeniach regularnych, do wad należy brak obsługi kodowania win-1250.

Kombajn czyli PDT - PHP Development Tools

Z PDT korzystam od wersji 0.2 - czyli bardzo wczesnej alfy :) (wcześniej to się nazywało PHPIDE). Aplikacja rozwijana jest przez programistów Zenda więc myślę że projekt nie powinien za szybko upaść. Jeżeli chodzi o moją opinię to jest to obecnie najlepszy z dużych edytorów (tzw. kombajnów) z jakim się spotkałem. Ma on oczywiście kilka wad mimo wypuszczonej w grudniu 2007 roku wersji 1.0.

Jak dla mnie główną zaletą tej aplikacji jest podpowiadanie składni, programiści z Zenda naprawdę się postarali i wykonali kawał dobrej roboty, program ten rewelacyjnie podpowiada składnię zmiennych z projektu, metody i właściwości klas obiektu (nawet zagnieżdżone - przy odpowiednim określeniu zmiennej poprzez PHPDoc) - dla mnie bomba!
Kolejną zaletą jest system pluginów, dzięki którym w jednym środowisku możemy doinstalować funkcjonalności, które nas interesują. PDT potrafi także rozmawiać z serwerami FTP, CVS, niestety domyślnie nie ma obsługi SVN ani FTP, ale można doinstalować sobie pluginy.

Podsumowując: jeżeli chcesz używać edytora dla dużego projektu, chcesz aby miał potężny system pluginów i modułów, a co najważniejsze potrzebujesz darmowego (Open Source) edytora to jest on właśnie dla ciebie.

Prosty edytor czyli PSPAD
Z PSPad’a korzystam od kilku lat i jeżeli chodzi o proste poprawki to sprawdza się moim zdaniem bardzo dobrze, ładuje się w miarę szybko, koloruje składnie, podpowiada listę funkcji PHP, koloruje składnię HTML, podpowiada składnię CSS. Pozwala łączyć się z serwerem FTP.

Używałem też wielu innych edytorów:

  • Vim - edytor dla linuksowych guru :) ma ogromne możliwości edycyjne, lecz niestety trzeba w nim pisać, pisać i jeszcze raz pisać aby opanować składnię.
  • Notepad++ - ciekawy edytor działający na silniku Scintilla, duże możliwości edycyjne nie korzystałem niestety zbyt długo z niego więc nie chcę się wypowiadać na temat wad i zalet.
  • Emacs - kolejny edytor z dużymi możliwościami - niestety opanowanie go jest czasochłonne.
  • ConText - prosty edytorek, niestety tylko przeklikałem.

Lista edytorów PHP znajduje się pod adresem www.php-editors.com
wybór najlepszego pozostawiam tobie :D.

WP Theme & Icons by N.Design Studio - Polski Wordpress
Aktualności RSS Komentarze RSS Log in