PHP에서 LSTAT 는 개발자가 파일 또는 디렉토리의 메타 데이터를 얻을 수있는 매우 실용적인 파일 시스템 기능입니다. STAT 함수와 달리 LSTAT는 상징적 링크가 지적한 대상의 메타 데이터보다는 상징적 링크 자체의 메타 데이터를 반환합니다. 이 기능은 경로가 상징적 링크인지 판단 할 때 LSTAT를 특히 중요하게 만듭니다. 이 기사는 LSTAT 기능을 사용하여 경로가 상징적 링크인지 여부와 구현을위한 특정 단계인지 결정하는 방법을 자세히 분석합니다.
PHP의 LSTAT 함수는 지정된 경로 파일 또는 디렉토리의 상태 정보를 얻고 연관 배열을 반환하는 데 사용됩니다. 이 배열은 파일 크기, 권한, 파일 유형 등과 같은 파일에 대한 다양한 정보가 포함되어 있습니다.
기능 프로토 타입 :
<span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
매개 변수 :
$ filename : 파일 또는 디렉토리의 쿼리 경로를 지정합니다.
반품 값 :
성공하면 LSTAT는 파일 상태 정보가 포함 된 연관 배열을 반환합니다.
실패하면 false를 반환하십시오.
LSTAT는 상징적 링크를 추적하지 않고, 대상이 아닌 상징적 링크 자체의 상태를 반환합니다.
경로가 기호 링크인지 여부를 결정하려면 먼저 경로의 상태 정보를 얻은 다음 반환 된 상태 배열에서 모드 필드를 확인하십시오. 모드 필드의 값은 일반 파일, 디렉토리, 기호 링크 등을 포함한 파일 유형을 결정합니다.
다음은 경로가 상징적 링크인지 여부를 결정하는 특정 단계입니다.
LSTAT를 사용하여 파일 또는 디렉토리의 상태 정보를 얻으십시오.
리턴 배열에서 모드 필드를 확인하십시오.
S_IFLNK 상수의 상징적 링크인지 여부를 결정하십시오.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isSymbolicLink</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$path</span></span></span><span>) {
</span><span><span class="hljs-comment">// 파일 상태 정보를 얻습니다</span></span><span>
</span><span><span class="hljs-variable">$stat</span></span><span> = </span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-comment">// 심판 lstat 성공적인</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stat</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法파일 상태 정보를 얻습니다。\n"</span></span><span>;
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-comment">// 심판文件是否为符号链接</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> ((</span><span><span class="hljs-variable">$stat</span></span><span>[</span><span><span class="hljs-string">'mode'</span></span><span>] & </span><span><span class="hljs-number">0170000</span></span><span>) === </span><span><span class="hljs-number">0120000</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>; </span><span><span class="hljs-comment">// 상징적 링크입니다</span></span><span>
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>; </span><span><span class="hljs-comment">// 不상징적 링크입니다</span></span><span>
}
</span><span><span class="hljs-comment">// 시험</span></span><span>
</span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'/path/to/your/file_or_symlink'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">isSymbolicLink</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> 상징적 링크입니다。\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> 不상징적 링크입니다。\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
LSTAT ($ PATH) : LSTAT 함수에 전화하여 파일 상태 정보를 얻습니다.
파일이나 디렉토리가 존재하지 않거나 경로가 액세스 할 수없는 경우 lstat은 false를 반환합니다.
$ stat [ 'mode'] & 0170000 : 모드 필드에는 파일의 유형 정보가 포함되어 있습니다. 0170000은 파일 유형 부품을 추출하는 데 사용되는 마스크입니다. UNIX 파일 권한에 따르면, 기호 링크의 유형 값은 0120000 입니다.
심판 심판 링크 : if ($ stat [ 'mode'] & 0170000) === 0120000 , 이는 파일이 기호 링크임을 의미합니다.
LSTAT는 기호 링크 외에도 파일이 다른 유형인지 확인하는 데 도움이 될 수 있습니다. 모드 필드의 마스크를 통해 파일이 일반 파일, 디렉토리인지 여부를 결정할 수 있습니다.
일반 파일 : ($ stat [ 'mode'] & 0170000) === 0100000
디렉토리 : ($ stat [ 'mode'] & 0170000) === 0040000
문자 장치 파일 : ($ stat [ 'mode'] & 0170000) === 0020000
블록 장치 파일 : ($ stat [ 'mode'] & 0170000) === 0060000
명명 된 파이프 라인 (FIFO) : ($ stat [ 'mode'] & 0170000) === 0010000
PHP의 LSTAT 함수를 사용하면 파일 또는 디렉토리의 상태 정보를 쉽게 얻고 모드 필드를 기반으로 파일 유형을 판단 할 수 있습니다. 경로가 상징적 링크인지 여부를 결정하는 것은 매우 간단합니다. 상태 정보를 얻고 파일 유형이 상징적 링크인지 확인하기 위해 LSTAT 만 사용하면됩니다. 이 방법은 직관적이고 효율적이며 파일 시스템 작업이 필요한 시나리오에 매우 적합합니다.