• ベストアンサー

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

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

noname#248070
noname#248070
  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
回答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

  • includeで読み込んだ内容を変数にいれたい

    includeで読み込んだファイル内容を変数に格納する方法はありますか? 動的ページをHTMLファイルで出力したいと思っています。 例: if(!file_exists("$file")){ mkdir("$file",0755); } $fp = fopen("$file/index.html","w") flock($fp, LOCK_EX); $hoge = include("./hoge.php"); fputs($fp,'<html>'."\n"); fputs($fp,'$hoge'."\n"); fputs($fp,'</html>'."\n"); この様に、$hogeの中に読み込んだファイルを書き込みたいのですが、 うまくできません。 この様な方法で変数にいれるのは可能でしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ファイルの存在チェックとエンコード

    自分なりに調べてファイルの存在チェック後、filemtime順にソートを する処理を書いてみましたがいまいち自信がないので、ご教授お願いします。 後、エンコードがうまくいかないのか日本語を出力しても表示がされません。 ご指摘ご教授お願いします。 <html> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> <?php //ファイルの存在チェック if (file_exists('hoge01.html')) { $page['hoge1.htm'] = filemtime('hoge01.html'); } if (file_exists('hoge02.html')) { $page['hoge2.htm'] = filemtime('hoge02.html'); } if (file_exists('hoge03.html')) { $page['hoge3.htm'] = filemtime('hoge03.html'); } //ファイルが空の場合の処理 if($page == false) { echo "ファイルが存在しません。"; } //ファイルが存在すればfilemtime順にソートの処理 else{ asort($page); foreach($page as $key => $value){ echo $key; echo "<br>"; echo "<hr>"; } } ?> </html>

    • 締切済み
    • PHP
  • array_searchを使って外部ファイルから目的のキーを取得したい

    array_searchを使って外部ファイルから目的のキーを取得したいのですが どうしてもFALSEを返されてしまいます。 以下が構文です。 <?php $file = file_get_contents("arr.php"); $arr =explode("\n",$file); $delstr="DEF"; $hoge = in_array($delstr,$arr,1); if($hoge !== false){ array_splice($arr,$hoge,1); } var_dump($hoge); print_r($arr); ?> 3日くらい悩んでいます。 どうかご教授よろしくお願い致します。

    • 締切済み
    • PHP
  • phpで扱えるファイルサイズ

    お世話になります。 以下の環境で2GBを越えるファイルを対象にfile_exists()やis_file()関数を使うと正常に判定してくれません(ファイルが存在していてもFalseが返る)。コンパイルのオプションやPHPのバージョンアップで解消できるでしょうか?また、他に影響がありそうな関数がありましたら示して頂けると助かります。 <環境> FedoraCore4 (kernel 2.6) php 5.0.4

    • ベストアンサー
    • PHP
  • CekePHPでfile_exists関数を使う

    CakePHP Ver1.3.6で開発をしています。 アクションの中で、画像の存在判定にfile_exists関数を使ったのですが、 2バイトのファイル名のファイルの場合、存在するファイルがfalseになって しまいます。 対象のファイルが存在するときに、 if (file_exists('img/漢字.jpg')) echo 'あります'; else echo 'ありません'; if (file_exists('img/filename.jpg')) echo 'あります'; else echo 'ありません'; このとき、前者は’ありません’、後者は’あります’と表示されます。 app/webrootフォルダにtest.phpを作り、その中で同じ判定をすると、 両方とも’あります’と表示されます。 なぜアクションの中に記述したときのみ、2バイトファイル名を正しく 判定できないのでしょうか?

    • ベストアンサー
    • PHP
  • リンクボタンについて(初心者ですが…)

    下記のようにリンクボタンを作ったのですが「manu_index.php?~これ以降が消えます…」 <FORM ACTION="http://hoge.com/menu_index.php?ID=1&NO=3"> <INPUT TYPE=SUBMIT VALUE="ページ"> </FORM> PHPの初歩的な問題かとは思いますが宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPの携帯サイトの

    PHPの携帯サイトの http//hoge.ne.jp/img/1 で画像を公開しようとしています。 このURLにリンクした際はPHPの処理で特定のユーザー以外は見れないようにします。 しかし、画像ファイルが実際においてある http//hoge.ne.jp/file/img/hoge.jpg にアクセスされた場合はすべてのユーザに見られてしまいます。 これを防ぐ方法はなにか無いでしょうか?

    • 締切済み
    • PHP
  • テキストファイルの内容を配列に読みとは

    この場合、どこでどのようにテキストファイルの内容を配列に読込んでいるのでしょうか?LoadTextFile、file_existsとは?array_convert_encodingとは?それ以外も総合的に解説お願いいたします。 この間、PHPの勉強を始めたばかりのど素人です。他の言語経験もないです。是非、素人目線でわかりやすくお願い致します。 function LoadTextFile( $FilePath, $encoding = "EUC_JP", $s_encoding = "SJIS" ) { if ( file_exists( $FilePath ) == false ) { return false; } $data = file( $FilePath ); if ( sizeof( $data ) < 1 ) { return false; } else { array_convert_encoding( $data, $encoding ); return $data; }

    • ベストアンサー
    • PHP
  • @の後ろを自動的にリンクにしたい

    javascriptで、「@」の後ろを自動でリンク化したいです。 ある文字列があったとします。 <span class="auto">@ほげほげ</span> これを、自動的に(class=autoがついている範囲の場合は)、 <a href="http://hoge.com/hoge.php?=ほげほげ">@ほげほげ</a> というリンクがつくようにしたいです。 phpに渡すクエリには、@はつけたくないですが、見た目のリンクは@を含めるようにしたいです。 (区切りはスペースまで) http://~ に関しては以下のページが参考になりました。 http://www.openspc2.org/JavaScript/Ajax/jQuery_plugin/chapter8/index.html 同じようなことを @~ でやりたいという意味になります。 よろしくお願いします。

  • getパラメータでメルアド削除

    URLパラメータでたとえば http://www.hoge.hoge.delphp?del_mail=hoge01@hoge.hoge と送信したときにログファイルから削除し再書き込みしたいのですが、うまくいきません。 *ログファイルには重複したファイルもありますので重複ファイルも同時に削除できればいいのですが・・・ 下記コードに対するアドバイス下さい。 mail.log------------- hoge01@hoge.hoge hoge02@hoge.hoge hoge03@hoge.hoge hoge04@hoge.hoge hoge01@hoge.hoge hoge02@hoge.hoge 上記のようなメールアドレスだけのログがあります。 del.php------------------------------------- $array_file = file("./list.db"); $name = htmlspecialchars($_GET['del_mail'], ENT_QUOTES); unset($array_file[$name]); foreach ($array_file as $line) { $file_new .= $line; } file_put_contents("./list.db" , $file_new , LOCK_EX );

    • 締切済み
    • PHP