web-dev-qa-db-ja.com

Unlink()関数の使用方法

PHP unlink()関数を使用して、フォルダー内の特定のドキュメントを削除しようとしています。その特定のフォルダは、IISユーザーのフルアクセス権に既に割り当てられています。

コード:

$Path = './doc/stuffs/sample.docx';
if (unlink($Path)) {    
    echo "success";
} else {
    echo "fail";    
}

それは戻り失敗を続けます。 sample.docxはその特定のパスにあります。親切なアドバイス。

11
JLearner

私はこの情報を見つけました 関数unlink()のコメントで

WindowsシステムとApacheでは、ファイルへのアクセスの拒否は、ファイルのリンクを解除する通常のエラーです。ファイルを削除するには、ファイルの所有者を変更する必要があります。例:

chown($tempDirectory . '/' . $fileName, 666); //Insert an Invalid UserId to set to Nobody Owern; 666 is my standard for "Nobody" 
unlink($tempDirectory . '/' . $fileName); 

したがって、次のようなことを試してください:

$path = './doc/stuffs/sample.docx';

chown($path, 666);

if (unlink($path)) {
    echo 'success';
} else {
    echo 'fail';
}

EDIT 1

これをパスで使用してみてください:

$path = '.'
         . DIRECTORY_SEPARATOR . 'doc'
         . DIRECTORY_SEPARATOR . 'stuffs'
         . DIRECTORY_SEPARATOR . 'sample.docx';
10

これを試して:

$Path = './doc/stuffs/sample.docx';
if (file_exists($Path)){
    if (unlink($Path)) {   
        echo "success";
    } else {
        echo "fail";    
    }   
} else {
    echo "file does not exist";
}

ファイルが存在しない場合は、パスが間違っています。そうでない場合は、権限の問題である可能性があります。

8
Travis

これは、権限の問題を解決すると機能するはずです。またお試しください

ini_set('display_errors', 'On');  

それは何が悪いのか教えてくれます

2
leet
define("BASE_URL", DIRECTORY_SEPARATOR . "book" . DIRECTORY_SEPARATOR);
define("ROOT_PATH", $_SERVER['DOCUMENT_ROOT'] . BASE_URL);

$path = "doc/stuffs/sample.docx";

if (unlink(ROOT_PATH . $Path)) {   
  echo "success";
} else {
  echo "fail";    
}

// http://localhost/book/doc/stuffs/sample.docx
// C:/xampp/htdocs\book\doc/stuffs/sample.docx
0
antelove

対象のファイルへの完全なファイルパスが必要です。例:C:\ doc\stuff\sample.docx。 __DIR__または__FILE__を使用して相対的なファイル位置を取得し、目的のファイルに移動できるようにしてください。

0
James Woodruff