ใช้ Composer PHP บน DirectAdmin Hosting

Composer คือ Dependency Manager สำหรับ PHP ช่วยติดตั้งและจัดการ Library ต่างๆ เช่น PHPMailer, Guzzle, Carbon, Stripe SDK ได้ด้วยคำสั่งเดียว ใน Shared Hosting DirectAdmin มี SSH Access (ขึ้นอยู่กับแผน) ทำให้ใช้ Composer ได้โดยตรงผ่าน Terminal หรืออัพ vendor/ folder ผ่าน FTP ก็ได้เช่นกัน

ตรวจสอบ PHP CLI และ SSH Access

Composer ต้องการ PHP CLI (Command Line) ตรวจสอบผ่าน SSH:

ssh [email protected]
php -v
# PHP 8.3.x (cli)

ถ้าไม่มี SSH หรือ PHP CLI ไม่ถูก version ต้องการ ใช้ php83 หรือ php82 แทน (DirectAdmin อนุญาตให้เรียก PHP หลายเวอร์ชัน):

php83 -v

ติดตั้ง Composer บน Hosting

cd ~
curl -sS https://getcomposer.org/installer | php
# สร้างไฟล์ composer.phar ในโฟลเดอร์ปัจจุบัน

เพิ่ม alias ให้พิมพ์ composer ได้เลยโดยไม่ต้อง php composer.phar:

echo 'alias composer="php ~/composer.phar"' >> ~/.bashrc
source ~/.bashrc
composer --version

สร้างโปรเจกต์ PHP พร้อม Composer

ไฟล์ composer.json (โครงสร้างพื้นฐาน)

{
  "require": {
    "phpmailer/phpmailer": "^6.9",
    "guzzlehttp/guzzle": "^7.8",
    "nesbot/carbon": "^3.0"
  }
}

ติดตั้ง Package

cd ~/domains/yourdomain.com/public_html
composer install

Composer จะสร้างโฟลเดอร์ vendor/ พร้อม autoloader vendor/autoload.php

Composer คืออะไรและทำไมถึงสำคัญสำหรับ PHP Developer

ก่อนจะมี Composer นักพัฒนา PHP ต้องดาวน์โหลด Library แต่ละตัวด้วยตัวเอง คอยอัพเดต version เองด้วยมือ และแก้ปัญหาเมื่อ Library ที่ดาวน์โหลดมาต้องการ Library อื่นที่ยังไม่ได้ติดตั้ง ปัญหานี้เรียกว่า "Dependency Hell" และทำให้เสียเวลาไปมากกับงานที่ไม่ใช่ logic หลักของโปรแกรม

Composer แก้ปัญหาทั้งหมดนี้ได้ในคำสั่งเดียว เมื่อระบุ Package ที่ต้องการใน composer.json Composer จะ:

ปัจจุบัน Framework ยอดนิยมทุกตัวในโลก PHP ไม่ว่าจะเป็น Laravel, Symfony, Slim หรือ CodeIgniter ล้วนใช้ Composer เป็นพื้นฐาน และ Packagist.org ซึ่งเป็น repository กลางของ Composer มี Package ให้เลือกใช้มากกว่า 400,000 Package ในปี 2026

ทำความเข้าใจโครงสร้างไฟล์ที่ Composer สร้าง

หลังรัน composer install สำเร็จ โครงสร้างโฟลเดอร์ในโปรเจกต์จะมีลักษณะดังนี้

ไฟล์/โฟลเดอร์ หน้าที่ อัพ Git?
composer.json ระบุ dependencies และ config ของโปรเจกต์ ✓ ควรอัพ
composer.lock ล็อก version ทุก package ให้ทีมใช้ version เดียวกัน ✓ ควรอัพ
vendor/ โค้ดของ package ทั้งหมดและ autoloader ✗ ใส่ใน .gitignore
vendor/autoload.php ไฟล์ที่ require ในโค้ดเพื่อใช้งาน package ✗ สร้างอัตโนมัติ

composer.lock มีความสำคัญมากในทีม เพราะทำให้ทุกคนติดตั้ง package version เดียวกันทุกครั้งที่รัน composer install ไม่เกิดปัญหา "ในเครื่องฉันใช้งานได้ แต่บน server พัง" เพราะ version ต่างกัน

การจัดการ Dependency แบบมืออาชีพด้วย Composer

ระบุ Version Constraint ที่เหมาะสม

ใน composer.json รูปแบบการระบุ version มีผลต่อความเสถียรของโปรเจกต์อย่างมาก

Constraint ความหมาย เหมาะกับ
^6.9 ≥6.9.0 และ <7.0.0 (ยอมรับ minor update) Production ทั่วไป
~6.9 ≥6.9.0 และ <6.10.0 (ยอมรับเฉพาะ patch) ต้องการความระมัดระวังสูง
6.9.* 6.9.x ทุก patch version Lock ที่ minor version
6.9.1 version นี้เท่านั้น ไม่แนะนำ (หยุดรับ security patch)

ใช้ Autoload ของโปรเจกต์เอง

นอกจาก autoload ของ package Composer ยังช่วยจัดการ autoload ของโค้ดโปรเจกต์เองได้ผ่าน composer.json

{
  "require": {
    "phpmailer/phpmailer": "^6.9"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

หลังแก้ไขให้รัน composer dump-autoload เพื่ออัพเดต autoloader แล้ว class ใน src/ จะถูก autoload ได้ทันที

ใช้ Package ในโค้ด PHP

format('d/m/Y H:i');

// ใช้ PHPMailer
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.yourdomain.com';
// ... ส่ง email

ติดตั้ง Package ยอดนิยมและวิธีใช้งาน

Stripe PHP SDK — รับชำระเงินออนไลน์

Stripe SDK ช่วยให้โปรเจกต์ PHP รองรับการชำระเงินด้วยบัตรเครดิต PromptPay และ QR Code ได้ง่ายขึ้น

composer require stripe/stripe-php

# ตัวอย่างสร้าง PaymentIntent
require_once __DIR__ . '/vendor/autoload.php';

\Stripe\Stripe::setApiKey('sk_live_xxx');

$intent = \Stripe\PaymentIntent::create([
  'amount'   => 50000, // หน่วย satang (500 บาท)
  'currency' => 'thb',
]);
echo $intent->client_secret;

Guzzle HTTP Client — ส่ง API Request

Guzzle เป็น HTTP Client ที่ใช้งานง่ายและรองรับ async request, middleware และ retry โดยอัตโนมัติ

composer require guzzlehttp/guzzle

use GuzzleHttp\Client;

$client = new Client(['base_uri' => 'https://api.example.com']);
$response = $client->get('/users', [
  'headers' => ['Authorization' => 'Bearer token123'],
  'timeout' => 5,
]);
$data = json_decode($response->getBody(), true);

Carbon — จัดการวันที่และเวลาในภาษาไทย

Carbon ขยายความสามารถของ PHP DateTime ให้ใช้งานง่ายขึ้น รองรับ timezone, locale และ human-readable format

composer require nesbot/carbon

use Carbon\Carbon;
Carbon::setLocale('th');

$now = Carbon::now('Asia/Bangkok');
echo $now->format('d/m/Y H:i');      // 07/06/2026 15:30
echo $now->diffForHumans();           // เมื่อไม่กี่วินาทีที่แล้ว
echo $now->addDays(7)->toDateString(); // 2026-06-14

Intervention Image — ประมวลผลรูปภาพ

Intervention Image ช่วย resize, crop, watermark รูปภาพ และแปลง format (WebP, JPG, PNG) ได้โดยตรงจาก PHP

composer require intervention/image

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;

$manager = new ImageManager(new Driver());
$image = $manager->read('upload.jpg');
$image->resize(width: 820, height: 340);
$image->save('output.webp'); // แปลงเป็น WebP อัตโนมัติ

กรณีไม่มี SSH — อัพ vendor/ ผ่าน FTP

ถ้า Hosting ไม่มี SSH Access ให้รัน Composer บนเครื่องตัวเองก่อน แล้วอัพโหลดทั้งโฟลเดอร์ vendor/ ขึ้น Hosting ผ่าน FTP:

  1. ติดตั้ง Composer บน Local (Mac: brew install composer / Win: ดาวน์โหลด installer)
  2. รัน composer install ใน project folder
  3. อัพโหลด vendor/ และ composer.lock ขึ้น Hosting ด้วย FileZilla หรือ FTP

ข้อสำคัญ: ห้ามอัพโหลดโฟลเดอร์ vendor/ ขึ้น Git โดยตรง — ให้ใส่ /vendor ใน .gitignore แทน และใช้ composer install บน server หรือ CI/CD pipeline แทน

เลือก Package อย่างไรให้เหมาะกับโปรเจกต์

Packagist.org มี Package มากกว่า 400,000 รายการ การเลือก Package ที่ถูกต้องมีผลต่อความมั่นคง ประสิทธิภาพ และความปลอดภัยของโปรเจกต์ในระยะยาว หลักการเลือก Package ที่ดีมีดังนี้

สำหรับ Package ใหม่ที่ยังไม่เคยใช้ แนะนำให้ทดสอบใน environment แยกก่อนเสมอ ด้วยการสร้าง Branch ใหม่ใน Git แล้วรัน composer require package/name แล้วทดสอบบน local ก่อนนำขึ้น Hosting จริง

คำสั่ง Composer ที่ใช้บ่อย

# ติดตั้ง dependencies จาก composer.json
composer install

# เพิ่ม package ใหม่
composer require stripe/stripe-php

# อัพเดต packages ทั้งหมดเป็น version ล่าสุด
composer update

# อัพเดต package เฉพาะตัว
composer update phpmailer/phpmailer

# ลบ package
composer remove guzzlehttp/guzzle

# แสดง packages ที่ติดตั้ง
composer show

ตัวอย่าง Use Case จริงสำหรับโปรเจกต์ไทย

Composer เป็นเครื่องมือที่ใช้ในงานจริงหลากหลายประเภท ตั้งแต่เว็บไซต์ขนาดเล็กไปจนถึงระบบ E-Commerce และ API Backend ต่อไปนี้คือตัวอย่างที่นักพัฒนาไทยใช้บ่อย

ระบบส่งอีเมล Newsletter ด้วย PHPMailer

PHPMailer เป็น Library ยอดนิยมสำหรับส่งอีเมลผ่าน SMTP รองรับ TLS, HTML email, Attachment และ Batch sending ใช้งานง่ายกว่าฟังก์ชัน mail() ของ PHP ธรรมดามาก

composer require phpmailer/phpmailer

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);
try {
    $mail->isSMTP();
    $mail->Host       = 'mail.yourdomain.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]';
    $mail->Password   = 'your-password';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
    $mail->Port       = 465;
    $mail->CharSet    = 'UTF-8'; // รองรับภาษาไทย

    $mail->setFrom('[email protected]', 'ชื่อเว็บไซต์');
    $mail->addAddress('[email protected]');

    $mail->isHTML(true);
    $mail->Subject = 'ข่าวสารประจำสัปดาห์';
    $mail->Body    = '<h1>สวัสดีครับ</h1><p>เนื้อหา newsletter...</p>';
    $mail->send();
    echo 'ส่งอีเมลสำเร็จ';
} catch (Exception $e) {
    echo "เกิดข้อผิดพลาด: {$mail->ErrorInfo}";
}

ดึงข้อมูล REST API ด้วย Guzzle

สำหรับโปรเจกต์ที่ต้องเชื่อมต่อกับ API ภายนอก เช่น ระบบ ERP, LINE Messaging API, หรือ Payment Gateway ต่างๆ Guzzle ช่วยให้เขียนโค้ดได้กระชับและมีระบบจัดการ error ครบชุด

composer require guzzlehttp/guzzle

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client([
    'base_uri' => 'https://api.example.com/v1/',
    'timeout'  => 10.0,
    'headers'  => ['Accept' => 'application/json'],
]);

try {
    $response = $client->post('orders', [
        'json' => [
            'product_id' => 123,
            'quantity'   => 2,
            'customer'   => 'สมชาย ใจดี',
        ],
    ]);
    $order = json_decode($response->getBody(), true);
    echo 'สร้าง Order สำเร็จ: #'.$order['id'];
} catch (RequestException $e) {
    echo 'API Error: '.$e->getMessage();
}

จัดการไฟล์ CSV/Excel ด้วย PhpSpreadsheet

PhpSpreadsheet ช่วยอ่านและเขียนไฟล์ Excel (.xlsx) และ CSV ได้โดยตรงจาก PHP ใช้งานมากในระบบ Import/Export สินค้า หรือรายงานที่ต้องส่งเป็น Excel

composer require phpoffice/phpspreadsheet

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ชื่อสินค้า');
$sheet->setCellValue('B1', 'ราคา (บาท)');
$sheet->setCellValue('A2', 'Hosting ไทย 5GB');
$sheet->setCellValue('B2', 500);

$writer = new Xlsx($spreadsheet);
$writer->save('รายการสินค้า.xlsx');
echo 'สร้างไฟล์ Excel สำเร็จ';

แนวทาง Security สำหรับ Composer บน Production

การใช้ Composer บน Hosting มีประเด็น Security ที่ต้องระวังดังนี้

# ตรวจหาช่องโหว่ใน package ที่ติดตั้ง
composer audit

# ติดตั้งเฉพาะ production dependencies พร้อม optimized autoloader
composer install --no-dev --optimize-autoloader

# ตรวจสอบความถูกต้องของ composer.json
composer validate

เคล็ดลับ Production: flag --optimize-autoloader สร้าง class-map แทน PSR-4 lookup ทำให้ autoloading เร็วขึ้น 20–30% เหมาะมากสำหรับ Hosting ที่ไม่มี OPCache หรือมี Memory จำกัด

ปัญหาที่พบบ่อยบน Shared Hosting

Memory limit exceeded

php -d memory_limit=512M composer.phar install

ต้องใช้ PHP version เฉพาะ

php83 ~/composer.phar install

Timeout บน SSH

ใช้ nohup เพื่อให้รันต่อแม้ SSH หลุด:

nohup php ~/composer.phar install > composer.log 2>&1 &

ต้องการ Hosting ที่รองรับ SSH และ PHP 8.3?

AsiaGB Hosting รองรับ PHP 8.3, SSH Access และ Composer ทุกแผน เริ่มต้น 500 บาท/ปี

ดู Hosting Plans