|
|
|
PHP ประมวลผล 2 ไฟล์พร้อมกันไม่ได้ คาดว่าน่าจะเกิดจาก queue แต่ไม่แน่ใจ และไม่ทราบวิธีแก้ |
|
|
|
|
|
|
|
ผมก็เข้าใจตามนั้น ลองหาข้อมูลเรื่อง thread ดูครับ ไม่แน่ใจว่า php มีหรือเปล่า
ไม่ก็ใช้ ajax +js
|
|
|
|
|
Date :
2013-05-14 20:21:15 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thread นี่ยังใหม่สำหรับผมมากเพราะหาที่อ้างอิงยากมาก และยังมองภาพไม่ค่อยออก
|
|
|
|
|
Date :
2013-05-14 22:56:48 |
By :
tuxinlove |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยกตัวอย่างนึกถึงกรณี cpu มีหลายหัวครับ ทำงานหลายงานได้พร้อมกัน
แต่ปัญหาแบบ php ที่คุณว่ามา มันอาจเป็นการ แย่งทรัพยากรกัน ในขณะที่ b.php ทำงานยังไม่จบเพราะเหมือนมันทำงานต่อเนื่อง แล้ว c.php ก็ไปใช้ทรัพยากรเดียวกัน(บนโปรเซส a.php) จริงๆ มันต้องจบ b.php ก่อนถึงจะเรียกใช้ c.php ได้
ถ้าเป็น เธรด สามารถ ใช้ b.php พร้อม c.php ได้
ถ้าไม่เห็นภาพ เช่น ยกตัวอย่าง (ไม่มีจริงๆ)
run('b.php');
run('c.php');
ซึ่งคำสั่ง run('b.php'); นี้ จะสร้าง เธรดใหม่เข้ามาและจบฟังชั่น แล้ว เข้า run('c.php'); ก็มี process ใหม่อีก
แล้ว a.php ก็รันต่อไป สรุปจะมี 3 process ที่ทำงานพร้อมกัน
ถ้าหากไม่ใช่ เธรด c.php จะรันไม่ได้ เพราะยังไม่จบ บรรทัดแรก
งงมั้ยครับ
ยกตัวอย่างหาก
b.php
$x=1;
while(true) echo ' b process'.$x++;
c.php
$y=1;
while(true) echo ' c process'.$y++;
ผลลัพท์อาจเป็น
b1 b2 c1 b3 c2 c3 b4
หรือ
b1 c1 c2 c3 b2 c4 c5
มันแยกการทำงานออกจากกันชัดเจน เหมือน cpu ที่รันพร้อมกันหลายโปรแกรม(แค่ยกตัวอย่าง)
(แต่จริงๆ หัวเดียวก็สามารถสร้างได้หลายเธรด)
http://www.pjgunner.com
|
ประวัติการแก้ไข 2013-05-15 00:05:31 2013-05-15 00:08:54 2013-05-15 00:09:42 2013-05-15 00:13:43 2013-05-15 00:18:55
|
|
|
|
Date :
2013-05-15 00:03:44 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใน b.php และ c.php
มีการเรียกใช้ session_start() หรือเปล่าครับ
|
|
|
|
|
Date :
2013-05-15 01:42:22 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีการเรียกใช้ session_start() ครับ
|
|
|
|
|
Date :
2013-05-15 04:45:20 |
By :
tuxinlove |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอเคครับ สาเหตุเกิดจาก session_start() ครับ
คืออย่างนี้ครับ ระบบ session ของ PHP โดย default แล้ว จะใช้ระบบไฟล์ครับ
ซึ่ง session_start() จะทำการสร้างหรือเปิดไฟล์ session และ lock ไฟล์นั้นๆ ไว้
ไม่ให้ request หรือ process อื่นอ่านและเขียนมันได้
หาก session_start() พยายามที่จะเปิดไฟล์ที่ถูก lock ไว้ก่อนหน้า มันจะ "รอ" จนกว่าไฟล์นั้นๆ จะถูก unlock
b.php
<?php
set_time_limit(0);
session_start();
echo 'This is B';
sleep(60);
c.php
<?php
set_time_limit(0);
session_start();
echo 'This is C';
ตามโค้ดข้างบน หาก b.php ถูกสั่งให้ทำงานก่อน c.php
แม้ c.php จะเริ่มทำงาน แต่จะไปติดอยู่ที่บรรทัดที่ 3 และจะไม่ทำงานบรรทัดที่ 4
จนกว่า b.php จะจบการทำงาน คือหลังคำสั่ง sleep(60)
เพราะ b.php ได้ lock ไฟล์ session ไว้อยู่
แต่ถ้า
b.php
<?php
set_time_limit(0);
session_start();
echo 'This is B';
session_write_close();
sleep(60);
c.php
<?php
set_time_limit(0);
session_start();
echo 'This is C';
แบบนี้ c.php จะจบการทำงานได้ทันที โดยไม่ต้องรอ b.php ทำงานจบ
เพราะใน b.php มีการเรียกใช้ session_write_close() ซึ่งเป็นฟังก์ชั่นที่สิ้นสุด session
โดยจะทำการเขียนข้อมูล $_SESSION และ unlock ไฟล์ session
ดังนั้นวิธีแก้คือ ใช้ session_write_close() เมื่อ
"ไม่ต้องการเปลี่ยนแปลงข้อมูลตัวแปร $_SESSION แล้ว" เพื่อ unlock ไฟล์ session ครับ
|
|
|
|
|
Date :
2013-05-15 04:58:49 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เพิ่งรู้เหมือนกันว่าการใช้ session ล็อคให้ใช้ได้ครั้งละคน เลยไม่สามารถทำอย่างว่าได้ จนกว่าจะถูกปล่อยตัว ขอบคุณครับ
ถามเจ้าของกระทู้ครับ ใช้วิธีไหนที่ว่า ในระหว่าง b.php ทำงานอยู่ แล้วคอยดึงผลจาก a.php ทำยังไงคับ ใช้ทั้ง b.php และ ให้ a.php ไปดึงข้อมูลจาก c.php
ไม่ได้เขียนโปรแกรมนานลืม แต่เหมือนเคยว่าลองทำอยู่เหมือนกัน แต่ก็เจอปัญหาเหมือนจขกท
|
ประวัติการแก้ไข 2013-05-15 08:59:58 2013-05-15 09:01:08 2013-05-15 09:02:33
|
|
|
|
Date :
2013-05-15 08:58:58 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สวัดดีครับ ขอสอบถามหน่อยครับ
-ผมต้องการเปิดไฟล์ แบบเลือกเริ่มต้น และ สิ้นสุดอะครับ
อ้างอิงจากตัวเลข ของไฟล์ครับ วงสีแดง
ดังภาพ
-สีแดงคือข้อ ตัวเลขไฟล์ ที่ผมต้องการเลือก เริ่มต้น และ สิ้นสุดครับ ชื่อไฟล์ก้คือ เดือนวันครับ
-สีเหลืองคือข้อมูล ในไฟล์ครับ ซึ่งsubmit แล้ว ข้อมูลแสดงแค่ อันสุดท้าที่เลือกครับ
ขอคำแนะนำหรือ code ตัวอย่างหน่อยครับ
|
|
|
|
|
Date :
2021-03-05 09:50:10 |
By :
mini |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากภาพ ผมต้องการเลือกแบบ เริ่มต้น - สิ้นสุดครับ
ตอนนี้ผมทำได้แค่เลือก select ที่ละไฟล์แล้ว submit ครับ
ขอคำแนะนำครับ
|
|
|
|
|
Date :
2021-03-30 08:42:23 |
By :
mini |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|