У меня проблема с удалением файлов через функцию unlink()
. Когда файл с кириллическим именем, функция не работает.
[24 июля 2012 00:33:35 UTC] Предупреждение PHP: unlink(/home/gtsvetan/public_html/мениджър.doc) [function.unlink]: Нет такого файла или каталога в /home/gtsvetan/public_html/deleter. php в строке 114
Так как же удалить файл, когда имя кириллизировано?
Код:
$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);
}
}
Решение:
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);
}
}
А вот и ajax.php, который создает экземпляр класса :)
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;
У меня работает идеально :)
is_file()
? - person alex   schedule 24.07.2012is_file()
проверяет, существует ли файл или нет, а не только является ли он файлом или нет .. Вот что имел в виду @alex. - person   schedule 24.07.2012is_file()
, и он не определяет его как файл. - person   schedule 24.07.2012unlink()
выполняется сis_file()
в качестве условия. - person alex   schedule 24.07.2012