공개 제보 — 파일 스토리지에서 S3 를 선택해 저장해도 실제 파일 저장이 동작하지 않던 결함의 전면 수정. - S3 어댑터(league/flysystem-aws-s3-v3)·predis 를 코어 기본 의존성으로 포함 — 어댑터 부재 즉사, phpredis 확장 없는 서버의 redis 선택 전면 다운 차단 (부트 시 확장 부재 감지 → predis 자동 폴백) - storage_driver=s3 저장 시 코어 첨부 업로드 디스크를 s3 로 전환 (ATTACHMENT_DISK env 명시가 항상 우선, 기존 행은 저장 당시 disk 로 서빙) - 첨부·템플릿 레이아웃 첨부 서빙을 행 disk 를 따르는 스토리지 스트림으로 교체 — 로컬 절대 경로 전제 fileResponse 는 S3 행에서 filemtime stat 500 (streamedFileResponse: 행 메타 기반 ETag/304/Cache-Control) - S3 호환 스토리지(R2/MinIO/NCP) 연결 지원: 엔드포인트 URL·path-style 설정 신설, 리전 목록 선택 → 자유 입력 전환, 연결 테스트를 실제 저장 경로와 동일 설정(endpoint/path-style)으로 정렬 - 사용 불능 드라이버(어댑터·PHP 확장 부재)의 저장/테스트 요청을 사유와 함께 422 로 차단하는 서버 게이트 신설 (DriverRegistryService 능력 판정) - 웹소켓 연결 테스트에 서버(백엔드 발송용) endpoint 검사 추가 — 클라이언트만 검사해 테스트 성공 + 실제 발송 실패가 가능하던 비대칭 해소 - env 빈 값(`KEY=`) 함정 정규화: AWS_URL/AWS_ENDPOINT/ATTACHMENT_DISK 빈 문자열을 미설정으로 취급 (config 정규화 + 예시 파일 주석 처리) - 플러그인 드라이버 폴백의 log 카테고리 죽은 키(logging.default) 정정 및 websocket 유령 설정 키 제거 - 실 AWS S3 종단 검증 완료 (설정 저장 → 업로드 S3 실저장 → 서빙 200/304)
545 lines
14 KiB
JSON
545 lines
14 KiB
JSON
{
|
|
"schema_version": "1.0",
|
|
"generated_at": "2026-08-12T08:04:04+00:00",
|
|
"generator": "g7 vendor-bundle:build",
|
|
"target": "core",
|
|
"composer_json_sha256": "3c7e6e17966f09f12a0282b12b18eba46c5c4f06d63c2355a514a3160af1d77a",
|
|
"composer_lock_sha256": "49bd7586c511e420bb76418579b8ca94676870d4940fdaf6bb6e0c769dc54ce0",
|
|
"zip_sha256": "f193db3da359dfa2ce8f1da9ab1c4d9c090b22f4e607ae63bc1955c7c2317db2",
|
|
"zip_size": 15212477,
|
|
"package_count": 106,
|
|
"php_requirement": "^8.2",
|
|
"g7_version": "7.0.7",
|
|
"packages": [
|
|
{
|
|
"name": "aws/aws-crt-php",
|
|
"version": "v1.2.7",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "aws/aws-sdk-php",
|
|
"version": "3.386.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "brick/math",
|
|
"version": "0.14.8",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "carbonphp/carbon-doctrine-types",
|
|
"version": "3.2.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "clue/redis-protocol",
|
|
"version": "v0.3.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "clue/redis-react",
|
|
"version": "v2.8.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "composer/ca-bundle",
|
|
"version": "1.5.12",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "composer/semver",
|
|
"version": "3.4.4",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "dflydev/dot-access-data",
|
|
"version": "v3.0.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "doctrine/inflector",
|
|
"version": "2.1.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "doctrine/lexer",
|
|
"version": "3.0.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "dragonmantank/cron-expression",
|
|
"version": "v3.6.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "egulias/email-validator",
|
|
"version": "4.0.4",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "evenement/evenement",
|
|
"version": "v3.0.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "fruitcake/php-cors",
|
|
"version": "v1.4.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "geoip2/geoip2",
|
|
"version": "v3.3.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "graham-campbell/result-type",
|
|
"version": "v1.1.4",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "guzzlehttp/guzzle",
|
|
"version": "7.12.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "guzzlehttp/promises",
|
|
"version": "2.5.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "guzzlehttp/psr7",
|
|
"version": "2.12.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "guzzlehttp/uri-template",
|
|
"version": "v1.0.8",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "jaybizzle/crawler-detect",
|
|
"version": "v1.4.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/framework",
|
|
"version": "v12.62.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/prompts",
|
|
"version": "v0.3.21",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/reverb",
|
|
"version": "v1.10.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/sanctum",
|
|
"version": "v4.3.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/scout",
|
|
"version": "v11.3.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/serializable-closure",
|
|
"version": "v2.0.13",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "laravel/tinker",
|
|
"version": "v2.11.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/commonmark",
|
|
"version": "2.8.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/config",
|
|
"version": "v1.2.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/flysystem",
|
|
"version": "3.35.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/flysystem-aws-s3-v3",
|
|
"version": "3.35.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/flysystem-local",
|
|
"version": "3.31.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/mime-type-detection",
|
|
"version": "1.16.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/uri",
|
|
"version": "7.8.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "league/uri-interfaces",
|
|
"version": "7.8.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "maxmind-db/reader",
|
|
"version": "v1.13.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "maxmind/web-service-common",
|
|
"version": "v0.11.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "monolog/monolog",
|
|
"version": "3.10.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "mtdowling/jmespath.php",
|
|
"version": "2.9.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "nesbot/carbon",
|
|
"version": "3.13.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "nette/schema",
|
|
"version": "v1.3.5",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "nette/utils",
|
|
"version": "v4.1.4",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "nikic/php-parser",
|
|
"version": "v5.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "nunomaduro/termwind",
|
|
"version": "v2.4.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "phpoption/phpoption",
|
|
"version": "1.9.5",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "predis/predis",
|
|
"version": "v2.4.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/clock",
|
|
"version": "1.0.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/container",
|
|
"version": "2.0.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/event-dispatcher",
|
|
"version": "1.0.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/http-client",
|
|
"version": "1.0.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/http-factory",
|
|
"version": "1.1.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/http-message",
|
|
"version": "2.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/log",
|
|
"version": "3.0.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psr/simple-cache",
|
|
"version": "3.0.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "psy/psysh",
|
|
"version": "v0.12.23",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "pusher/pusher-php-server",
|
|
"version": "7.2.8",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "ralouphie/getallheaders",
|
|
"version": "3.0.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "ramsey/collection",
|
|
"version": "2.1.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "ramsey/uuid",
|
|
"version": "4.9.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "ratchet/rfc6455",
|
|
"version": "v0.4.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/cache",
|
|
"version": "v1.2.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/dns",
|
|
"version": "v1.14.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/event-loop",
|
|
"version": "v1.6.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/promise",
|
|
"version": "v3.3.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/promise-timer",
|
|
"version": "v1.11.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/socket",
|
|
"version": "v1.17.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "react/stream",
|
|
"version": "v1.4.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/clock",
|
|
"version": "v7.4.8",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/console",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/css-selector",
|
|
"version": "v7.4.9",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/deprecation-contracts",
|
|
"version": "v3.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/error-handler",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/event-dispatcher",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/event-dispatcher-contracts",
|
|
"version": "v3.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/filesystem",
|
|
"version": "v7.4.11",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/finder",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/http-client",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/http-client-contracts",
|
|
"version": "v3.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/http-foundation",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/http-kernel",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/mailer",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/mailgun-mailer",
|
|
"version": "v7.4.14",
|
|
"type": "symfony-mailer-bridge"
|
|
},
|
|
{
|
|
"name": "symfony/mime",
|
|
"version": "v7.4.13",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-ctype",
|
|
"version": "v1.37.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-intl-grapheme",
|
|
"version": "v1.38.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-intl-idn",
|
|
"version": "v1.38.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-intl-normalizer",
|
|
"version": "v1.38.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-mbstring",
|
|
"version": "v1.38.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-php80",
|
|
"version": "v1.37.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-php83",
|
|
"version": "v1.38.2",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-php84",
|
|
"version": "v1.38.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-php85",
|
|
"version": "v1.38.1",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/polyfill-uuid",
|
|
"version": "v1.37.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/process",
|
|
"version": "v7.4.13",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/routing",
|
|
"version": "v7.4.13",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/service-contracts",
|
|
"version": "v3.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/string",
|
|
"version": "v7.4.13",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/translation",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/translation-contracts",
|
|
"version": "v3.7.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/uid",
|
|
"version": "v7.4.9",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "symfony/var-dumper",
|
|
"version": "v7.4.14",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "tijsverkoyen/css-to-inline-styles",
|
|
"version": "v2.4.0",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "vlucas/phpdotenv",
|
|
"version": "v5.6.3",
|
|
"type": "library"
|
|
},
|
|
{
|
|
"name": "voku/portable-ascii",
|
|
"version": "2.1.1",
|
|
"type": "library"
|
|
}
|
|
]
|
|
} |