• ベストアンサー

壊れたシンボリックリンクについて

hoge.phpというファイルに対してindex.phpというシンボリックリンクを作り、hoge.phpを削除した場合、 file_exists()でindex.phpの有無を調べると、falseが返ってきてしまいます。 このような壊れたシンボリックファイルの有無を調べることはできないんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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";  } } ?>

noname#248070
質問者

お礼

いろいろとやってみたのですが、 こちらの環境(Redhat7.1 + PHP4.06)だと 壊れたリンクに対してfile_exists()やis_link()を 使うと、falseが返ってきてしまい、unlink()も できませんでした。 コマンドラインで確認すると壊れたリンクは 存在していて、rmコマンドで削除することは可能でした。 そちらの環境だと正常に動くということは、 PHPのせいではなさそうですね。 どうもありがとうございました。

その他の回答 (1)

回答No.1

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"; } } ?> (管理人さんインデントが崩れるのを何とかして)

noname#248070
質問者

補足

回答ありがとうございます。 上記のサンプルを試してみたのですが、 「no exist」のみ表示されて、「linkfile delete」は 表示されませんでした。 PHPのバージョンとかも、関係するのでしょうか? 私の環境では4.0.6です。

関連するQ&A