แสดงบทความที่มีป้ายกำกับ authentication แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ authentication แสดงบทความทั้งหมด

วันเสาร์ที่ 5 เมษายน พ.ศ. 2568

เชื่อมต่อ PHP กับ API ภายนอกแบบง่ายๆ ด้วย cURL

ถ้าพูดถึงการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ API (Application Programming Interface) เป็นสิ่งที่ขาดไม่ได้เลย ไม่ว่าจะเป็นการดึงข้อมูลจาก OpenWeather, Google Maps, หรือแม้แต่เชื่อมต่อ Payment Gateway อย่าง Stripe หรือ PayPal 🔗

วันนี้เราจะมาทำความรู้จักกับ cURL ซึ่งเป็นเครื่องมือสำคัญที่ช่วยให้ PHP สามารถเรียกใช้ API ได้ง่ายๆ แบบนักพัฒนามืออาชีพ! 🏆

🔥 ทำไมต้องใช้ cURL?

PHP มีฟังก์ชัน file_get_contents() ที่ใช้ดึงข้อมูลจาก URL ได้ แต่มีข้อจำกัด เช่น

❌ ไม่รองรับการส่ง HTTP Headers
❌ ไม่สามารถทำ HTTP POST, PUT, DELETE ได้ง่ายๆ
❌ ไม่รองรับ SSL/TLS อย่างดี


cURL ช่วยแก้ปัญหานี้! ✅

✔️ รองรับทุกประเภทของ HTTP Request (GET, POST, PUT, DELETE)
✔️ รองรับ Bearer Token, API Key, และ OAuth
✔️ รองรับการส่ง JSON, XML, Form Data
✔️ ปลอดภัย และ ควบคุมการเชื่อมต่อได้ดีกว่า


🛠️ 1. เช็คว่า PHP รองรับ cURL หรือไม่

ก่อนเริ่มต้น ให้เช็คว่าเซิร์ฟเวอร์ของคุณเปิดใช้งาน cURL หรือยัง

รันคำสั่งนี้ใน PHP

<?php
phpinfo();
?>

แล้วมองหา cURL support => enabled ✅
ถ้ายังไม่เปิดใช้งาน ให้เพิ่มหรือแก้ไขไฟล์ php.ini

extension=curl

จากนั้น Restart Apache หรือ Nginx


🌎 2. การใช้ cURL ดึงข้อมูลจาก API ภายนอก (HTTP GET)

สมมติว่าเราต้องการดึงข้อมูลสภาพอากาศจาก OpenWeather API 🌤️

สร้างไฟล์ get_weather.php

<?php
$apiKey = "your_api_key";  // เปลี่ยนเป็น API Key ของคุณ
$city = "Bangkok";
$url = "https://api.openweathermap.org/data/2.5/weather?q=$city&appid=$apiKey&units=metric";

$ch = curl_init();  // เริ่มใช้งาน cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if ($data && isset($data['main']['temp'])) {
    echo "🌡️ อุณหภูมิใน $city ตอนนี้: " . $data['main']['temp'] . "°C";
} else {
    echo "ไม่สามารถดึงข้อมูลได้ ❌";
}
?>

🔥 อธิบายโค้ด

  • curl_init() → เริ่มใช้งาน cURL
  • curl_setopt($ch, CURLOPT_URL, $url); → ตั้งค่า URL
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); → ให้คืนค่ากลับมาเป็น string
  • curl_exec($ch); → รันคำสั่ง
  • curl_close($ch); → ปิดการเชื่อมต่อ
  • json_decode($response, true); → แปลง JSON เป็น Array


📤 3. ส่งข้อมูลไปยัง API (HTTP POST)

สมมติว่าคุณต้องส่งข้อมูลไปยัง Webhook ของ Discord 🎤

<?php
$webhookUrl = "https://discord.com/api/webhooks/your_webhook_url";
$data = ["content" => "Hello from PHP! 👋"];

$ch = curl_init($webhookUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo "Response: " . $response;
?>

🔥 อธิบายโค้ด

  • CURLOPT_POST → ใช้ส่งแบบ POST
  • CURLOPT_POSTFIELDS → ข้อมูลที่ต้องการส่ง
  • CURLOPT_HTTPHEADER → กำหนดว่าเราส่ง JSON


🔑 4. การใช้ API Key และ Bearer Token

สมมติว่าเราต้องเรียก GitHub API เพื่อดึงข้อมูล User 👨‍💻

<?php
$token = "your_github_personal_access_token";
$url = "https://api.github.com/user";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $token",
    "User-Agent: PHP-cURL"
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
?>

💡 หมายเหตุ:

  • บาง API ต้องการให้ใส่ User-Agent ไม่งั้นจะถูกปฏิเสธ
  • GitHub ใช้ Bearer Token แทน API Key


⚡ 5. ส่งข้อมูลแบบ JSON และรับค่ากลับมา

สมมติว่าคุณต้องการเชื่อมต่อ Chatbot API ของ AI 🤖

<?php
$url = "https://api.example.com/chatbot";
$data = [
    "message" => "Hello, how are you?",
    "user_id" => 12345
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo "Chatbot response: " . $response;
?>


🛡️ 6. จัดการข้อผิดพลาด (Error Handling)

บางครั้ง API อาจล่ม หรือส่งข้อมูลผิด เราต้องมีการจัดการ Error

<?php
$ch = curl_init("https://api.example.com/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch);
} else {
    echo "Response: " . $response;
}

curl_close($ch);
?>

✅ curl_errno($ch) → เช็คว่ามีข้อผิดพลาดไหม
✅ curl_error($ch) → ดึงข้อความ error


✅ สรุป

✔️ ใช้ cURL ดึงข้อมูลจาก API ภายนอกได้ทุกแบบ
✔️ รองรับ GET, POST, PUT, DELETE
✔️ ใช้ Bearer Token และ API Key ได้ง่าย
✔️ รองรับการส่งข้อมูลแบบ JSON และ Form Data
✔️ ควรมี Error Handling ทุกครั้ง

วันอาทิตย์ที่ 16 มีนาคม พ.ศ. 2568

[PHP] วิธีใช้ Session และ Cookie อย่างถูกต้อง

ถ้าเราพูดถึงการเก็บข้อมูลผู้ใช้บนเว็บ Session และ Cookie เป็นสองวิธีหลักที่ใช้กันบ่อยมาก แต่หลายคนอาจสงสัยว่า มันต่างกันยังไง? แล้ว ควรใช้ตอนไหน?

บทความนี้จะพาไปทำความเข้าใจ Session กับ Cookie แบบละเอียดสุด ๆ พร้อมตัวอย่างการใช้งาน ที่ถูกต้องและปลอดภัย

1. Session และ Cookie คืออะไร?

คุณสมบัติ Session Cookie
เก็บข้อมูลไว้ที่ไหน? ฝั่งเซิร์ฟเวอร์ ฝั่งเบราว์เซอร์ (Client-side)
อายุของข้อมูล หมดอายุเมื่อปิดเบราว์เซอร์ (ถ้าไม่กำหนดเวลา) กำหนดเวลาหมดอายุได้
ข้อมูลปลอดภัยแค่ไหน? ปลอดภัยกว่าเพราะไม่อยู่ในเครื่องผู้ใช้ มีโอกาสถูกแก้ไขได้
ใช้สำหรับอะไร? เก็บข้อมูลที่ต้องการให้ปลอดภัย เช่น การล็อกอิน เก็บค่าต่าง ๆ เพื่อให้ผู้ใช้สะดวกขึ้น เช่น จำการตั้งค่าของเว็บ
ส่งข้อมูลไปกับ HTTP Request ไหม? ไม่ ใช่ (Cookie จะถูกส่งไปกับทุก Request)


2. วิธีใช้ Session อย่างถูกต้อง

📌 เริ่มใช้งาน Session

ก่อนจะใช้งาน Session เราต้องเรียก session_start(); เสมอ

session_start(); // ต้องใส่เป็นบรรทัดแรกของไฟล์ PHP

📌 วิธีสร้างตัวแปรใน Session


$_SESSION['username'] = 'john_doe';
$_SESSION['role'] = 'admin';

📌 ดึงค่าจาก Session

session_start();
echo $_SESSION['username']; // john_doe

📌 วิธีลบค่า Session

ถ้าต้องการลบตัวแปร Session บางตัว

unset($_SESSION['username']); // ลบตัวแปร username

ถ้าต้องการลบทุกอย่าง (เช่น ตอน Logout)

session_destroy(); // ลบ Session ทั้งหมด

🔥 ข้อควรระวังในการใช้ Session

  •     ต้องเรียก session_start(); ก่อนเสมอ
  •     อย่าเก็บข้อมูลที่สำคัญเกินไป เช่น รหัสผ่าน ควรเก็บแค่ ID แล้วไปดึงข้อมูลจาก Database
  •     อย่าลืมลบ Session ที่ไม่จำเป็นเมื่อผู้ใช้ Logout


3. วิธีใช้ Cookie อย่างถูกต้อง

📌 การสร้าง Cookie

setcookie("user", "john_doe", time() + 3600, "/"); // หมดอายุใน 1 ชั่วโมง

📢 time() + 3600 หมายถึง 1 ชั่วโมง (60 วินาที x 60 นาที)

📌 การอ่านค่า Cookie

if(isset($_COOKIE['user'])) {
    echo "Welcome " . $_COOKIE['user'];
}

📌 การลบ Cookie

setcookie("user", "", time() - 3600, "/"); // ตั้งเวลาให้เป็นอดีต

🔥 ข้อควรระวังในการใช้ Cookie

  •     ข้อมูลใน Cookie ถูกแก้ไขได้ ควรเข้ารหัสก่อนเก็บ
  •     Cookie ถูกส่งไปกับทุก HTTP Request ทำให้เพิ่มภาระเซิร์ฟเวอร์
  •     อย่าเก็บข้อมูลสำคัญใน Cookie เช่น รหัสผ่าน


4. ควรใช้ Session หรือ Cookie ตอนไหน?

สถานการณ์ ควรใช้
ระบบล็อกอิน Session (ปลอดภัยกว่า)
จดจำการตั้งค่าของผู้ใช้ เช่น โหมดมืด Cookie
ติดตามการใช้งานเว็บ (Analytics) Cookie
เก็บข้อมูลชั่วคราวของผู้ใช้ในระหว่าง Session Session


5. เทคนิคเพิ่มความปลอดภัย

🔒 ป้องกัน Session Hijacking

session_regenerate_id(true); // เปลี่ยน Session ID ใหม่ ป้องกันการขโมย

🔒 ตั้งค่า Cookie ให้ปลอดภัย

setcookie("user", "john_doe", time() + 3600, "/", "", true, true);

✅ true, true หมายถึงเปิดใช้งาน Secure (HTTPS เท่านั้น) และ HttpOnly (กัน XSS)

6. สรุป

  •     Session เหมาะสำหรับเก็บข้อมูลชั่วคราวที่ต้องปลอดภัย เช่น การล็อกอิน
  •     Cookie เหมาะสำหรับจดจำข้อมูลระยะยาว เช่น การตั้งค่าเว็บ
  •     ต้อง เข้ารหัสข้อมูล และใช้ HttpOnly / Secure กับ Cookie เพื่อความปลอดภัย
  •     อย่าลืมล้าง Session และ Cookie ที่ไม่จำเป็นเพื่อป้องกันปัญหาความปลอดภัย