web-dev-qa-db-ja.com

許可が拒否されました-php unlink

B.phpとtest.txtの2つのファイルがあります

<?php 
$b = "test.txt";
unlink($b);
?>

エラーは次のとおりです。警告:unlink(test.txt)[function.unlink]:Permission denied

どうして? b.phpとtest.txtは777で、同じグループ/ログインです

親ディレクトリに777を設定すると、リンク解除を実行できますが、777を設定して755に戻す必要がありますか?

27
eugui

(_b.php_を実行するプロセスのように、CLIまたはWebサーバーを介して)ファイルが置かれているディレクトリへの書き込みアクセスが必要です。ディレクトリのコンテンツを更新しているため、ファイルへのアクセスが十分ではありません。

PHP chmod()]関数を使用してファイルまたはフォルダーのモードを_777_に設定する場合は、_0777_を使用して確認する必要があることに注意してください。数値は8進数として正しく解釈されます。

28
Arjan

最初にfclose($handle);を使用してファイルを閉じる必要があります。ファイルは使用中であるため削除されません。最初にファイルを閉じてから、試してください。

18
Ashwin Pathak

他の友人が持っているすべての答えに加えて、この投稿を見ている誰かが「ファイル」ではなく「フォルダ」を削除する方法を探している場合、Foldersが php rmdir()function で削除する必要があり、unlink()で「フォルダ」を削除したい場合は、誤った警告メッセージが表示されます「許可が拒否されました」という

ただし、mkdir()でフォルダとファイルを作成できますが、フォルダを削除する方法(rmdir())は、ファイルを削除する方法とは異なります(unlink()

7
// Path relative to where the php file is or absolute server path
chdir($FilePath); // Comment this out if you are on the same folder
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465
$do = unlink($FileName);

if($do=="1"){ 
    echo "The file was deleted successfully."; 
} else { echo "There was an error trying to delete the file."; } 

これを試して。それが役に立てば幸い。

3
Ardi

ファイルのアクセス許可は大丈夫(0777)ですが、共有サーバー上であなたが思うので、ファイルを削除するには正しく使用します。 1.ファイルへの正しいパスを作成します

// delete from folder
$filename = 'test.txt';
$ifile = '/newy/made/link/uploads/'. $filename; // this is the actual path to the file you want to delete.
unlink($_SERVER['DOCUMENT_ROOT'] .$ifile); // use server document root
// your file will be removed from the folder

その小さなコードは魔法をかけ、実際のファイルパスが収集されていれば、選択したファイルをフォルダーから削除します。

1
dean