PHP Path Combine 방법
2025. 6. 4. 22:35ㆍ프로그램/PHP 초급
PHP에는 Python의 os.path.join()이나 .NET의 Path.Combine()과 같이 운영체제에 관계없이 경로를 안전하게 결합해주는 내장 함수가 없습니다.
하지만 직접 간단한 함수를 만들거나, 특정 라이브러리를 사용해서 이와 유사한 기능을 구현할 수 있습니다.
직접 path_combine 함수 만들기
가장 일반적인 방법은 슬래시(/)를 기준으로 경로를 결합하고, 불필요한 슬래시를 제거하거나 추가하는 방식입니다.
PHP
<?php
/**
* 주어진 경로 세그먼트들을 안전하게 결합합니다.
* 운영체제에 상관없이 슬래시(/)를 경로 구분자로 사용합니다.
*
* @param string ...$paths 결합할 경로 세그먼트들 (가변 인자)
* @return string 결합된 경로
*/
function path_combine(...$paths): string
{
$filteredPaths = [];
foreach ($paths as $path) {
// 경로의 앞/뒤 슬래시를 제거하고 공백 문자열이 아닌 경우에만 추가
$trimmedPath = trim($path, '/');
if (!empty($trimmedPath) || $trimmedPath === '0') { // '0'과 같은 유효한 경로 세그먼트도 고려
$filteredPaths[] = $trimmedPath;
}
}
// 빈 경로 세그먼트가 없는 경우 '/'로 결합
if (empty($filteredPaths)) {
return ''; // 모든 세그먼트가 비어있으면 빈 문자열 반환
}
// 결합된 경로 반환
return implode('/', $filteredPaths);
}
// 사용 예시:
echo path_combine('uploads', 'images', 'profile.jpg') . PHP_EOL;
// 출력: uploads/images/profile.jpg
echo path_combine('/var/www', 'html', 'index.php') . PHP_EOL;
// 출력: /var/www/html/index.php
echo path_combine('assets/', '/css/', 'style.css') . PHP_EOL;
// 출력: assets/css/style.css
echo path_combine('root', '', 'sub', 'file.txt') . PHP_EOL;
// 출력: root/sub/file.txt
echo path_combine('/a/b/', '/c/d', 'e/f/') . PHP_EOL;
// 출력: /a/b/c/d/e/f
echo path_combine('http://example.com/api', 'v1', 'users') . PHP_EOL;
// 출력: http://example.com/api/v1/users
echo path_combine('//', 'path', '/to/file') . PHP_EOL;
// 출력: path/to/file (선행 슬래시가 하나만 남도록 처리될 수 있음)
echo path_combine('') . PHP_EOL; // 빈 문자열
echo path_combine('/', '/'). PHP_EOL; // 빈 문자열
라이브러리 사용 (Composer)
만약 Composer를 사용하여 프로젝트를 관리하고 있다면, 이미 잘 만들어진 파일 시스템 관련 라이브러리들을 활용할 수 있습니다. 예를 들어, symfony/filesystem 또는 league/flysystem 같은 라이브러리들은 경로 결합 기능을 제공합니다.
symfony/filesystem 예시:
Bash
composer require symfony/filesystem
PHP
<?php
use Symfony\Component\Filesystem\Path;
// Symfony 4.3+ 버전에서는 Path::join() 사용 가능
echo Path::join('uploads', 'images', 'profile.jpg') . PHP_EOL;
// 출력: uploads/images/profile.jpg
echo Path::join('/var/www', 'html', 'index.php') . PHP_EOL;
// 출력: /var/www/html/index.php
echo Path::join('assets/', '/css/', 'style.css') . PHP_EOL;
// 출력: assets/css/style.css
// 이전 버전의 Symfony FileSystem 컴포넌트에서는 Filesystem 클래스의 makePathRelative() 같은 유틸리티 사용 고려
// 직접적인 path_combine 기능은 Path 유틸리티 클래스에 있습니다.
결론적으로:
PHP 자체에는 내장된 path_combine 함수는 없지만, 위 예시처럼 직접 간단한 함수를 만들거나, Composer를 통해 symfony/filesystem과 같은 외부 라이브러리를 사용하는 것이 일반적입니다. 일반적으로 웹 환경에서는 / 슬래시를 사용하므로 직접 함수를 만드는 것이 가장 간편한 경우가 많습니다.
'프로그램 > PHP 초급' 카테고리의 다른 글
| macOS에서 파일 업로드 시 발생하는 한글 자소 분리 문제를 해결 (0) | 2025.06.04 |
|---|---|
| PHP 함수가 있는지 체크하고 정의 하는 방법 (0) | 2025.06.04 |
| Content Security Policy (CSP)엄격하게 설정하는 방법 (0) | 2025.06.04 |
| PHP SELF 와 query string 결합하는 방법 (0) | 2025.06.04 |
| PHP 텍스트에서 HTML 제거 하는 방법 (0) | 2025.06.04 |