Napisane: 28.02.2009, 19:54:36 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
exit raczej zabija skrypt... zamiast exit zrób return a tak przy okazji następnym razem wrzuć kod w znaczniki [ php ] a nie [ code ] i nastawiaj kilka flag wewnątrz funkcji żeby sprawdzić co w niej nawala |
Forum: PHP · Podgląd postu: #577755 · Odpowiedzi: 2 · Wyświetleń: 695 |
Napisane: 22.09.2008, 16:21:27 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
dorzuce może jeszcze swoje 3 grosze, w niektórych rozwiązaniach jest sugestia aby korzystać z określonego rozszerzenia np. class.php, że nazwa klasy była taka sama jak pliku, żeby ... Ja zrobiłem klasę która mapuje wskazany katalog, z opcjonalną flagą o rekursywności mapowania: tak wygląda przykładowy kod wykorzystujący klasę mapowania
Tym kodem mapujemy zawartość wszystkich plików w katalogu głównym i rekursywnie wszystkie pliki w katalogach core, modele, modul i sprawdzamy tokenizerem PHP czy w pliku są klasy PHP i ew. jakie, tworząc tablicę asocjacyjną i generując całą klasą autoloadera... Tu w sumie trochę przesadziłem lepiej by chyba było serializować i odserializować dane w autoloaderze, ale zrobiłem jak zrobiłem taki był mój pomysł, obróka tokenizerem nie była trudna, a dzięki niej jesteśmy niezależni czy ktoś ma jakieś swoje rozszerzenie php5, php6, php, php_cokolwiek :P, czy ma 2 klasy w pliku czy cokolwiek innego, wszystko wyciąga tokenizer i przyporządkowuję klasę do pliku Kod nie jest piękny, dość bałaganiarski tak mi się wydaję..., ale jeśli ktoś jest zainteresowany to podrzucę (możnaby rzec: mi działało ), chciałem jedynie zasygnalizować ideę..., ja chwilowo staram się pracować z symfony więc klasy nie rozwijałem... |
Forum: Object-oriented programming · Podgląd postu: #518748 · Odpowiedzi: 27 · Wyświetleń: 4 450 |
Napisane: 5.08.2008, 13:36:44 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
w kodzie wygląda że masz funkcje napisane przez tego kogoś do kodowania jak i odkodowania w pliku encdec.php co sugerowałaby sama nazwa... zapisz do pliku kod i odpal:
jeśli wyświetli się 'wiadomosc' to znaczy że to są funkcje do odkodowania i zakodowania i że działają skróty enc i dec wskazują że te funkcje właśnie do tego służą |
Forum: PHP · Podgląd postu: #501503 · Odpowiedzi: 7 · Wyświetleń: 1 588 |
Napisane: 10.01.2008, 15:45:25 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
tzn. Twoja forma tłumaczenia do mnie nie dociera (nie mniej wydaję mi się że bardzo źle zinterpretowałeś), ogólne założenie że rekurencja działa od środka jest mylne jak wywołujesz rekurencje w swoich programach to masz coś a'la
więc działa od zewnątrz wgłąb(sic!) a nie od środka na zewnątrz jak nie miałeś doczynienia z rekurencją to zobacz na wikipedii... => odrób lekcje czyli analizując moją regexp: Kod @<div>(?(?=</?div>)(?R)|.)+</div>@ @<div> - wiadomo... (?(?=</?div>)(?R)|.) dla uproszczenia => (?(a)b|c) w takiej postaci to znaczy jeśli a to dopasuj b w przeciwnym wypadku c a => (?=</?div>) b => (?R) c => . w wyrażeniu sprawdzającym chyba najczęściej używa sie asercji Cytat Kolejna część ma się równać </?div> natomiast w tym znak zapytania sprawdza czy zostało dopasowane </ i jeśli tak każe kontynuować chciałbym szczególną uwagę zwrócić na słowo dopasowane... w regexp kojarzy się ono z tym że jak to uroczo jest w dokumentacji opisane regexp "skonsumował" jakiś ciąg tutaj jednak mamy doczynienia z asercją, asercja sprawdza co jest w odpowiednim miejscu (zależnie od tego jakiej asercji użyjemy) jednak jej nie konsumuję... prosty przykład
zwróci false bo asercja nie dopasuję "a", a jedynie sprawdzi czy "a" znajduję się w żądanym przez asercje miejscu rekurencje już opisałem... może niezbyt wyraźnie... Cytat co do (?R) to jest to rekurencyjne zagnieżdżenie, teoretycznie to wygląda tak że cały zewnętrzny wzorzec (jeśli się nie mylę) powinien zostać wpisany w miejsce (?R) a zatem jeśli w regexp znajdzie się (?R) to parser (czy interpreter... nie wiem jak się przyjęło to nazywać) będzie dopasowywał od początku wyrażenie regularne... może przykład Cytat <div>bb<div>bbbb</div><div>b<div>bbbb</div>bbb</div>bb</div> wyrażenie dopasuje <div> tak jak to stwierdziliśmy i ponieważ dalej od miejsca w którym zaczyna nie widzi <div> lub </div> dopasowuję w kółko jeden jakikolwiek znak... gdy zobaczy <div> to ten fragment jest jakby odcinany i dopasowuję do niego od nowa całego regexp-a więc wycina sobie pogrubiony fragment: Cytat <div>bb<div>bbbb</div><div>b<div>bbbb</div>bbb</div>bb</div> i niejako sam w sobie robi:
tutaj bez problemu przechodzi po kolejnych "b" dopasowując po jednej literce a dalej napotyka problem bo mimo że ma dopasować jakąkolwiek literkę to nie może tego zrobić gdy ta literka zaczyna ciąg: </div> więc "+" zakończył swoje działanie i dopasowywany jest </div> z końcówki wyrażenia po czym wyskakuje z niego na wyższy poziom i dopasowuję reszte która mu została z całości: Cytat <div>bb<div>bbbb</div><div>b<div>bbbb</div>bbb</div>bb</div> mam nadzieję że dość jasno wytłumaczyłem... zakończyłem swój wykład o regexp może kiedyś napiszę kurs bo jest słabo opisany w sumie jednak polecam przyswoić dokumentacje do której jest link w manualu PHP |
Forum: PHP · Podgląd postu: #428795 · Odpowiedzi: 7 · Wyświetleń: 2 053 |
Napisane: 10.01.2008, 00:01:42 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
Kod (?>[^<]*) "znaczy połknij wszystkie znaki różne od < i nie oddawaj" przetestuj:
podobną właściwość... to jest w sumie chyba równoważne... a jak nie jest to nie wiem czym się różni będzie miało
regexp jak znajdzie "a+" we wzorcu to najpierw łyka wszystkie "a" które spotka, ale jak się okaże że zaraz po "a+" jest potrzebne "a", to jedno "a" "wypluje" z powrotem, aby można było resztę wzorca dopasować a++ jak i (?>a+) czy analogiczne konstrukcje nie pozwalają "wypluwać" mam nadzieje że dość jasno to opisałem.. starałem się... co do (?R) to jest to rekurencyjne zagnieżdżenie, teoretycznie to wygląda tak że cały zewnętrzny wzorzec (jeśli się nie mylę) powinien zostać wpisany w miejsce (?R) czyli jeśli twój wzorzec ma postać (to jedynie postać schematyczna... nie ma prawa działać...): Kod foo(?R)bar no to to się rekurencyjnie zagłębia w siebieKod foofoofoofoo(?R)barbarbarbar itp.w dokumentacji wyrażeń regularnych jest to dość słabo opisane i może dlatego nie udało mi się napisać regexp-a rekurencyjnego który by działał tak jak bym tego chciał... (trochę to pogięte... albo ja jestem głupi ) co do "wykorzystania w przeczeniu całej frazy" to tutaj używamy asercji negatywnych "patrzących do przodu"
mimo że pozwalam pojawić się wszystkim znakom => .+ To i tak nie dam sobie wmówić że jestem głupi :P generalnie polecam przeczytać dokumentację regexp (w sumie 16 stron) dość dobrze napisana (tylko ta rekurencja jakoś średnio...) najgorsze jest że wszystko jest podobne a mamy wyrażenia warunkowe, 4 rodzaje asercji, rekurencje, różne operacje na podciągach ciężko zapamiętać jak to się oznacza wszystko co do x masz rację... tutaj autor rozdzielał wszystko spacjami dla łatwiejszego czytania tych wszystkich nawiasów... jak wywalisz spacje to możesz również wywalić x PS. jak odkryjesz zasadę działania rekurencji we wzorcu to możesz to opisać będę wdzięczny EDIT: męczyłem, męczyłem i wymęczyłem, to działa chyba jak kod który podałeś
|
Forum: PHP · Podgląd postu: #428595 · Odpowiedzi: 7 · Wyświetleń: 2 053 |
Napisane: 8.01.2008, 00:35:54 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
hmmm wprawdzie nie słyszałem o takiej opcji... no ale jeśli chodzi o to kto pobrał dany obrazek no to tu można rozstrzygnąć adresując każdemu użytkownikowi obrazek inaczej czyli jeden dostanie obrazek na adres http://example.com/images/user1.jpg gdzie user1 byłbym jakimś kodem zapisanym w bazie jak np. na YT a całość na serwie mogła by być przekierowana na jeden plik... mod_rewrite... etc czyli: 1. generujesz maila z tokenem 2. wybierasz użytkownika z bazy 3. przypisujesz tokena użytkownikowi w bazie 4. wysyłasz maila 5. mail jest odebrany -> żąda obrazka z tokenem w nazwie z Twojego serwa 6. sprawdzasz w bazie komu przypisany był token 7. wysyłasz obrazek stały dla wszystkich 8. wiesz kto odebrał... całość działa na generowaniu linków aktywacyjnych do rejestracji w danym serwisie wyniki mogą być zafałszowane ze względu na to że nie wszystkie klienty mogą obsługiwać HTML |
Forum: PHP · Podgląd postu: #427796 · Odpowiedzi: 1 · Wyświetleń: 780 |
Napisane: 7.01.2008, 19:15:48 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
nie bardzo wiem co wykombinowałeś w kodzie z tego co wiem preg_match nie ma prawa zmienić stringa... może używasz preg_replace... jak sobie poradzić: w wyrażeniach regularnych masz możliwość podawania kodów w zapisie hex danych znaków... możesz je wypisać w ten sposób... doczytaj w dokumentacji regexp zalinkowanej w dokumentacji PHP co do offtopica to nie odrobiłeś zadania domowego... bo jest również mb_strlen... o której nie przeczytałeś... UTF ma pewną swoją składnie... i często składa się z 2 bajtów które są interpretowane jako 1 znak strlen nie wnika w kodowanie i widzi tylko pojedyncze znaki... PS. odrób lekcje: wiki -> UTF, manual PHP, dokumentacja regexp |
Forum: PHP · Podgląd postu: #427666 · Odpowiedzi: 6 · Wyświetleń: 1 443 |
Napisane: 7.01.2008, 18:47:07 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
zauważ że jest funkcja: mb_strtoupper" title="Zobacz w manualu PHP" target="_manual która jako drugi parametr przyjmuję kodowanie... czyli prawdopodobnie strtoupper nie jest pod tym względem zbyt bezpieczne... [m]preg_match[\m] zasadniczo nie zmienia zawatości stringa, sprawdza ona tylko zgodność w regexp i wyszukuję ew. podciągów... więc ze zmianą zawartości ma raczej niewiele wspólnego... ale dla pewności sprawdź co będzie gdy preg_match wyłączysz a strtoupper zostawisz i na odwrót... prawdopodobnie musisz użyć [m]mb_strtoupper[\m], ale ponieważ z tego co mówiłeś to nie masz tej funkcji (ani cąłej biblioteki)... no to jakiś odpowiednik musisz zaimplementować |
Forum: PHP · Podgląd postu: #427651 · Odpowiedzi: 6 · Wyświetleń: 1 443 |
Napisane: 6.01.2008, 18:34:24 | |
Grupa: Zarejestrowani Postów: 233 Dołączył: 3.06.2007 Ostrzeżenie: (0%) |
generalnie z tego co widzę jeśli masz formularz w jakimś kodowaniu (w tym wypadku UTF-8) i skopiujesz do niego jakąś zawartość to przeglądarka zadba o to żeby doszło to do Ciebie już w UTF (z tym że przeglądarka wie z nagłówków strony jakie kodowanie miała i jakie ma dostarczyć) ja wziąłem swoją stronkę w UTF i wpisałem coś z jakieś francuskiej strony z ISO-8859-1 i nie pokazały mi się szlaczki przeglądarka o to zadba gdy w kodowaniu z Twojej strony będą odpowiednie znaczki... co do samego wykrywania kodowania na podstawie tekstu..., funkcja którą podałeś mb_detect_encoding" title="Zobacz w manualu PHP" target="_manual, jako parametr przyjmuję listę języków, aby wiedzieć co najpierw za kodowanie ma wypluć... stąd wniosek że one magicznie nie stwierdzą Ci co to było za kodowanie z całą pewnością więc tak naprawdę wiesz niewiele o ISO wiesz że znaki od 7F do 9F są nieużywane... więc jeśli pojawi Ci się jakiś znak o kodzie w tym zakresie to wiesz że to nie iso... ale rozpoznać kodowań ISO między sobą już właściwie nie masz szans... musiałbyć mieć słowniki różnych języków i sprawdzać czy kolejne słowa tekstu się w nim znajdują (mając przy tym nadzieje że ludzie piszą bez błędów ortograficznych) ogólnie moim zdaniem nie ma tutaj zbyt wiele pola do popisu |
Forum: PHP · Podgląd postu: #427282 · Odpowiedzi: 6 · Wyświetleń: 1 443 |
Nowe odpowiedzi Brak nowych odpowiedzi Popularny temat (Nowe) Popularny temat (Brak nowych) |
Sonda (Nowe) Sonda (Brak nowych) Zamknięty temat Przeniesiony temat |
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 01:40 |