CLI 스크립트
script/ 디렉터리에 배치 작업을 둡니다.
<?php
// script/cleanup.php
require_once '__flexagon.php';
$deleted = (new \ExampleUser\UserDAO())->deleteExpired();
echo "삭제: {$deleted}건\n";
php script/cleanup.php runtimeStage=production days=30
key=value 형태의 인자는 파싱되어 $_PARAMS와 $_REQUEST 양쪽에 담깁니다. runtimeStage는 예약어로, 로드할 설정 디렉터리를 결정합니다.
CLI로 실행하면 FLEXAGON_ENV::$_RUNTIME_ENV가 RUNTIME_ENV_SCRIPT로 설정되어 웹 요청 파이프라인(세션·라우팅·출력 버퍼)이 전부 생략됩니다.
프레임워크 CLI
프레임워크 자체도 명령 두 개를 제공합니다.
php script/flexagon.php init [--path=DIR] [--force]
php script/flexagon.php check [--path=DIR]
| 호출 방법 | 사용 가능한 설치 형태 |
|---|---|
php script/flexagon.php |
전부 (Composer · phar · 소스) |
php vendor/bin/flexagon |
Composer 설치 |
phar 는 PHP CLI 에 스크립트 경로로 넘길 수 없어(
php phar://...가 열리지 않음)script/flexagon.php가 우회로 역할을 합니다. phar 에는init용 템플릿이 들어 있지 않으므로check만 동작합니다.
init
프로젝트 구조 34개 파일을 만듭니다. composer create-project flexagon/skeleton 으로 시작했다면 이미 다 있으므로 쓸 일이 없고, composer require flexagon/framework 로 기존 프로젝트에 붙였을 때 필요합니다.
이미 있는 파일은 건드리지 않습니다. 버전을 올린 뒤 새로 생긴 구조 파일만 받아 오는 데도 쓸 수 있습니다.
create script/flexagon.php
keep public/index.php
1 created, 22 kept, 0 failed
덮어써야 한다면 --force 를 붙이세요. 손댄 파일도 템플릿으로 되돌아가므로 주의하세요.
check
배치와 런타임이 서로 맞는지 점검하고, 문제가 있으면 종료 코드 1 을 반환합니다. 배포 파이프라인에 그대로 넣을 수 있습니다.
| 항목 | 확인 내용 | 실패 시 |
|---|---|---|
php |
8.3 이상 | 문제 |
ext-json · ext-openssl · ext-pdo |
로드 여부 | 문제 |
opcache.save_comments |
켜져 있는지 | 문제 |
project layout |
flexagon.php · application/_Global.php · public/__flexagon.php · public/_router.php |
문제 |
config placement |
public/·public_* 안에 _Config.php 나 application/ 이 없는지 |
문제 |
bootstrap |
프레임워크가 실제로 부팅되는지 | 문제 |
session key |
$SESSION_AUTO_START 가 켜져 있으면 $SESSION_ENCRYPTION_STRING 길이 |
문제 |
data sources |
설정 여부, 템플릿 플레이스홀더가 남아 있는지 | 경고 |
display_errors |
운영 모드에서 켜져 있는지 | 경고 |
secrets placement |
.env.php·.env가 public/·public_* 아래에 있는지 |
오류 |
.env.php |
배열을 반환하는지, git에서 추적되지 않는지 | 오류 |
settings |
.env.example.php의 키 중 설정되지 않은 것 |
경고 |
secrets in config |
_Config.php에 데이터 소스 비밀번호가 직접 적혀 있는지 |
경고 |
.env |
있지만 Flexagon이 읽지 않음 | 경고 |
opcache.file_cache |
.env.php가 있는데 켜져 있는지 (컴파일된 비밀 값이 디스크에 저장됨) |
경고 |
세 항목은 오류 없이 조용히 잘못되는 것들이라 특히 중요합니다.
opcache.save_comments가 꺼져 있으면@encrypt·@db_auto_timestamp·@exclude_from_get_array가 전부 무시됩니다. 암호화되어야 할 컬럼이 평문으로 저장되고, 아무 예외도 나지 않습니다._Config.php가public/안에 있으면 PHP 핸들러가 멈추는 순간 DB 자격증명이 그대로 서빙됩니다.- 데이터소스가
username/dbname플레이스홀더 그대로면 연결만 실패합니다.
$ php script/flexagon.php check
ok php 8.3.33
ok ext-json
ok opcache.save_comments
ok project layout
ok bootstrap
warn data sources default 이 템플릿 플레이스홀더 그대로
ok session auto start off
ok display_errors off
0 problem(s), 1 warning(s)