PHP를 사용하여 파일 시스템 관련 작업을 처리 할 때 getMyInode () 기능은 매우 실용적인 도구입니다. 현재 스크립트가있는 파일의 inode 번호를 반환하는 데 사용됩니다.이 파일은 운영 체제에서 파일에 할당 된 고유 식별자입니다. 그러나 일부 환경이나 특정 상황에서 getMyInode ()는 0 또는 False를 반환 할 수 있으며, 이는 일반적으로 예외 또는 구성 오류를 나타냅니다. 이 기사는 이러한 이상의 일반적인 원인을 탐색하고 해당 문제 해결 및 솔루션을 제공합니다.
getmyinode () 는 실제로 STAT (__ file__) 의 캡슐화이며 현재 스크립트 파일의 inode 번호를 반환합니다. 일반적인 사용법은 다음과 같습니다.
<?php
echo getmyinode();
?>
반환 된 정상이 0이 아닌 정수 인 경우 함수가 inode를 올바르게 얻었음을 의미합니다. 그러나 반환 된 0 또는 false 인 경우 확인해야 할 문제가 있음을 의미합니다.
일부 PHP 런타임 환경 (예 : 특정 CGI 모드, 일부 공유 호스팅 구성 구성)은 기본 파일 시스템 메타 데이터에 대한 액세스를 제한하여 inode를 읽지 못하게 할 수 있습니다.
해결책:
phpinfo () 의 출력을 확인하고 작동 모드 (SAPI)를 확인하십시오.
CGI-FCGI를 사용하거나 컨테이너 환경 (예 : Docker)에서 CLI 모드로 전환하거나 파일 볼륨을 다시 마운트하십시오.
Open_Basedir 설정이 현재 스크립트가 자체 경로에 액세스하는 것을 제한하지 않음을 확인하십시오.
<?php
phpinfo();
?>
Open_Basedir 항목이 비어 있는지 또는 현재 파일 디렉토리가 포함되어 있는지 확인하십시오.
일부 네트워크 파일 시스템 (예 : NFS, SMB) 또는 가상 파일 시스템 (예 : Windows의 FAT32)은 inode 개념을 지원하지 않거나 PHP 프로세스에 파일 메타 정보에 액세스 할 수있는 권한이 없습니다.
해결책:
로컬 디스크에서 파일을 일반 Linux 파일 시스템 (예 : Ext4)으로 이동하십시오.
STAT (__ file__)를 사용하여 파일 메타 정보에 정상적으로 액세스 할 수 있는지 확인하십시오.
<?php
print_r(stat(__FILE__));
?>
False가 반환되면 기본 파일 시스템 또는 권한에 문제가 있음을 나타냅니다.
스크립트가 로컬 경로를 통해 실행되지는 않지만 포함 ( 'http://gitbox.net/path/path/path/file.php') 과 같은 원격으로 소개되면 PHP는 로컬 파일 속성을 인식하지 못하므로 GetMyInode () 가 실패합니다.
해결책:
URL을 통해 PHP 파일을 포함하지 않으면 로컬 경로를 사용하는 것이 좋습니다.
URL을 통해 도입되어야하는 경우 다른 메커니즘을 사용하여 MD5_FILE () 또는 FILEINODE () 와 같은 파일을 식별하는 것을 고려하십시오 (이 두 가지가 같은 이유로 실패 할 수 있음).
일부 서버는 상징적 링크 또는 가상 경로를 통해 실제 경로를 매핑하여 __file__ 에 의해 반환 된 경로는 표준 파일 시스템 경로가 아니므로 inode 획득에 영향을 미칩니다.
해결책:
RealPath (__ file__)를 사용하여 실제 물리적 경로를 강요하십시오.
<?php
echo fileinode(realpath(__FILE__));
?>
getmyinode ()를 fileinode (realpath (__ file__)) 로 대체하는 것이 더 안전합니다.
getmyinode ()가 실행중인 환경에서 신뢰할 수없는 경우 다음 대안을 고려하십시오.
<?php
$inode = @fileinode(__FILE__);
if ($inode === false) {
// 더 시도하십시오
$inode = @fileinode(realpath(__FILE__));
}
echo $inode;
?>
또는 파일 요약을 대체 식별자로 사용하십시오.
<?php
echo md5_file(__FILE__);
?>
이것은 inode의 독창성을 대체 할 수는 없지만 파일 변경 감지와 같은 목적으로 허용되는 솔루션이기도합니다.
getmyinode ()는 0 또는 false를 반환하며 일반적으로 다음 점과 관련이 있습니다.
PHP 환경 제한 (예 : Open_basedir);
파일 시스템은 지원하지 않거나 권한이 충분하지 않습니다.
URL을 통해 스크립트를 참조하십시오.
파일 경로는 상징적 링크로 수정됩니다.
이러한 조사 방향에 따르면 문제를 신속하게 식별하고 대체 솔루션을 개발할 수 있습니다. 생산 환경에서는 inode에주의를 기울이고보다 호환되는 파일 식별 방법을 사용하는 데 우선 순위를 부여하는 것이 좋습니다.