- ベストアンサー
壊れたシンボリックリンクについて
hoge.phpというファイルに対してindex.phpというシンボリックリンクを作り、hoge.phpを削除した場合、 file_exists()でindex.phpの有無を調べると、falseが返ってきてしまいます。 このような壊れたシンボリックファイルの有無を調べることはできないんでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こちらの環境は、 PHP4.0.6(Miracle Linux Ver2.0) IE5.0 です。 再度、確認しましたがこちらでは正常に動作します。 壊れたリンクファイルは、存在してますか? その状態で、以下のスクリプトを実行しても 「linkfile delete」は表示しませんか? <? //$tmpfile = tempnam("/tmp", "link_"); $lnkfile = "/tmp/linkfile"; //symlink($tmpfile, $lnkfile); //unlink($tmpfile); if(file_exists($lnkfile)){ echo "exist"; }else{ echo "no exist\n"; if(is_link($lnkfile)){ unlink($lnkfile); echo "linkfile delete\n"; } } ?>
その他の回答 (1)
- tomomo0325
- ベストアンサー率83% (5/6)
is_link()で調べるのはいかがですか? 参考用にサンプルを作りました。 <? $tmpfile = tempnam("/tmp", "link_"); $lnkfile = "/tmp/linkfile"; symlink($tmpfile, $lnkfile); unlink($tmpfile); if(file_exists($lnkfile)){ echo "exist"; }else{ echo "no exist\n"; if(is_link($lnkfile)){ unlink($lnkfile); echo "linkfile delete\n"; } } ?> (管理人さんインデントが崩れるのを何とかして)
補足
回答ありがとうございます。 上記のサンプルを試してみたのですが、 「no exist」のみ表示されて、「linkfile delete」は 表示されませんでした。 PHPのバージョンとかも、関係するのでしょうか? 私の環境では4.0.6です。
お礼
いろいろとやってみたのですが、 こちらの環境(Redhat7.1 + PHP4.06)だと 壊れたリンクに対してfile_exists()やis_link()を 使うと、falseが返ってきてしまい、unlink()も できませんでした。 コマンドラインで確認すると壊れたリンクは 存在していて、rmコマンドで削除することは可能でした。 そちらの環境だと正常に動くということは、 PHPのせいではなさそうですね。 どうもありがとうございました。