1

上位のディレクトリからファイルを削除する際に問題が発生しました。この投稿を見つけて試しましたが、うまくいきませんでした。

Gmailドットコムでのgotdalife2008年9月25日02:04

アクセス許可の拒否エラーで問題が発生した場合は、作業ディレクトリの階層の上位にあるフォルダにあるファイルを削除しようとしたとき(つまり、「../」で始まるパスを削除しようとしたとき)に発生することがあります。 )。

したがって、この問題を回避するには、chdir()を使用して、作業ディレクトリを、リンクを解除するファイルが配置されているフォルダに変更します。

<?php
>     $old = getcwd(); // Save the current directory
>     chdir($path_to_file);
>     unlink($filename);
>     chdir($old); // Restore the old working directory     ?>

これが私が現在持っているコードです:

session_start();

if (!isset($_SESSION['agent']) OR ($_SESSION['agent'] !=md5($_SERVER['HTTP_USER_AGENT']))){

    require_once ('includes/login_functions.inc.php');
    $url = absolute_url();
    header("Location: $url");
    exit();
}  



$folder = $_GET['folder'];
$filename = $_GET['name'];
$path = "../gallery/photos/$folder";

if (isset($_POST['submitted'])) {

    if ($_POST['sure'] == 'Yes') {  

        $old = getcwd(); // Save the current directory
        chdir($path);
        unlink($filename);
        chdir($old); // Restore the old working directory  

    }
    else{

        echo '<p>The photo has NOT been deleted.</p>';
    }
}

エラーメッセージが表示されます:

警告:unlink()[function.unlink]:37行目のJ:\ xampp \ htdocs \ bunker \ admin\delete_file.phpにエラーはありません

37行目:

unlink($filename);

誰かが私が間違ったことを見ることができますか?

4

2 に答える 2

2

私は常に絶対ファイルパス名を使用します。

filedirを構成内の定数として定義し、連結して絶対ファイルパスを取得してから、unlink()を呼び出します。

ところで:あなたのコードが非常に安全でないことを知っているといいのですが。

于 2010-11-15T14:30:34.070 に答える
0

ここを参照してください:

http://bugs.php.net/bug.php?id=43511

そしてここ

http://php.bigresource.com/Track-php-03TimDKO/

http://www.phpbuilder.com/board/showthread.php?t=10357994

上記のコメントのように、これを行うことはお勧めしませんが。別のアプローチのオプションはありますか?

于 2010-11-15T14:30:50.067 に答える