pejotr

Ten użytkownik nie wpisał jeszcze żadnych informacji o sobie.

Strona domowa: http://www.piotr.doniec.eu


Wpisy pejotr

iis_perdirectoryvalues

Indywidualne ustawienia php dla każdej witryny na serwerze IIS i Windows 2008

Problem jak najbardziej z życia wzięty. Na serwerze znajdują się strony kilku użytkowników. Żaden z nich nie chciałby aby ktokolwiek oprócz niego i administratora miał dostęp do plików jego witryny. Gdyby problem powstał w środowisku działającym pod kontrolą Linuxa problem rozwiązałby się w kilka chwil, poprzez odpowiednie ustawienie właścicieli katalogów i praw dostępu. Jednak wspomniana sytuacja zaistniała pod Windows 2008.
Na pierwszy ogień poszło ustawienie parametru open_basedir w pliku konfiguracyjnym PHP. Ograniczyło to możliwość odczytu includowania i innych tego typu operacji tylko do wymienionych katalogów. Nadal jednak pozostał problem odczytu plików nawzajem przez użytkowników. Ze strony należącej do uzytkownia A np.: c:\Sites\A\1.php bez problemy można odczycztać czy zaincludowac sobie stronę użytkownika B c:\Sites\B\tajne.txt co oczywiście jest nie do przyjęcia. Z pomocą przyszła możliwość ustawienia parametrów PHP dla każdego folderu niezależenie. Aby z tego skorzystać należy utworzyć w rejestrze nowy klucz w gałęzi HKLM/Software/PHP/Per Directory Values/c/Sites/ czyli np. HKLM/Software/PHP/Per Directory Values/c/Sites/A i umieścić tam nową wartość typu string o nazwie odpowiadającej parametrowi na który chcemy wpłynąć i wartości którą taki parametr ma przyjąć. W przypadku wyżej wspomnianego problemu wyglądałoby to tak:

Od tego momentu właściciel strony c:\Sites\A jest ograniczony tylko do własnego katalogu. Wadą tego rozwiązanie jest niestety konieczność utworzenia takich wpisów dla wszystkich stron znajdujących się na serwerze. Jednak (1) w tym wypadku można sobie było na to pozwolić (2) rozwiązanie jest łatwe we wdrożeniu a żadne inne nie przyszło mi do głowy. Chętnie poznam inne metody, może bardziej eleganckie, na osiągnięcie podobnego rezultatu.

VIM, spacje zamiast wcięć

Charakterystyczną cechą języka Python jest oddzielanie bloków kodu za pomocą wcięć. Z tego powodu są one niezmiernie istotne, a szukanie błędu powstałego przez źle umieszczone wcięcie, jeśli nie jest sygnalizowane przez interpreter może być bardzo czasochłonne a czasami wręcz frustrujące. Jakiś czas temu spotkałem się z takim problemem, który wynikł z używania 2 edytorów na 2 różnych maszynach. Na Windows korzystałem zamiennie z Vim oraz Programmers Notepad (tab = 4 spacje), pod linuxem wyłącznie z Vim bo tylko na tyle pozwalał interface konsolowy.
W pewnym momencie doszło do kolizji. Z jakiegoś powodu część wcięć przesunęła się w lewo – czyli znikły. Na całe szczęście 90% błędów zostało wykrytych przez interpreter. Od razu zaznaczam że nie przeprowadziłem pełnej analizy problemu, ale coś mi podpowiadało że to wina Tab w Vim. Poniżej przedstawiam w jaki sposób zamieniać wszystkie tabulacje na 4 spacje. Komendy można umieścić w .vimrc (linux) czy też w _vimrc jeśli korzystamy z Windows:

set tabstop=4
set shiftwidth=4
set expandtab

Na sam koniec warto dodać, że mimo iż Vim może być postrzegany jako stary edytor, trudny w użyciu a posługują się nim tylko starzy wyjadacze-programiści z poprzedniej epoki, to ma on wiele funkcji których nie oferuje nawet Notepad++, a programowanie bez odrywania rąk od klawiatury jest o wiele mniej męczące. Polecam cheatsheet: http://www.qitty.net/lnx/vim-cheatsheet.png

Scons – alternatywa dla Make, Qmake i podobnych

Scons jest oprogramowaniem którego zadaniem jest ułatwienie budowania binarnej wersji napisanego kodu. Twórcy zachwalają swoje dzieło jako między platformowe, łatwiejsze w użyciu i szybsze. Bazuje na Pythonie i dlatego postanowiłem się nim trochę zainteresować.
Pierwsze próby zakończyłem sukcesem. Co mi się bardzo spodobało to możliwość wyboru kompilatora. Mając do dyspozycji g++ z MinGW oraz Visual C++ Compiler, można zadecydować który z nich ma zostać użyty.
Najprostszy plik z instrukcją zdudowania programu to 1 linia:

Program('main.cpp')

Na Windows domyślnie zostanie wykorzystany (o ile dostępny) kompilator Microsoftu. Jeśli jednak chcemy użyć g++, wystarczy dopisać jeszcze jedną linię:

env = Environment(tools = ['mingw'], CC = 'gcc', CCFLAGS = '-O2')
env.Program('main.cpp')

Piewsze lody przełamane, kolejne próby będą sprawdzały łatwość dołączania zewnętrzych bibliotek jak boost czy qt.