I have a problem with deleting files through the unlink() function. When the file has a Cyrillic name, the function does not work.
[24-Jul-2012 00:33:35 UTC] PHP Warning: unlink (/ home / gtsvetan / public_html / menager .doc) [function.unlink]: There is no such file or directory in / home / gtsvetan / public _html / deleter .php on line 114
So how to delete a file when the name is cyrillized?
The code:
$dir = is_array($dir) ? $dir : explode(',', $dir); foreach($dir as $dirv) { if(is_dir($dirv)) { $objects = scandir($dirv); foreach($objects as $object) { if($object != "." && $object != "..") { if(filetype($dirv."/".$object) == "dir") { $this->delete($dirv."/".$object); } else { unlink($dirv."/".$object); } } } reset($objects); rmdir($dirv); } else { unlink($dirv); } }
Decision:
public function delete($dir) { $dir = is_array($dir) ? $dir : explode(',', $dir); foreach($dir as $dirv) { if(is_dir($dirv)) { $d = @dir($dirv) or die(); while(false !== ($entry = $d->read())) { if($entry[0] == ".") { continue; } if(is_dir($dirv.$entry.'/')) { $this->delete($dirv.$entry.'/'); @rmdir($dirv.$entry); } elseif(is_readable($dirv.$entry)) { @unlink($dirv.$entry); } } $d->close(); } else { @unlink($dirv); } @rmdir($dirv); } }
And here is the ajax.php that make the class instance :)
case 'delete': $location = $_POST['location']; if(is_array($location)) { foreach($location as $v) { $loc[] = iconv('utf-8', 'cp1251', $v); } $pfm->delete($loc); } else { $location = iconv('utf-8', 'cp1251', $location); $pfm->delete($location); } break;
It works great for me :)
user546774
source share