Diskuze: funkcia uniqid()
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
proč na ID nepoužíváš AI (auto increment)?
My to chápeme a preto ti poradil... Ide o to že prečo to hádzať do PHP keď DB si to vie ošetriť sama, stačí ak pri vytvorení tabuľky zaškrtneš políčko A_I potom sa ti určite nestane že budú existovať dve rovnaké idčka...
to uz ale viem ale ten projekt je celkom rozsiahli a nerad by som ho prerabal ak netreba preto moja otazka je ci je to dostatocne bezpecne s tym uniqid() otazka bola na bezpecnost tejto funkcie nie ako sa to ma robit ale aj tak som vdacny za odpovede ale mozete mi prosim odpovedat na moju otazku?
Pokud chceš nějakou finální odpověď, tak funkce uniqid() je pro generování unikátního ID naprosto nevhodná, což platí i pro jakoukoli jinou funkci.
Toto je záležitost databáze.
Pokud máš starší tabulky, tak si stáhni třeba nástroj Adminer (je kompletně v češtině i slovenštině), který umí zpětně všem záznamům AI dopočítat a přidělit (při změně tabulky). Není to složité a zároveň to umožní dělat různé databázové fígle, třeba navázat mezi tabulkami relace a podobně.
jop ale proc je nevhodna? citma ze sa to generuje podla timestampu ale ak bude cas nastaveny spravne tak by to malo byt v pohode? pokial sa neprestavi napr dozadu... alebo?
A co když v jeden okamžik přijde více požadavků na generování ID? V takovém případě se může stát, že vznikne duplicita a ID už nebude unikátní.
Myslíš si, že se to stát nemůže? Cha... stačí, aby na stránku přišel nějaký rychlý robot, co pošle více requestů najednou (což může mimochodem udělat i Google) a hned ti duplicita vznikne.
Síla databází je právě v tzv. bufferování, kdy se jednotlivé požadavky správně řadí a ID se negeneruje na základě času nebo nějaké náhody, ale na základě předchozího - což má mnoho výhod, třeba tu, že lze jednotlivá ID od sebe deterministicky odvodit a ihned poznat, které bude následující.
stranka je privatna bez pristupu z vonku, je to taky kalkulator a vypocty sa na nom budu robit mozno raz za den takze nejake dalsie problemi co by sa mohli vyskytnut?
Psal jsi, že se věci ještě učíš.
Pokud se chceš věci učit správně, tak se budeš muset smířit s tím, že právě použití AI je nejlepší způsob, jak ID generovat a všechno ostatní je (většinou) špatně.
Funkce uniqid() je přežitek z doby, kdy se ještě ukládalo do textových souborů.
Pokud chceš programovat správně, tak bys měl AI použít. Všechno ostatní je špatně (a určitě mi dá většina lidí za pravdu). Tečka.
opakujem ze ide o zastarali projekt ktory nemam cas prerabat pokial to nieje naozaj nutne je to stara vec v dalsich projektoch uz pouzivam AI ale jednoducho nechcem stracat cas tam kde nemusim ale myslim ze uz mam dostatocnu odpoved aj ked vecsinu odpovedi obchadza moju otazku dakujem vam krasne za diskusiu
Áno musíš ... Debilna odpoved na debilnu otázku
keby som to aj nechcel prerabat ale pytam sa na to PRECO JE TO NEBEZPECNE
keby som chcel vediet ako sa to ma robit spravne spytam sa AKO SA TO MA ROBIT
SPRAVNE ale chcem vediet PRECO JE TO NEBEZPECNE mozem sa snad spytat to co chcem
vediet samozrejme prijmam vase rady a som za to vdacny ale to mi staci napisat
raz ze mam pouzivat AI ja to s toho jedneho razu pochopim a to ze je debilna
otazka svedci o mne ale debilna odpoved to je uz nie moja vypoved pardon za
vyrazi nechcem viest diskusiu tymto smerom len nechapem preco ked sa spytam:
PRECO JE TO NEBEZPECNE
dostanem odpovede:
zda sa snad niekomu ze je tam niekde ODPOVED NA MOJU OTAZKU?
tymto uz ale uzatvaram diskusiu pretoze Jan Barášek mi poskytul dufam dostacujucu odpoved za co som mu velmi vdacny posledny prispevok Dominika Gavreckého povazujem za absolutne nevhodny
Proč je to nebezpečné? To jsem už psal - protože existuje možnost, že může vzniknout duplicita v místě, kde vzniknout nesmí?
A že se to nestane? Zatím možná ne, ale je dobré se na to připravit.
Některé lidi hold nemají zkušenost s úpravou staršího webu a některé změny mnohdy může způsobit více problému než užitku. Osobně pracuji pro web, který je zde cca 12 let a má návštěvnost cca 10 tisíc lidí denně a moc dobře vím, jak je těžké provést nějakou změnu. Obzvláště, když se web skládá skoro ze stovek souborů a různě propletené a spousta věcí se již používá a nepoužívá.. Naštěstí web již přepisuji.. To jen k trochu zamyšlení, že i dnes nemá tak jednoduché řešení jak se může zdát.
Náhradní řešení je se dotazovat na poslední ID v DB a podle něj přiřadit další. Je to sice o něco malinko náročnější, ale řešení to má.
Nebo mě napadá tvoje řešení s tím, že si hoď podmínku v případě chyby dotaz zopakovat a nebo si udělej nějaký log ve kterém případně můžeš vidět, kdy se vyskytla chyba a dle toho pak hledat jiné řešení.
Ako ti uz spominali, uniqid je nie prave najbezpecnejsie a v extremnych pripadoch moze nastat duplicita id. Algoritmus je uz dost zastaraly a nie velmi rozsiritelny. Samozrejme v pripade ze ukladas data do DB tak je najvhodnejsie pouzivat policko id s AI a indexom. Vsimol som si ze vsetci ti tlacia len autoincrement v sql datatabaze. Nikto ale nenavrhol alternativu k uniqid, teda nieco ine co by ti pomohlo generovat unikatne id v pripade ze nemas pristup k DB.
Ako teda generovat unikatne id bez DB?
Existuju nejake PHP kniznice a navody na internete, ktore sa o to snazia viac ci menej uspesne. Podla mojho sukromneho nazoru jeden z najaktivnejsich a najpokrocilejsich projektov je https://github.com/ramsey/uuid
Zobrazeno 18 zpráv z 18.