เขียนโปรแกรมโหลดเว็บเพจด้วย PHP cURL

จากที่ได้นำเสนอ วิธีการใช้ cURL เพื่อโหลดเว็บเพจ ซึ่งเป็นการรันคำสั่งแบบ command line มาแล้ว

คราวนี้จะเป็นการเขียนโปรแกรม PHP โดยเรียกใช้ฟังก์ชั่นในโมดูล curl เพื่อโหลดเว็บเพจ

ตรวจสอบโมดูล php curl

ก่อนที่เราจะเรียกใช้ฟังก์ชั่นจากโมดูล curl เพื่อเขียนโปรแกรมใน PHP ได้นั้น จำเป็นต้องมีโมดูล curl ติดตั้งอยู่แล้ว ซึ่งสามารถตรวจสอบได้ด้วยการรันคำสั่ง php ตามด้วยออปชั่น ‘-m’ ดูผลลัพธ์ที่ได้

ตัวอย่างการรันคำสั่ง php ด้วยออปชั่น ‘-m’ เพื่อดูว่ามีโมดูล curl หรือไม่

[user1@dev ~]$ php -m | grep curl
curl

ถ้าไม่มี ต้องติดตั้งเพิ่มเติม ซึ่งอาจจะด้วยการใช้ rpm หรือ yum ก็ได้

เริ่มใช้ฟังก์ชั่น curl

เริ่มต้นด้วยตัวอย่างการเขียนโปรแกรมโดยใช้ฟังก์ชั่น curl แบบง่ายสุด เพื่อโหลดเว็บเพจ มีสามขั้นตอนคือ

  • curl_init ระบุเว็บไซต์ที่ต้องการโหลด
  • curl_exec โหลดหน้าเว็บและแสดงผลลัพธ์
  • curl_close สิ้นสุดการใช้ curl

เช่นต้องการโหลดเว็บ www.php.net

[user1@dev ~]$ cat curl.php
<?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Execute
$ret = curl_exec($ch);

// Close handle
curl_close($ch);

?>

ทดลองรันโปรแกรมที่เขียน

[user1@dev ~]$ php curl.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <title>PHP: Hypertext Preprocessor</title>
 <style type="text/css" media="all">
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 </style>
...

สังเกตว่าผลลัพธ์การโหลด หรือไฟล์เว็บเพจจะแสดงผลออกหน้าจอเลย เมื่อใช้ฟังก์ชั่น curl_exec() ไม่ได้เก็บไว้ในตัวแปร $ret

หากต้องการเก็บผลลัพธ์ที่ได้ไว้ในตัวแปรก่อน เพื่อนำไปประมวลผล ต้องใช้ฟังก์ชั่น curl_setopt เพื่อตั้งค่า CURLOPT_RETURNTRANSFER ให้เป็น true

<?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

// Return
print 'return = ' . $ret . "\n";

// Close handle
curl_close($ch);

?>

ลองรันโปรแกรมหลังจากแก้ไขแล้ว

[user1@dev ~]$ php curl.php
return = <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <title>PHP: Hypertext Preprocessor</title>
 <style type="text/css" media="all">
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");

 </style>
...

 

ดูรายละเอียดการโหลดเว็บเพจ

หากต้องการดูข้อมูลรายละเอียดของการโหลดเว็บเพจ สามารถใช้ฟังก์ชั่น curl_getinfo() ได้

<?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

// Get information about the last transfer
$get_info = curl_getinfo($ch);

print_r($get_info);

// Close handle
curl_close($ch);

?>

ผลการรันโปรแกรม จะแสดงค่าเกี่ยวกับการโหลดเว็บเพจทั้งหมด

[user1@dev ~]$ php curl.php
Array
(
    [url] => http://www.php.net
    [content_type] => text/html;charset=utf-8
    [http_code] => 200
    [header_size] => 382
    [request_size] => 50
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 1.523659
    [namelookup_time] => 0.006906
    [connect_time] => 0.249598
    [pretransfer_time] => 0.249602
    [size_upload] => 0
    [size_download] => 45325
    [speed_download] => 29747
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => 0
    [starttransfer_time] => 0.551071
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

)

 

แต่ถ้าต้องการแสดงเฉพาะบางค่า เช่นขนาดไฟล์เว็บเพจที่โหลด ต้องระบุ CURLINFO_SIZE_DOWNLOAD ไว้ในฟังก์ชั่น curl_getinfo() ด้วย

<?php

// Create a curl handle
$ch = curl_init('http://www.php.net');

// Set curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute
$ret = curl_exec($ch);

// Get information about the last transfer
$get_info_size_download = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);

print 'SIZE_DOWNLOAD = ' . $get_info_size_download . "\n";

// Close handle
curl_close($ch);

?>

ผลการรันโปรแกรม

[user1@dev ~]$ php curl.php
SIZE_DOWNLOAD = 45325

 

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.