Salam , php – de qarşıma belə problemlər cıxır,
Məsələn:
$a = mysql_query("SELECT * FROM `mysql_baza` where lis ='".$lis."'"); $users = mysql_fetch_array($a); $duel = $users['duel']; if($duel != 1){ @mysql_query("UPDATE `mysql_baza` SET `duel` = '1' , `bonus` = bonus + '1' WHERE `lis` = '".$lis."';"); }
Normal halda bonus 1 artandan sonra ikinci artmamalıdır, amma linkin üstün’ tez-tez dayanmadan kilik edəndə bonus 2-3 dəfə artır. Bu problem neden ola biler? yazılan funksiya adi qaydada tam qaydasında işleyir. Yalnız linkin üstüne tez tez klik edəndə bu problem olur.
Verilmiş cavablar və yazılan şərhlər (7 cavab var)
1
Salam. Problem siz deyən kimidirsə, deməli bir klikdəki prosesdə update getməmiş o biri klikdəki proses işə düşür və hər ikisi if baryerini aşa biir. Çünki biri bitməmiş o biri işə düşüb. Maraqlıdır siz əllə klik etməklə mikrosaniyələrdə baş verən proseslərin arasına necə girə bilirsiniz, yəqin servriniz ləng işləyir. Belə edin, table-a last_update_time sütunu əlavə edin, oraya hər dəfə ən son uptade-i set edib php time ilə yazın.
Sonra if($duel != 1) şərtini belə əvəz edin if($duel != 1 and (time()-$last_update_time)>2000) //yəni son update-dən heç olmasa 2 saniyə keçsə işləsin.
Məncə bununla işləyər. İndi təbii ki, tam dəqiq kod yazmadım, sadəcə ümumi ideya kimi verdim, ki vaxt kəsikləri ilə kontrol edin bu prosesi.
0
Bu hissədə heç bir səhvlik yoxdu. Bundan əvvəlki və sonrakı sətirləri də yazsan nəsə tapmaq olar. Göstərilən hissə kifayət etmir.
0
E. Hacı , Yazdiqiniz cavaba gore cox sagolun.
Men sizin dediyiniz kimi variantlar iwletmiwem. hardasa 50% qarwisini alir.Bu problem esasen Google Chrome ile daxil olan istifadecilerde daha cox olur.Istifadeciler bunu bildiklerne gore her kes linkin ustune tez tez klik edir,buda daha cox problem yaradir.
E. Hacı , Yazdiqiniz cavaba gore cox sagolun.
Men sizin dediyiniz kimi variantlar işletmişem hardasa 50% qarşisini alir.Bu problem esasen Google Chrome ile daxil olan istifadeçilerde daha çox olur.Istifadeçiler bunu bildiklerine gore her kes linkin üstüne tez tez klik edir,buda daha cox problem yaradir.
istifade etdiyim hostingler meşhur şirketler olub ,biri http://www.godaddy.com/ .
Yiqdiqim sciriptde PHP -lerde SELECT * emrinden istifade etmişem, problem bundan ola biler? Cün ki optimal variant SELECT setr1,setr2 gosterilir.Istifadeçi çoxaldiqca bu problem dahada artir, hetda shirket terefinden mysql baza baqlanir.Sebeb eyni anda
mysql bazaya gönderilen sorgularin çoxluqu , ve yaxud saytiniz bizim
prosessor teleblerini ötüb.
1
Yox, o halda sizdə kodda başqa yerdə problem var əmin olun. Çünki siz yazan kodda belə bir hal olmamalı idi, mən hər ehtimala qarşı 100% qarşısını alacaq əlavə bir şərt də dedim. O şərtlə belə bu hal təkrarlanırsa, deməli sizdə kodda başqa yerdə problem var, səhvi burda axtarmayın.
Qaldı Godaddy-yə, shared hostinq ancaq statik vizitka saytları üçün yarayır. Sizin sayt xidməti saytdırsa mütləq və mütləq VDS(Virtual Dedicated Server) almaq lazımdır. Əks halda tez-tez belə problemlərlə üzləşəcəksiniz sizdən xəbərsiz ya mysqli bağlayacaqlar ya hostinqi suspend edəcəklər i high cpu load verir filan.
0
Meslehetli hosting ve ya reseller veren şirket hansıdır ?
Hal hazırda bele hallar azalır.
Bu kodla 50% problem yaranırdısa
Bu halda ise 10-20% e enir
Godaddy şirketi MYSQL-i baglayanda php lerde SELECT * emrinden istifade etmemeyimi bildirdi.
Sciript daha optimal yıqılmalıdır meselen: SELECT setr1,setr2.
Fikrimce eyni anda 150-200 nefer bir klike vuranda hemcinin mysql-da saysız geder sorgular olarsa,
SELECT * emri melumatlari oxumaqı lengidir.
Istifadeci az olanda, mysql tez tez silinende bele problem olmur.
1
Nə hostinq nə reseller. VDS lazım. Ucuz və optimal alman Hetzneridir. Normal qiymətə isə Site5, Godaddy və.s.
1
10-20% söhbəti olmamalıdır burda, ya doğru olmalı ya da olmamalı. Yəni 0% olmalıdır, əks istənilən hal kodda səhv var və ya hostinqdə mysql serverdə problem var deməkdir.
Qaldı Godaddy-yə, dediyim kimi * ya field adı yazmaq bunlar xırda optimizələrdir, bunları sizə onlar deməli deyil, bu sizin şəxsi işinizdir, ona görə də öz serveriniz olmalıdır.
Sual verin
Cavab verin