curl กับความเร็วในการโหลดไฟล์

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

touleg
PHP Super Member
PHP Super Member
Posts: 480
Joined: 25/01/2010 11:57 pm
Contact:

curl กับความเร็วในการโหลดไฟล์

Post by touleg »

ความต้องการของผมคือโหลดไฟล์จากอีก server โดยไฟล์ที่โหลดมาเป็น pdf จากนั้นก็จะนำมา save แล้วเปิดอ่านโค้ดออกมา แล้วก็เซพเป็น text เอามาค้นหาคำ
ทำหมดนี้สามารถทำได้หมดแล้ว
ดังนี้

Code: Select all

//อ่านรายชื่อไฟล์จาก server
function getDir($ftp_url,$uname,$passwd,$path)
{
    $curl = curl_init();
    $timeout = 0;
    curl_setopt($curl, CURLOPT_URL,$ftp_url."/".$path."/");
    curl_setopt($curl, CURLOPT_FTPLISTONLY, 1);
    curl_setopt($curl, CURLOPT_USERPWD, $uname.":".$passwd);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
    
    $result = curl_exec ($curl);
    if(!$result)
    {
        return curl_error($curl);
    }else{
        $list = explode(".pdf",$result);
        $first = explode("..",$list[0]);
        $list[0] = trim($first[1]);
        curl_close ($curl);
        return array_slice($list,0,(count($list)-1));
    }
}

//ส่วนการทำงานหลัก
$filelist = getDir("ftp.*****.com","****","*****","public_html/pdf");

$curl = curl_init();

for($i=0;$i<count($filelist);$i++)
{
    $file = trim($filelist[$i]).".pdf";
    
    $fp = fopen("pdf/".$file, "wb");
    curl_setopt ($curl, CURLOPT_URL, "http://www.*****.com/pdf/".$file);
    curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT,0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FILE, $fp);

    curl_exec ($curl);
    fclose($fp);
    
    $temp = trim($filelist[$i]).date("dmyhis");
    if(exec('pdftotext.exe '.'pdf/'.$file.' tmp/'.$temp.'.txt'))
    {
        echo "Program ผิดพลาด";
    }else{
        $f = fopen("tmp/".$temp.".txt","r");
        if(!$f)
        {
            echo "Error read file!";
        }else{
            $count = 1;
            $data = "";
            while(!feof($f))
            {
                if($count==5){
                    $data = fgets($f);
                }else{ fgets($f);}
                $count++;
            }
            fclose($f);
            $list = explode(":",$data);
            echo "<p>";
            //Name
            $n = explode(")",$list[1]);
            $ntmp = explode("(",$n[0]);
            $gname =  trim($ntmp[0]);
            $name = trim($n[1]);
            echo "NAME:".$gname." ".$name."<br />";
            //HN
            $n = explode(" ",$list[2]);
            $hn = trim($n[1]);
            echo "HN: ".$hn."<br />";
            //Lab No.
            $n = explode(" ",$list[3]);
            $lab = trim($n[1]);
            echo "Lab No.: ".$lab."<br />";
            //Date
            $n = explode(" ",$list[4]);
            $date = trim($n[0]);
            echo "Request Date: ".$date."<br />";
            //AN/VN
            $n = explode(" ",$list[5]);
            $vn = trim($n[1]);
            echo "AN/VN: ".$vn."<br />";
            //แผนก
            //$n = explode(" ",$list[6]);
            $clin = trim($list[6]);
            //$clin_en = trim($n[2]);
            echo "Clin/W.: ".$clin."<br />";
            echo "</p>";
            
            $delfile = "tmp/".$temp.".txt";
            unlink($delfile);
        }
    }
}
curl_close ($curl);
 
จากการทดลอง เพียงแค่ 3 ไฟล์ ใช้เวลาประมาณ 5 วินาที ซึ่งเยอะมากๆ
แต่ความเป็นจริงที่จะนำไปใช้ไฟล์อาจจะมีเป็นร้อยๆเป็นพันๆไฟล์ ไม่ทราบว่าพอจะมีทางทำให้มันเร็วขึ้นไหมครับ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25187
Joined: 22/09/2008 6:18 pm
Contact:

Re: curl กับความเร็วในการโหลดไฟล์

Post by mindphp »

โหลดไฟล์ไม่ต้องใช้ curl ก็ได้ครับ
ไฟล์ใช้ http หรือ ftp ก็มี function สำหรับอ่านไฟล์อยู่แล้วครับ
แต่ถ้าจะใช้ curl แนะนำ ใช้เป็น multi process ของ curl ครับ
ลองโหลดตัวอย่างมาดูได้ที่
http://codestips.com/scripts/multithread.zip

และอาจให้ วิธีให้ php ทำงานเป็น cron เพื่อโหลดไฟล์มา แล้วค่อย มาแปลงอีกทีหนึ่ง
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

touleg
PHP Super Member
PHP Super Member
Posts: 480
Joined: 25/01/2010 11:57 pm
Contact:

Re: curl กับความเร็วในการโหลดไฟล์

Post by touleg »

ขอบคุณครับผมลงใช้ FTP ของ php ดูเร็วขึ้นเยอะครับ

45 Used Time: 17 sec

45 ไฟล์ใน 17 วินาที

แต่ก็ยังถือว่าช้าอยู่

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - PHP”

Who is online

Users browsing this forum: Google [Bot], Google Adsense [Bot] and 15 guests