วันอาทิตย์ที่ 6 เมษายน พ.ศ. 2568

Composer จัดการแพ็กเกจใน PHP แบบมือโปร ใช้ง่าย ใช้เป็น ใช้แล้วชีวิตดีขึ้น!

เคยไหม?

  • โค้ด PHP รกไปหมด เพราะต้องดาวน์โหลดไลบรารีเอง 😵‍💫
  • ใช้ไลบรารีหลายตัว แต่ต้องอัปเดตเองทีละไฟล์ 🤯
  • โปรเจกต์มีไฟล์เยอะ จัดการ dependencies ยากสุดๆ

ถ้าใช่... งั้นคุณต้องรู้จัก Composer ตัวช่วยสุดเทพของ PHP ที่จะทำให้ชีวิตการพัฒนาเว็บของคุณง่ายขึ้นแบบสุดๆ! 🎉

วันนี้เราจะพาไปรู้จัก Composer ตั้งแต่พื้นฐาน จนไปถึงเทคนิคระดับโปร! 💡


🎯 Composer คืออะไร?

Composer เป็น Dependency Manager สำหรับ PHP (ตัวจัดการแพ็กเกจ) หรือพูดง่ายๆ ก็คือ... ตัวช่วยติดตั้งไลบรารีแบบอัตโนมัติ 🎯

🔹 ไม่ต้องดาวน์โหลดไลบรารีเอง
🔹 อัปเดตไลบรารีได้ง่ายๆ ด้วยคำสั่งเดียว
🔹 ช่วยให้โปรเจกต์ PHP เป็นระเบียบ และจัดการได้ง่ายขึ้น

ลองนึกภาพแบบนี้...

  • ถ้าคุณต้องใช้ Laravel, Symfony, Guzzle, หรือไลบรารีอื่นๆ คุณแค่สั่ง Composer ติดตั้งให้
  • ไม่ต้องดาวน์โหลด ZIP, แตกไฟล์ แล้ว include ทีละตัวเองให้ยุ่งยาก


🛠 1. ติดตั้ง Composer

✅ ติดตั้งบน Windows

  1. ไปที่ 👉 https://getcomposer.org/
  2. ดาวน์โหลด Composer-Setup.exe
  3. กดติดตั้ง (Next ๆ ๆ ไปเลย)

เสร็จแล้ว! 🎉

✅ ติดตั้งบน macOS / Linux

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

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

จากนั้นย้าย Composer ไปที่ /usr/local/bin/ เพื่อเรียกใช้งานง่ายๆ

sudo mv composer.phar /usr/local/bin/composer

เช็คว่า Composer ติดตั้งสำเร็จหรือไม่

composer --version

ถ้าเห็นเวอร์ชันแสดงขึ้นมา เช่น Composer version 2.x.x ✅ แปลว่าพร้อมใช้งาน!


📦 2. เริ่มต้นใช้งาน Composer ในโปรเจกต์

🔹 สร้างโปรเจกต์ PHP ใหม่

สมมติว่าคุณจะสร้างโปรเจกต์ชื่อ myproject

mkdir myproject && cd myproject
composer init

Composer จะถามข้อมูลต่างๆ เช่น

  • ชื่อแพ็กเกจ
  • คำอธิบาย
  • เวอร์ชัน
  • ผู้พัฒนา

สามารถกด Enter ข้ามไปได้หมด แล้วสุดท้ายกด "Yes"

ผลลัพธ์คือ Composer จะสร้างไฟล์ composer.json ซึ่งใช้เก็บข้อมูลเกี่ยวกับแพ็กเกจที่โปรเจกต์ต้องใช้


🔥 3. ติดตั้งไลบรารีด้วย Composer

✅ ติดตั้งไลบรารี (เช่น Guzzle สำหรับ HTTP Requests)

สมมติว่าคุณต้องการใช้ Guzzle เพื่อทำ HTTP Request

composer require guzzlehttp/guzzle

Composer จะ:

✔️ ดาวน์โหลด Guzzle และ dependencies ที่เกี่ยวข้อง
✔️ สร้างโฟลเดอร์ vendor/ (เก็บไลบรารีทั้งหมด)
✔️ อัปเดต composer.json และสร้าง composer.lock

🎯 วิธีใช้ Guzzle ในโค้ด PHP

<?php
require 'vendor/autoload.php'; // โหลด Composer Autoload

use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('GET', 'https://api.github.com');

echo $response->getBody();
?>

👉 ง่ายมาก! ไม่ต้องดาวน์โหลดไลบรารีเองเลย


🔄 4. อัปเดตและลบแพ็กเกจ

🔹 อัปเดตไลบรารีทั้งหมด

composer update

(ใช้เมื่อมีแพ็กเกจใหม่ออกมา และต้องการอัปเดตทั้งหมด)

🔹 อัปเดตเฉพาะแพ็กเกจ

composer update guzzlehttp/guzzle

🔹 ลบแพ็กเกจ

composer remove guzzlehttp/guzzle


⚡ 5. ใช้งาน Autoload ให้โค้ดสะอาดขึ้น

Composer มีระบบ autoload ซึ่งช่วยให้เราไม่ต้อง require ไฟล์เอง

🔹 สร้างโครงสร้างโค้ดแบบ OOP

mkdir src
touch src/MyClass.php

สร้างไฟล์ src/MyClass.php

<?php

namespace MyApp;

class MyClass {
    public function sayHello() {
        return "Hello, Composer!";
    }
}
?>

จากนั้นอัปเดต composer.json ให้รองรับ Autoload

"autoload": {
    "psr-4": {
        "MyApp\\": "src/"
    }
}

รันคำสั่ง

composer dump-autoload

ใช้งานได้เลยในไฟล์ index.php

<?php
require 'vendor/autoload.php';

use MyApp\MyClass;

$obj = new MyClass();
echo $obj->sayHello();
?>

🔥 แค่นี้ก็ไม่ต้อง require ไฟล์เองอีกต่อไป!


🎯 6. ใช้ Composer ติดตั้ง Laravel

ถ้าคุณอยากลองใช้ Laravel ก็แค่รันคำสั่งนี้

composer create-project --prefer-dist laravel/laravel my-laravel-app

แล้วรอให้ Composer จัดการทุกอย่างให้! 🚀


🔥 7. ใช้ Composer กับ Docker

ถ้าคุณพัฒนา PHP บน Docker สามารถใช้ Composer ได้ง่ายๆ ด้วย Docker

docker run --rm -v $(pwd):/app composer install


🏆 8. เคล็ดลับ Composer ระดับโปร

✅ เช็คแพ็กเกจทั้งหมดที่ติดตั้ง

composer show

✅ เช็คว่ามีอัปเดตใหม่หรือไม่

composer outdated

✅ ล้าง cache เมื่อมีปัญหา

composer clear-cache

✅ โหลดแพ็กเกจแบบไม่ใช้ Dev Dependencies (เหมาะกับ Production)

composer install --no-dev --optimize-autoloader


✅ สรุป

✔️ Composer คือเครื่องมือจัดการแพ็กเกจที่ช่วยให้การพัฒนา PHP เป็นระเบียบและง่ายขึ้น
✔️ ใช้ติดตั้ง อัปเดต และลบไลบรารีได้ง่ายๆ ด้วยคำสั่งเดียว
✔️ รองรับ Autoload ทำให้โค้ดสะอาดขึ้น
✔️ ใช้กับ Laravel และ PHP Framework อื่นๆ ได้อย่างมีประสิทธิภาพ
✔️ ใช้กับ Docker ได้แบบมือโปร

วันเสาร์ที่ 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 ทุกครั้ง

วันพฤหัสบดีที่ 3 เมษายน พ.ศ. 2568

สร้างระบบล็อกอินด้วย PHP และ MySQL อย่างปลอดภัย (อัปเดต 2025!)

ถ้าพูดถึงการพัฒนาเว็บแอปฯ ด้วย PHP สิ่งที่ขาดไม่ได้เลยคือ ระบบล็อกอิน 🏆 แต่ถ้าทำแบบไม่ปลอดภัยก็อาจโดนแฮกง่ายๆ 🤯 วันนี้เราจะมาทำระบบล็อกอินที่ปลอดภัยสุดๆ ด้วย PHP + MySQL กัน!


💡 สิ่งที่ต้องรู้ก่อนเริ่ม

ก่อนที่เราจะลงมือทำ ต้องเข้าใจหลักการพื้นฐานกันก่อน
✅ SQL Injection – การโจมตีที่ใช้ช่องโหว่ของ SQL Query เพื่อดึงข้อมูลออกมา หรือแม้แต่ลบข้อมูลทั้งหมดในฐานข้อมูล! 😱
✅ Password Hashing – ห้ามเก็บรหัสผ่านเป็น plain text เด็ดขาด! ต้องเข้ารหัสก่อนเสมอ
✅ Session & Cookie Security – ป้องกันการถูกขโมย session ด้วย HTTP-only cookies และการเข้ารหัส


🛠️ เตรียมเครื่องมือ

  • PHP 8.x – ใช้เวอร์ชันใหม่สุดเพื่อความปลอดภัยและความเร็ว
  • MySQL / MariaDB – ฐานข้อมูลเก็บผู้ใช้
  • phpMyAdmin – ช่วยจัดการฐานข้อมูล
  • Composer – ใช้ดึงไลบรารีเสริม
  • VS Code / PhpStorm – เลือกใช้เครื่องมือที่ถนัด


🚀 1. สร้างฐานข้อมูล MySQL

เริ่มจากสร้างฐานข้อมูลและตารางสำหรับเก็บผู้ใช้

CREATE DATABASE secure_login;
USE secure_login;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


🔒 2. เชื่อมต่อ PHP กับฐานข้อมูล

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

<?php
$host = "localhost";
$dbname = "secure_login";
$username = "root";
$password = "";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
} catch (PDOException $e) {
    die("Database connection failed: " . $e->getMessage());
}
?>


📝 3. สร้างฟอร์มสมัครสมาชิก

สร้าง register.php

<form action="register.php" method="post">
    <input type="text" name="username" placeholder="Username" required>
    <input type="email" name="email" placeholder="Email" required>
    <input type="password" name="password" placeholder="Password" required>
    <button type="submit">Register</button>
</form>


🔑 4. เขียนโค้ดสมัครสมาชิกแบบปลอดภัย

เพิ่มโค้ด PHP ใน register.php

<?php
require 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST["username"]);
    $email = trim($_POST["email"]);
    $password = password_hash($_POST["password"], PASSWORD_DEFAULT); // เข้ารหัสรหัสผ่าน

    $stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    try {
        $stmt->execute([$username, $email, $password]);
        echo "สมัครสมาชิกสำเร็จ!";
    } catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
?>


🔓 5. สร้างฟอร์มล็อกอิน

สร้าง login.php

<form action="login.php" method="post">
    <input type="text" name="username" placeholder="Username" required>
    <input type="password" name="password" placeholder="Password" required>
    <button type="submit">Login</button>
</form>


🔐 6. เขียนโค้ดล็อกอินแบบปลอดภัย

ใน login.php

<?php
require 'db.php';
session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST["username"]);
    $password = $_POST["password"];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION["user_id"] = $user["id"];
        $_SESSION["username"] = $user["username"];
        header("Location: dashboard.php");
        exit;
    } else {
        echo "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง!";
    }
}
?>


🚪 7. ป้องกัน Session Hijacking และ CSRF

🔹 ใช้ session_regenerate_id(true); หลังล็อกอิน
🔹 ใช้ HTTP-only Cookies
🔹 เพิ่ม CSRF Token ในฟอร์ม

เพิ่ม CSRF Token ในฟอร์ม

<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

และตรวจสอบก่อนประมวลผล

if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("CSRF validation failed!");
}


🏆 8. Logout และทำให้ระบบปลอดภัยขึ้น

สร้าง logout.php

<?php
session_start();
session_destroy();
header("Location: login.php");
exit;
?>


✅ สรุป

✔️ ใช้ password_hash() และ password_verify() แทนการเก็บรหัสผ่านแบบ plain text
✔️ ใช้ PDO + Prepared Statements ป้องกัน SQL Injection
✔️ ใช้ CSRF Token + Session Regeneration ป้องกันการโจมตีรูปแบบต่างๆ
✔️ ปิด Error Reporting ใน Production เพื่อไม่ให้เผยข้อมูลระบบ

ถ้าทำตามนี้ ระบบล็อกอินของคุณก็จะ ปลอดภัยขึ้นอีกระดับ! 🔥