Tworzenie kont, katalogów i plików

0

Witam, mam pewne problemy z tym, że jak tworzę konto na stronie, to tworzą mi się katalogi w /profiles/$username i tam w nim odpowiednio /images i /videos np. Tworzę jeszcze plik index.php w katalogu /profiles/$username i on ma za zadanie scalać wszystkie dokumenty w katalogu użytkownika, jak i informacje. Teraz pytanie jest takie, a skąd index.php będzie wiedział jakie dane pobrać, skoro chcę użyć stałego szablonu, który będzie dodawać ten sam plik, za każdym razem, gdy ktoś utworzy konto? No bo tutaj jest problem, bo np. jak pod artykułem ktoś napisze komentarz, pobiorę nazwę użytkownika i link nakieruję na /profiles/$username z tablicy, to skąd ten index wie jakie dane pobrać z bazy? Czy to w ogóle dobry pomysł na budowanie bazy użytkowników?

0

To co wymyśliłeś to porażka...
Wyobraź sobie że chcesz dokonać małej modyfikacji pliku index.php i masz 500 kont xD jak chcesz to zrobić wiedząc że w index.php masz jakieś dane statyczne profilowane pod $username.
Powiedz mi skąd wziĄłeś ten pomysł, a jeżeli chcesz mojej rady do dane o userach trzymaj w SQL'u albo w plikach tekstowych jeżeli nie masz db, co do budowy katalogów może być tyko w nich trzymaj takie suche dane jak obrazki video etc a nie pliki wykonywalne bo jak przyjdzie co do zmian w nich to się pogubisz poza tym łatwiej miec jeden plik 3kb kodu niż 500x2kb chodzi mi głównie o miejsce jakie może to zajmować.
I wyjaśnij mi co znaczy u ciebie "scalać", bo nie mam pojęcie co ty chcesz zrobić z plikami w tych katalogach userów

0

Nigdy, przenigdy nie duplikuj kodu! Wyobraź sobie, że będziesz mieć kilkaset kont i kilkaset plików index.php i będziesz chciał poprawić jakiś błąd...
Wszystkie informacje o użytkowniku trzymaj w bazie danych, po zalogowaniu się trzymaj w sesji identyfikator usera, ewentualnie jakieś podstawowe dane o nim.
Nie trzymaj repozytorium z plikami w wielu miejscach. Utwórz jeden katalog na repo ze zdjęciami i filmami, a w nim zagnieżdżone kilka poziomów podkatalogów; ścieżka wewnątrz repo obliczana na podstawie identyfikatora danego medium z bazy danych, np. pocięty kawałek md5(id) -> /repo/media/3e/f4/12/5a/cd/50/efabcde4321.flv, albo od razu zapisywana cała w bazie (oczywiście sama ścieżka względna). Jeśli tak nie zrobisz, to pomyśl jak to będzie wyglądać dla dziesiątek tysięcy użytkowników, kiedy samo wylistowanie katalogów userów będzie zajmowało wieki.

0

Jego pomysł jest zły ale ja wiem jak go choć troszkę polepszyć. W każdym folderze gdzie jest index.php nie wpisuj tego samego kodu tylko dołącz za pomoca require_once("") plik główny który będzie "slacał" dane z folderu. Ale to i tak nie zmieni tego że będzie to więcej miejsca zajmować.

0
hzmzp napisał(a):

W poprzednim temacie także napisałem, że moja wiedza jest na niskim poziomie z programowania jeśli chodzi o php i sql, a kolejny raz podnietę wywalasz z porażką, masakrą etc. Specjalie zapytałem się Was, czyli osób z doświadczeniem, czy to dobry pomysł. Napisałem, że skoro dane o użytkownikach będę pobierać do $username, z formularza o którym pisałem w poprzednim temacie (też mi w nim odpisałeś, żeby nie było), to chyba jest to oczywiste, że będą użytkownicy w bazie. No tak, dlatego zapytałem się o tworzenie katalogów i pomyślałem, że skoro będą wczytywać to samo, to czy dałoby radę wrzucić do katalogu z profilem index.php, ale pomyślałem, że skąd będzie wiedzieć co czytać do danego użytkownika ;) Chodzi mi o to z tym scalaniem, że jest plik index w katalogu profilowym, i on sobie scala z bazą danych, inf. dane o użytkowniku, wsadza zdjęcia itp. i to komponuje w całość.

0
ŁF napisał(a):

To w takim razie najlepiej byłoby zrobić szablon, który będzie mi automatycznie generować wszystko. Jeden plik dla wszystkich. Tylko zastanawiałem się właśnie wtedy, jak to zrobię z szablonem, aby np po wpisaniu www.adresstrony.pl/nazwauzytkownika, wyświetli mi tego kogoś profil. Skoro będę mieć np. user_tpl.php. Czyli zrobić jeden katalogu na zdjęcia, pliki wideo itp, a później np. po id tworzyć wewnątrz katalogu media foldery dla poszczególnego użytkownika?

0

Ja po prostu oddalem faktyczny stan rzeczy, wybacz jezeli cie urazilem, powiedz nam cz ty piszesz wszystko od 0 czy moze kozystasz z jakichs gotowych rozwiazan, szablonow itd.

0
hzmzp napisał(a):

No ja rozumiem, że może to być głupota co mówię ;)
Czytam książki, patrzę jak to jest napisane i próbuję sam pisać, także w oparciu o php.net, ale nigdzie nie ma niczego bardziej rozbudowanego, dlatego zastanawiałem się nad takim rozwiązaniem. Staram się sam pisać, aby przy okazji się uczyć.

0

Wydaje mi się że to co chcesz osiągnąć to coś zupełnie innego,
masz url http://dupa.pl/users/hzmzp/video
i teraz fizycznie wygląda ot tak
domyślnie ładuje się index.php w rootdir, ładuje strone users.php (dokleja mechanikę strony index.php) tzn za załadowanie users.php przez index.php odpowiada /users w url i wybiera usera hzmzp i /video to jest np parametr który wskazuje na to by mechanika users.php stworzył i wyświetlił nam listę plików z folderu video danego usera (hzmzp), ścieżka /users/hzmzp/video nie musi wcale istnieć, może ot być np /data/users/hzmzp(w md5 hashowane)/files/video (fizyczna ścieżka).
Taki zabieg obsługuje XPath, ma to też szerokie zastosowanie w XML, HTML i podobnych, aczkolwiek nie bawiłem się tym i nie za bardzo ci mogę pomóc.

Jeżeli to nie to o co ci chodzi to podaj więcej szczegółów.

0

@hzmzp: XPath służy do biegania po XML, a nie parsowaniu url. To, o czym piszesz, to url rewriting (mod_rewrite dla apache i Url Rewrite dla IIS).

@ktostam: W regułach modułu definiujesz np. za pomocą wyrażenia regularnego w jaki sposób oryginalny url ma być przepisany na wewnętrzne wywołanie, np. te http://dupa.pl/users/hzmzp/video -> /([^/]+)/([^/]+)/([^/]+)-> index.php?page=$1&user=$2&medium=$3. To oczywiście skrót myślowy, url rewrite używałem ostatnio z rok temu i tylko pod IIS.

0

no właśnie o to chodzi że to nie było mod_rewrite tylko XPath w jakimś frameworku tylko nie pamiętam jakim

0

Powtarzam, XPath nie służy do tego. Jeśli ktoś to zrobił, to wyważył otwarte drzwi kosztem wydajności i konfigurowalności. Głupi split na stringu z żądanym url będzie setki razy szybszy.
Weź pod uwagę, że bez bibliotek służących specjalnie do url-rewritingu nie da się obsłużyć w normalny sposób żądań odwołujących się do nieistniejącego zasobu, więc trzeba to zrobić na handlerze 404, co źle wpływa na wydajność.
To, że da się, nie znaczy, że to dobry sposób.

0

Tak jak pisałem, widziałem takie zastosowanie ale się nie wgłębiałem.

0
hzmzp napisał(a):

No to chodzi mi o to, że użytkownik tworzy konto na stronie, powinien on mieć katalog, w którym będzie trzymać pliki wideo i zdjęcia, a najlepiej oba rodzaje plików osobno. Gdy np. osoba napisze komentarz pod artykułem, czy pod kogoś kontem, to powinien być pobierany ID tej osoby w takim razie, aby później mogło nastąpić przekierowanie na tej osoby konto, gdyby ktoś chciał je sprawdzić, konto osoby która napisała komentarz. To wtedy gdy pobierany jest ID, to używam pewnie standardowego np. http://www.strona.pl/user i dodaję później pobraną końcówkę czyl id=50, aby szablon viewprofile, mógł wyświetlić profil, po pobranym ID z bazy z komentarzami? Dobrze myślę? No i chodzi mi o to, że np. jak chcę wejść w czyiś profil, to abym nie musiał wpisywać www.strona.pl/user?id=50, tylko np. www.strona.pl/nazwauzytkownika, albo www.strona.pl/user/nazwauzytkownika i zastanawiam się, jak to można skonstruować i nie pytam o gotowca, czy coś takiego, tylko o wskazówki, z czego np. skorzystać przy robieniu tego :)

0
ŁF napisał(a):

Właśnie czytam! Dziękuję bardzo wszystkim za pomoc! :) Przy okazji znalazłem jeszcze poradę na temat generowania z szablonu po ID dla viewprofile :)
Jeszcze tylko ostatnie, to w takim razie mam stworzyć po prostu katalog /media/ i w nim po md5 generować sobie foldery dla użytkowników, na ich zdjęcia (wiem, tak jak napisałem, będę używać szablonu do generowania, ale chciałem zapytać, czy tak trzymać pliki użytkowników). A jeśli tak, to w takim razie np. folder images, albo videos także opatrzyć md5?

0

Głownie chodzi o zabezpieczenia jeżeli będą po samym nicku to może się wkraść jakiś znak który uniemożliwi dostęp do tego folderu (np / ążćźńł%&= mogą wywołać błędy w niektórych przeglądarkach albo skryptach JS) a po ID nie daje się bo ktoś napisze sobie macro i będzie pobierał wszystko wywołując proste zapytanie w pętli, a tak jak będziesz miał nazwę katalogu hashowaną np MD5(salt+$user_name) to będzie musiał się namęczyć i może i scriptskid'y zrezygnują po 15 minutach, co do video etc nie trzeba, cz jak co ale trzeba ograniczyć złożoność algorytmów xD

0

w md5 do robienia ścieżek nie chodzi o unikalność, tylko o w miarę równe rozrzucenie dużej ilości plików po wielu zagnieżdżonych katalogach. Tzn. żeby nie było w żadnym podkatalogu miliona podkatalogów ani miliona plików.

1 użytkowników online, w tym zalogowanych: 0, gości: 1