Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > PHP ประมวลผล 2 ไฟล์พร้อมกันไม่ได้ คาดว่าน่าจะเกิดจาก queue แต่ไม่แน่ใจ และไม่ทราบวิธีแก้



 

PHP ประมวลผล 2 ไฟล์พร้อมกันไม่ได้ คาดว่าน่าจะเกิดจาก queue แต่ไม่แน่ใจ และไม่ทราบวิธีแก้

 



Topic : 095179



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์




เรื่องคือ ผมต้องการจะประมวลผลข้อมูลโดยใช้ ajax คอยดึงว่าปัจจุบัน มีการประมวลผลถึงไหนแล้ว เช่น มี a.php b.php และ c.php
เมื่อผมเปิด a.php จะมีการเรียก b.php และในระหว่างที่ b.php ประมวลผลอยู่ a.php ก็จะคอยดึงความคืบหน้าจากไฟล์ c.php

แต่พอลงมือทำจริงๆแล้ว b.php ทำงานได้ แต่ c.php ไม่สามารถทำงานได้ เหมือนกำลังรอคิวอะไรบางอย่าง.


ปล.ถ้ารันไฟล์ c.php ในคอมอีกเครื่อง หรืออีก browser นึง ในขณะที่ b.php ทำงานอยู่ สามารถรันได้ปกติ

แบบนี้พอมีวิธีแก้ไขมั้ยครับ

ขอบคุณครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-05-14 20:14:24 By : tuxinlove View : 2370 Reply : 13
 

 

No. 1



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ผมก็เข้าใจตามนั้น ลองหาข้อมูลเรื่อง thread ดูครับ ไม่แน่ใจว่า php มีหรือเปล่า
ไม่ก็ใช้ ajax +js






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-14 20:21:15 By : pjgunner.com
 


 

No. 2



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


Thread นี่ยังใหม่สำหรับผมมากเพราะหาที่อ้างอิงยากมาก และยังมองภาพไม่ค่อยออก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-14 22:56:48 By : tuxinlove
 

 

No. 3



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ยกตัวอย่างนึกถึงกรณี 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
 


 

No. 5



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ใน b.php และ c.php
มีการเรียกใช้ session_start() หรือเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 01:42:22 By : cookiephp
 


 

No. 6



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


มีการเรียกใช้ session_start() ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 04:45:20 By : tuxinlove
 


 

No. 7



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : pjgunner.com เมื่อวันที่ 2013-05-15 00:03:44
รายละเอียดของการตอบ ::
อ่อ ครับ เดี๋ยวผมลองหาและงมๆดู ได้ไม่ได้จะมาแจ้งให้ทราบอีกทีครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 04:47:32 By : tuxinlove
 


 

No. 8



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

โอเคครับ สาเหตุเกิดจาก 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
 


 

No. 9



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : cookiephp เมื่อวันที่ 2013-05-15 04:58:49
รายละเอียดของการตอบ ::
อ้อ ชัดเจนเลยครับ เดี๋ยวแก้ไขแล้วจะมาแจ้งผลให้ทราบนะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 05:12:30 By : tuxinlove
 


 

No. 10



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

เพิ่งรู้เหมือนกันว่าการใช้ 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
 


 

No. 11



โพสกระทู้ ( 9 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 10 เขียนโดย : pjgunner.com เมื่อวันที่ 2013-05-15 08:58:58
รายละเอียดของการตอบ ::
ผมใช้วิธีโอนผ่าน Database ครับ. ที่ผมทำนี่คือ a.php เป็นหน้าหลัก. b.php เป็นหน้าสำหรับการประมวลผลซึ่งกินระยะเวลายาวนานมาก c.php เป็น หน้าสำหรับการดึงจำนวนเปอร์เซ็น progress ของ b.php ครับว่าไปถึงไหนแล้ว แต่ถ้าเป็นระบบที่คนใช้มากๆคงต้องใช้ txt file แทน เดี๋ยวจะอืดไปกันใหญ่โต ^ ^


แจ้งผลการทดสอบแล้วครับ. ใช้ได้ดีเลยทีเดียว. ขอบคุณครับ


ประวัติการแก้ไข
2013-05-15 11:58:56
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 11:50:36 By : tuxinlove
 


 

No. 12



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 10 เขียนโดย : pjgunner.com เมื่อวันที่ 2013-05-15 08:58:58
รายละเอียดของการตอบ ::
ไม่ใช่ครั้งละคนครับ แต่ครั้งละ file หรือครั้งละ session
สมมติว่าคุณเปิดหน้าต่าง browser IE แล้วเข้า b.php ก็จะได้ session_id ie123
และขณะเดียวกันเปิดหน้าต่าง browser Chrome แล้วเข้า b.php ก็จะได้ session_id chrome123
สองหน้าต่างนั้นไม่เกี่ยวข้องกันครับ สามารถทำงานไปได้พร้อมกัน เพราะเป็นคนละ session ใช้ ไฟล์ session คนละไฟล์

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-15 13:06:20 By : cookiephp
 


 
สวัดดีครับ ขอสอบถามหน่อยครับ
-ผมต้องการเปิดไฟล์ แบบเลือกเริ่มต้น และ สิ้นสุดอะครับ
123

อ้างอิงจากตัวเลข ของไฟล์ครับ วงสีแดง

234

ดังภาพ
-สีแดงคือข้อ ตัวเลขไฟล์ ที่ผมต้องการเลือก เริ่มต้น และ สิ้นสุดครับ ชื่อไฟล์ก้คือ เดือนวันครับ
-สีเหลืองคือข้อมูล ในไฟล์ครับ ซึ่งsubmit แล้ว ข้อมูลแสดงแค่ อันสุดท้าที่เลือกครับ

ขอคำแนะนำหรือ code ตัวอย่างหน่อยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-03-05 09:50:10 By : mini
 


 
eee
จากภาพ ผมต้องการเลือกแบบ เริ่มต้น - สิ้นสุดครับ

ตอนนี้ผมทำได้แค่เลือก select ที่ละไฟล์แล้ว submit ครับ
ขอคำแนะนำครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-03-30 08:42:23 By : mini
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : PHP ประมวลผล 2 ไฟล์พร้อมกันไม่ได้ คาดว่าน่าจะเกิดจาก queue แต่ไม่แน่ใจ และไม่ทราบวิธีแก้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่