<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() " ; echo "如果程序直接跟隨鏈接進行操作,就會不斷地在link1 和link2 之間循環。
" ; echo "PHP 的readlink()函數返回符號鏈接指向的目標路徑,而不會直接跟隨它。這樣,我們就可以在操作前先判斷路徑是否存在死循環:
" ; echo "
\$path = '/path/to/link1';
if (is_link(\$path)) {
\$target = readlink(\$path);
echo '符號鏈接指向: ' . \$target;
} else {
echo '不是符號鏈接';
}
" ; echo "在遍歷文件系統時,可以結合readlink()和一個數組來記錄已經訪問過的路徑:
" ; echo "
\$visited = [];
function resolveLink(\$path, &\$visited) {
if (in_array(realpath(\$path), \$visited)) {
throw new Exception('檢測到符號鏈接死循環');
}
\$visited[] = realpath(\$path);
if (is_link(\$path)) {
\$target = readlink(\$path);
return resolveLink(\$target, \$visited);
} else {
return \$path;
}
}
try {
\$finalPath = resolveLink('/path/to/link1', \$visited);
echo '最終路徑: ' . \$finalPath;
} catch (Exception \$e) {
echo '錯誤: ' . \$e->getMessage();
}
" ; echo "符號鏈接在文件系統中非常方便,但也可能導致死循環問題。使用PHP 的readlink()函數,我們可以安全地獲取符號鏈接目標,並通過記錄訪問路徑的方法避免死循環。掌握這一技巧後,你的文件系統操作將更加安全可靠。
" ; ?>