UNIX와 같은 시스템에서 각 파일에는 inode (Index Node)가 있으며 파일 시스템에서 파일에 대한 정보를 저장하는 데 사용되는 데이터 구조입니다. inode에 포함 된 정보에는 파일 크기, 소유자, 권한, 수정 시간 등이 포함됩니다. 각 파일에는 생성 될 때 고유 한 inode 번호가 할당되며 파일 시스템 내부의 파일의 고유 식별자입니다.
getmyinode () 는 현재 스크립트 파일의 inode 번호를 반환하는 PHP 내장 기능입니다.
<?php
echo getmyinode();
?>
함수는 매개 변수를 허용하지 않으며 리턴 값은 현재 실행중인 스크립트의 inode 번호를 나타내는 정수입니다.
<?php
$inode = getmyinode();
echo "현재 스크립트 inode 숫자는입니다: $inode";
?>
이 스크립트를 실행하면 다음과 유사한 출력이 표시됩니다.
현재 스크립트 inode 숫자는입니다: 361932
이 숫자는 두 파일이 동일한 물리적 파일인지를 비교하거나 어떤 종류의 캐싱 메커니즘의 인덱스 역할을하는 데 사용될 수 있습니다.
플러그인 또는 동적으로로드 스크립트가있는 일부 환경에서는 코드 조각이 한 번만로드되었는지 확인할 수 있습니다. inode 번호는 각 물리적 파일에 고유하므로이를 사용하여 스크립트의 고유성을 확인할 수 있습니다.
<?php
$loaded_inodes = [];
$current_inode = getmyinode();
if (in_array($current_inode, $loaded_inodes)) {
die("스크립트가로드되었습니다!");
}
$loaded_inodes[] = $current_inode;
?>
각 소스 스크립트에 대한 캐시 파일을 생성하는 자동 캐시 생성기가 있다고 가정합니다. 중복 명명을 피하기 위해 Inode 번호를 사용하십시오.
<?php
$inode = getmyinode();
$cache_file = "/tmp/cache_{$inode}.html";
if (file_exists($cache_file)) {
echo file_get_contents($cache_file);
exit;
}
// 다음이 캐시를 생성하는 것이라고 가정하십시오
ob_start();
echo "<h1>Hello, world!</h1>";
$content = ob_get_clean();
// 캐시 저장
file_put_contents($cache_file, $content);
echo $content;
?>
실제 파일에서만 사용할 수 있습니다 : getmyinode ()는 현재 실행중인 스크립트의 inode를 가져옵니다. PHP 스크립트가 네트워크를 통해 전달되는 경우 (예 : PHP : // 입력을 통해 실행됨)이 함수는 잘못되거나 무의미한 값을 반환 할 수 있습니다.
다른 파일 시스템에서는 신뢰할 수 없을 수 있습니다 . inode inode 번호는 파일 시스템 내부에서 고유하지만 inode는 다른 마운트 포인트 또는 파티션간에 고유 한 것으로 보장되지 않습니다.
STAT () 와 함께 사용 : 다른 파일의 inode를 가져와야하는 경우 stat () 함수를 사용할 수 있습니다. 예를 들어:
<?php
$stat = stat("/var/www/gitbox.net/index.php");
echo "index.php ~의 inode 숫자는입니다: " . $stat['ino'];
?>
이를 통해 현재 스크립트에 국한되지 않고 파일의 inode를 얻을 수 있습니다.
getmyinode () 는 목적이 더 전문적이지만 특정 응용 프로그램 시나리오에서 중요한 역할을 할 수 있습니다. 그 역할과 한계를 이해하면 스크립트 고유성 및 캐시 로직을보다 정확하게 관리하는 데 도움이 될 수 있습니다. 파일 시스템 수준 운영과 관련된 PHP 개발자에게는 무시할 수없는 가제트 기능입니다.