PHP Composer on DirectAdmin Hosting

Composer 是 PHP 事实上的依赖项管理器。它让您使用单个命令安装和管理 PHPMailer、Guzzle、Carbon 和 Stripe SDK 等库。在具有 SSH 访问权限的 DirectAdmin 共享主机上,您可以直接在终端中运行 Composer — 或者如果 SSH 不可用,在本地安装包并通过 FTP 上传 vendor/ 文件夹。

验证 PHP CLI 和 SSH 访问

Composer 需要 PHP CLI(命令行)。通过 SSH 检查:

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

如果默认 PHP 版本不是您需要的,请使用 DirectAdmin 提供的版本化二进制文件:

php83 -v

在主机上安装 Composer

cd ~
curl -sS https://getcomposer.org/installer | php
# Creates composer.phar in the current directory

添加别名,这样您可以输入 composer 而不是 php composer.phar:

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

使用 Composer 创建 PHP 项目

composer.json(基本结构)

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

安装包

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

Composer 创建一个包含所有包和 vendor/autoload.php 文件的 vendor/ 目录。

理解 Composer 创建的文件

成功执行 composer install 后,您的项目目录将包含几个重要的文件和文件夹:

文件 / 文件夹 目的 提交到 Git?
composer.json 声明依赖项和项目配置 是
composer.lock 锁定确切版本,使每个团队成员都获得相同的包 是
vendor/ 所有已安装的包代码和自动加载器 否 — 添加到 .gitignore
vendor/autoload.php 您在代码中需要的文件以启用所有包 否 — 自动生成

composer.lock 文件对于团队和生产部署至关重要。它保证每个 composer install 安装完全相同的包版本,防止由开发人员和服务器之间版本漂移引起的"在我的机器上工作"问题。

像专家一样管理依赖项

选择正确的版本约束

您在 composer.json 中如何编写版本约束会显著影响项目的稳定性和安全更新覆盖范围:

约束 含义 最适合
^6.9 ≥6.9.0 且 <7.0.0(接受次要更新) 大多数生产项目
~6.9 ≥6.9.0 且 <6.10.0(仅补丁更新) 高风险集成
6.9.* 任何 6.9.x 补丁版本 在次要版本处锁定
6.9.1 仅精确版本 避免 — 错过安全补丁

自动加载您自己的项目类

除了加载包类,Composer 还可以使用 PSR-4 命名空间自动加载您自己的应用程序类:

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

添加自动加载部分后,运行 composer dump-autoload 以重新生成自动加载器。然后 src/ 目录中 App\ 命名空间下的任何类都将自动加载。

在 PHP 代码中使用包

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

// PHPMailer example
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.yourdomain.com';
// ... send email

流行的包和真实世界的使用示例

Stripe PHP SDK — 接受在线支付

Stripe SDK 使您的 PHP 项目能够以最少的代码接受信用卡付款、PromptPay 和二维码付款。

composer require stripe/stripe-php

require_once __DIR__ . '/vendor/autoload.php';

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

$intent = \Stripe\PaymentIntent::create([
  'amount'   => 50000, // amount in smallest currency unit (satang for THB)
  'currency' => 'thb',
]);
echo $intent->client_secret;

Guzzle HTTP Client — 发起 API 请求

Guzzle 是 PHP 的首选 HTTP 客户端,提供异步请求、中间件支持和开箱即用的自动重试。

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 使用流畅的 API 扩展了 PHP 的原生 DateTime 类,用于格式化、时区转换、本地化和人类可读的差异。

composer require nesbot/carbon

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

$now = Carbon::now('Asia/Bangkok');
echo $now->format('d/m/Y H:i');       // 07/06/2026 15:30
echo $now->diffForHumans();            // just now
echo $now->addDays(7)->toDateString(); // 2026-06-14

Intervention Image — 调整和转换图像

Intervention Image 直接从 PHP 处理调整大小、裁剪、水印和格式转换(WebP、JPG、PNG)— 无需 shell 命令。

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'); // automatically converts to WebP

没有 SSH? 通过 FTP 上传 vendor/

如果您的计划中没有 SSH,请在本地安装 Composer,然后通过 FTP 上传 vendor/ 文件夹:

  1. 在本地安装 Composer(Mac: brew install composer / Windows: 下载安装程序)
  2. 在项目文件夹中运行 composer install
  3. 通过 FileZilla 或 FTP 将 vendor/ 目录和 composer.lock 上传到主机

重要: 永远不要将 vendor/ 目录提交到 Git — 而是将 /vendor 添加到 .gitignore。在服务器上或在 CI/CD 管道中使用 composer install 以重新创建它。

常见的 Composer 命令

# Install all dependencies from composer.json
composer install

# Add a new package
composer require stripe/stripe-php

# Update all packages to latest allowed versions
composer update

# Update a specific package
composer update phpmailer/phpmailer

# Remove a package
composer remove guzzlehttp/guzzle

# List installed packages
composer show

生产环境中 Composer 的安全最佳实践

在实时主机环境上运行 Composer 需要额外关注安全性。遵循这些实践来保护您的项目:

# Audit installed packages for known vulnerabilities
composer audit

# Install production-only dependencies with optimized autoloader
composer install --no-dev --optimize-autoloader

# Validate your composer.json before deployment
composer validate

生产提示: --optimize-autoloader 标志生成静态类图,而不是在每个请求上扫描 PSR-4 目录。这将自动加载速度提高了 20-30%,这在内存有限且可能没有 OPCache 的共享主机上最为重要。

共享主机上的常见问题

内存限制超出

php -d memory_limit=512M composer.phar install

需要特定的 PHP 版本

php83 ~/composer.phar install

SSH 会话超时

使用 nohup 在 SSH 断开连接后保持 Composer 运行:

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

需要具有 SSH 访问权限和 PHP 8.3 的主机?

所有 AsiaGB 主机计划都支持 PHP 8.3、SSH 访问和 Composer。起价为 ฿500/年。

查看主机计划

查看泰国虚拟主机全部套餐 →