ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingทำให้ฟั่งชั่น php ทำงานเอง โดยไม่ต้องเข้าเว็บ ต้องทำยังไงครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ทำให้ฟั่งชั่น php ทำงานเอง โดยไม่ต้องเข้าเว็บ ต้องทำยังไงครับ  (อ่าน 1660 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
parames3010
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 46



ดูรายละเอียด
« เมื่อ: 07 ตุลาคม 2015, 00:43:04 »

สมมุติว่าผมต้องการทำระบบเว็บให้ เพิ่มโบนัส ให้ 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
« แก้ไขครั้งสุดท้าย: 07 ตุลาคม 2015, 00:44:32 โดย parames3010 » บันทึกการเข้า
BeerSkz
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 209
ออฟไลน์ ออฟไลน์

กระทู้: 1,342



ดูรายละเอียด
« ตอบ #1 เมื่อ: 07 ตุลาคม 2015, 01:05:31 »

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

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 46



ดูรายละเอียด
« ตอบ #2 เมื่อ: 07 ตุลาคม 2015, 01:09:02 »

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

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

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

« แก้ไขครั้งสุดท้าย: 07 ตุลาคม 2015, 01:10:08 โดย parames3010 » บันทึกการเข้า
BeerSkz
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 209
ออฟไลน์ ออฟไลน์

กระทู้: 1,342



ดูรายละเอียด
« ตอบ #3 เมื่อ: 07 ตุลาคม 2015, 01:22:58 »

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

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

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



ไม่เข้าใจคำถาม 55555555555 รอท่านอื่น
บันทึกการเข้า
parames3010
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 46



ดูรายละเอียด
« ตอบ #4 เมื่อ: 07 ตุลาคม 2015, 01:35:32 »

ประมาณว่าถ้ามีใครเรียกหน้าเว็บขึ้นมา จะทำการอัพเดตข้อมูลทุก User อะครับ
« แก้ไขครั้งสุดท้าย: 07 ตุลาคม 2015, 01:45:26 โดย parames3010 » บันทึกการเข้า
kororo56
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 89



ดูรายละเอียด
« ตอบ #5 เมื่อ: 07 ตุลาคม 2015, 01:54:10 »

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

พลังน้ำใจ: 319
ออฟไลน์ ออฟไลน์

กระทู้: 1,923



ดูรายละเอียด
« ตอบ #6 เมื่อ: 07 ตุลาคม 2015, 05:34:57 »

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

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

พลังน้ำใจ: 269
ออฟไลน์ ออฟไลน์

กระทู้: 2,813



ดูรายละเอียด
« ตอบ #7 เมื่อ: 07 ตุลาคม 2015, 09:49:17 »

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

พลังน้ำใจ: 138
ออฟไลน์ ออฟไลน์

กระทู้: 1,151



ดูรายละเอียด
« ตอบ #8 เมื่อ: 07 ตุลาคม 2015, 13:26:34 »

ใช้พวก iRonMQ ก็ได้ครับ ถ้าไม่อยากใช้ cronjob
บันทึกการเข้า
sys2528
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 301
ออฟไลน์ ออฟไลน์

กระทู้: 3,601



ดูรายละเอียด
« ตอบ #9 เมื่อ: 07 ตุลาคม 2015, 14:31:04 »

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

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

เห็นด้วยครับ  Sad
บันทึกการเข้า

pasalid
Newbie
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 62



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 07 ตุลาคม 2015, 17:14:35 »

ส่งผลลัพธ์เข้าอีเมล์ด้วยนะครับ หรือเขียน log ไฟล์ไว้ก็ได้
เดี๋ยว cron ไม่ทำงานนี่ ไม่รู้เลย
 Sad
บันทึกการเข้า

kingofdollars
สมุนแก๊งเสียว
*

พลังน้ำใจ: 95
ออฟไลน์ ออฟไลน์

กระทู้: 830



ดูรายละเอียด
« ตอบ #11 เมื่อ: 07 ตุลาคม 2015, 17:38:55 »

ถ้าไม่ใช้ 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-ca...-for-wordpress-without-plugin/
บันทึกการเข้า

chaynuwong
คนรักเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 149



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 16 ตุลาคม 2015, 20:53:11 »

ส่งผลลัพธ์เข้าอีเมล์ด้วยนะครับ หรือเขียน log ไฟล์ไว้ก็ได้
เดี๋ยว cron ไม่ทำงานนี่ ไม่รู้เลย
 Sad

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

verysims
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 151
ออฟไลน์ ออฟไลน์

กระทู้: 1,469



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 16 ตุลาคม 2015, 22:26:14 »

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

ฟาร์มเฮ้า
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 49
ออฟไลน์ ออฟไลน์

กระทู้: 1,014



ดูรายละเอียด
« ตอบ #14 เมื่อ: 16 ตุลาคม 2015, 22:38:14 »

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

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

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

www.setcronjob.com
บันทึกการเข้า
nscyber
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 50
ออฟไลน์ ออฟไลน์

กระทู้: 1,165



ดูรายละเอียด
« ตอบ #15 เมื่อ: 16 ตุลาคม 2015, 22:41:17 »

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

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

พลังน้ำใจ: 29
ออฟไลน์ ออฟไลน์

กระทู้: 686



ดูรายละเอียด เว็บไซต์
« ตอบ #16 เมื่อ: 17 ตุลาคม 2015, 08:37:30 »

เข้ามาฟังด้วยครับ  wanwan017
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์