Przesyłanie plików na FTP

Tips & Tricks Komentarze (1) »

Ostatnio miałem taki drobny problem: otóż chciałem wrzucić pewien większy plik na trzy różne serwery FTP (wiadomo, są limity transferu, więc wrzucenie pliku na jeden serwer mogłoby spowodować, że szybko bym wykorzystał ten limit). Niestety ale mam dość wolne połączenie internetowe jeśli chodzi o upload i wrzucenie pliku, który ma 600 MB zajmuje mi około 2 godziny czasu. Jednak postanowiłem wykorzystać pewną sztuczkę: plik wrzuciłem na jeden serwer FTP a następnie napisałem (a dokładnie zaadaptowałem z manuala) pewien skrypt, który wrzuca plik na inny serwer. Poniżej prezentuję ten kod:

 Czytaj dalej »

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ć prostą aplikację w PHP?

Podstawy PHP 2 komentarze »

Język skryptowy PHP powstał w 1994 roku i od tego czasu zdążył zdobyć olbrzymią popularność. Większość serwisów internetowych jest stworzonych właśnie w technologii PHP.

Oto kilka powodów, dlaczego PHP jest tak popularny

  • jest darmowy
  • można zainstalować zarówno pod Linuxem jak i pod Windowsem
  • skoro jest darmowy, to jest zainstalowany prawie na każdym serwerze (więc jest popularny)
  • jest prosty do nauczenia
  • skoro jest prosty i darmowy to powstało wiele tutoriali, darmowych e-booków, serwisów z poradami co dodatkowo napędza popularność PHP 🙂

Czym tak naprawdę jest PHP?  Czytaj dalej »

Tagi:

Drupal – świetny CMS

Drupal 3 komentarze »

Drupal to darmowy (a dokładniej open source) CMS. W Drupalu bardzo wygodnie tworzy się serwisy internetowe.

Co mi się podoba w Drupalu?? Otóż Drupal to tak naprawdę goły CMS z kilkoma rdzennymi modułami. Bardzo łatwo można zwiększyć możliwości Drupala poprzez instalację kolejnych modułów. Z samym Drupalem dostarczonych jest sporo modułów. Jeszcze więcej można ściągnąć z internetu. Tworząc strony w sposób tradycyjny trzeba się napracować, aby np. zrobić panel rejestracyjny, panel logowania, nadawanie rang użytkownikom (można bardzo łatwo stworzyć np. rangę VIP, której członkowie będą mieli dostęp do materiałów niedostępnych dla zwykłych użytkowników).

Chcesz postawić bloga?? Uaktywniasz jedną standardowo dołączoną wtyczkę i masz bloga. Chcesz dodać forum?? Aktywujesz jedną wtyczkę, tworzysz fora i tyle (jeśli ktoś integrował zwykły serwis z dowolnym skryptem forum tak aby nie było osobnego konta do logowania się w serwisie i osobnego do forum wie jakie to jest czasochłonne i skomplikowane).

Być może powiesz, że najpopularniejszym CMS’em jest Joomla (klon Mambo). Owszem, ale Drupal jest dla mnie czytelniejszy i wygodniejszy w obsłudze. Zastanawiasz się, jakie znane serwisy korzystają z Drupala?? Podam jeden przykład: playboy.de (mam nadzieję, że moja mama tego nie czyta ;-). Nieco obszerniejszy spis stron postawionych na Drupalu znajdziesz tutaj

Jednak w Drupalu spodobało mi się coś innego… Czytaj dalej »

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: , , ,

Prosta walidacja formularza za pomocą skryptu JavaScript

JS - podstawy 3 komentarze »

Podczas wypełniania formularza (np. formularz kontaktowy, formularz zamówienia, formularz rejestracyjny) zachodzi potrzeba sprawdzenia poprawności wprowadzonych danych. Najprościej jest przeprowadzić walidację na poziomie skryptu PHP (czyli gdy przechwytujemy dane wpisane w formularzu to tuż przed dodaniem rekordu do bazy danych sprawdzamy, czy wszystkie pola zostały wypełnione i czy wprowadzone dane mają poprawny format (np. czy adres e-mail ma prawidłowy format, czy oba hasła się pokrywają, czy kod pocztowy jest w formacie ab-cde itp.) Jeśli dane są błędne to zamiast wykonać oczekiwaną akcję należy ponownie załadować formularz i zwrócić stosowny komunikat błędu).

Jednak walidacja na poziomie skryptu PHP ma pewną wadę: użytkownik musi poczekać, aż strona internetowa się przeładuje, zanim się dowie, że w polu nazwisko nic nie wpisał. Dużo wygodniej jest wprowadzić walidację poprzez dodanie prostego skryptu w języku JavaScript, który jeszcze przed wysłaniem formularza „z grubsza” sprawdzi, czy wszystko jest w porządku (np. sprawdzi, czy wszystkie obowiązkowe pola zostały wypełnione). Poniżej przedstawiam przykładowy formularz z odpowiednim kodem JavaScript odpowiedzialnym za walidację danych.

Czytaj dalej »

Tagi: , , , ,

Kodowanie adresów e-mail – skrypt w PHP

SPAM Komentarze (1) »

Wczoraj we wpisie Kodowanie adresów e-mail opisałem dlaczego warto jest kodować swoje adresy e-mail. No, ale tam był program windowsowy, który jednorazowo kodował podany adres e-mail (przydatne rozwiązanie, gdy chcesz na swojego bloga na stronie kontakt dać swój adres e-mail). To rozwiązanie się nie sprawdza, gdy tworzysz serwis ogłoszeniowy, gdzie ogłoszeniodawca podaje swój e-mail, aby potencjalni kontrahenci mogli się z nim skontaktować. Dlatego postanowiłem owy program przepisać jako funkcję w języku PHP! 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: , , ,

Filtrowanie danych wprowadzanych przez użytkownika na pasku adresu

Bezpieczeństwo Komentarze (0) »

Pisząc aplikację należy mieć na uwadze fakt, że użytkownik może manipulować danymi wejściowymi. Poniżej rozważmy prosty przykład strony internetowej

<?php
$go=$_GET['go'];if ($go=='') $go='start.php';
include("gora.php");
include("menu.php");
include($go);
include("dol.php");
?>

Budowa strony jest bardzo prosta: w plikach gora.php i dol.php jest zawarty design serwisu. W pliku menu.php zawarte jest menu serwisu (zbiór linków do podstron). Natomiast najciekawszym fragmentem kodu jest: include($go.”.php”);

Ta linijka jest odpowiedzialna za zaincludowanie odpowiedniego pliku (z treścią strony). Jednak nazwa tego pliku jest przechowywana w zmiennej $go. A ta zmienna to nic innego jak parametr z jakim została wywołana strona w przeglądarce internetowej (np. http://www.strona.pl/index.php?go=kontakt).

Potencjalnym niebezpieczeństwem jest fakt, że dane nie są filtrowane. O ile użytkownik wpisze w parametrze go nieistniejącą nazwę pliku (np.  http://www.strona.pl/index.php?go=nieistniejacy_plik), to pojawi się „jedynie” drobny błąd:

Warning: include(nieistniejacy_plik.php) [function.include]: failed to open stream: No such file or directory in F:\strony\test\index.php on line 7

Warning: include() [function.include]: Failed opening 'nieistniejacy_plik.php' for inclusion (include_path='.;C:\php5\pear') in F:\strony\test\index.php on line 7

Taka strona nie wygląda zbyt profesjonalnie, jednak ten komunikat błędu sam w sobie nie jest groźny (pomijam fakt, że komunikat błędu może zdradzać informacje w jakim katalogu znajdują się pliki, więc ta informacja może w przyszłości nieznacznie ułatwić komuś atak). Dużo groźniejszy jest potencjalny użytkownik, który może spróbować zyskać nieautoryzowany dostęp do plików próbując w polu adresu manipulując danymi wpisać adres niebezpiecznego pliku np. zawierającego hasła ( np. ../../etc/passwd czy też ../data/hasla.txt). Poniższy zrzut ekranu przedstawia przykład używania nieautoryzowanego dostępu do pliku z hasłami (w tym zasymulowanym przykładzie plik z hasłami leży „katalog wyżej w katalogu data”:

Jak się przed tym bronić?? Otóż wystarczy filtrować dane wejściowe. Zakładając, że zmienna go przechowuje nazwę includowanego pliku należy filtrować niedozwolone znaki (np. znak ukośnika oznaczający wejście do innego podkatalogu, dwie kropki oznaczający katalog nadrzędny). Oto nieznacznie zmodyfikowany przykład z prymitywnym filtrowaniem znaków:

<?php
$go=$_GET['go'];
if ($go=='') $go='start.php';$find=array("..", "/", "\\");
$replace=array("", "", "");
$go=str_replace($find, $replace, $go);
if (!file_exists($go)) $go='start.php';
include("gora.php");
include("menu.php");
include($go);
include("dol.php");
?>

W powyższym przykładzie funkcja str_replace wyszukuje „niebezpieczne” znaki i je zastępuje pustym stringiem (czyli usuwa z stringa niebezpieczne znaki). Konkludując wprowadzając daną ../data/hasla.txt zmienna $go będzie przechowywać wartość: datahasla.txt (usunięte ukośniki i pary dwóch kropek uniemożliwiają funkcji include includowanie plików z innego katalogu).

Dodatkowo funkcja file_exits sprawdza, czy podany plik istnieje i jeśli nie istnieje, to załaduje domyślną stronę (start.php) dzięki czemu manipulując przy zmiennej $go gdy podamy nazwę nieistniejącego pliku nie pojawi się komunikat błedu.

Tagi: ,

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