Edytuj swój profilRejestracja jest darmowaKalendarzZnajdź użytkownika
FAQ - pomocSzukajStrona główna
FPP BOARD > Off Topic > O niczym konkretnym w sumie > potrzebna pomoc z PHP
  Poprzedni Temat   Następny Temat
Autor
Temat    Wyślij nową wiadomość    Wyślij Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

potrzebna pomoc z PHP

JeloneK, piszesz tu jeszcze? Bo mam bardzo ważne pytanie.

Potrzebuję w PHP zadeklarować zmienną lokalną dla bloku. To wszystko.

Pytałem w wielu miejscach, wszyscy na to, że się nie da. Może ty oczyścisz PHP z zarzutów?

Żeby nie było niejasności, zmienna lokalna dla bloku wygląda tak:

code:
C if (1) { int foo; } /* foo już nie istnieje */
code:
Perl if (1) { my $foo; } # $foo już nie istnieje


"if (1)" można pominąć, blok też wtedy istnieje.

Myślałem, że wszystkie języki wywodzące się z Algola posiadają zmienne lokalne dla bloku. A wszystko wskazuje, że PHP nie posiada.

Do JelonKa i Maslava: jak możecie pisać w takim gównie? Bo ja wysiadam.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Zgłoś post do moderatora | IP: Zalogowane

Old Post 27-11-2006 19:08
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

Nie ma możliwości aby zmienna w if() była zmienną "lokalną".

A jaki masz ziomie masz konkretnie problem?

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 29-11-2006 21:28
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

Nie mam problemu tylko się wściekam.

Zdarza mi się czasem coś napisać w PHP bo Perl nie ma porządnego wsparcia dla HTTP. Ruby też nie, poza kombajnem Rails, który nie jest mi do niczego potrzebny. PHP przypomina strasznie Perla i C, ale odkrywam różne irytujące drobiazgi.

Nie ma punktów sekwencyjnych z C, chociaż przecinek zachowuje się tak samo w innych przypadkach.

Nie ma deklaracji zmiennych co wymaga ode mnie siedzenia po 10 minut szukając literówki.

Ma obsługę SQL poniżej przeciętnej. Perlowe DBI to wzór do naśladowania. W PHP za to muszę pisać "pg_escape_string" kilkadziesiąt razy, w DBI wystarczy podać jako parametry.

Nazwy funkcji to makaronizmy. Wyżej wymienione "*_escape_string" to tylko jeden z nich. Inne to "escapeshellargs" i "htmlspecialchars". Zrobiłem w rezultacie coś bardzo głupiego:

code:
function hesc($str) { return htmlspecialchars($str, ENT_QUOTES); }


bo nie mogłem zdzierżyć pisania tego samego makaronizmu 666 razy.

W niektórych dystrybucjach E_NOTICE jest domyślnie ustawionym warningiem (razem z display_errors) co wymagało ode mnie sprawdzania czy element tablicy asocjacyjnej istnieje przed użyciem zanim odkryłem "set_error_handler".

Osobne funkcje do pcre i eregów to masakra. Zamiast Perlowego "=~" muszę wpisywać te makaronizmy i pamiętać o eskejpowaniu różnych rzeczy zależnie od nawiasów.

rename() fallbackuje do kopiowania pliku, jeśli jest na innej partycji. Bardzo mądrze! Nie pozostawia to żadnego sposobu atomowej zmiany nazwy pliku. link() się nie liczy, bo razem z unlink() nie jest atomowy.

Nie widziałem anonimowych funkcji i zamknięć. Może są?

Na koniec wspomnę o errno dla operacji na plikach. Tak oczywista rzecz a nie da się sprawdzić. Wbrew pozorom, czasem TRZEBA wiedzieć czy to EEXIST czy ENOENT.

Podsumowując, nie polecam tego do niczego więcej niż Klikania Stronek WWW, najlepiej nie robiąc wcięć.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Edytowane przez weirdo dnia 03-12-2006 o godz. 08:48

Zgłoś post do moderatora | IP: Zalogowane

Old Post 03-12-2006 00:31
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

Ruby i Rails jest spoko to po pierwsze.

quote:
Ma obsługę SQL poniżej przeciętnej. Perlowe DBI to wzór do naśladowania. (...)



Oj Staszku. Nawet nie chciało Ci się pobuszować w manalu.

quote:
Nie ma punktów sekwencyjnych z C.(...)Nazwy funkcji to makaronizmy. (...) odkrywam różne irytujące drobiazgi.itd.itp


No to twój problem nie języka. Jak sam słusznie zauważyłeś nie jest to ani Perl ani C.

quote:
Nie ma deklaracji zmiennych co wymaga ode mnie siedzenia po 10 minut szukając literówki.


No to też nie wina języka że Ci się paluszki plączą.

quote:
W niektórych dystrybucjach E_NOTICE jest domyślnie ustawionym warningiem (razem z display_errors(...) zanim odkryłem "set_error_handler".


Brawo. Koniecznie odkryj też ini_set().

Sumując, obawiam się że irytujesz się dla samej sztuki irytowania się. Naprawdę nikt nie broni pisać Ci web-aplikacji w C.

Co do samego PHP, nie będę go bronił jako uber języka bo ma swoje wady, ale od wersji 5 rozwija się w bardzo fajnym obiektowym kierunku. Są fajniejsze języki (Ruby), ale jeść coś trzeba.

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 03-12-2006 16:53
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

> No to też nie wina języka że Ci się paluszki plączą.

Dobry język pozwala na wymaganie deklaracji zmiennych i wykrywa literówki już w czasie parsowania kodu.

Może przy klikaniu CMS-ów nie sprawia to problemu, ale na CMS-ach i innych blogach pisanych przez nastolatków za grosze świat się nie kończy.

> Sumując, obawiam się że irytujesz się dla samej sztuki irytowania się.
> Naprawdę nikt nie broni pisać Ci web-aplikacji w C.

Każdy język z którego korzystam posiada jakieś unikalne zalety. Chociażby:

- C jest dobre do pisania mniej lub bardziej lowlevelowego kodu; posiada niewiele praktycznych reguł i jest świetnie przemyślane
- Perl nadaje się świetnie do parsowania tekstu i skomplikowanych struktur danych; posiada takie ciekawe zabawki jak auto-vivification, map(), zamknięcia, bloki BEGIN i END jak w awku, własne regexpy, które zostały przeniesione do C, PHP, Ruby'ego, Lispa i pewnie gdzieś jeszcze; sporo modułów, które zazwyczaj są przyzwoitej jakości
- Ruby ma czystą i prostą składnię, umie praktycznie to samo co Perl poza paroma drobiazgami jak niedopracowane moduły z stdlib i niewielką ilością innych

PHP nie posiada jakichkolwiek zalet poza dziecinnie prostą obsługą HTTP i HTML-a. Proceduralny interfejs nie ma nawet możliwości tworzenia wyjątków. Wszystko poza HTTP i HTML-em jest toporne i czasochłonne.

Sądzę też, że ktoś kto nie liznął programowania a zaledwie klika stronki WWW nie powinien wypowiadać się na temat programowania w ogóle.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Zgłoś post do moderatora | IP: Zalogowane

Old Post 07-12-2006 05:56
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

quote:
Wszystko poza HTTP i HTML-em jest toporne i czasochłonne.


Ciężko mieć o to pretensje do języka który powstał jako "Personal Home Page Tools"

quote:
Sądzę też, że ktoś kto nie liznął programowania a zaledwie klika stronki WWW nie powinien wypowiadać się na temat programowania w ogóle.


Nie roszczę sobie sobie prawa do bycia PROGAMISTĄ bo doskonale zdaję sobie sprawę że od pisanie w PHP z "prawdziwym" programowaniem nie ma wiele wspólnego. Tak sobie robię z ciebie takie małe podśmie****ki bo zachowujesz się jakbyś tego nie wiedział i lamentujesz że "proceduralny interfejs nie ma nawet możliwości tworzenia wyjątków" .

quote:
innych blogach pisanych przez nastolatków za grosze świat się nie kończy.


Niewiem czy piszesz to złośliwie czy poprostu poprostu nie masz pojęcia o branży/rynku. Bo masz rację że świat na blogach się nie kończy.

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 07-12-2006 12:00
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

quote:
(...) bo doskonale zdaję sobie sprawę że od pisanie w PHP z "prawdziwym" programowaniem nie ma wiele wspólnego


Może takie małe sprostowanko do mojej wypowiedzi bo nie pomyślałem zanim napisałem.
Pisanie kodu proceduralnego rzeczywiście ale czy pisanie obiektowe z wykorzystaniem "patternów" można nazwać "nie liźnięciem programowania"?

Napisz Staszku że nie to mi się miło zrobi.

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 08-12-2006 09:46
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
[FPP]glan
fpp.pl
Administrator




Zarejestrowany: Sep 2001
Lokalizacja: Gdańsk

if(){
$zmienna = '';

bla bla bla ifowe

unset($zmienna);
}

koniec pieprzenia

---

i jeszcze co do "Proceduralny interfejs nie ma nawet możliwości tworzenia wyjątków" spojrz na specyfikacje i dokumentacje php5.
a) przeszlo juz w obiektowy interfejs,
b) dzialaja juz wyjatki (try i catch sie klania).

Zgłoś post do moderatora | IP: Zalogowane

Old Post 08-12-2006 22:25
Kliknij tutaj aby zobaczyć profil [FPP]glan Kliknij tutaj by wysłać e-maila do [FPP]glan Znajdź więcej post'ów przez  [FPP]glan Dodaj [FPP]glan do Listy Znajomych Kliknij tutaj aby wysłać [FPP]glan prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

maślak napisał:
> Ciężko mieć o to pretensje do języka który powstał jako "Personal Home
> Page Tools"

Jeśli istnieją "oficjalne" moduły takie jak pcntl a język nie posiada możliwości sprawdzenia errno po operacjach na plikach [1], coś jest nie tak.

[1] "posix_errno" obsługuje jedynie funkcje z przedrostkiem "posix".

> Oj Staszku. Nawet nie chciało Ci się pobuszować w manalu.

A to chyba dopiero od 5.1 jest standardowym modułem. Nie śledzę na bieżąco nowinek w PHP a manual czytałem wielokrotnie.

> Ruby i Rails jest spoko to po pierwsze.

A mnie Ruby zniechęcił paroma drobiazgami:

* Nie da się pisać szybko i bezproblemowo. Porównaj przykłady:

code:
% perl -le 'print length substr("foo123", 42)' 0
code:
% ruby -e 'puts "foo123"[42 .. -1].length' -e:1: undefined method `length' for nil:NilClass (NoMethodError)


Dodawać undefined_method zwracające nil dla NilClass to tak jakoś nieelegancko, nie wspominając już o współkodowiczach, którzy by musieli się dostosować.

* Wyjątki wypluwane, szczególnie przez standardowe klasy to jakoś dziwnie, przynajmniej dla mnie. Lubiłem sobie porównać wartość z undef, NULL, nil czy jakąś inną przyjętą. Błąd pobrać z errno bądź z innego ustalonego miejsca. W Rubym nie ma możliwości nie korzystania z wyjątków, korzystając z masy klas trzeba znać ich hierarchię wyjątków wspak i po rumuńsku. Sprowadza się to do:

* Mało jest błędów czasu kompilacji, nawet głupie odwołanie się do nieistniejącej zmiennej jest wykrywane w czasie przejścia interpretera przez daną ścieżkę. To wbrew pozorom problem - pisząc duży skrypt wzrastają szanse na istnienie ścieżki z nieistniejącą zmienną która jest używana bardzo rzadko. Taki błąd może nawet przez parę wydań pozostać niezauważony. Perl wykrywa wszystkie odwołania do nieistniejących zmiennych w czasie kompilacji.

code:
% ruby -e 'def foo(x); if x; puts x; else puts foo123; end; end; foo 1; foo nil' 1 -e:1:in `foo': undefined local variable or method `foo123' for main:Object (NameError) from -e:1


Hint: nie wyświetliłoby się "1" gdyby sprawdzanie nieistniejących zmiennych było przeprowadzane w czasie kompilacji.

* Biblioteki nie są tak dojrzałe jak w Perlu. Moduł Curses, z którego miałem nieprzyjemność korzystać traktuje wyjście niektórych komend jako unsigned int gdy powinien jako int. W rezultacie stała ERR (-1) jest rozpoznawana jako 4294967295 na mojej architekturze. Sama stała nie jest eksportowana przez moduł. Moduły Perla są bardzo dojrzałe, ten od curses też.

* Kiepsko z dokumentacją do modułów. Chociażby wyżej wymieniony Curses czy OpenSSL.

Podsumowując, Ruby to bardzo fajny język. Za parę lat może i przegoni Perla.

> Pisanie kodu proceduralnego rzeczywiście ale czy pisanie obiektowe z
> wykorzystaniem "patternów" można nazwać "nie liźnięciem
> programowania"?

Używanie formalnych design patterns nie świadczy o jakości kodu. Za "liźnięcie programowania" uznałbym raczej znajomość języków o paradygmatach zarówno proceduralnych, strukturalnych, obiektowych jak i funkcjonalnych. Znajomość C++, Javy i PHP nie czyni z człowieka programisty.

Widziałem sporo kodu w różnych językach z czego PHP wypada zdecydowanie najgorzej. Najczęściej popełniany i to do tego karygodny błąd to nie sprawdzanie na możliwość błędu po kontaktach z bazami danych i innych wywołaniach systemowych. O zgrozo!

Nie wiem jak wam się chce w tym pisać kod bez tworzenia zamknięć. Nie wyobrażam sobie pisania kodu w Rubym czy Perlu bez nich.

glan nasmarował:
> i jeszcze co do "Proceduralny interfejs nie ma nawet możliwości
> tworzenia wyjątków" spojrz na specyfikacje i dokumentacje php5.

To są łobiektowe wyjątki. Już samo
code:
throw new Exception
zalatuje łobiektowością przez słowo kluczowe "new".

Proceduralne wyjątki to słowo kluczowe "goto". Którego PHP nie posiada. Dzięki goto nie potrzeba rozszerzania "break" i "continue" o możliwość ominięcia n bloków. Zaraz, przecież w PHP nie można podać z ilu bloków "continue" ma wyjść.

PS najbardziej to się liczy i tak pomysł. Odwalać CMS-y (którym to przykładem rzucam na okrągło) można i do śmierci, ale fajniej jest napisać coś przydatnego i unikalnego. Albo dopisać do używanego programu nową funkcję i przesłać autorowi diffa.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Edytowane przez weirdo dnia 09-12-2006 o godz. 10:02

Zgłoś post do moderatora | IP: Zalogowane

Old Post 09-12-2006 00:09
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

bucior naskrobał:

code:
if(){ $zmienna = ''; bla bla bla ifowe unset($zmienna); }


> koniec pieprzenia

Zakresy w Perlu mają jeszcze jedną ważną zaletę. Deskryptory wszelakie (Jakiekolwiek IO, połączenia do baz danych, same zapytania) ekspirują razem z zakresem. IO jest zamykane, zapytania SQL finalizowane, połączenie do bazy danych rollbackowane i zamykane.

Przykład jest prosty:

code:
while (1) { my $fd; $fd = open $fd, "/dev/null" or die "$!" }


Wcale nie wywali się przez brak deskryptorów.

PS właśnie zauważyłem coś niesamowitego. PHP nie ma dup2(), nawet w module POSIX :-)

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Zgłoś post do moderatora | IP: Zalogowane

Old Post 09-12-2006 03:09
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

quote:
PS najbardziej to się liczy i tak pomysł. Odwalać CMS-y (którym to przykładem rzucam na okrągło) można i do śmierci, ale fajniej jest napisać coś przydatnego i unikalnego. Albo dopisać do używanego programu nową funkcję i przesłać autorowi diffa. [/B]


Twoja geekowska "postawa" jest bardzo słuszna bo do zdolnych świat należy. Niewiem czy pracowałeś "w zawodzie" jako developer z szefem i project menagerem nad głową. W takiej sytuacji nie ma czasu i nie wypada męczyć Wacława nad cudownym kodem. Aplikacja zazwyczaj ma działać na wczoraj. Niestety geekować da się tylko po godzinach.

No chyba że tylko ja tak mam, a takich młodych zdolnych jak ty headhunterzy łapią do fajnych firm z gdzie na każdy projekt masz pół roku i codziennie masz półgodzinną przerwę na lunch. To zazdroszczę

quote:
W Rubym nie ma możliwości nie korzystania z wyjątków, korzystając z masy klas trzeba znać ich hierarchię wyjątków wspak i po rumuńsku.


Proszę, wydrukuj sobie i powieś nad łóżkiem.


Ja po Rubym poruszam się na poziomie Railsów ale z tego co obserwuję, warto zgłębić temat bo nawet w polsce tworzy się niezły buzz. A gdzie jest buzz tam są pieniądze inwestorów do palenia

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 09-12-2006 23:06
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
[FPP]glan
fpp.pl
Administrator




Zarejestrowany: Sep 2001
Lokalizacja: Gdańsk

quote:

Niewiem czy pracowałeś "w zawodzie" jako developer z szefem i project menagerem nad głową. W takiej sytuacji nie ma czasu i nie wypada męczyć Wacława nad cudownym kodem. Aplikacja zazwyczaj ma działać na wczoraj.



tia.. zwlaszcza jeszcze jak PM i szef to jedna osoba... ktora jeszcze zmienia wszystko co chwila...

Zgłoś post do moderatora | IP: Zalogowane

Old Post 10-12-2006 10:17
Kliknij tutaj aby zobaczyć profil [FPP]glan Kliknij tutaj by wysłać e-maila do [FPP]glan Znajdź więcej post'ów przez  [FPP]glan Dodaj [FPP]glan do Listy Znajomych Kliknij tutaj aby wysłać [FPP]glan prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

maślak nastukał:
> Proszę, wydrukuj sobie i powieś nad łóżkiem.

I w rezultacie trzeba "rescue" dla prawie każdej operacji. Porównaj z wycinkiem kodu na końcu mojego posta.

> Niewiem czy pracowałeś "w zawodzie" jako developer z szefem i project
> menagerem nad głową.

Aplikacyjek dla klientów nie zwykłem pisać z racji bycia adminem. Co napiszę udostępniam na licencji BSD i jak dotąd kilka osób dziękowało mi za nie.

Aplikacyjkę napisałem jedną, panel kliencki do hostingu. Z tym jest problem taki, że wymaga sporo operacji z uid 0. W rezultacie, panel pisany w pehapcu wywołuje suidy w C, które mu ufać nie mogą. Za wiele roboty to nie było, ale trzeba było się dobrze zastanowić na jakie sposoby skompromitowany użytkownik "panel" mógł próbować nadużyć przywileje wywołując suidy. I jak użytkownik mógł spreparować drzewo katalogów.

Najwięcej nawściekałem się na PHP, w którym nie dało się pisać tak:

code:
if open fd == -1 goto bail1 if read fd == -1 goto bail2 if open fd2 O_WRONLY|O_CREAT|O_EXCL == -1 goto bail2 if write fd2 == -1 goto bail3 [...] return 0 [...] bail3: unlink fd2 close fd2 bail2: close fd bail1: return -1


z racji konieczności przeprowadzania czasem operacji na plikach. Za to trzeba było pisać tak:

code:
if open fd == -1 return -1 if read fd == -1 close fd return -1 if open fd2 O_WRONLY|O_CREAT|O_EXCL == -1 close fd return -1 if write fd2 == -1 close fd close fd2 unlink fd2 return -1


co przyprawiało mnie o dreszcze :-)

> W takiej sytuacji nie ma czasu i nie wypada
> męczyć Wacława nad cudownym kodem. Aplikacja zazwyczaj ma działać
> na wczoraj. Niestety geekować da się tylko po godzinach.

Mój kod nie jest idealnie ustrukturyzowany i nie posiada odpowiednich metod abstrakcji, ale nie znoszę:

1) nie sprawdzania wyniku wywołań systemowych
2) nie sprawdzania podanych przez użytkownika danych na metaznaki, które później są przekazywane do "sh -c" exec() w php czy jako zapytanie SQL.
3) nie dbanie o atomowość i jednoczesność przy operacjach na plikach.

Nie każdy kod musi być idealnie napisany, ale niektóre gatunki partactwa jak wyżej wymienione to szczyt szczytów :-)

Nawiązując do 3): z SQL atomowość i jednoczesność nie jest problemem, nawet jeśli zna się go w tak niewielkim stopniu jak ja. Ostatnio pisałem prostą bazę SQLite na hashe md5 obrazków dołączanych w spamie. Tak jak kiedyś męczyłem się z operacjami na plikach, tak w SQLite mogę zrobić:

code:
foreach my $file (@ARGV) { [...] my $tran = tran_start($dbh) or goto bail; { my ($ret) = query_fetch($dbh, q#SELECT rowid FROM sig where md5 = ? AND size = ?#, $md5, $size); defined $ret or goto bail; if ($ret) { $sigid = $ret->{'rowid'}; } else { query_do($dbh, q#INSERT INTO sig (md5, type, whitelistp, size) VALUES (?, ?, ?, ?)#, $md5, INDEX_IMAGE, 0, $size) or goto bail; my ($fields) = query_fetch($dbh, q#SELECT rowid FROM sig WHERE md5 = ? AND (? IS NULL OR ? = size)#, $md5, $size, $size); defined $fields or goto bail; unless ($fields) { warn "can't happen: stored entry doesn't exist"; goto bail; } $addp = 1; $sigid = $fields->{'rowid'}; } my ($lcount) = query_fetch($dbh, q#SELECT COUNT() FROM log where sig = ? AND log = ?#, $sigid, $path) or goto bail; if ($lcount->{'COUNT()'} == 0) { query_do($dbh, q#INSERT INTO log (sig, time, log) VALUES (?, ?, ?)#, $sigid, time, $path) or goto bail; } } tran_commit($dbh) or goto bail; $addcnt++ if $addp; next; bail: $failcnt++; do_nothing: tran_rollback($dbh) if defined $tran;


Cud-miód normalnie, no.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Edytowane przez weirdo dnia 10-12-2006 o godz. 13:23

Zgłoś post do moderatora | IP: Zalogowane

Old Post 10-12-2006 12:40
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
MaslaV
koduję bezwzrokowo



Zarejestrowany: Mar 2001
Lokalizacja: Łomianki Fabryczne

http://blog.rightbrainnetworks.com/...me-we-broke-up/


W sumie po ponad 2 miesi?cach mocnego poznawania Rubiego i zabawy railsami przyznaj? ?e Staszek ma racje. Php ??ie.

__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 18-02-2007 23:43
Kliknij tutaj aby zobaczyć profil MaslaV Kliknij tutaj by wysłać e-maila do MaslaV Znajdź więcej post'ów przez  MaslaV Dodaj MaslaV do Listy Znajomych Kliknij tutaj aby wysłać MaslaV prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

quote:
Napisane oryginalnie przez MaslaV
http://blog.rightbrainnetworks.com/...me-we-broke-up/W sumie po ponad 2 miesi?cach mocnego poznawania Rubiego i zabawy railsami przyznaj? ?e Staszek ma racje. Php ??ie.


Spróbuj też Lispa. Uczę się go od paru tygodni za sprawą wyśmienitej książki i jestem pod wielkim wrażeniem.

Jak na język funkcyjny przystało, sporo opiera się na funkcjach wyższego porządku i naturalnie obsługa tychże jest o wiele lepiej rozwinięta niż w Perlu czy Rubym. map() i grep() z obu to Lispowe odpowiednio MAPCAR i REMOVE-IF-NOT

Co lepsze, za pomocą makr ma się możliwość kontrolowania ewaluacji parametrów czy nawet ich destrukturyzacji. W C/C++ makra podstawiają tekst, w Lispie rozszerzenie makra (generowane w czasie kompilacji) jest tworzone przez kod w Lispie i wykonywane w czasie działania programu. Banalny przykład:

code:
(defmacro verbose-eval (&body clauses) `(progn ,@(loop for i in clauses collecting `(format t "~a = ~a~%" ',i ,i))))


I jeszcze jeden głupi, deklaracja zmiennych instancji po prostu podając ich nazwy:

code:
(defun generate-class (slots) (loop for i in slots for j = (intern (symbol-name i) :keyword) collect (list i :initarg j :initform nil))) (defmacro create-class (name slots) `(prog1 (defclass ,name () ,(generate-class slots)) (defmethod print-object ((object ,name) stream) (print-unreadable-object (object stream :type t) (loop for i in (quote ,slots) do (when (slot-value object i) (format stream "~a: ~a " i (slot-value object i)))))))) [...] (create-class nick (name host chanop-p halfop-p voice-p mode-char server))



Lepszy to możliwość tworzenia funkcji sterowania przepływem wedle uznania.

Funkcje uogólnione to też fajna sprawa. W przeciwieństwie do "zwykłych" metod, o wywołaniu takiej a nie innej funkcji może decydować więcej parametrów. Sam nie przepadam za OOP, ale tobie by się pewnie podobały. Jest obsługa wyjątków, ale też restartów (kod głębiej na stosie decyduje o działaniu wywoływanej funkcji w wyjątkowej sytuacji).

IDE SLIME jest w pytę, można z nim pracować bezpośrednio na działającym interpreterze Lispa, wprowadzając do niego definicje w locie i testując dopiero co wpisany kod. Przyjemne jest pokazywanie "w locie" listy argumentów funkcji, makroekspansja i dostęp do dokumentacji jednym klawiszem :-)

Lisp, najlepszy jak do tej pory język programowania, spodoba się chyba każdemu, o ile tylko przezwycięży strach przed nawiasami.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Edytowane przez weirdo dnia 25-02-2007 o godz. 08:27

Zgłoś post do moderatora | IP: Zalogowane

Old Post 25-02-2007 08:03
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
[FPP]glan
fpp.pl
Administrator




Zarejestrowany: Sep 2001
Lokalizacja: Gdańsk

hm, a probowaliscie cos robic w pythonie?

Zgłoś post do moderatora | IP: Zalogowane

Old Post 28-02-2007 21:35
Kliknij tutaj aby zobaczyć profil [FPP]glan Kliknij tutaj by wysłać e-maila do [FPP]glan Znajdź więcej post'ów przez  [FPP]glan Dodaj [FPP]glan do Listy Znajomych Kliknij tutaj aby wysłać [FPP]glan prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
weirdo
kontemplator bytu



Zarejestrowany: Jun 2001
Lokalizacja:

quote:
Napisane oryginalnie przez [FPP]glan
hm, a probowaliscie cos robic w pythonie?


Ja bym nawet chętnie i coś napisał, ale nikt nie potrafi mi wyjaśnić jak użyć przypisania (do zmiennej) w warunku instrukcji sterowania przepływem.

__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);

Zgłoś post do moderatora | IP: Zalogowane

Old Post 01-03-2007 11:39
Kliknij tutaj aby zobaczyć profil weirdo Kliknij tutaj by wysłać e-maila do weirdo Znajdź więcej post'ów przez  weirdo Dodaj weirdo do Listy Znajomych Kliknij tutaj aby wysłać weirdo prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
nea*1337
Ciota komputerowa



Zarejestrowany: Apr 2001
Lokalizacja: $this ->

Re: potrzebna pomoc z PHP

quote:
Napisane oryginalnie przez weirdo
(...)

Myślałem, że wszystkie języki wywodzące się z Algola posiadają zmienne lokalne dla bloku. A wszystko wskazuje, że PHP nie posiada.

Do JelonKa i Maslava: jak możecie pisać w takim gównie? Bo ja wysiadam.



O MUJ BORZE! Uważaj, bo kiedyś jeszcze będziesz chciał coś zrobić w javascripie, i odkryjesz że są na świecie języki obiektowe w których nie deklaruje się klas.

__________________

http://wow.allakhazam.com/profile.html?310690
Po ilu critach ty się uśmiechniesz?
Frozen do expansion packa.

Zgłoś post do moderatora | IP: Zalogowane

Old Post 03-03-2007 23:51
Kliknij tutaj aby zobaczyć profil nea*1337 Kliknij tutaj by wysłać e-maila do nea*1337 Znajdź więcej post'ów przez  nea*1337 Dodaj nea*1337 do Listy Znajomych Kliknij tutaj aby wysłać nea*1337 prywatną wiadomość  Edycja/Kasowanie Posta    Odpowiedź
Wszystkie czasy są EU (PL). Aktualna godzina 23:05.    Wyślij nową wiadomość    Wyślij Odpowiedź
Poprzedni Temat   Następny Temat
[ Pokaż wersje do druku | Wyślij tą stronę do przyjaciela! | Otrzymuj informacje o aktualizacji tego tematu ]

Szybkie wybieranie:
Oceń Dyskusje:

Reguły obowiązujące na boardzie:Kto może czytać board'a? Każdy zarejestrowany i niezarejetrowany użytkownik.
Kto może zakładać nowe tematy? Każdy zarejestrowany użytkownik.
Kto może pisać odpowiedzi? Każdy zarejestrowany użytkownik.
Zmiany: Post'y mogą być edytowane i kasowane przez ich autorów.
Posty: kod HTML jest OFF. Uśmieszki są ON. vB code jest ON. [IMG] jest ON.
 


Zajrzyj na F·P·P · N·E·W·S
po więcej news'ów ze świata gier FPP.

< Kontakt - f·p·p · b·o·a·r·d >

SERWISY
fpp.pl | avp.fpp.pl | avp.fpp.pl/ogl | bia.fpp.pl | bhd.fpp.pl | cgl.fpp.pl | chrome.fpp.pl | cs.fpp.pl
cod.fpp.pl | cz.fpp.pl | doom3.fpp.pl | duke.fpp.pl | ghostrecon.fpp.pl | halflife.fpp.pl halo.fpp.pl | j2k.fpp.pl
moh.fpp.pl | of.fpp.pl | swbf.fpp.pl | quake.fpp.pl | quake2.fpp.pl | quake3.fpp.pl | unreal.fpp.pl | redfaction.fpp.pl
sof.fpp.pl | rtcw.fpp.pl | tribes2.fpp.pl | bhd.fpp.pl

ZASOBY
news.fpp.pl | cgl.fpp.pl | battlenet.pl | gry-video.pl | g4ce.pl UrbanTerror.pl



board.fpp.pl
Podłącz nasz baner

© 2000 - 2004 fpp productions