<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 記事の開始とメインテキストの間の分離線</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<hr>"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
使用 getmyinode 判断 PHP スクリプトが移動するか交換されているかの方法は何ですか?
存在する PHP スクリプトの開発と展開中,スクリプトの整合性と場所の安定性を確保することは非常に重要です。尤其是存在する某些对安全性和可靠性要求较高的场景下,開発者は、スクリプトファイルが移動されているかどうかを検出したい場合があります、交換または改ざんします。PHP 組み込み機能を提供します </span><span><span class="hljs-title function_ invoke__">getmyinode</span></span><span>(),現在の実行スクリプトを取得できます inode シリアルナンバー,これは、ファイルステータスの検出に役立ちます。
何ですか inode?
inode これは、ファイルシステムの重要な概念です,它是操作系统使用来标识文件的一个唯一标识符。ファイル名が変更されたとしても,ファイルのコンテンツと場所が移動されていない限り,inode 通常、数は同じままです。それどころか,ファイルが交換または別のファイルシステムに移動した場合,inode 数が変更される場合があります。
</span><span><span class="hljs-title function_ invoke__">getmyinode</span></span><span>() 関数の紹介
</span><span><span class="hljs-title function_ invoke__">getmyinode</span></span><span>() 函数使用于返回当前运行脚本文件的 inode 番号,它的使用法非常简单:
```php
</span><span><span class="hljs-variable">$inode</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getmyinode</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在のスクリプト inode シリアルナンバー是: "</span></span><span> . </span><span><span class="hljs-variable">$inode</span></span><span>;
</span></span>
この番号を使用すると、スクリプトが移動するか交換されたかを知ることができます。具体的なアイデアは次のとおりです。
スクリプトが最初に実行されると、getMyInode()によって返される値は安全な場所(データベースやキャッシュファイルなど)に保存されます。
後続の実行では、現在のスクリプトの巻き関税を再び再びゲットし、以前に保存したスクリプトと比較します。
イノードが一貫していない場合、スクリプトが移動または交換されることを意味します。
サンプルコード
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 節約を想定します inode ファイルパス</span></span><span>
</span><span><span class="hljs-variable">$inodeFile</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/script_inode.txt'</span></span><span>;
</span><span><span class="hljs-comment">// 現在のスクリプトを取得します inode</span></span><span>
</span><span><span class="hljs-variable">$currentInode</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getmyinode</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$inodeFile</span></span><span>)) {
</span><span><span class="hljs-variable">$savedInode</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$inodeFile</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$savedInode</span></span><span> != </span><span><span class="hljs-variable">$currentInode</span></span><span>) {
</span><span><span class="hljs-comment">// inode 変化,スクリプトが移動または交換されます</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"警告:スクリプトファイルが移動または交換された可能性があります!"</span></span><span>;
} </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></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 最初の実行,保存 inode</span></span><span>
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$inodeFile</span></span><span>, </span><span><span class="hljs-variable">$currentInode</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在のスクリプトは保存されています inode 番号。"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
メモと制限
INODE番号は、同じファイルシステムでのみ一意です。ファイルが別のパーティションまたはディスクに移動された場合、イノード番号は必然的に変更されます。
さまざまなオペレーティングシステムとファイルシステムは、INODEを異なってサポートしています。たとえば、WindowsシステムではINODEの概念を使用しておらず、getMyInode()によって返される結果は無効である可能性があります。
INODEの変更により、ファイルコンテンツが改ざんされているかどうかは100%を決定できません。ファイルは変更されましたが、移動していません。通常、イノードは変更されません。より厳格な検証が必要な場合は、ファイルハッシュ(MD5_FILEなど)と組み合わせて使用できます。
要約します
getMyInode()関数を使用して、PHPスクリプトファイルが移動または交換されたかどうかを簡単かつ迅速に判断し、ファイルの場所の変更を検出するためのシンプルで効果的な手段です。永続的なストレージと定期的な検査を組み合わせることで、スクリプトのセキュリティと信頼性をある程度向上させることができます。ただし、包括的な保護のために他の安全対策を組み合わせる必要もあります。
<hr> `` ``