PHP ระดับสูง > ฟังก์ชันเมล์และเครือข่าย
ฟังก์ชันมองหาเครือข่าย
PHP มีชุดของฟังก์ชันมองหา ที่สามารถใช้ตรวจสารสนเทศของชื่อโฮลต์ IP address และเมล์ ตัวอย่างเช่น ถ้ากำลังตั้งค่าไดเรคทอรี เช่น Yahoo เมื่อ URL ใหม่ได้รับการส่งค่า อาจจะด้องมีการตรวจสอบโฮสต์ของ URL และสารสนเทศติดต่อ ด้วยวิธีนี้สามารถประหยัดเวลาการสืบค้นเมื่อการทบทวนพบว่า URL ไม่มีอยู่จริง หรือที่อยู่อีเมล์ไม่ถูกต้อง
รายการคำสั่ง 3.2.3 แสดงฟอร์ม HTML ส่งข้อมูลของ URL และที่อยู่อีเมล์
<html>
<head>
<title>Site Verification</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
</head>
<body>
<h1> ตรวจสอบเว็บไซต์</h1>
<form name="form1" method="post" action="site_verified.php">
<table width="80%" border="0">
<tr>
<td width="20%">URL</td>
<td><input name="url" type="text" id="url" size="50" maxlength="100"></td>
</tr>
<tr>
<td>อีเมล์</td>
<td><input name="email" type="text" id="email" size="50" maxlength="100">
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html> |
ตัวอย่างตามภาพ 3.2.3 เป็นฟอร์มอย่างง่ายสำหรับการส่งสารสนเทศ url และ ที่อยู่อีเมล์
ภาพ 3.2.3 ฟอร์มอย่างง่ายสำหรับการส่งสารสนเทศ url
เมื่อคลิกปุ่ม Submit สิ่งแรกที่ต้องการตรวจสอบคือ URL เป็นโฮสต์บนเครื่องจริงและสิ่งที่ 2 คือ ส่วนโฮสต์ได้รับการแสดงตามภาพ 3.2.4
ภาพ 3.2.4 ผลลัพธ์การตรวจสอบ url และโฮสต์ของอีเมล์
สคริปต์นี้ทำการตรวจสอบด้วย 2 ฟังก์ชัน จากชุดฟังก์ชันเครือข่ายของ PHP คือ gethostbyname() และ getmxrr() สคริปต์เติมแสดงในรายการคำสั่ง 3.2.3
รายการคำสั่ง 3.2.4 สคริปต์ site_verified.php สำหรับการตรวจสอบ URL
<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<head>
<title>Site verified results</title>
</head>
<body>
<h1>ผลลัพธ์การตรวจสอบเว็บไซต์</h1>
<?php
/* -------------------------------
* ตรวจสอบ URL
* ------------------------------- */
$url = parse_url($url);
$host = $url[host];
if(!($ip = gethostbyname($host)))
{
echo "โฮสต์ของ URL มี IP ไม่ถูกต้อง <br/>";
exit;
}
echo "โฮสต์อยู่ที่ IP $ip <br/>";
/* -------------------------------
* ตรวจสอบ email address
* ------------------------------- */
$email = explode("@", $email);
$emailhost = $email[1];
if (!getmxrr($emailhost, $mxhostsarr))
{
echo "ที่อยู่อีเมล์มีโฮสต์ไม่ถูกต้อง";
exit;
}
echo "อีเมล์ส่งผ่าน: ";
foreach ($mxhostsarr as $mx)
echo "$mx ";
/* -------------------------------
* ถ้าถึงที่นี่ , รายละเอียดถูกต้อง
* ------------------------------- */
echo <<<EOMSG
<p>รายละเอียดการส่งทั้งหมด ถูกต้อง <br>
ขอบคุณสำหรับการส่งผ่านไซต์ของท่าน <br>
จะมีการเยี่ยมจากเจ้าหน้าที่ของเราในเร็วๆนี้</p>
EOMSG;
?>
</body>
</html> |
ส่วนน่าสนใจของสคริปต์นี้คือ
นำ URL และประยุกต์ด้วยฟังก์ชัน parse_url() ฟังก์ชันนี้ส่งออก array เชื่อมโยงกับส่วนต่างๆ ของ URL ชิ้นสารสนเทศมีให้ คือ scheme, user, pass, hast, port, path, query และ fragment ตามปกติไม่ต้องการสารสนเทศทั้งหมด
ให้ URL เช่น
http://someone:hello@mydomain.com:80/somebody.php?sender=2#anchor
ค่าของแต่ละส่วนของส่วนของ array จะเป็น
- scheme : http://
- user : someone
- pass : hello
- host : mydomain.com
- port : 80
- path : somebody.php
- query : sender=2
- fragment : anchor
ในสคริปต์นี้ต้องการเฉพาะสารสนเทศ host ดังนั้น จึง ดึงออกจาก array ดังนี้
$url = parse_url($url);
$host = $url[host];
หลังจากนั้นสามารถดึง IP address ของโฮสต์ ถ้าอยู่ใน DNS ด้วยฟังก์ชัน gethostbyname() ที่จะส่งออก IP ถ้ามีอยู่จริงหรือ FALSE ถ้าไม่มีอยู่จริง
$ip = gethostbyname($host);
ในทางกลับกัน ใช้ฟังก์ชัน gethostbyaddr() ที่ใช้ IP เป็นพารามิเตอร์และส่งออกชื่อโฮสต์ ถ้าเรียกฟังก์ชันเหล่านี้สำเร็จอาจจะพบชื่อโฮสต์ต่างจากเริ่มต้น แสดงว่าโฮสต์นั้นใช้บริการโฮสต์เสมอ
ถ้า URL ถูกต้อง ต่อไปให้ตรวจสอบที่อยู่อีเมล์ ขั้นแรกแบ่งชื่อผู้ใช้และชื่อโฮสต์ด้วยการเรียกฟังก์ชัน explode()
$email = explode("@", $email);
$emailhost = $email[1];
เมื่อมีส่วนโฮสต์ของ address นั้น สามารถตรวจสอบ สถานที่สำหรับอีเมล์เดินทางด้วยการใช้ฟังก์ชัน getmxrr()
getmxrr($emailhost, $mxhostsarr)
ฟังก์ชันนี้ส่งออกชุดของ MX (Mail Exchange) records สำหรับ address ใน array ที่ส่ง $mxhostsarr
หมายเหตุ ฟังก์ชัน getmxrr() ไม่สนับสนุนการทำงานบน Windows ดังนั้นสคริปต์ตัวอย่างจึงได้อัพโหลดให้ทดสอบที่
http://www.widebase.net/lesson/php_lesson/site_verified/site_verified.html
|