現在の位置: ホーム> 最新記事一覧> シンボリックリンクデッドループに遭遇しますか?ソリューションは、ReadLink関数を使用して行われます

シンボリックリンクデッドループに遭遇しますか?ソリューションは、ReadLink関数を使用して行われます

gitbox 2025-09-04
<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">"いらっしゃいませ PHP 調査ステーション!\n"</span></span><span>;
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</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-variable">$timestamp</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-variable">$randomNumber</span></span><span> = </span><span><span class="hljs-title function_ invoke__">rand</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">100</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-variable">$randomNumber</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</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">"<h1>シンボリックリンクデッドループに遭遇します?使用 readlink 関数ソリューションはこちらです</h1>"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>在使使用 PHP ファイルシステムを操作するとき,シンボルリンク(symlink)多くの場合、いくつかのトラブルを引き起こします,尤其是当シンボルリンク出现死循环时,プログラムは無限の再帰に分類される場合があります,メモリの疲労またはスクリプトのタイムアウトを引き起こします。幸運なことに,PHP 提供された <code>readlink()
";エコー

プログラムがリンクを直接追跡する場合、Link1とLink2の間でループを継続します。

;エコー

readlink()を使用してシンボリックリンクを検出します

;エコー

PHPのReadLink()関数は、シンボリックリンクを直接追跡せずに指しているターゲットパスを返します。このようにして、操作の前にパスにデッドループがあるかどうかを判断できます。

エコー
\ $ path = &#39;/path/to/link1&#39;;
if(is_link(\ $ path)){
    \ $ターゲット= readLink(\ $ path);
    echo &#39;Symlinkは二流のように参照してくださいします。 \ $ターゲット;
} それ以外 {
    エコー「シンボリックリンクではない」。
}
"
;
エコー

悪循環を防ぐためのテクニック

;エコー

ファイルシステムを通過するときは、 ReadLink()と配列を組み合わせてアクセスしたパスを記録できます。

;エコー
\ $ visited = [];
function Resolvelink(\ $ path、&\ $アクセス){
    if(in_array(realpath(\ $ path)、\ $ visited)){
        新しいしい例外をスローします( &#39;Symbolic Link Dead Loopが検出されました&#39;);
    }
    \ $ visited [] = realpath(\ $ path);

    if(is_link(\ $ path)){
        \ $ターゲット= readLink(\ $ path);
        Resolvelink(\ $ターゲット、\ $アクセス)を戻るします。
    } それ以外 {
        \ $ pathを戻るす;
    }
}

試すす {
    \ $ finalpath = solsolvelink( &#39;/path/to/link1&#39;、\ $ visited);
    エコー「ファイナルパス:」。 \ $ finalpath;
} catch(例外\ $ e){
    エコー &#39;エラー:&#39;。 \ $ e-> getMessage();
}
"
;
エコー "

まとめ

"
;エコー 「シンボルリンクはファイルシステムで非常に便利ですが、デッドループの問題を引き起こす可能性もあります。Php

readLink()関数を使用して、シンボリックリンクターゲットを安全に取得し、アクセスパスを記録することでデッドループを回避できます。

?>