PHP에서 fileinode()
이 함수는 파일의 inode를 반환합니다. 이것을 사용하여 파일 이름이 바뀌었는지, 이동되었는지, 수정되었는지 확인할 수 있는지 궁금합니다.
몇 가지 테스트를 수행했는데 이름을 바꾼 후에도 인덱스 노드가 동일하게 유지되는 것 같습니다. 이 행동은 일관성이 있습니까? 모든 Linux 배포판의 모든 유형의 파일에서 작동합니까?
답변1
파일 시스템 경계를 넘지 않는 파일 이름 변경은 메타데이터 변경일 뿐이므로 inode 번호를 유지해야 합니다. 일반적으로 파일을 열고 내용을 수정해도 inode 번호가 변경되어서는 안 됩니다. 이는 단일 파일 시스템에서만 의미가 있습니다(그러나 액세스 시간 등이 변경됩니다). 일부 도구(예: 텍스트 편집기)는 제자리에 작성하는 대신 완전히 새로운 파일을 생성하는 경향이 있습니다.저것새 인덱스 노드가 사용됩니다.
파일이 변경되었는지 확인하는 것이 목표라면 액세스 시간과 크기를 확인하는 것이 더 안정적일 수 있습니다.
답변2
inode를 사용하여 파일이 변경되었는지 확인할 수 없습니다.
파일 이름을 바꾸거나 이동할 때 변경될 수도 있고 변경되지 않을 수도 있습니다. 다른 디스크로 옮기지 않는 한 일반적으로 동일하게 유지됩니다.
답변3
PHP 문서는 끔찍 합니다 . 모호하고 모호하며 오해의 소지가 있습니다.
fileinode()
간단히 "파일 inode 가져오기" 또는 "inode 반환"으로 정의됩니다. 하지만 좀 더 깊이 파고들면 문서에서는 이 함수가 inode를 반환한다고 말하기 시작하는 것 같습니다.숫자. inode는 단순한 inode 번호 그 이상입니다. "파일의 inode 반환"과 "파일의 inode 가져오기"의 차이점숫자문서"는 내가 당신에게 내 집에 대한 증서에 서명하는 것과 내 주소를 알려주는 것의 차이와 같습니다.
dhag와 robert의 답변은 매우 훌륭하므로 그들이 말한 내용을 반복하거나 개선하려고 노력하지 않겠습니다. 추가 외에도 파일 시스템에서 파일 이름이 변경되었거나 이동되었는지 여부를 감지하는 가장 좋은 방법은 st_ctime
inode 구조의 구성원을 살펴보는 것입니다. 이번이 마지막 시간입니다(Unix 타임스탬프: 날짜 및 시간).씨속성을 포함하여 파일을 변경합니다. 문서에 따르면 int filectime ( string $filename )
.