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/ 文件夹:
- 在本地安装 Composer(Mac:
brew install composer/ Windows: 下载安装程序) - 在项目文件夹中运行
composer install - 通过 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 需要额外关注安全性。遵循这些实践来保护您的项目:
- 阻止对 vendor/ 的网络访问 — 创建包含
Deny from all的vendor/.htaccess文件。这可以防止任何人通过浏览器直接访问您已安装的包源代码。 - 定期运行 composer audit — 此命令检查您安装的包是否存在已知安全漏洞(CVE)数据库,并在任何包需要更新时向您发出警告。
- 在生产环境中跳过开发依赖项 — 运行
composer install --no-dev --optimize-autoloader以避免在实时服务器上安装测试和调试工具。 - 验证您的 composer.json — 部署前运行
composer validate以捕获可能导致安装失败的 JSON 语法错误或无效的约束格式。
# 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 &