จากที่ได้นำเสนอ วิธีการใช้ 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