- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- One mobilszolgáltatások
- Apple iPhone 17 Pro Max – fennsík
- iPhone topik
- Xiaomi 14T - nem baj, hogy nem Pro
- Azonnali navigációs kérdések órája
- Android alkalmazások - szoftver kibeszélő topik
- Xiaomi 15T Pro - a téma nincs lezárva
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- VoLTE/VoWiFi
Hirdetés
(használd a CYBSEC25PH kuponkódot további 20 ezer ft kedvezményért!)
Új hozzászólás Aktív témák
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6572 üzenetére
Valóban, a jelenség fennáll, problémának azért mégsem nevezném. Azaz inkább a környezettől függ, hogy az-e.
El lehet választani az OOP-ot és az MVC-t, lehet jól működő MVC oldalt írni procedurális kóddal is, de objektumorientáltan egyszerűbb, és nagyban könnyíti a későbbi karbantartást, bővítést is.
Ajánlom pár komolyabb keretrendszerrel való ismerkedést - rengeteget tanultam például a symfony kódját böngészve, de nézegettem a cakephp és a kohana kódját is.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6570 üzenetére
Van egy file, aminek postol a form (ez a controller), és van egy template, amit meg majd a user lát (ez a view). Ha a kérés get, akkor rögtön megy a view-hez a futtatás, semmi extra nem történik. Ha a kérés post, akkor is ugyanez a file kapja, de formfeldolgozás is történik. Ha invalid, vissza a viewhez (és ha ekkor F5-öl, megjelenik az általad említett újraküldős kérés), ha valid, akkor pedig feldolgozás és redirect.
A form minden mezője úgy van elnevezve, hogy formneve[mezőneve], a formnak átpasszolom a $_POST["formneve"] tömböt, és ezeket validálja.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6568 üzenetére
Ugyanabban a kérésben, de nem ugyanabban a fileban
a form maga egy külön osztály, pontosan tudja magáról, milyen mezői vannak, azokat hogy kell validálni, szóval én csak átadom neki a postolt adatokat és megkérdem, valid-e
érvénytelen adatoknál meg feleslegesnek tartom a redirectelést, de ez ízlés dolga.
A post-redirect-get pattern eredeti célja az alkalmazás állapotát megváltoztató kérések (vásárlás, kommentelés például) duplázásának elkerülése volt. A keresés nem változtat az állapoton, én get-tel szoktam megoldani (általában úgy néz ki, hogy example.com/keres/mirekeresett) - így máris levan a gond az f5-ös újraküldésrő.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6566 üzenetére
A működés kb. a következő: van egy függvény (a controller), ami első körben példányosítja a formot, és átadja a view-nak. Az kiírja, a form actionja ugyanaz a file és függvény lesz. Másodszorra, mikor post-tal jön a kérés, hozzárendeli a form példányhoz a kapott adatokat, és ellenőrzi őket. Ha invalid, vissza ugyanahhoz a view-hez, csak most már hibaüzenetek is vannak, ha valid, akkor feldolgozza a formot (bejelentkezik a user, menti a komment, stb.), és redirectel.
MVC-vel dolgozom, valamint látszik a post-redirect-get pattern is.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6564 üzenetére
Első ponthoz: nem ugyanazon a fileon belül, de ugyanabban a kérésben szoktam kiírni a hibaüzenet, mint amiben elküldte a formot. Így ott vannak a post adatok, ilyenre feleslegesnek tartom sessionbe menteni őket és redirectelni.
-
Tele von Zsinór
őstag
Tegyük fel, hogy van n darab cimkéd, ezeket összesen k kategóriába akarod besorolni. Kategória alatt a felhőbeli nagyságot értem, mondjuk 1-6 közt. Ezekre megcsinálod a csst.
Cimkénkénti összeszámlálás után előfordulások szerint rendezed, az első n/k bekerül az első kategóriába, (n/k, 2n/k] a másodikba, stb. az utolsóig.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6508 üzenetére
Többet vársz, mint a script futásideje, mert a böngésződ először DNS-felold, felépíti a kapcsolatot a szerverrel, elküldi a kérést, az előállítja a választ, átküldi, és végül kölcsönösen zárják a kapcsolatot. Te a kódodban csak a válasz generálásának idejét tudod mérni.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6489 üzenetére
Egy framework nyilván lassú a teljesen általad írt kódhoz képest, de a kettő méretét nem is lehet összemérni - és manapság a fejlesztői órabér sokkal drágább, mint a processzoridő, ezért a fejlesztés gyorsaságán van a hangsúly. Ezekben segítenek nagyon a keretrendszerek.
A symfony összes teljesítményről szóló howtoja úgy kezdődik, hogy tegyél fel valami bináris cachet, mint az APC, ami ráadásul elég php-közeli is, és egyszerű telepíteni. Többszörösére ugrik vele a teljesítmény, mert így nem kell minden egyes kéréskor külön lefordítani a php fileokat.
Nyakatekert, hát... az egyik első php5.3-as framework, érthető módon különbözik az eddig megszokott módszerektől. Fejlesztői levlistán követtem, ahogy alakul, illetve a dokumentációjával is ismerkedek egy ideje - tanulni, szokni kell, de aztán remek lesz.
-
Tele von Zsinór
őstag
Mi van a mainframe változóban?
A joomla topicban lehet jobban jársz. -
Tele von Zsinór
őstag
válasz
Fecogame #6450 üzenetére
Hogy raktad fel a phpt?
Ha forrásból, akkor minden bizonnyal kelleni fog, a mostani binárisod phpinfo-jában megnézheted, milyen paraméterekkel lett fordítás előtt meghívva a configure.
Ha binárisból, akkor 95% hogy befrissíted, újraindítod a webszervert és kész is vagy.
-
Tele von Zsinór
őstag
válasz
Fecogame #6448 üzenetére
Az 5.3-ban történt néhány visszafele nem kompatibilis változtatás, valamint bejött jónéhány újdonság. Az 5.2 ág idővel megszűnik.
Olvasd át a migrálás leírását, aztán döntsd el magadnak, mire érdemes frissíteni.
Konfig attól függ, hogyan frissítesz (illetve hogy volt korábban telepítve). Nekem fejlesztői gépen (debian) nem kellett.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6437 üzenetére
engedélyezni kell az apachban, vagy abban amiben használod
a .htaccess fileok csak apache szerverrel működnek, a többiben teljesen máshogy működik a konfiguráció
-
Tele von Zsinór
őstag
válasz
Speeedfire #6424 üzenetére
Keveri a két dolgot: az interfacekben minden függvény absztrakt, de nem kell (szabad) kiírni. Sima osztályokban is lehet absztrakt függvény (ilyenkor azokat példányosítani sem lehet), ekkor ki kell írni.
Miért akarod kétszer (mindkét konstruktorban) beállítani? Felesleges.
A négyzeted használható téglalapként is. Itt nem olyan szigorú a típusvizsgálat, mint mondjuk c++ban, hisz az egy erősen, ez meg egy gyengén típusos nyelv. Annyi a lényeg, hogy a változó mögötti objektumnak legyen olyan függvénye, amit hívni akarsz, semmi egyéb.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6421 üzenetére
Vedd ki az abstract kulcsszót, felesleges, sőt: tilos. Úgyis mindegyik függvénye absztrakt, akkor minek kéne kiírni?
Korábbihoz: ez a függvényed hibás:
public function __construct() {
$this->szelesseg = $szelesseg;
$this->magassag = $magassag;
}Itt jön a notice, hogy nincs szélesség meg magasság változód - és jogos a panasz, mert nincs.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6404 üzenetére
Pontosan: ha exceptiont dobsz destruktorban, az fatal error.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6402 üzenetére
Ha nem kézzel semmisíted meg az objektumot, akkor erre azután kerül sor, hogy a szerver elküldte a választ a böngésződnek, és záródott a kapcsolat - szóval ne számíts arra, hogy a destruktorba bármit írva látni is fogod. Mégvalami, amit érdemes észben tartani: Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6395 üzenetére
Remek leírás, szép
@j0k3r!: a __call megkapja, milyen nevű függvényt akarsz meghívni és milyen paraméterekkel - aztán függvényen belül eldöntöd, mit akarsz ezekkel az adatokkal kezdeni. Valóban el lehet érni, hogy kívülről úgy nézzen ki, mintha túlterhelted volna, de ez nem változtat azon, hogy a php nem képes overloadingra. Default paraméterekkel lehet trükközni, de a gyenge típusosság miatt (egyelőre) nincs jobb.
@Speeedfire: akkor nézzük sorról sorra:
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}Van olyan tulajdonság amit be akar állítani? Ha nincs, akkor bizony hiba, és kész vagyunk.
Van olyan függvény, hogy "tulajdonságnévLekerdezes"? Ha igen, meghívjuk, és visszaadjuk, amit visszaad. Ha pedig nincs, akkor a tömb megfelelő indexű elemét adjuk vissza.A beállítás ezzel analóg logikával működik, csak ott nem visszaad, hanem beállít, és így a call_user_func() függvénnyel paramétert is átad.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6392 üzenetére
Valószínűleg saját fordítás, mert készítik egy ideje a php6-ot. Ott is van a neve végén, hogy dev verzió.
Korábbira: az általad adott kódban pont van egy xyBeallitas példa.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6379 üzenetére
A példaprogram lényegi része:
definiál egy tulajdonságok belső változót, benne létrehozva a helyet az érvényes tulajdonságoknak
definiál egy függvényt szuletesidatumBeallitas néven, ami az adott tulajdonság beállításával foglalkozik
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotAmit megmutat: hogy lehet általános magic settert írni úgy, hogy ha egy-egy esetben mégis spec. működés kell, megoldja. A getterben ott a párja, ami "tulajdonságnévLekerdezes" nevű függvényt keres.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6357 üzenetére
Arról nem is beszélve, hogy $e csak a catch blokkon belül van, amint annak vége, kikerül a scope-ból, és megsemmisül.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6316 üzenetére
Lehet valamennyire trükközni a noscript tag stílusával, hogy bár a domban hátul van, előrébb jelenik meg, vagy egyéb mód növeled a hangsúlyát.
A másik hozzászólásodhoz: örülök, hogy nem csak én vagyok rendszeres stack overflow felhasználó
Egy jól összerakott oldalnál az ajax megoldás nem egyszerűsít, inkább némi többletmunkát jelent - a plusz javascript, meg annak eldöntése, a szűk tartalmat akarja-e csak a user, vagy azt az egész layouttal dekorálva. És a fejlesztés úgy történik, hogy először megírod, aztán belenyúlsz egy kicsit, hogy ajax-szal működjön. Amennyire csak lehetséges, az oldalaimon törekszem a javascript nélküli használhatóságra. -
Tele von Zsinór
őstag
Ahogy előttem is írták: a munkamenet hosszát az alkalmazás határozza meg - komolyabb biztonságnál egyértelműen rövidebbre érdemes venni, a php alapbeállítása (1440 másodperc - 24 perc) egy elég jó arany középút. Ritkán tartom szükségesnek állítani.
Az "emlékezz rám" megoldások nem a session idő megnövelésével működnek, hanem plusz egy sütivel, ami mondjuk él egy hétig, és egyértelműen köthető egy felhasználóhoz. Az egyszerű megoldás az, ha ennek meglétét a bejelentkező oldal vizsgálja, ha létezik és érvényes, akkor rögtön továbbít is anélkül, hogy látnád a login formot.
Előfordulhat olyan helyzet, hogy egyetlen oldalon (vagy egy páron - az alkalmazásod méretéhez képest kevés helyen) kell hosszabb munkamenet, erre egy kerülőút: egy, csak azokon az oldalakon behúzott javascript, ami párpercenként egy ajax kéréssel a háttérben életben tartja a sessiont, mondjuk ötpercenként egy kéréssel legfeljebb 12 alkalommal, az plusz egy óra. Például az említett cikkírós oldalra jól jöhet, cserébe innentől JS-függő az alkalmazásod. Mai világban nem tragédia, cserébe ne feledd figyelmeztetni az ilyenre a felhasználót egy jól elhelyezett noscript taggal.
Adatbázisban tárolás, erről megoszlanak a vélemények, kap hideget is, meleget is. Akkor tagadhatatlanul hasznos, ha több gépen elosztva van az alkalmazás egy load balancer mögött, ilyenkor kénytelen vagy valami központi megoldást használni, amúgy bőven jó a php.ini-ben beállított, általában fileban történő mentés.
IP, useragent ellenőrzés. Ismét azt mondom, hogy a szükséges biztonsági szint a fő meghatározó, de: a useragent ritkán változik, az ipvel viszont vigyázz: az országban is több szolgáltató van, aminél több user van egy ip mögött, esetleg bonyolítva azzal, hogy egy user ipje is változik kérésről kérésre attól függően, melyik proxy épp van legkevésbé terhelve.
Saját hash generálás felesleges, de amikor változik az authentikációs szint (be- és kijelentkezés, plusz jog kiadása vagy annak elvétele) érdemes egy session_regenerate_id() hívást intézni, ez elég jó védelem a session fixation támadások ellen.
-
Tele von Zsinór
őstag
válasz
TomyLeeBoy #6290 üzenetére
Van egy nl2br nevű függvény, azzal inkább.
@j0k3r!: a <br> pontosan ugyanannyira valid, mint a <br/>, csak az egyik html, a másik xhtml.
-
Tele von Zsinór
őstag
Na igen, hosszminimum felállítása is okos dolog. Viszont itt főleg arról van szó, mikor valahogy kikerül az adatbázisod - a lényeg, hogy ne lehessen egyszerűen visszafejteni a jelszót, és ugyanazt a felhasználónév/jelszó párost végigpróbálgatni más oldalakon.
@Speeedfire: jogosan panaszkodik, tényleg magára irányít. A mai világban már kikerülhetetlen az ajax, halogathatod, de megúszni nem fogod. Valami JS framework rengeteget segít, manapság a legelterjedtebb a jQuery, és nem csak az ajaxszal kapcsolatos egyszerűsítése miatt. Jó a dokumentációja, megéri belenézni.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6254 üzenetére
A DomNodeList nem ArrayAccess interface, szóval $links[$n] helyett $links->item($n).
Másrészt a hibát okozó sor a $links->getAttribute() hívás, ami nincs is az én kódomban, nézd meg újra.A $n, $m változók feleslegesek (ezeket te az első és utolsó indexeknek használod) - a domx query összeállításakor megmondom neki, hogy csak a $_GET["start"] pozíció utáni linkek érdekelnek.
Most nincs időm kódot mutatni, de csináld azt, hogy foreach-csel mész, benne növelsz egy számlálót, ha az eléri a százat -> break. Ezen kívül a ciklusmagban mented a filet.
A mag után ha a számláló nem nulla (azaz volt feldolgozott link), akkor headerrel átirányítod úgy, hogy az új start a kapott start + a számláló értéke.A végén az url összeállítós részt nézd meg mégegyszer, a paraméter neve lemaradt.
A jelszavas témához: az md5 nem kódolás, hanem hashelés - pont az a lényege, hogy nem visszafejthető, az egyetlen törési módszer a brute force. Ebből a szempontból egyébként az md5 elavult, úgynevezett rainbow table módszerrel nagyon rövid idő alatt törhető a nagyjuk.
Ennek nehezítésére az egyik lehetőség a saltolás, amikor egy userenként más-más stringet fűzöl a jelszóhoz, és azt hasheled - így felhasználónként külön rainbow table kell, drasztikusan lassítva ezzel a törési kísérleteket.
Másik lehetőség egy erősebb algoritmus használata, mint az sha1 (160 bites 128 helyett).
Legjobb a kettő együtt: saltolt sha1. -
Tele von Zsinór
őstag
válasz
Speeedfire #6249 üzenetére
Ez is egy megoldás.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6247 üzenetére
Ajaxot csináltál már? Nem bonyolult, a gondolatmenetem meg kifejtem bővebben:
ha nincs start paraméter, akkor egy olyan oldalt kap a kliens, ami betöltődésekor beállít egy változót nullára, majd elindít egy ajax kérést a háttérben, amiben átadja ezt a változót, mint start.
Az ajax kérés a start paramétertől indulva (annyiadik linktől) lement mondjuk 100 linket az oldalról, majd kiírja, hogy hányat mentett le (és csak ennyit ír ki).
Az eredeti oldal fogja ezt a számot, növeli ennyivel azt a bizonyos változót, majd új ajax kérést indít.
Az egész addig ismétlődik, amíg valamelyik kérés nullát nem ad vissza - azaz elfogytak a lementendő linkek.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6245 üzenetére
Valószínűleg lejár a futásidő. Ingyenes tárhely, szóval valószínűleg tiltva a set_time_limit (azért nézd meg).
Ötlet: az oldal, ha paraméter nélkül hívod meg, csak annyit csinál, hogy ajax-szal meghívja önmagát mondjuk százasával növekvő start paraméterrel egész addig, amíg van mit letölteni (az ajax hívás eredményéből mondjuk).
-
Tele von Zsinór
őstag
válasz
Speeedfire #6243 üzenetére
Az általam tesztelt kód és a kimenetének eleje:
maerlyn@biliskner:~/tmp$ cat tmp.php
<?php
$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML(file_get_contents("http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/"));
libxml_use_internal_errors(false);
$domx = new DOMXPath($domd);
$links = $domx->query(sprintf("//a[position() >= %d]", isset($_GET["start"]) ? (int)$_GET["start"] : 0));
foreach ($links as $link) {
$url = 'http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/' . $link->getAttribute("href");
echo $url . "\n";
}
maerlyn@biliskner:~/tmp$ php tmp.php | head
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/../
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/6in4_8-1_all.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/6scripts_0.1-6_all.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/6to4_3-1_all.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/6tunnel_0.11rc2-2_ar71xx.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/GraphicsMagick-jpeg_1.3.8-2_ar71xx.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/GraphicsMagick_1.3.8-2_ar71xx.ipk
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz
http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/ahcpd_0.51-3_ar71xx.ipkAmire felhívnám a figyelmet: az xpath queryben nem pos(), hanem position() van, valamint a hrefben csak egy relatív url van, hozzá kell csapni az elejéhez a base urlt.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6241 üzenetére
1, flush() kell neked.
2, kimaradt egy ] és egy ): $links = $domx->query(sprintf("//a[pos() >= %d]", isset($_GET["start"]) ? (int)$_GET["start"] : 0));
-
Tele von Zsinór
őstag
válasz
Speeedfire #6238 üzenetére
2. ahogy látom, most is kiírod, ha valamelyik kész (echo $i.'. Ok.';)
1. igen, meg lehet. Ráadásul egyszerűbben is, mint ez az explode-os bohóckodás, nem véletlen mondtam korábban a php DOM műveleteit. A következő kód feltételezi, hogy a lista.txt a korábban látott filelista html kódja, vagy nagyon hasonló:
$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML("lista.txt");
libxml_use_internal_errors(false);
$domx = new DOMXPath($domd);
$links = $domx->query(sprintf("//a[pos() >= %d", isset($_GET["start"]) ? (int)$_GET["start"] : 0);
foreach ($links as $link) {
//$link->getAttribute("href") ellenőrzése, ha kell, mentése
}Ennek át tudsz adni get-ben egy paramétert, és az annyiadik linktől kezdi. Ha nem adsz meg semmit, az elsőnél. Csak gyorsan beírtam ide, szóval nem tesztelt kód.
-
Tele von Zsinór
őstag
válasz
fordfairlane #6235 üzenetére
A PDO magától nem csinál ilyet, csak ha prepared statementeket használsz. De azt tudja a mysqli is.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6218 üzenetére
Curllal lekéred a filelistád. Dommal kiparseolod belőle a linkeket. Curllal egyenként letöltöd és mented őket.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6198 üzenetére
A __get és __set metódusokat rendszeresen használom, __sleepet és __wakeupot talán még soha, kísérletezésen kívül. Szintén hasznos még a __call és a __callStatic.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6188 üzenetére
A hibaüzenet okát kerestem, nem az összes hibát
@Speeedfire: ugye az class bar extends foo akart lenni?
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6185 üzenetére
A függvény definíciója legyen előrébb, mint az első hívása.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6174 üzenetére
Nem tudok sajnos, angol cikkekből szedtem össze. A weblaboron nézz körül, de figyelj oda az időpontokra, a régi cikkek könnyen lehet, hogy elavultak mostanra.
@Inv1sus: ha kivárod az RC-t, máris jó vagy - onnantól még a belső működés változhat, de az API fix - azaz érdemes elkezdeni tanulni. Én is arra várok a komolyabb elmerülés előtt.
@Brown ügynök: twig, érdekes kérdés. Nekem szimpatikus, olvasgattam leírásokat a héten és remek dolgokat tud. Olvasd át a dokumentációját és meglátod. Ha nem tetszik, még mindig ott a lehetőséged a php-t használni, mint template-nyelv: valahogy úgy fognak kinézni a template nevek, hogy HelloBundle:hello.html.twig. Melyik bundle melyik actionja, mi a kimeneti formátum, és melyik renderert használja. Ha a végén twig helyett php-t írsz, máris azzal fogja értelmezni.
-
Tele von Zsinór
őstag
Konvenció kérdése. Ha kell valami validálás, hogy érvényes értékre akarod-e állítani, vagy egyéb tevékenységet is kell akkor futtatnod, akkor kell a setter. Ha semmi ilyesmi, és csak egy állítást végezne belül, akkor felesleges.
Én szoktam létrehozni settereket, ahol érvényes típusra castolom, amit kapok.Az osztályba csoportosítás jó dolog, de ésszel kell csinálni, nehogy túllőj a célon. Példányosítást az abstract kulcsszóval tudod megakadályozni.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6127 üzenetére
A web mappádban legyen az sf, azon belül az sf_* mappák - ezekben van például az alap 401-es, 404-es, 500-as hibák összes függése, jópár egyéb dologgal.
A plugint kézzel telepítés után engedélyezni is kell a ProjectConfiguration-ben, ezt is megtetted?
Css, képek valószínűleg azért nem jelentek meg, mert nem futtattad a plugin:publish-assets taskot.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6124 üzenetére
Symlinket csak unix filerendszeren tud csinálni, windowsoson nem - ezért kapsz hibát. Nem tudom, miért nem sikerül rájönnie, hogy winen vagy. A lib/vendor/symfony/data/web/ mappa tartalmát másold át a projekt web mappájába, és tégy hasonlóan az összes pluginnel: <pluginnév> mappába pakold be a plugins/<pluginnév>/web mappa tartalmát (ha van).
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6103 üzenetére
Urban legend. Amíg nincs benne változó, addig nincs mérhető különbség az idézőjel és az aposztróf sebessége közt.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6060 üzenetére
Azt írod, "ez így nem működik". Mert mi a hiba? Működie kell úgy, ha mégsem, elrontottál valamit. A limitnek átadott $max-ot ha kap, azt adja át, ha semmit, akkor meg a default 10-et - nem értem, miért kéne ott közvetlenül fix értéket megadni.
Van olyan kategóriád adatbázisban, ahol a slug mező értéke "design"?
A jobeet svn szerverén meg tudod nézni, hogy kéne kinéznie a kódodnak az adott nap végén. Nem tökéletes, mert ez még az 1.2-höz való verzió, de nem volt sok változtatás.
-
Tele von Zsinór
őstag
válasz
Scobbyka #6048 üzenetére
Jobb megoldás: a webszerveren fel tudod mountolni a samba megosztást (-t cifs, autentikációt is tud, gugli), és beállítod az apacsot, hogy szolgálja ki.
Ha saját autentikációt akarsz, akkor azt megírod phpben, és csak ezen keresztül engedsz eljutni a sambás mountig.
Pár napja próbáltam ki, gyönyörűen ment a mount, fstabból is.@Inv1sus: proci használat, szabad ram ilyenkor hogy áll? A netbeans mindkettőre rászáll rendesen.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6023 üzenetére
Nagyon régi a cikk, azóta lényeges dolgok változtak a symfonyban. Az ebben leírtak szerint telepítsd: Jobeet day 01.
Átfutottam gyorsan, és inkább ne használd a weblaboros cikket. A leírt parancsok nagyja már nem, vagy nem úgy működik, mint 2007-ben, az egyéb változásokról nem is beszélve. A fentebb linkelt Jobeet tutorial alapján haladj, ez a legfrissebb stabil, 1.4-es verzióhoz való.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6021 üzenetére
Az rossz helyre mutat. Korábban pear-es symfonyd volt, vagy te raktad a lib/vendor/symfony mappába?
Itt a helyes sor a ProjectConfiguration-ből a kézi telepítéshez:
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';Magának a symfonynak nincs hozzá szüksége, csak ha használni akarod a plugin:install parancsot. Régen az egész keretrendszert abból volt ajánlott telepíteni, mostanra a kézi, lib/vendor/symfony-ba helyezés az ajánlott módszer. Pluginek telepítésére pedig a kézzel plugins mappába pakolás, és nem a plugin:install.
A pear egy központi kódgyűjtemény, vannak benne okos dolgok, de inkább kézzel töltögetem, mint az installerét használom - így egy helyen tudom tartani a projektem, nem szétszórva.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #6019 üzenetére
Nézd meg, a symfony n. fileban mutatott helyen ott-e a ProjectConfiguration osztályod, illetve annak az elején van egy require, ami magát a keretrendszert húzza be, az is megfelelő helyre mutat?
Ilyen hibát biztosan nem okozott a cache:clear task, mi mást csináltál még?
-
Tele von Zsinór
őstag
válasz
Speeedfire #6016 üzenetére
Te tudod, én csak a saját gépemen intézném a fejlesztést, hogy ne függjek külső dologtól - a te felállásoddal például csak otthonról tudsz fejleszteni (igen, tudom, hogy ha nagyon akarod, távolról is elérhető lenne, de akkor meg felmerül a security kérdése).
-
Tele von Zsinór
őstag
válasz
Speeedfire #6010 üzenetére
Nem a routerben, a hosts fileban. Windows alatt nem tudom, ez merre található, de keress rá (simán csak "hosts", kiterjesztés, egyebek nélkül). Ott tudod beállítani, hogy a virsli.local host az a ::1 ipre legyen feloldva.
@Brown ügynök: a cache:clear (avagy cc) parancs csak a cache mappa tartalmát törli, mást nem csinál. Kiadtad a "plugin:publish-assets" parancsod? A css-ek hiánya arra utal, hogy nem.
Gyorsan belenézve a symfony.bat-ba az az ugyanott levő symfony filet próbálja futtatni, ott van az? -
Tele von Zsinór
őstag
válasz
Speeedfire #6008 üzenetére
Azonos domainen fut két rendszer, és meg akarod különböztetni őket - legegyszerűbb módszer erre a session cookie átnevezése, amit a session_start() előtt kiadott session_name() hívással tudsz megtenni. Például session_name("virsli"); után nem a szokott phpsessid lesz a neve.
Amúgy én úgy szoktam csinálni, hogy minden projektnek létrehozok egy-egy apache VirtualHost-ot, projektneve.local néven, megfelelő DocumentRoottal, és ezt felveszem a /etc/hosts-ba is. Innentől külön domainen futnak, elkerülve például az ilyen problémákat.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6005 üzenetére
Úgy érted, hogy két, azonos domainen futó sessiont? session_name() kell neked.
@n-tek: php-ból inkább ne akarj. SSH-zz be root-ként a szerverre, és állítsd át a tulajt ott.
-
Tele von Zsinór
őstag
válasz
Speeedfire #6001 üzenetére
Az az oldal megjelenjen? miért nem checkbox?
-
Tele von Zsinór
őstag
válasz
Speeedfire #5994 üzenetére
008 az egy értvénytelen érték. A 0-ás prefix azt jelzi, hogy ez a szám nyolcas számrendszerben van, de ott meg nincs nyolcas digit. Ha stringnek akarod, akkor tedd idézőjelek közé.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5990 üzenetére
Amire te gondolsz, az a schema. Melyik az a távoli mappa? Tippem szerint a temporary mappád, ezért rakja oda. És igen, ezekre csak a build folyamat során van szükség.
@Speedfire: lemaradt a <form> tag enctype paramétere, ami kell a feltöltés helyes működéséhez. Legyen "multipart/form-data".
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5988 üzenetére
Nem értem a kérdést, pontosítsd!
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5986 üzenetére
Ez annyival jobb, hogy már megvan a pdo_mysql driver, csak a DB szerver adatai nem stimmelnek, vagy az nem fut. Ellenőrizd, fut-e a mysql szerver, illetve hogy a config/databases.yml-ben stimmelnek-e annak adatai.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5983 üzenetére
Két külön php.ini van a két futtatási környezetnek: egy a webszervernek (easyphp-ben gondolom apache van), egy pedig a CLI-nek, azaz a parancssornak. A hibaüzenetből egyértelműen látszik, hogy neked a cli által használt fileban nincs engedélyezve a pdo_mysql driver.
A parancs, amit korábban írtam, nem megy windowson, szóval tedd a következőt: start-futtatás, "cmd", aztán oda "php -i > phpinfo.txt", erre az aktuális mappában létrejön egy új file, ami a cli beállításait tartalmazza. Innen ki tudod lesni, hol van a php.ini, amit szerkesztened kell.
-
Tele von Zsinór
őstag
válasz
Speeedfire #5979 üzenetére
Tipp: döntsd el, melyik eszköztár kell és melyik nem (nálam például csak a projekt nézet maradt oldalt, felül is csak ami nagyon kell), valamint próbáld ki a Droid Sans Mono betűtípus - az android platformra készítették, kifejezetten azért, hogy kis méretben is jól olvasható legyen. Átállítod pár ponttal kisebbre a méretét, máris több kódot látsz. Azért annyira kicsire ne vedd, hogy fárasszon az olvasása.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5973 üzenetére
Akkor egyszerű: engedélyezd a pdo_mysql extensiont a megfelelő php.iniben. A path-nak ehhez semmi köze.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5970 üzenetére
Ha ez csak fejlesztői gép, és doctrine-t fogsz használni, figyelmen kívül használhatod a figyelmeztetéseket.
A parancssor más php.ini filet használ, mint a webszerver. Terminálban php -i | grep php.ini megmondja, hol kerest a CLI-ét.
-
Tele von Zsinór
őstag
Részlet a safe mode dokumentációjából:
move_uploaded_file(): Checks whether the files or directories being operated upon have the same UID (owner) as the script that is being executed.
Szóval vagy kapcsold ki a safe módot (amúgy is ajánlott, 5.3-al deprecated), vagy legyen ugyanaz a tulaja a célmappádnak, mint aki a php filet futtatja.
-
Tele von Zsinór
őstag
válasz
Speeedfire #5933 üzenetére
Nem, lásd a képet:
Itt azok a mezők tárolják, van-e a felhasználónak olyan joga. Később meg minden műveletnél megvan, hogy milyen jog kell hozzá, anélkül egy (normálisan kinéző) 403-as hibát kap.
-
Tele von Zsinór
őstag
válasz
RedSign #5930 üzenetére
Bőven jó hely a session az ilyenek tárolására - erre találták ki. Osztott webhostnál lehet biztonsági kockázata, de még mindig sokkal jobb, mint bármi más. Én oda tárolok mindent - felhasználói adatok, jogosultságok, többlépéses formok esetén akár még az előző formokban érkezett adatokat is.
A témához: ha egy 1..3 skálán kifejezhető, milyen jogosultságaid vannak, akkor ez a rendszer elég. Kicsit rugalmasabb, ha a felhasználók táblába jogosultságonként felveszel egy boolean (vagy mysql esetén tinyint(1)) értéket, és azzal jelzed, lehet-e olyat neki, avagy nem. Bejelentkezéskor mented sessionbe, és bármikor később eléred.
Ami weblaboros cikket linkeltek az egy felületes olvasásra jó és nagyon rugalmas megoldás, de ha az OOP még nem jóbarátod, felejtsd el (meg bármi összetett rendszert).
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #5920 üzenetére
Nekem sem működik, Chrome 9.0.597.83 beta, Ubuntu 10.10 x64.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5916 üzenetére
Alternatíva: a firefox Web Developer n. kiterjesztésének van "Validate local HTML" funkciója - feltölti neked a generált kimenetet, és nyitja új fülön a validátort.
Másik alternatíva: a firefox HTML validator kiterjesztése, ami a statusbarban ikonnal jelzi, valid/warningos/invalid-e a kódod, illetve a forráskód nézetben kiemeli őket és magyarázza. HTML5-öt sajnos nem tudja.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5909 üzenetére
Tehát legenerálod a kimenetet, lemented, és azt töltöd fel, vagy a php fileod töltöd fel?
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5903 üzenetére
A generált kimeneted validnak írja.
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5899 üzenetére
Attól függ, mit csinál a switch.php. Kód, pláne hibaüzenet nélkül csak találgatni tudunk.
Úgy érzem, nem vagy tisztában a php működésével. A szerveren fut le, és a kliens a generált kimenetet kapja meg - így a validátor sem látja a php kódod, csak amit kiír.
-
Tele von Zsinór
őstag
Látatlanban úgy tippelem, kényelemből a webroot alá mented őket. Ezen logika szerint ha valaki feltölt egy .php filet, simán eléri (és az lefut!), azaz azt csinál a szervereden, amit akar.
Ne tartsd meg az eredeti nevet (már csak az ütközések miatt sem), inkább generálj - az objektum adatbázisbeli id-je remek kiindulópont. És ellenőrizd, a $_FILES-ben levő mime típus nem megbízható, azzal ne foglalkozz. Képekre jó módszer az imagecreatefrom* függvények használata annak eldöntésére, kép-e a file, illetve az engedélyezett típusok közé tartozik-e.
Jól látom, hogy az egy hosszú és egy rövid ü? Nálam hamis.
mysql> select if("ű" = "ü", 1, 0);
+-----------------------+
| if("ű" = "ü", 1, 0) |
+-----------------------+
| 0 |
+-----------------------+ -
Tele von Zsinór
őstag
válasz
Brown ügynök #5883 üzenetére
Az oldalad validságának semmi köze ahhoz, hogy mivel csinálod, a html kimenet számít. A w3c validatora jól elmondja, hol és milyen hiba van, esetleg hogyan tudod javítani.
-
Tele von Zsinór
őstag
session_id — Get and/or set the current session id
-
Tele von Zsinór
őstag
válasz
Speeedfire #5844 üzenetére
$_POST = array_map("trim", $_POST);
-
Tele von Zsinór
őstag
-
Tele von Zsinór
őstag
válasz
Brown ügynök #5833 üzenetére
Az XSS kicsit más, ennek nem tudom, mi a neve.
htmlentities() itt nem ér semmit. A legjobb módszer az ilyen, dinamikus include-olásnál, ha van egy tömböd az érvényes adatokkal, amit meg kapsz, megnézed, benne van-e ebben. Ha igen, includeolod, amúgy meg irány a default.
Ezzel egy tömböt kell karbantartanod, nem egy hosszú switch szerkezetet.
Új hozzászólás Aktív témák
- Azonnali A320 B350 X370 B450 X470 A520 B550 X570 chipset alaplap felvásárlás személyes/csomagküldés
- Bomba ár! Lenovo ThinkPad X260 i5-6GEN I 8GB I 256-512SSD I 12,5" HD I HDMI I Cam I W11 I Garancia!
- Külföldi csomagszállítás Packeta csomagpontokon keresztül!
- Fujitsu LIFEBOOK E449 i3-8130U 12GB 512GB 14" FHD 1 év garancia
- BESZÁMÍTÁS! ASROCK B650M R5 7500F 32GB DDR5 1TB SSD RX 7700XT 12GB Zalman Z1 PLUS A-Data 750W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest