|
|
|
Code php อ่าน Text file รันผ่านแล้วแต่รันช้ามากค่ะ ไฟล์ text 4200KB ประมาณ 3กว่า แสนบรรทัด รัน 7 ชม ยังไม่เสร็จ |
|
|
|
|
|
|
|
ใช้เวลานานมากเลยค่ะ
รันมา 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
|
|
|
|
|
|
Date :
2015-12-24 16:47:58 |
By :
sammam |
View :
1414 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมว่า ก่อนที่จะไปทำอย่างอื่น แก้ให้มันอ่านไฟล์ มาเป็น 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|