I met with situation when unlink() permanently return 'permision denied' error while file to be deleted is fully accessible. Environment is Windows-Apache. Searching Internet shows me that this is not only my trouble. It seems unlink() has some problem under Windows OS. I decided to use this workaround for that problem:
// define if we under Windows $tmp = dirname(__FILE__); if (strpos($tmp, '/', 0)!==false) { define('WINDOWS_SERVER', false); } else { define('WINDOWS_SERVER', true); } $deleteError = 0; if (!WINDOWS_SERVER) { if (!unlink($fileName)) { $deleteError = 1; } } else { $lines = array(); exec("DEL /F/Q \"$fileName\"", $lines, $deleteError); } if ($deleteError) { echo 'file delete error'; }