Poslao: 08 Sep 2015 11:38
|
offline
- Dusko84
- Novi MyCity građanin
- Pridružio: 08 Sep 2015
- Poruke: 4
|
Pozdrav svima!
Posto sam nov na forumu ajde nesto prvo malo o sebi.
Kad me pitaju cime se bavim, kazem da sam web developer u pokusaju.
Posto je ovo sekcija o PHP-u mogu da kazem nisam pocetnik, ali nisam ni profesionalac.
"Ne volim" gotova resenja (framework) , jer mnogo se bolje uci i kapira kodiranjem od nule. Mada naravno koristim i gotova resenja (framework).
Poznajem sta je MVC its.
Sad moje pitanje se odnosi na sto jednostavniji Routing system, dakle za jednostavne sajtove sa malo stranica.
Gledajuci razne tutorijale na tu temu dosao sam do zakljucka da svi dosta komplikuju ili samo nisam naleteo na pravi .
Tako da sam resio da ispisem nesto samostalno sto meni deluje logicno i jednostavno.
Sada ako nekog ne mrzi moze da baci pogled , da neki komentar i savet po pitanju funkcionalnosti, bezbednosti , jednostavnosti its.
Dakle prvo : .htaccess fajl
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
index.php
<?php
ini_set('display_errors', true);
require 'config.php';
//funkcija za auto_load
function UcitajKlase($imeKlase) {
require_once FOLDER . $imeKlase . ".php"; //FOLDER je konstanta putanje do zeljenog foldera
}
//poziv za auto_load
spl_autoload_register("UcitajKlase");
$bootstrap= new Bootstrap();
$bootstrap->PokreniKlasu();
bootsrap.php
<?php
class Bootstrap{
private $_klase= array('index','about','kontakt');//niz za klase/stranice
private $_url; //dolazeci URL
function __construct() {}
//funkcija koj ce ucitavati KLASE/stranice
public function PokreniKlasu() {
$this->_url= isset($_GET['url'])? '/' . $_GET['url'] : 'index';
$this->_url = filter_var($this->_url, FILTER_SANITIZE_URL);
$this->_url = ltrim($this->_url, '/');
if (in_array($this->_url, $this->_klase)) {
new $this->_url();
}
else{
new Index();
}
}
}
<?php
class Kontakt{
public function __construct() {
echo'Ovo je Kontakt stranica';
$this->funkcija();
}
protected function funkcija(){
echo 'Ovo je neka funkcija ';
}
}
Klase index.php i about.php su slicne kao i Kontakt klasa
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 10 Sep 2015 09:00
|
offline
- FoxVanis
- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Hoćeš jednostavno? Ajde malo da ti zakomplikujem HTACCESS i pojednostavim PHP.
Htaccess ti je bitan da ti štiti sajt odmah u startu od nekih stvari i da ima dobre redirekcije. Pa na primer:
## Ako ti ovo napravi problem samo iskomentiraj i obriši, neki serveri imaju taj bug ali davno je to bilo.
Options +SymLinksIfOwnerMatch
Options +FollowSymlinks
Options -MultiViews
## Mod_rewrite uključi.
RewriteEngine On
## Danas retko koriste www na sajtu ali ako ti zatreba ovo izbaci
RewriteCond %{HTTP_HOST} ^www\.tvojsajt\.com
RewriteRule ^(.*)$ http://tvojsajt.com/$1 [R=301]
# blokiraj sve skripte koje pokušavaju preko base64_encode se enkodiraju URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Blokiraj skripte sa <script> tagom u URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Blokiraj skripte koji pokušavaju postaviti PHP GLOBALS varijablu u URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Blokiraj skripte koji pokušavaju modifikovati _REQUEST varijablu u URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Vrati 403 grešku u header i pokaži index od sajta
RewriteRule .* index.php [F]
## počinjemo zabavu
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
## Ukloni sve botove koji su opasni za sajt. Lista je veća ali ovo je neki standard ##
SetEnvIfNoCase User-Agent "^Missigua Locator" bad_bot
#SetEnvIfNoCase User-Agent "^PEAR HTTP_Request class" bad_bot
SetEnvIfNoCase User-Agent "^Java/1.4.1" bad_bot
SetEnvIfNoCase User-Agent "^Java/1.5.0" bad_bot
SetEnvIfNoCase User-Agent "^psycheclone" bad_bot
SetEnvIfNoCase User-Agent "^WEP Search 00" bad_bot
SetEnvIfNoCase User-Agent "^FlashGet" bad_bot
SetEnvIfNoCase User-Agent "^GetRight" bad_bot
SetEnvIfNoCase User-Agent "^GetWeb!" bad_bot
SetEnvIfNoCase User-Agent "^Go!Zilla" bad_bot
SetEnvIfNoCase User-Agent "^httplib" bad_bot
SetEnvIfNoCase User-Agent "^Indy Library" bad_bot
SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot
SetEnvIfNoCase User-Agent "^InterGET" bad_bot
SetEnvIfNoCase User-Agent "^Internet Ninja" bad_bot
SetEnvIfNoCase User-Agent "^LexiBot" bad_bot
SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot
SetEnvIfNoCase User-Agent "^libwww" bad_bot
SetEnvIfNoCase User-Agent "^libwww-perl" bad_bot
SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot
SetEnvIfNoCase User-Agent "^Mozilla.*NEWT" bad_bot
SetEnvIfNoCase User-Agent "^Octopus" bad_bot
SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot
SetEnvIfNoCase User-Agent "^SuperBot" bad_bot
SetEnvIfNoCase User-Agent "^WebAuto" bad_bot
SetEnvIfNoCase User-Agent "^Wells Search II" bad_bot
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^wget" bad_bot
<Limit GET POST>
order allow,deny
allow from all
deny from env=bad_bot
</Limit>
## na kraju prepisivanje
RewriteRule ^([^/]*)$ index.php?url=$1 [L]
I sada PHP:
class methods
{
/*
* SECURITY GET METHOD
* Default: $method->get($name)
* Options: $method->get($name, $value)
*/
public function get($name, $value='')
{
$name=preg_replace("@([^a-zA-Z0-9\-\.\_])@Ui", "", $name);
if(isset($_GET[$name]) && !empty($_GET[$name])){
if(is_array($_GET[$name])){
foreach($_GET[$name] as $key=>$val){
$key=preg_replace("@([^a-zA-Z0-9\-_])@Ui", "", $key);
$val=trim($val);
if($this->__is($val))
$return[$key]= $val;
else if(is_string($val))
{
if($this->__filter_var($val))
$return[$key]= $val;
else $return[$key]=preg_replace("@([^a-zA-Z0-9\+\-\_\/\$\&\.\,\:\;\=\@\# ]+)@Ui", "", $val);
}
else $return[$k]=false;
}
}
else
{
$val=trim($_GET[$name]);
if($this->__is($val))
$return= $val;
else if(is_string($val))
{
if($this->__filter_var($val))
$return= $val;
else $return=preg_replace("@([^a-zA-Z0-9\+\-\_\/\$\&\.\,\:\;\=\@\# ]+)@Ui", "", $val);
}
else $return=false;
}
}
else $return=((isset($value) && !empty($value)) ? $value : false);
return $return;
}
private function __filter_var($str)
{
if(filter_var($str,FILTER_VALIDATE_EMAIL)!==false) return true;
else if(filter_var($str,FILTER_VALIDATE_URL)!==false) return true;
else if(filter_var($str,FILTER_VALIDATE_FLOAT)!==false) return true;
else if(filter_var($str,FILTER_VALIDATE_INT)!==false) return true;
else if(filter_var($str,FILTER_VALIDATE_BOOLEAN)!==false) return true;
else if(filter_var($str,FILTER_VALIDATE_IP)!==false) return true;
else return false;
}
// extended is_
private function __is($str)
{
if(is_numeric($str)) return true;
else if(is_bool($str)) return true;
else if(is_float($str)) return true;
else if(is_link($str)) return true;
else return false;
}
}
Ovo je isečak iz jedne moje klase koja se razvijala 5god. Ovo sam nekako dobio ao dobro rešenej koje lepo radi. Svugde koristiš umesto $_GET[] funkciju get iz ove klase
$m=new methods();
$m->get('url');
Na skoro indentičan način možeš uraditi i POST proveru samo sa malo većom modifikacijom i čišćenjima jer se POST koristi za sve i svašta.
Ova funkcija čak ima opciju da daš neku default vrednost ako nemaš ništa u GET
$m->get('url','VREDNOST');
Takođe ti vraća bool false ako nema default vrednosti i postavljenog parametra:
$page=$m->get('url');
if($page!==false){
echo $page;
}
Nadam se da sam malo pomogao.
|
|
|
|
Poslao: 10 Sep 2015 11:15
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
Skrati sebi muke i koristi neki Framework.
|
|
|
|
Poslao: 10 Sep 2015 12:27
|
offline
- Dusko84
- Novi MyCity građanin
- Pridružio: 08 Sep 2015
- Poruke: 4
|
_IvKe jasno mi je sta hoces da kazes . Mada ako se recimo pravi jednostavan sajt 5-6 stranica , mislim da je nepotrebno pokretati framwork.
FoxVanis
Imam pitanje u vezi tvoje function get()
Tacnije petlja : if(is_array($_GET[$name])){
Kada se uopste ona aktivira, mislim ako zelimo da budemo jednostavni hoce li se ona uopste nekada aktivirati?
I mozda imas malo prefise if else
U svakom slucaju hvala na trudu i kodu!
Kod je sacuvan pa mozda se nekada i iskoristi
|
|
|
|
Poslao: 10 Sep 2015 19:56
|
offline
- FoxVanis
- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
ja sam uradio copy - past mog koda. Taj deo je ako u GET stavljas array. Vidi, to if/else ti ne usporava nista. Izbacis tu sekciju i kraj. Moje iskustvo sa ovime na 5000 poseta u 1 minutu je dobar. Radi bez greske, bez usporavanja, sistem ima zabelezene pokusaje ubrizgavanja skripti u URL ali bez uspeha. Imam ja jos vece prosirenje za ovo ali to je vec moja tajna. Ovo je i vise nego dovoljno. A ako bas absolutno zelis jednostavnost, samo uzmi isset i empty proveru i filtriraj sa regex koji ti je tamo i to je 3 linije koda.
|
|
|
|
|
Poslao: 11 Sep 2015 04:33
|
offline
- Dusko84
- Novi MyCity građanin
- Pridružio: 08 Sep 2015
- Poruke: 4
|
_IvKe i dalje sam u fazi ucenja/istrazivanja. Pokusao sam da naplatim znanje iz skola , ali sam se smejao samom sebi koliko je to povrsno. Tako da vec "duze" vreme radim projekte samo za svoju dusu. E sad jedini problem je sto sve radim sam i ne mogu da procenim da li je to sto napravim dovoljno kvalitetno.
A evo do sada skoro da nisam koristio blagodeti Foruma, FB i ostalih socijalnih mreza za razmenu misljenja, tako da pokusavam skocim na taj level
Tako da je onaj moj prvi post bio nekakav poziv za pomoc
Pokusao sam da provalim zend, ali je u to vreme bio dosta jaci od mene pa sam se bacio na OOP, pa napravio MVC i poprilicno sam zadovoljan. Tako da sam spreman ponovo da napadnem, mada ovog puta Symfony/ LV.
Inace ako ti je Symfony omiljeni mozda znas : ?
Koristio sam za projekat komponentu DomCrawler, sve sam uspeo da nabudzim i sve radi na localhostu, ali kada sam pokusao na live serveru ni da mrdne. Znaci bukvalno sam samo uplodovao rad bez ikakvih instalacija i podesavanja. Doduse koristim Free Web Hosting , ima podrsku za PHP 5.5, ali nemam pristup php fajlu tako da sam brzo digao ruke.
Pa _ivKe kad si vec tu da te priupitam, da li su potrebna neka dodatna podesavanja, instalacije, kada se tako pojedinacna komponenta koristi live?
|
|
|
|
|
Poslao: 12 Sep 2015 03:29
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
Druze idemo u off i necemo o SF komponentama ovde. Fox druze na nijednom poslu me niko nikada nije terao da pravim nov fw vec da radim na necemu gde je vec ulozeno i testirano sto bi neko sada izmisljao toplu vodu?
Npr ti gradis kucu, i sada ti hoces da napravis FOX Blok, Fox cement, Fox Mesalicu, Fox temelj, Fox Cekic.... Neide buraz danas pare idu na vec odradjene stvari. Lakse je otici do stovarista, do radnje i kupiti sav taj alat nego izmisljati sve to ... Lepo je znati ali nema ko to da plati druze, znas i sam ako si tom svetu... Tuga
|
|
|
|
Poslao: 12 Sep 2015 04:17
|
offline
- Dusko84
- Novi MyCity građanin
- Pridružio: 08 Sep 2015
- Poruke: 4
|
Vecita trka za novcem i vremenom... Ajde da probam i ja slikovito, ako vec gradim kucu, naravno da necemo sami praviti cigle i konstruisati mesalicu.
Ali pre nego sto skocim do stovarista moram da znam sta da trazim i kako se sta postavlja.
I onda sagradis nesto sam , pogledas sta si napravio i verovatno si dobio neku garazu ili supu ali si srecan jer si to izgradio sa 10 prstiju.
Sad naravno najbolja varijanta je da odma upadnes u neki tim koji ce imati strpljenja da tebe kao novajliju obuci i osposobi, ali ne dobiju odmah svi takvu priliku.
Za kraj, definitivno si upravu vreme je novac i trziste je surovo. I odosmo u off ...
|
|
|
|