ทำให้ฟั่งชั่น php ทำงานเอง โดยไม่ต้องเข้าเว็บ ต้องทำยังไงครับ

เริ่มโดย parames3010, 07 ตุลาคม 2015, 00:43:04

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

parames3010

สมมุติว่าผมต้องการทำระบบเว็บให้ เพิ่มโบนัส ให้ User นั้นๆทุกๆ ชั่วโมง อัตโนมัติ โดยไม่จำเป็นต้องให้ User เรียกหน้าเว็บเพื่อให้คำสั่งทำงานครับ

เช่น Admin ต้องเข้าเช็คว่าแต่ละ User เนี่ยได้โบนัสอะไรเท่าไหร่ ประมาณนี้ครับ ถ้าให้เรียกจากฝั่ง User มันจะไม่ Realtime


โครงร่างเขียนไว้ประมาณนี้

if($time >= 3600)
{
 // x1 bonus
 mysqli_query($conn, "UPDATE users SET bonus = bonus + '$bonus' WHERE user = '".$_SESSION['user']."'");
}
if($time >= 3600 * 2)
{

// x2 bonus
mysqli_query($conn, "UPDATE users SET bonus = bonus + '$bonus' WHERE user = '".$_SESSION['user']."'");
}

แน่นอนว่าถ้า User ไม่ Login เข้าหน้าเพจ ตัวฟั่งชั่นมันก็ไม่ทำงาน แล้วทีนี้เวลา Admin เข้าไปเช็คก็ไม่รู้ว่าจริงๆ โบนัสแต่ละ User เท่าไหร่แล้ว จนกว่า User นั้นจะ Login เข้าหน้าเว็บ

ตอนนี้ผมคิดว่าจะให้ฟั่งชั่นเรียกใช้งานผ่านจากฝั่ง Admin แทน แต่ไม่รู้จะเขียนยังไงดี

ผมหรือผมต้องศึกษาเกี่ยวกับฟั่งชั่นไหนเพิมเติม ใครมีไอเดียแนะนำทีครับ เพราะผมค้นจาก Google แล้วยัง งงๆ

พอดีพึ่งเริ่มเขียน php คิดไรยากๆไม่ออกจริงๆ

ละก็ถ้าเป็นไปได้ ไม่อยากใช้ cronjob เข้ามาช่วยครับ พอมีวิธีอื่นไหมครับ?

ยังไงก็ขอบคุณล่วงหน้าครับ

:wanwan031:

BeerSkz

php จะรันก็ต่อเมื่อมีการเรียกครับ ดังนั้นถ้าไม่เรียก มันก็ไม่รัน คิดว่านอกจาก cron แล้วไม่น่าจะมีวิธีอื่นครับ

parames3010

อ้างถึงจาก: BeerSkz ใน 07 ตุลาคม 2015, 01:05:31
php จะรันก็ต่อเมื่อมีการเรียกครับ ดังนั้นถ้าไม่เรียก มันก็ไม่รัน คิดว่านอกจาก cron แล้วไม่น่าจะมีวิธีอื่นครับ

ถ้าสมมุติเรียกโดยผ่าน Admin แต่ข้อมูลไปเพิ่มลง User ต้องเขียน SQL ยังไงดีครับ

mysqli_query($conn, "UPDATE users SET bonus = bonus + '$bonus' WHERE user = '".$_SESSION['user']."'");


BeerSkz

อ้างถึงจาก: parames3010 ใน 07 ตุลาคม 2015, 01:09:02
อ้างถึงจาก: BeerSkz ใน 07 ตุลาคม 2015, 01:05:31
php จะรันก็ต่อเมื่อมีการเรียกครับ ดังนั้นถ้าไม่เรียก มันก็ไม่รัน คิดว่านอกจาก cron แล้วไม่น่าจะมีวิธีอื่นครับ

ถ้าสมมุติเรียกโดยผ่าน Admin แต่ข้อมูลไปเพิ่มลง User ต้องเขียน SQL ยังไงดีครับ

mysqli_query($conn, "UPDATE users SET bonus = bonus + '$bonus' WHERE user = '".$_SESSION['user']."'");



ไม่เข้าใจคำถาม 55555555555 รอท่านอื่น

parames3010

ประมาณว่าถ้ามีใครเรียกหน้าเว็บขึ้นมา จะทำการอัพเดตข้อมูลทุก User อะครับ

kororo56

ทำแบบนี้ก็ได้ เอาจำนวน วันที่สมัครเว็บครั้งแรกหาค่าความต่างกับจำนวนเวลาปัจจุบันว่าต่างกันกีชั่วโมง
อย่างเช่น ผมวันที่สมัครเว็บครั้งแรก วันที่ 1/1/2015 เวลา 1.00 น   แล้วถ้าเวลาปัจุบันคือ  7/10/2015 เวลา 2.00 น 
ก็เท่ากับ 6,697 ชัวโมง ถ้า 1 ชั่วโมงมีค่าโบนัสเท่ากับ 5 ก็เท่ากับผมมีโบนัส  33,485

saparee

จากข้อมูลคำถามแล้ว ผมว่าท่านหันไปใช้ cronjob น่าจะตอบโจทย์ของท่านมากที่สุดนะครับ  :-[

ตั้ง CronJob ให้ทำงานทุก 60 นาที แล้ววิ่งเรียก function ที่มีรายชื่อของ user ที่กำหนด (หรือ user ที่ยังอยู่ใน session) ก็ให้กดอัพเดทข้อมูลไปเรื่อยๆอะไรประมาณนั้น

postmunnet

ถ้าไม่อยากทำ cron job ให้เอาหน้าสำหรับ update ที่เป็น php ไป include ที่ footer แบบไม่ต้องแสดงผลอะไรออกมา มันจะเรียกทุกครั้งที่ bot หรือคนเข้าหน้าเว็บ

ossytong


sys2528

อ้างถึงจาก: saparee ใน 07 ตุลาคม 2015, 05:34:57
จากข้อมูลคำถามแล้ว ผมว่าท่านหันไปใช้ cronjob น่าจะตอบโจทย์ของท่านมากที่สุดนะครับ  :-[

ตั้ง CronJob ให้ทำงานทุก 60 นาที แล้ววิ่งเรียก function ที่มีรายชื่อของ user ที่กำหนด (หรือ user ที่ยังอยู่ใน session) ก็ให้กดอัพเดทข้อมูลไปเรื่อยๆอะไรประมาณนั้น

เห็นด้วยครับ  :(
[direct=https://www.billing.in.th/aff.php?aff=51]แนะนำ Hosting คุณภาพ Support เยี่ยมครับ[/direct]

pasalid

ส่งผลลัพธ์เข้าอีเมล์ด้วยนะครับ หรือเขียน log ไฟล์ไว้ก็ได้
เดี๋ยว cron ไม่ทำงานนี่ ไม่รู้เลย
:(
[direct= *Link Removed* ]เช่า vps[/direct]
[direct= *Link Removed* ]เช่าโฮสติ้ง[/direct]

kingofdollars

ถ้าไม่ใช้ cron job  ปกติผมจะเขียนไฟล์ให้มันเรียกที่ footer ครับ

โดยทำไฟล์ดัมมี่มาอันนึง  อ่านเวลาไฟล์ ถ้าเกินกำหนด ก็ทำงานแล้วเขียนไฟล์ดัมมี่กลับไปครับ


ตัวอย่าง

<? $cacheFile = MY_CACHEPATH.'post_sidebar.cache';
$gencache = true;
if(file_exists($cacheFile))
{ $gencache = false;
$nTime = $_SERVER['REQUEST_TIME'] – 1800;
$cTime = filemtime($cacheFile);
if($nTime > $cTime)
{
$gencache = true;
}else
{
include $cacheFile;
}
}
if($gencache)
{

ทำงาน

$fp = fopen($cacheFile, 'w+');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush();
}


เอามาจากกรณีเดียวกับการทำ cache เองนั่นแหละครับ

รายละเอียดดูได้ที่นี่ครับ

http://gethitech.com/manual-cache-for-wordpress-without-plugin/

chaynuwong

อ้างถึงจาก: pasalid ใน 07 ตุลาคม 2015, 17:14:35
ส่งผลลัพธ์เข้าอีเมล์ด้วยนะครับ หรือเขียน log ไฟล์ไว้ก็ได้
เดี๋ยว cron ไม่ทำงานนี่ ไม่รู้เลย
:(

เมล์ยาวเป็นหางว่าวแน่ครับ งานนี้

verysims

อ้างถึงจาก: kororo56 ใน 07 ตุลาคม 2015, 01:54:10
ทำแบบนี้ก็ได้ เอาจำนวน วันที่สมัครเว็บครั้งแรกหาค่าความต่างกับจำนวนเวลาปัจจุบันว่าต่างกันกีชั่วโมง
อย่างเช่น ผมวันที่สมัครเว็บครั้งแรก วันที่ 1/1/2015 เวลา 1.00 น   แล้วถ้าเวลาปัจุบันคือ  7/10/2015 เวลา 2.00 น 
ก็เท่ากับ 6,697 ชัวโมง ถ้า 1 ชั่วโมงมีค่าโบนัสเท่ากับ 5 ก็เท่ากับผมมีโบนัส  33,485
คำนวณเอาจากผลต่างตอนออกรายงานครับ

ฟาร์มเฮ้า

ใช้เว็บ cronjob ก็ได้ครับ

เขียน php เอาไว้ แล้วเอา url นั้นไปแอดในเว็บ cronjob ครับ แล้ว url นั้นจะถูกรันทุก xxx นาทีที่ตั้งค่าไว้ครับ

ตัวอย่างครับ(ฟรี)

www.setcronjob.com

nscyber

ผมแนะนำ cron job ครับ ซึ่งถ้าแอดมินรันเองหรือ user รันแล้วคำนวณก็ตาม จะเกิดปัญหาการใช้การคำนวณสูงครับ ซึ่งกรณีที่ข้อมูลเยอะๆ เราอาจจะเปลอทำผิดพลาดได้ครับ (Human error) ซึ่ง ณ ที่นี่  cron job เวิคสุดครับซึ่งตอบโจทย์ได้ทั้งหมดเลย ประหยัดเวลา และข้อผิดลพาดไม่สูงมากครับ หากกังวลว่ากลัวคอนจ็อบจะไม่ทำงานให้ทำตัวเช็คไว้ครับคอยเช็คทุกๆ ชม เช่นส่งเข้าเมล์อาจจะทำ log เก้บไว้ก่อนวันนึงมี 24 ชม แสดงว่าต้องเช็ค 24 ครั้ง ถ้าหากเทียบกับเวลาแล้วเช่นผ่านมา 15 ชม แล้วแต่ที่เก้บไว้ใน log ได้ 14 อยู่ก็ส่งเข้าเมล์แจ้งทำให้ประหยัดเรื่องอีเมลล์ขยะครับ ลองดูนะครับช่วยได้เยอะครับ

แต่ถ้าหากอยากใช้แบบเดิมก็ได้ครับถ้าข้อมูลไม่เยอะมาก ถ้าแอดมินมานั่งเปิดได้ตลอดนะครับ และไม่แนะนำให้ฝั่ง user รันครับ เพราะเครื่อง user รันไม่เท่ากัน เพราะต้องคอยเช็คหรือรอตลอดอาจจะทำให้หน่วงๆได้(กรณีที่เครื่อง user ช้า) และถ้าไม่มีใครเข้าเลยก็ทำให้ข้อมูลไม่อัพเดท ยิ่งใช้ database ด้วย query หนักเลยไหมนั่นถ้า user เปิดพร้อมๆกัน เกิดการประมวลพร้อมกันทำให้ข้อมูลถูกบ้างผิดบ้างเนื่องจากมีการส่งไปพร้อมๆกัน อย่ามองข้ามจุดเล็กๆนะครับ ถึงโอกาสจะเกิดน้อยแต่เกิดทีก็เอาการอยู่