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,037

HOME > PHP > PHP Forum > Code php อ่าน Text file รันผ่านแล้วแต่รันช้ามากค่ะ ไฟล์ text 4200KB ประมาณ 3กว่า แสนบรรทัด รัน 7 ชม ยังไม่เสร็จ



 

Code php อ่าน Text file รันผ่านแล้วแต่รันช้ามากค่ะ ไฟล์ text 4200KB ประมาณ 3กว่า แสนบรรทัด รัน 7 ชม ยังไม่เสร็จ

 



Topic : 120639



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



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




ใช้เวลานานมากเลยค่ะ

รันมา 7 ชม. ยังไม่เสร็จเลย กดหยุดรันไปแล้ว

text 4200KB ประมาณ 3กว่า แสนบรรทัด

รบกวนช่วยดู code ว่าสามารถปรับเปลี่ยนตรงไหนให้รันเร็วขึ้นได้ไหมค่ะ ขอบคุณมากค่ะ

Code (PHP)
<?php


ini_set('memory_limit', '2048M');
ini_set('max_execution_time', 3600); //3600 seconds = 6000 minutes

$Filename = $_FILES['filUpload']['name'];

echo "File Name : $Filename <br>";


$Qdata = $Filename ;
$assay = file($Qdata) ;
$X=array();
$Y=array();

   $i=0;
   $a=0;
   $n=0;
  
while (list ($line_num, $line) = each ($assay)) 
 {
	 
      $search = substr($line,0,12)  ;
   if($search == "AcDbPolyline"){
	   
	   while (list ($line_num2, $lineA) = each ($assay)) 
 {
	 //-----------------
	 
	 if($line_num =$line_num2){
		 
   
             $Xre = substr($lineA,0,17)  ;
             if($Xre > 30000 & $Xre < 75000){
	   
	         $X[$i]=$Xre ;
			 
			 
 
	         $i++;
	   
	 }
	         $Yre = substr($lineA,0,17)  ;
             if($Yre > 75000 & $Yre < 90000){
	   
	         $Y[$a]=$Yre ;
			 
			
 
	         $a++;
	   
	 }
	 
	 
	 }
	 //------------------
	 
	 
	 
 }
	 
	 
   }
	 
	 
 }
 
 
 
 foreach($X as $key=>$value){
	
	 $xx = $X[$key];
     $xxx =$X[$key+1]; 
	 $xxxx = $X[$key+2];
	 $yy = $Y[$key];
	 $yyy = $Y[$key+1];
	 $yyyy = $Y[$key+2];
	 
	 
	 $v1 = array($xx, $yy);
$v2 = array($xxx, $yyy);
$v3 = array($xxxx, $yyyy);

$P12 = sqrt(pow($v1[0]-$v2[0],2) + pow($v1[1]-$v2[1],2));
$P13 = sqrt(pow($v1[0]-$v3[0],2) + pow($v1[1]-$v3[1],2));
$P23 = sqrt(pow($v2[0]-$v3[0],2) + pow($v2[1]-$v3[1],2));



$ang = @acos((pow($P12,2) + pow($P13,2) - pow($P23,2)) / (2 * $P12 * $P13));





 // angle in radians


$degree2 = @asin($P13*sin($ang)/$P23);
$degree = rad2deg($degree2) ;
$degreetouse = 180-$degree;


 
if($degreetouse < 150){
	$Qdata = $Filename ;
    $assay1 = file($Qdata) ;
	
	while (list ($line_num3, $line2) = each ($assay1)) 
 {
	 
      $search2 = substr($line2,0,17)  ;
   if($search2 == $v2[0]){
	   
	  
	   $lineuse=$line_num3;
	   
   }
   
  
}


   $id2 = $lineuse;
for($r=1;$r<5;$r++){
	$id=$id2-1;

$QQdata = $Filename;
$lines = file($QQdata);
$file = $Filename;;
foreach ($lines as $line_numm => $linee) 
{    

}
unset($lines[$id]);
implode("\n",$lines);
file_put_contents($file,$lines); 

echo " trying to adjust... " . $id . " from " . $lines . ".<br>";

   
 }
	

}




//-----------------------


 }
 echo "Complete";


 
 ?>
 



ขอบคุณมากๆคร้าาา



Tag : PHP, HTML/CSS, JavaScript







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2015-12-24 16:47:58 By : sammam View : 1421 Reply : 3
 

 

No. 1



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



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

136.unset($lines[$id]);
137.implode("\n",$lines);
138.file_put_contents($file,$lines);


เอาบันทัดที่ 138 ไปไว้นอกลูป ทำในลูปให้เสร็จเรียบร้อย แล้วค่อยเซฟครั้งเดียว
เล่นเซฟทุกครั้งที่มีการเปลี่ยนแปลง มันก็ช้าล่ะครับ

ปล. ให้เซฟลงไฟล์ใหม่ ป้องกันไฟล์ต้นฉบับเสีย
เมื่อเรียบร้อยแล้วค่อย ลบไฟล์เก่า เปลี่ยนชื่อไฟล์ใหม่








ประวัติการแก้ไข
2015-12-24 18:44:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-24 18:41:24 By : NewbiePHP
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : NewbiePHP เมื่อวันที่ 2015-12-24 18:41:24
รายละเอียดของการตอบ ::
ถ้าเอา file_put_contents($file,$lines); ออกจาก loop แล้ว พอรันเสร็จ ไฟล์ text ที่ได้ จะไม่ตรงกับที่อยู่ใน loop ค่ะ

พอจะมีวิธีแก้ไขไหมค่ะ รันช้ามากเลยค่ะ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-24 23:54:18 By : sammam
 

 

No. 3



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



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

ผมว่า ก่อนที่จะไปทำอย่างอื่น แก้ให้มันอ่านไฟล์ มาเป็น array ให้ได้ก่อนดีกว่าไหม

ตัวอย่างโค๊ดที่ลงมาให้ดู มันอ่านไฟล์ไม่ได้หรอกครับ
อย่าบอกว่ามันอ่านมาได้นะครับ อย่ามาหลอกกัน

อยากให้คนอื่นช่วยก็อย่าหวงโค๊ดที่ทำครับ คนอื่นเขาจะได้เอามาใช้เป็บแบบอย่างได้

นี่เอาโค๊ดที่เออเร่อร์บานตะเกียง มาแสดงแล้วบอกว่าทำงานได้ แค่ช้าเท่านั้น
ผมก็หวังดีก๊อปโค๊ดไป เพื่อจะทดสอบให้
เจอแค่ อ่านไฟล์ จาก $_FILES['upload']['name'] ผมก็ทอดใจไม่อยากช่วยแล้วล่ะครับ
ก็ลองคิดดูนะครับ ว่าควรทำยังไง
Code (PHP)
<?php
ini_set('memory_limit', '2048M');
ini_set('max_execution_time', 3600); //3600 seconds = 6000 minutes

$Filename = $_FILES['filUpload']['name'];

echo "File Name : $Filename <br>";
$Qdata = $Filename ;
$assay = file($Qdata); // แก้ให้ถูก
$X=array();
$Y=array();

$i=0;
$a=0;
$n=0;

while (list ($line_num, $line) = each ($assay)) 
{
	$search = substr($line,0,12)  ;
	if($search == "AcDbPolyline"){
		while (list ($line_num2, $lineA) = each ($assay)) 
		{
			//-----------------
			if($line_num =$line_num2){
				$Xre = substr($lineA,0,17)  ;
				if($Xre > 30000 & $Xre < 75000){
					$X[$i]=$Xre ;
					$i++;
				}
				$Yre = substr($lineA,0,17)  ;
				if($Yre > 75000 & $Yre < 90000){
					$Y[$a]=$Yre ;
					$a++;
				}
			}
			//------------------
		}
	}
}

foreach($X as $key=>$value){
	$xx = $X[$key];
	$xxx =$X[$key+1]; 
	$xxxx = $X[$key+2];
	$yy = $Y[$key];
	$yyy = $Y[$key+1];
	$yyyy = $Y[$key+2];


	$v1 = array($xx, $yy);
	$v2 = array($xxx, $yyy);
	$v3 = array($xxxx, $yyyy);

	$P12 = sqrt(pow($v1[0]-$v2[0],2) + pow($v1[1]-$v2[1],2));
	$P13 = sqrt(pow($v1[0]-$v3[0],2) + pow($v1[1]-$v3[1],2));
	$P23 = sqrt(pow($v2[0]-$v3[0],2) + pow($v2[1]-$v3[1],2));

	$ang = @acos((pow($P12,2) + pow($P13,2) - pow($P23,2)) / (2 * $P12 * $P13));

	// angle in radians

	$degree2 = @asin($P13*sin($ang)/$P23);
	$degree = rad2deg($degree2) ;
	$degreetouse = 180-$degree;

	if($degreetouse < 150){
		$Qdata = $Filename ;
		$assay1 = file($Qdata) ;

		while (list ($line_num3, $line2) = each ($assay1)) 
		{
			$search2 = substr($line2,0,17)  ;
			if($search2 == $v2[0]){
				$lineuse=$line_num3; // หาพบแล้ว ควรจะสั่งเบรก เพื่อหยุดการค้นหาต่อไป
			}
		}
		$id2 = $lineuse;
		for($r=1;$r<5;$r++){
			$id=$id2-1;
			$QQdata = $Filename;
			$lines = file($QQdata); // อ่านไฟล์ เป็นแสนบันทัดใน loop คิดใหม่ทำใหม่ ครับ
			// แค่อ่านเป็นแสนบันทัดมาไว้ใน array 
			// php ini กำหนดไว้ยังไง ศึกษามันด้วยนะครับ
			$file = $Filename;
			foreach ($lines as $line_numm => $linee) 
			{
				// loop นี้สร้างมาเพื่อหน่วงเวลาหรือไงครับ
			}
			unset($lines[$id]);
			implode("\n",$lines);
			file_put_contents($file,$lines); // 
			echo " trying to adjust... " . $id . " from " . $lines . ".<br>";
		}
	}
	//-----------------------
}
echo "Complete";

ศึกษาบนความนี้ด้วยนะครับ
http://stackoverflow.com/questions/171289/whats-the-maximum-number-of-keys-for-an-array-in-php


แค่รูปด้านล่างนี้ก็ทำงานแทบไม่รู้จบแล้ว
Code (PHP)
while (list ($line_num, $line) = each ($assay)) // เริ่มต้นอ่าน จาก line 0 จนถึง 100000 บันทัด
{
	$search = substr($line,0,12)  ;
	if($search == "AcDbPolyline"){
		while (list ($line_num2, $lineA) = each ($assay)) // แล้วยังมา เริ่มต้นอ่าน จาก line 0 จนถึง 100000 บันทัด นี้อีก
		{
			//-----------------
			if($line_num =$line_num2){
				$Xre = substr($lineA,0,17)  ;
				if($Xre > 30000 & $Xre < 75000){ // จะ if ทำไม 2 ครั้ง จับมันใส่ else ไม่ดีกว่าเหรอ
					$X[$i]=$Xre ;
					$i++;
				}
				$Yre = substr($lineA,0,17)  ;
				if($Yre > 75000 & $Yre < 90000){  //  บันทัดนี้ถ้าเข้าเคส 30000-75000 มันไม่จำเป็นต้องมาทำตรงนี้อีก
					$Y[$a]=$Yre ;
					$a++;
				}
			}
			//------------------
		}
	}
}



ประวัติการแก้ไข
2015-12-25 19:32:00
2015-12-25 19:34:44
2015-12-26 06:00:13
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-12-25 19:16:00 By : NewbiePHP
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Code php อ่าน Text file รันผ่านแล้วแต่รันช้ามากค่ะ ไฟล์ text 4200KB ประมาณ 3กว่า แสนบรรทัด รัน 7 ชม ยังไม่เสร็จ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 04
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 อัตราราคา คลิกที่นี่