Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System plikow w mysql?
wojtek
post 17.10.2003, 22:01:38
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


Witam,

Przygotowywuje sie do pisania nowej aplikacji, jednym z zalozen ma byc latwosc aktualizacji i nieco trudniejszy dostep do kodu php - tak aby _zwykly_ user nie mogl latwo zobaczyc/edytowac kodu.

Jednym z moich pomyslow (choc w sumei zaczerpniety chyba z Thota..) jest system pikow w mysql. Otoz chcialbym poznac Wasze opinie na ten temat, moze macie juz jakies doswiadczenie/rozwiazania w tej dziedzinie. Ja to widze mniej wiecej tak:

W formie 'normalnych' plikow .php (zawierajacych kod) jest tylko kilka, podstawowych, niezbednych do dzialania reszty. A wiec np. sterownik mysql, obsluga bledow i.. obsluga mysqlowskiego systemu plikow. Reszta plikow przechowywana byla by w bazie. I teraz mamy np. plik kontakt.php. W nim mamy cos takiego:

[php:1:77a4531598]<?php
include("potrzebne_biblioteki");
eval(zaladuj_plik_z_bazy("kontakt.php"));
?>[/php:1:77a4531598]

Struktura bazy - dwie niezbedne kolumny to jedna z nazwa pliku, a druga z zawartoscia tegoz pliku. Powyzszy kod, jak nietrudno sie domyslic, pobieralby zawartosc pliku kontakt.php i wykonywal zawarty w nim kod. Tu od razu uwaga - musialby to byc kod php, jesli zawieralby html to eval() by sie nie wykonal.

I tutaj moje pytania:
- czy to wogole ma sens? czy byloby to w miare wydajne?
- jak przechowywac zawartosc pliku w mysql? Jako base64_encode i np. pole BLOB , czy jakos inaczej?
- jesli by to mialo sens, to jak mozna by utrudnic 'rozkodowanie' takiego kodu przez mniej doswiadczonych userow?

Podstawowa zaleta takiego rozwiazania bylaby mozliwosc zdalnej aktualizacji - nie potrzeba zadnych praw do ustalania chmodow przez php, zakldania nowych katalogow czy plikow itd. To dla mnie byloby dosyc wazne. Ale nie wiem czy np. wydajnosc nie dyskwalifikuje czegos takiego.. Pobieranie pliku z bazy, odkodowanie go i nastepnie potraktowanie evalem chyba byloby troche wolne?

Czy to ma sens? Jak wybyscie to rozwiazali?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
DeyV
post 17.10.2003, 23:09:29
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Rozwiązanie takie, oparte na ładowaniu plików z bazy ma bardzo dużo zalet.
Np. forum XMB przechowuje w ten sposób wszystkie pliki templates. Co prawda, aby zmniejszyć ilość zapytań do bazy - wykorzystano tam mechanizm (przynajmniej w wersji którą znam, czyli nie najnowszej) umożliwiający załadowanie za jednym razem większej ilości (jeśli nie wszystkich) potrzebnych plików.
Również z eval spisuje się w takim przypadku całkiem dobrze.
I akurat tu nie ma większego znaczenia, czy to jest kod html, zawierający tylko wstawki php, czy sam php. Tyle - że na pewno nie jest tak wygodne, jak praca na plikach. Ale tego już pewnie jesteś świadom.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
wojtek
post 18.10.2003, 11:56:01
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


Kazde zadanie pliku powodowaloby jedno zapytanie do mysql'a, ktore wykonywaloby sie evalem i ew. potem kolejne zapytania, ktore w tym kodzie by sie znajdowaly. Nie za bardzo widze tutaj rozwiazanie, ktore pobieralo by przy okazji wszystkie inne pliki.. Mialby je pobierac i wrzucac do jakichs .tmp na ftpie, tak? Takie cachowanie? Nigdy sie tym nie zajmowalem, nie widze za bardzo sposobu na rozwiazanie tego. Poza tym w tym forum o ktorym mowisz - w bazie sa tylko termplaty, a w moim przypadku bylyby to wlasciwie wszystkie pliki, bez kilku glownych jadra.

I czy te pliki przechowywac jako base64_encode w polu typu blob? Czy tak bedzie najwydajniej?

Jesli chodzi o wygode pisania - idzie to latwo rozwiazac. Po prostu pisze tak jakby na 'normalnych' plikach, dopiero w koncowej fazie projektu przerzucam wszystko do mysql'a i testuje/nanosze poprawki.
Go to the top of the page
+Quote Post
adwol
post 18.10.2003, 21:34:33
Post #4





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
- czy to wogole ma sens? czy byloby to w miare wydajne?

Napewno mniej wydajne od zwykłego filesystemu. Choć do prostych zastosowań (odczytywanie/zapisywanie naraz całych plików, częstsze odczyty niż zapisy) pewnie nie aż tak bardzo.
Cytat
- jak przechowywac zawartosc pliku w mysql? Jako base64_encode i np. pole BLOB , czy jakos inaczej?

BLOB z definicji przechowuje dane binarne, więc base64 jest zbędne.
Cytat
- jesli by to mialo sens, to jak mozna by utrudnic 'rozkodowanie' takiego kodu przez mniej doswiadczonych userow?

Co masz na myśli? Którego kodu, Base64?
Cytat
Podstawowa zaleta takiego rozwiazania bylaby mozliwosc zdalnej aktualizacji - nie potrzeba zadnych praw do ustalania chmodow przez php, zakldania nowych katalogow czy plikow itd.

Na filesystemie też możesz ustawić wszystkim prawa do wszystkiego i każdy będzie mógł uaktualniać. Tylko czy napewno chcesz się pozbyć choćby minimalnego systemu uprawnień.
Cytat
Czy to ma sens?

To zależy. Klasyczyny filesystem to też baza danych więc po co wyważać otwarte drzwi, zwłaszcza, że napewno będzie szybsza od SQLowej. Z drugiej strony w bazie SQLowej łatwiej przeprowadzić transakcję i blokowanie. Wszystko zależy od tego co będzie wygodniejsze do oprogramowania i czy spadek wydajności nie będzie zbyt duży.
Powsadzaj parę różnych plików do bazy i porównaj ile się będą wyciągać stamtąd a ile z klasycznego pliku.
Go to the top of the page
+Quote Post
wojtek
post 19.10.2003, 16:01:19
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


Cytat
Cytat
- jesli by to mialo sens, to jak mozna by utrudnic 'rozkodowanie' takiego kodu przez mniej doswiadczonych userow?

Co masz na myśli? Którego kodu, Base64?


Chodzi mi o to zeby user, jak spojrzy sobie na zawartosc tabeli 'files' nie widzial czarno na bialym "$zmienna=1; for($a) itd" - zeby zobaczenie kodu przechowywanego w mysql pliku bylo choc troche klopotliwe. Dlatego chcialem kodowac wpierw base64 i zapisywac do bazy (wiem, wiem ze to jest swietne zabezpieczenie ;-)). I moje pytanie o to - czy moze jakis algorytm bylby wydajnieszy i przy okazji bardziej skuteczny w 'ochronie' przed oczyma usera. Albo np. zakodowanie najpierw base64, a potem crypt.. Nie mam pomyslu i nie wiem co bedzie najlepsze, dlatego pytam.. :)

Cytat
Na filesystemie też możesz ustawić wszystkim prawa do wszystkiego i każdy będzie mógł uaktualniać. Tylko czy napewno chcesz się pozbyć choćby minimalnego systemu uprawnień.


No tak, ale w filesystemie nie stworze nowego pliku czy nie skasuje starego. Poza tym kazdy plik musialby miec 'duze' chmody, poza tym user musialby prawa nadawac recznie - to tez ma pewne znaczenie dla mnie.

Coz, w najblizszym czasie napisze wstepnie troche kodu, potestuje, pomierze czasy i zapewne podziele sie z Wami moimi spostrzezeniami.
Go to the top of the page
+Quote Post
jono
post 19.10.2003, 16:53:55
Post #6





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


A swoją droga kiedys pisałem skrypt do edycji kodu php ze strony. Odczytywał po prostu treść strony, wyrzucał w <textarea> i można było zmienic i zapisać. Bardzo wygodne, jak jestes gdzies np. poza domem i najdzie cię wena twórcza. Oczywiście system taki można rozwinąć o dodawanie nowych plików.


--------------------
if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;}
Go to the top of the page
+Quote Post
wassago
post 19.10.2003, 17:05:17
Post #7





Grupa: Przyjaciele php.pl
Postów: 701
Pomógł: 0
Dołączył: 26.06.2002
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Cytat
A swoją droga kiedys pisałem skrypt do edycji kodu php ze strony. Odczytywał po prostu treść strony, wyrzucał w <textarea> i można było zmienic i zapisać. Bardzo wygodne, jak jestes gdzies np. poza domem i najdzie cię wena twórcza. Oczywiście system taki można rozwinąć o dodawanie nowych plików.

nie no, normalnie genialne #-o :wink:


--------------------
Go to the top of the page
+Quote Post
adwol
post 19.10.2003, 22:22:08
Post #8





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
Chodzi mi o to zeby user, jak spojrzy sobie na zawartosc tabeli 'files' nie widzial czarno na bialym "$zmienna=1; for($a) itd" - zeby zobaczenie kodu przechowywanego w mysql pliku bylo choc troche klopotliwe.

Jak masz dostęp do funkcji dl() to zobacz sobie turck-mmcache'a. Jak sobie nim skompilujesz kod phpa do bytecode'u to będziesz mógł takie wersje trzymać w bazie. Wtedy po pierwsze mało kto będzie z tego coś rozumiał po drugie szybciej będzie Ci się to wykonywać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:35