플랫폼에서 PHP 애플리케이션을 개발할 때 개발자는 종종 운영 체제의 기본 파일 경로 규칙의 차이를 무시하고 파일 경로를 구문 분석하는 데 사용되는 기능 인 Pathinfo () 도 시스템 차이로 인해 다르게 수행 할 수 있습니다. PHP 자체는 크로스 플랫폼 언어로 설계되었지만 파일 경로를 처리 할 때는 Windows와 Linux의 차이점에 대한 세부 사항이 여전히 필요합니다. 이 기사는 Windows 및 Linux 시스템에서 Pathinfo ()를 사용할 때 발생할 수있는 성능 차이 및 호환성 문제를 탐색합니다.
PathInfo () 는 PHP의 내장 기능으로 경로 문자열을 구문 분석하고 디렉토리 이름, 기본 파일 이름, 확장자 등과 같은 파일 경로의 구성 요소를 반환합니다. 기본 사용법은 다음과 같습니다.
<span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-string">'/path/to/file.txt'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$info</span></span><span>);
</span></span>
출력 결과 :
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[dirname] => /path/to
[basename] => file.txt
[extension] => txt
[filename] => file
)
</span></span>
Windows는 BackSlash \를 경로 분리기로 사용하고 Linux는 Forward Slash /를 사용합니다. PHP는 대부분의 기능에서 이러한 분리기를 자동으로 인식하고 처리하지만, Pathinfo ()가 다르게 행동하게 할 수있는 세부 사항이 여전히 있습니다.
PHP는 일반적으로 경로를 구문 분석 할 때이 두 분리기를 자동으로 조정합니다. 예를 들어:
<span><span><span class="hljs-variable">$windowsPath</span></span><span> = </span><span><span class="hljs-string">'C:\Users\Public\file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-variable">$windowsPath</span></span><span>);
</span></span>
\ 를 사용하더라도 PHP는 대부분의 환경에서 경로를 올바르게 구문 분석 할 수 있습니다. 그러나 \ 아래 Windows 아래는 탈출 문자이므로 코드에서 'C : \\ Users \\ Public \\ File.txt' 로 작성해야합니다. 그렇지 않으면 예상치 못한 동작으로 이어질 수 있습니다.
Linux 시스템에서 위의 경로를 처리하는 것도 성공적으로 해결 될 수 있지만 Linux의 Windows 형식 경로를 통과하는 것이 논리적으로 권장되지는 않습니다.
Linux의 루트 경로는 /var/www/html/index.php 와 같으며 루트 디렉토리는 / 입니다. Windows에서 경로에는 일반적으로 c : \ xampp \ htdocs \ index.php 와 같은 드라이브 문자가 있습니다.
Windows에서는 PathInfo ()가 여전히 드라이브 문자가 포함 된 경로를 올바르게 처리 할 수 있지만 반환 된 Dirname 에는 드라이브 문자 부분이 포함됩니다.
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[dirname] => </span><span><span class="hljs-attr">C</span></span><span>:\xampp\htdocs
[basename] => index.php
[extension] => php
[filename] => index
)
</span></span>
Linux에는 드라이브 문자가 없으며 경로는 더 간단합니다.
Windows 파일 시스템은 종종 UTF-16 인코딩을 사용하는 반면 Linux는 일반적으로 UTF-8을 사용합니다. 대부분의 최신 PHP 환경에서 PathInfo ()는 파일 이름에서 비 ASCII 문자를 지원하지만 이전 버전 또는 잘못 구성된 시스템에서는 말하거나 불완전한 구문 분석이 발생할 수 있습니다.
운영 체제, PHP 및 편집자는 다국어 경로와 관련하여 UTF-8을 사용하는 균일 인코딩을 사용하는 것이 좋습니다.
또 다른 일반적인 함정은 경로 끝에 / 또는 \ 입니다.
<span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-string">'/var/www/html/'</span></span><span>);
</span></span>
이 시점에서 반환 된 결과는 디렉토리 처럼 보이기 때문에 PHP는 파일 경로로 간주되며, 베이스 이름 및 기타 필드가 누락 될 수 있기 때문입니다. 이것은 다른 운영 체제에서 일관되게 수행되지만, 특히 Windows에서 동적으로 접합 될 때 오류가 종종 있습니다.
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'C:\\xampp\\htdocs\\'</span></span><span>; </span><span><span class="hljs-comment">// 꼬리 백 슬래시에주의하십시오</span></span><span>
</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>); </span><span><span class="hljs-comment">// 분석 결과가 불완전 할 수 있습니다</span></span><span>
</span></span>
따라서 pathinfo ()를 호출하기 전에 경로가 디렉토리 경로가 아닌 특정 파일인지 확인해야합니다.
통합 경로 형식 : Windows에서도 작동하는 Forward Slash / 를 사용해보십시오. PHP는 자동으로 시스템 적응 형식으로 변환됩니다.
RealPath ()를 사용하여 전처리 경로에 사용하십시오 . RealPath ()는 절대 경로를 반환하고 형식을 정규화하여 호환성을 향상시킵니다.
Path End Delimiter 오용 방지 : pathinfo ()를 통과하기 전에 rtrim ()을 사용하여 끝 / \를 제거 할 수 있습니다.
코딩 균일성에주의하십시오 : 경로 문자열이 UTF-8 인코딩에서 처리되어 있도록 코드 문제를 피하기 위해 경로 문자열이 처리되어 있는지 확인하십시오.
교차 플랫폼 환경에서 경로 관련 코드를 테스트하십시오 . 배포 중 다른 시스템에서 개발 및 문제가 발생하는 동안 한 시스템 작업을 피하십시오.
PathInfo () 는 PHP의 함수로 간단 해 보이지만 교차 플랫폼 환경에서 문제가 발생하기 쉬운 기능입니다. 대부분의 경우 다른 시스템의 경로 형식에 자동으로 적응할 수 있지만 개발자는 "지능적인"처리에 전적으로 의존 할 수는 없습니다. 보다 강력하고 휴대용 PHP 프로그램을 작성하기 위해 경로 입력을 적극적으로 표준화하고 기본 파일 시스템의 차이점을 이해해야합니다.