集成与 CLI
cURL、环境变量、进程控制。
25 分钟
集成与 CLI
PHP 不只服务 Web——CLI 脚本、cURL 调用外部 API、环境变量与进程控制 同样常用。前置 php-essentials;路径 /roadmaps/php。
学习目标
- 用 cURL 调用 REST API 并处理 JSON 响应
- 读取
.env与环境变量管理配置 - 编写 CLI 脚本并用
proc_open执行外部命令
cURL 调用 API
<?php
declare(strict_types=1);
function fetchJson(string $url, array $headers = []): array {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => array_merge(['Accept: application/json'], $headers),
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch));
}
curl_close($ch);
return json_decode($body, true, 512, JSON_THROW_ON_ERROR);
}
$data = fetchJson('https://api.example.com/tracks/php-advanced-essentials');
环境变量
.env 文件(勿提交到 Git):
DB_HOST=127.0.0.1
DB_NAME=coderoadmap
API_KEY=your-secret-key
$host = getenv('DB_HOST') ?: 'localhost';
// 或使用 vlucas/phpdotenv
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$dbHost = $_ENV['DB_HOST'];
CLI 脚本
#!/usr/bin/env php
<?php
declare(strict_types=1);
if ($argc < 2) {
fwrite(STDERR, "Usage: sync-lessons.php <track-slug>\n");
exit(1);
}
$slug = $argv[1];
echo "Syncing track: $slug\n";
// 同步逻辑…
运行:php sync-lessons.php php-advanced-essentials。Cron 定时执行维护任务。需调用外部程序时用 proc_open,并过滤用户输入以防命令注入。
练习
- 写 CLI 脚本:读取 track slug 参数,cURL 获取远程 JSON 并打印标题
- 用
.env存 API 密钥,脚本从环境变量读取 - 配置 Cron 每 5 分钟运行一次同步脚本
小结
cURL 连外部、env 管配置、CLI 做批处理。 下一课综合练习。
加载本节练习…