Új hozzászólás Aktív témák
-
j0k3r!
senior tag
válasz Sk8erPeter #10200 üzenetére
<sajatvelemeny>
en amit szoktam hasznalni:
- protected, private adattagok es metodusok neve _-al kezdodik ($_someImportantData, _justAnotherMethod())
- public adattagok es metodusok siman camelCase
- interfacek neve mindig I-vel kezdodik (ITestInterface)
- osztalynevek, nevterek: nagybetuvel kezdodik es camelCase (ClassTwo)
- konstansok: csupa nagybetu (ha hosszu a neve, akkor alahuzassal tagolom)az alahuzasos dolgot kerulom (kiveve konstansok), igy legalabb ha ranezek a kodra, akkor egybol latom, hogy az valoszinuleg valami beepitett php-s dolog lesz
</sajatvelemeny>ha kihagytam valamit, majd kerdezel
[ Szerkesztve ]
some men just wanna watch the world burn...
-
ArchElf
addikt
válasz Sk8erPeter #10201 üzenetére
Előző hszedre...
Én általában:
- privát tagok _-al kezdődnek
- property-k, class-ok PascalCase
- függvények camelCase
- konstansok UPPERCASEAE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
cucka
addikt
válasz fordfairlane #10187 üzenetére
A singleton elsősorban olyan szoftvereknél használatos minta, amelyek sokáig futnak és van egy olyan komponensük, amely valamilyen külső erőforrást használ.
PHP-nál a szkripted minden egyes oldalletöltődésnél lefut, az objektum élettartama nagyon rövid, ráadásul az adatbázis objektumot jellemzően a keretrendszer hozza létre, egy példányban. Egyszerűen nincs előny abból, ha a singleton mintát használod.(#10204) Soak
Ez tetszett -
Soak
veterán
válasz ArchElf #10205 üzenetére
Vagy, a v kicsivel van, lehet azért nem jó ... bocs...
Más: Lehet, hogy hülyeséget kérdezek, de itt felvetődött az SQL injection, pár hsz-el ezelött. És épp a kép feltöltés résszel szarakodok. Ha a user bármilyen nevet adhat a feltöltendő filenak akkor az lehet potenciális biztonsági rés?
-
fordfairlane
veterán
Bocs, de nem értem. Nem arról van szó, hogy a keretrendszer valamit megcsinál helyettem, mert mi van akkor, ha nem csinálja meg, másrészt a futási idő szintén érthetetlen érvelés. Egyébként is a keretrendszer használhat singletont, én nem?
Van egy erőforrás, amiből egy van. Fájlrendszer, adatbázis kapcsolat, socket egy kiszolgáló felé, whatever. Ezt a valamit be akarod burkolni egy osztállyal. A Singleton egy "creational pattern", ami az egyszeri példányosítási funkciót belezárja az objektumba, tehát az alkalmazásnak nem kell ügyelnie, hogy ne hozzon létre fölöslegesen új példányt, ha futás során több heylen is hozzá akar férni ehhez az objektumhoz. Egy singleton objektum ugyanolyan kutyaközönséges objektumnak néz ki a guest kód számára, mint a példányosított. Miért baj ez?
[ Szerkesztve ]
x gon' give it to ya
-
fordfairlane
veterán
Ha a user bármilyen nevet adhat a feltöltendő filenak akkor az lehet potenciális biztonsági rés?
Lehet, mivel a filekezelő függvények nem szimpla fájlnévként értelmezik a fájlnév paramétert, így pl. komplett elérési utat is lehet megadni. A fájlnévben vezérlőkarakterek is lehetnek, amik szegmentálják a nevet. Ilyen pl. a \ vagy unixon a /.
[ Szerkesztve ]
x gon' give it to ya
-
Tele von Zsinór
őstag
válasz Sk8erPeter #10200 üzenetére
Létezik egy, a kódok együttműködésének elősegítését célzó csoport, a php-fig (Framework Interoperability Group, mostanság gondolkodnak jobb néven). Ismerősek lehetnek a PSR-0 "szabvány" miatt, ami szépen elterjedt.
A közelmúltban fogadták el a PSR-1 és PSR2 javaslatokat, azaz:
- PSR-1 Basic Coding Standard
- PSR-2 Coding Style GuideA hozzászólásodban felvetett kérdésre: korábban a Symfony2 coding standardját használtam, ami kevés pontban tér el a fentebb linkeltektől, úgyhogy majd ezekre térek át.
-
Sk8erPeter
nagyúr
válasz fordfairlane #10212 üzenetére
#9911 környékén én is érveltem a Singleton mellett, igazából csak annyit, hogy azért annyira nem ördögtől való szerintem a használata, de olvass csak vissza, a véremet akarták.
========
(#10207) Soak :
fájlnevekre is alapvetően a whitelisteket érdemes alkalmazni: tehát azt mondod meg, milyen karaktereket engedsz, nem azt, hogy mit nem szabad használni, minden neked nem tetsző karaktert egyszerűen kivágsz a fájlnévből, vagy behelyettesíted egy általános helyettesítő karakterrel, ami neked tetszik, lehet ez egy aláhúzás (_), kötőjel, vagy egyéb, olyan karakter, ami nem okozhat problémát egyik platformon sem (pl. ne akarj egy » jelet tenni a fájlnévbe ).Sk8erPeter
-
Siriusb
veterán
válasz Sk8erPeter #10215 üzenetére
Szerintem a Smelly Skunk már közelít. Bocs, ezt kár lett volna kihagyni. Ez a meleg előhozza az emberből a hülyeséget, nem mintha mélyre lenne temetve...
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #10214 üzenetére
OK, tehát hogy a lényeget kiemeljük, ha már linkelted (bár ehhez bele is kellett olvasni a linkelt cuccokba, és ez melós volt ):
Symfony2:
"Naming Conventions¶
» Use camelCase, not underscores, for variable, function and method names, arguments;
» Use underscores for option, parameter names;
» Use namespaces for all classes;
» Suffix interfaces with Interface;
» Use alphanumeric characters and underscores for file names;
» Don't forget to look at the more verbose Conventions document for more subjective naming considerations."A PSR-1-ből:
"[...]
» Namespaces and classes MUST follow PSR-0.
» Class names MUST be declared in StudlyCaps.
» Class constants MUST be declared in all upper case with underscore separators.
» Method names MUST be declared in camelCase.
"Tulajdonképpen utóbbi nagyjából csak OOP-kódolásról beszél. Ezt a StudlyCaps-et még most hallom először, gondolom ez a PascalCase-zel ekvivalens, nem? (legalábbis az írási módjából következtetve)
Előbbi viszont egyértelműen camelCase-t ajánl függvényekre és metódusokra egyaránt, ezeknél az underscore-t kerüli.Az itt leírtak nagyjából egyeznek az én szokásaimmal, azzal az egy nagy eltéréssel, hogy a procedurális kódolásnál, globális függvényeknél én még többnyire underscore-t használok. Igaz, néha keveredést okoz az agyamban, főleg amikor mondjuk C#-kódról térek át PHP-ra, akkor először nagyon katyvasz van a fejemben, hogy na most akkor hogyan is deklaráljam a függvénynevet, mert a PascalCase használata viszont PHP-ben nem szokásom.
Amúgy köszi a tapasztalat-megosztást.
==========
(#10202) j0k3r! :
neked is kösz!
"- osztalynevek, nevterek: nagybetuvel kezdodik es camelCase (ClassTwo)"
>>> Tehát akkor gondolom a PascalCase-re gondolsz."az alahuzasos dolgot kerulom (kiveve konstansok), igy legalabb ha ranezek a kodra, akkor egybol latom, hogy az valoszinuleg valami beepitett php-s dolog lesz"
Hmm, végül is ez is egy elfogadható szempont.
Engem alapvetően a Drupal szoktatott rá arra, hogy a procedurális kódolásnál következetesen az aláhúzásokat használjam a szavak elválasztására függvényneveknél (persze a következetes szó akkor igaz, amikor épp nem vagyok kicsit megzavarodva más nyelv használata miatt).==========
(#10203) ArchElf :
OK, köszi, ezek szerint alapvetően kerülöd az underscore használatát.Sk8erPeter
-
Tele von Zsinór
őstag
válasz Sk8erPeter #10219 üzenetére
A csoport fő célja a keretrendszerek közti együttműködés, az pedig a mai, modern rendszerek esetében OOP kódot jelent, innen az ezirányú fókusz.
Igen, a StudlyCaps ugyanaz, mint a PascalCase (avagy: camelCase kezdő nagybetűvel).
Egyébként én sem olvastam még végig a végleges psr2-őt, csak levlistán követtem, hogy mi történik. A psr1 rövidke, az megvolt
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #10220 üzenetére
Ja, ez tény.
Amúgy elfelejtettem hozzátenni, hogy természetesen az osztálynevek esetében én is a PascalCase-t használom.Sk8erPeter
-
Tele von Zsinór
őstag
Felettem kolléga már írt egyet, de hozzáteszem a magamét: sok formátumban (kiragadott példa: jpeg) van megjegyzés mező, ahová azt írsz, amit akarsz. Akár php kódot is. És akkor képzeld el, ha ezt .php kiterjesztéssel mented a feltöltött fileok (általában nyilvánosan elérhető) mappájába.
Én valami autogenerált értéket szoktam névként használni (például a hozzá kapcsolódó tábla primary key-ét).
-
Soak
veterán
válasz Tele von Zsinór #10222 üzenetére
Igen, köszi, én is erre gondoltam, hogy egyszerűen id-t megkapja minden kép amit amúgyis automatikusan, tehát egyedülálló, mondjuk a feltöltésnél meg tud adni egy le írást is a user ami mindenki számára látható. Itt pedig nyilván nem scripteket, de egy-két különleges karaktert nem árt ha tud írni az ember .
-
Sk8erPeter
nagyúr
Itt már leírtam a fájlnevekre vonatkozó dolgot, arra semmit nem reagáltál. (whitelist)
A leírás mezőt meg általában a képtől/bármi egyéb fájltól külön szokták kezelni, nem is minden képformátum támogatja a leírás "beleégetését" (vagy nem tudom, erre gondoltál-e), adatbázisban a file-hoz tartozó id-val rendeled össze a kiegészítő mezőket (maga a fájlnév, leírás, szerző, stb.).
A leírásban lévő karaktereket meg a szokásos módon szűröd (pl. legegyszerűbb példaként htmlentities()-t is használva, stb.), adatbázisban tárolod, és nem fájlban.Sk8erPeter
-
ArchElf
addikt
válasz Sk8erPeter #10219 üzenetére
Igen, alapvetően csak a privát változókra használom.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Soak
veterán
válasz Sk8erPeter #10224 üzenetére
Elolvastam, de az id-s tárolás sokkal egyszerűbb és jelentősége sincsen különösebben, hogy mi lesz a neve, de ha lesz akkor majd alkalmazom. A leirást külön tárolom, adatbázisban, a htmlentities()-t használom már belépéskor és regisztrációkor (oda jó?) , de akkor berakom a leíráshoz is.
-
ArchElf
addikt
válasz Sk8erPeter #10226 üzenetére
Igen. Indexekre nem nevesítetteket (ix, iz, iy), a maradékra camelCase.
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Sk8erPeter
nagyúr
Te tettél fel kérdést felhasználó által megadott fájlnevekről, és én erre reagáltam... Arra mondtam, hogy whitelisteket érdemes alkalmazni.
Egyébként szerintem értelmesebb egy beszédes képnév, mint egy névben lévő id, ami totál semmitmondó, ha ránéz az ember. Azt nem tudom, SEO-szempontból mennyit nyom a latba, de elvileg ennek is lehet szerepe, hogy maga a fájlnév is legyen beszédes. Ettől még olyan id-t generálsz bele PLUSZBAN, amilyet akarsz.
A képeket normális esetben így is-úgy is id szerint tárolod az adatbázisban, amihez - mint említettem - tárolod az egyéb adatait is, ezek közül a fájlnév is csak egy a sok közül, vagyis nem a kép egyértelmű azonosítására szolgál, az "csak" egy fizikai elérhetőség, de jó esetben úgy tárolod, hogy tök mindegy, mikor, mire változtatod a fájlnevet, attól még beazonosítható marad a kép.=======
(#10228) ArchElf : OK.
Én egyébként olykor ciklusoknál is az $i és $j és $k és egyebek helyett beszédesebb indexneveket használok, de persze csak akkor, ha ennek a kódban van az olvashatóságot javító szerepe (sokszor van).
A lokális változónevek tekintetében én egyelőre a kódjaimban az underscore-t használom túlsúlyban, mostanában vettem fel a camelCase-zel kódolás szokását PHP-nél is.[ Szerkesztve ]
Sk8erPeter
-
vakondka
őstag
válasz Sk8erPeter #10229 üzenetére
SEO szempontból fontos a beszédes fájlnév, de az alt és title még fontosabb, sőt a href tagban a title szintén fontos, persze a keresőbarát link még mindig kiemelt jelentőségű.
https://toptarget.hu - Online Marketing Ügynökség
-
Sk8erPeter
nagyúr
-
PazsitZ
addikt
válasz Sk8erPeter #10232 üzenetére
Azért kipróbáltam, hátha mégis én írtam elsőre fejből hülyeséget, de úgy tűnik nem.
Nálam kiszed mindent, ami nem betű, szám vagy alulvonás.
Bár, ha csak másmilyen karakterből áll a fájlnév, akkor tényleg üres lesz.[ Szerkesztve ]
- http://pazsitz.hu -
-
Sk8erPeter
nagyúr
válasz PazsitZ #10233 üzenetére
Bocs, nem figyeltem oda rendesen, f@szságot írtam, igazad van!
Nem teszteltem, csak ránézésre mondtam, mert a \w szóra illeszkedik, és nem figyeltem oda, hogy ott van a "^" karakter, és szögletes zárójelek közé van téve, magyarul csak azt szeded ki, ami nem szó. Sorry.[ Szerkesztve ]
Sk8erPeter
-
RootRulez
félisten
Sziasztok!
Pár napja kértem tanácsot arra, hogy egy olyan php kéne, ami egy txt-ből választ egy sort és az abban szereplő linket betölti. Kaptam is rá választ:
"function isUrl($val){ return $val != ''; }
$linkek=array_filter(file("linkek.txt"), 'isUrl');
$link=$linkek[mt_rand(0, count($linkek)-1)];"Ezt a dolgot annyival szeretném továbbvinni, hogy jó lenne, ha a kiválasztott sort törölné a php a TXT-ből. Ha pedig az utolsó sort is törölte, akkor behelyez a helyére egy másik (előre megadott) linket.
Köszi: RR
═════════════════════════════════════════
-
cucka
addikt
válasz fordfairlane #10212 üzenetére
Az, amit írsz a singleton-ról, az alapvetően jó, viszont pusztán elméleti. Igen, elméletileg a singleton valóban egy hasznos pattern. A php fejlesztés rögvalóságában viszont:
- Tudod mi van, ha két adatbázis kapcsolat objektumot hozol létre? Semmi sincs. Egy élő rendszeren rengeteg adatbázis kapcsolat létezik egy időben. Tehát itt egy olyan veszélytől (több példány létrehozása) véd meg a singleton minta alkalmazása, amely veszély nem is létezik.
- Egy tipikus php alkalmazásban a keretrendszer hozza létre az adatbázis objektumot, nem maga az alkalmazás. Nem áll fenn a veszély, hogy az alkalmazás véletlenül több példányt hoz létre belőle, mert egy példányt sem fog létrehozni.
- Az adatbázis wrapper osztályt tipikusan valamilyen globális változón keresztül éred el. A többszörös példányosítás itt is értelmét veszti.Egy cseppet sem akarok a design pattern-ek ellen beszélni, de szerintem egy tipikus php-s környezetben a singleton elméleti előnyei elméletiek maradnak. 5 évig voltam php fejlesztő, egyetlen egy alkalomra sem emlékszem, amikor olyan problémába ütköztem volna, amit a singleton pattern megold.
(#10235) RootRulez
Hol akadtál el?[ Szerkesztve ]
-
cucka
addikt
válasz fordfairlane #10237 üzenetére
Szerintem nem anti-pattern, pusztán csak nagyon kevés olyan helyzet van, amikor valóban szükség van rá. Ehhez képest az összes design pattern-ekkel foglalkozó írás az első helyen említi, ezt a legkönnyebb megérteni, plusz ugye az elméleti előnyei elsőre nagyon meggyőzőek. (Csak mint sok esetben, ezek az előnyök a gyakorlatban nem észrevehetők)
-
RootRulez
félisten
Találtam egy ilyet, hogy
$kihagyando_sor = $link; // itt lesz a kihagyandó sor a korábbi véletlen szám
$megnyitando = fopen("linkek.txt", "w"); // megnyitó, írhatóan a fájlt
if ($megnyitando == NULL || $megnyitando == NULL)
print('Hiba történt a fájlok megnyitása közben.');
else
{ $sor = 0;
while (($karakter = fgetc($megnyitando)) !== false)
{ if ($karakter == "\n")
$sor = $sor + 1;
if ($sor != $kihagyando_sor)
fwrite($megnyitando, $karakter);
}
}
fflush($megnyitando);
fclose($megnyitando);Most épp minden sort kitöröl.
═════════════════════════════════════════
-
PazsitZ
addikt
válasz RootRulez #10239 üzenetére
Ilyen esetben én akkor már tömböt használnék:
$filename = dirname(__FILE__) . '/links.txt';
if (isset($_GET['add']) && !empty($_GET['link'])) {
if (file_exists($filename)) {
$links = unserialize(file_get_contents($filename));
} else {
$links = array();
}
echo 'put: ' . $_GET['link'];
$links[] = $_GET['link'];
file_put_contents($filename, serialize($links));
} else if (isset($_GET['get'])) {
$links = unserialize(file_get_contents($filename));
if (count($links)>0) {
$key = array_rand($links);
$link = $links[$key];
unset($links[$key]);
echo "<a href=\"{$link}\">{$link}</a>";
file_put_contents($filename, serialize($links));
} else {
echo 'nincs link';
}
}
Hozzáadhatsz: link.php?add&link=http://prohardver.hu
Kiolvasás és törlés: link.php?get- http://pazsitz.hu -
-
cucka
addikt
válasz RootRulez #10239 üzenetére
Ez a kód lényegében totál hülyeség, mint ha olyan ember írta volna, aki most tanulta pascal-ban a filekezelést. Érdemes lenne megértened, hogy mit csinál a kód, mert abból nem fog semmi jól kisülni, ha kriptikus kódsorokat másolgatsz abban a reményben, hogy hátha működni fog.
A kérdésedre a válasz a korábbi kódot felhasználva:
function isUrl($val){ return $val != ''; }
//a file sorait beolvasom a $linkek tömbbe
$linkek = array_filter(file("linkek.txt"), 'isUrl');
//véletlenszerű kulcs kiválasztása a linkek tömbből
$tkey = mt_rand(0, count($linkek)-1);
//kiválasztok 1 elemet a tömbből a $link változóba
$link = $linkek[$tkey];
//törlöm a tömbből a kiválasztott elemet
unset($linkek, $tkey);
//ha elfogytak a file sorai, akkor felviszem az új elemet a $linkek tömbbe
if (count($linkek)==0){
$linkek[0] = 'előre megadott szöveg';
}
//a $linkek tömb tartalmát kiírom a fileba
file_put_contents("linkek.txt", implode("\n", $linkek);Ahogy látod, a kód elején beolvasom a file tartalmát a végén meg kiírom, az összes művelet a $linkek tömbben történik. A kód nem kezeli le azt az esetet, ha az elején üres a file, továbbá egy idő után, ha elfogynak a linkek, mindig ugyanazt a szöveget fogja beírni a fileba majd kiolvasni, szóval gondold át, hogy tényleg ezt akarod-e? A kód futása után a $link változóban éred el a kiválasztott sor tartalmát, pl. beleírhatod egy html <a> tag-be.
(#10240) PazsitZ
Az alap problémában nem szerializált formában van a fileban az adat, továbbá kérdéses, hogy mennyire segíti a megoldás megértését a kódod nagy részét kitevő zaj (kiírások, $_GET feldolgozás, stb)[ Szerkesztve ]
-
RootRulez
félisten
-
cucka
addikt
válasz PazsitZ #10242 üzenetére
Egy ötlet volt, hogy most GET-ből van a jóistentől jön a link szabadon eldönthető.
Pont ezért jegyeztem meg halkan, hogy semmi szükség rá egy példakódbanAzt feltételezem írni a másik esetben is kell, önmagától ritkán mászik be és ki az adat a fájlból.
Úgy értem, az eredeti problémafelvetésben ott volt, hogy soronként 1 link van a file-ban, lásd #10115(#10243) RootRulez
A sor végén elfelejtettem lezárni az egyik zárójelet, az a baj. (Fejből írtam a kódot, bocsánat)[ Szerkesztve ]
-
cucka
addikt
válasz RootRulez #10245 üzenetére
Lefuttattam és rájöttem, hogy elcsesztem a kódot két helyen: a file beolvasásnál a sorok tartalmába beolvasom az újsor karaktereket is, illetve az unset-et rosszul hívom. Javítva:
function isUrl($val){ return $val != ''; }
$linkek = array_filter(file("d:\linkek.txt", FILE_IGNORE_NEW_LINES), 'isUrl');
$tkey = mt_rand(0, count($linkek)-1);
$link = $linkek[$tkey];
unset($linkek[$tkey]);
if (count($linkek)==0){
$linkek[0] = 'előre megadott szöveg';
}
file_put_contents("linkek.txt", implode("\n", $linkek)); -
RootRulez
félisten
No, ez működik (miután kitöröltem a D:\-t), de notepaddal nincsenek új sorban (minden link egy sorban van). Notepad++-al viszont sorok vannak... Bár a sorok nem hatnak meg, csak addig kell, amíg feltöltöm a txt-t, a későbbiekben nem kavarhat be a PHP fájlnak az, hogy nincsenek sorokban a linkek?
═════════════════════════════════════════
-
-
cucka
addikt
válasz RootRulez #10247 üzenetére
notepaddal nincsenek új sorban (minden link egy sorban van). Notepad++-al viszont sorok vannak
Az utolsó sorban az implode-nál a "\n" okozza a furcsaságot. A unix-szerű rendszereken ezzel a speciális karakterrel jelölik a sor végét, windows-on viszont "\r\n"-el (mac-en pedig "\r"-el). A problémád tehát lényegében annyit jelent, hogy a windows notepad-ja nem elég intelligens ahhoz, hogy észrevegye, a file-od unix-féle sorvégeket használ. A php és a notepad++ gond nélkül kezeli mindkét sorvége jelet.mod: a "\n" és a "\r\n" helyett érdemesebb a php beépített PHP_EOL konstansát használni, ez a php-t futtató rendszernek megfelelő sorvége jelet tartalmazza.
[ Szerkesztve ]
-
RootRulez
félisten
Android program honosításnál találkoztam már ezzel a \n-el.
a "\n" és a "\r\n" helyett érdemesebb a php beépített PHP_EOL konstansát használni, ez a php-t futtató rendszernek megfelelő sorvége jelet tartalmazza.
Ez azt jelentené, hogy a
file_put_contents("linkek.txt", implode("\n", $linkek));
írjam át arra, hogy
file_put_contents("linkek.txt", implode(PHP_EOL, $linkek));
??
[ Szerkesztve ]
═════════════════════════════════════════
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen