我在通过unlink()
函数删除文件时遇到问题。当文件具有西里尔名称时,该功能不起作用。
[2012 年 7 月 24 日 00:33:35 UTC] PHP 警告:取消链接(/home/gtsvetan/public_html/мениджър.doc)[function.unlink]:/home/gtsvetan/public_html/deleter 中没有此类文件或目录。第 114 行的 php
那么当名称被西里尔化时如何删除文件呢?
代码是:
$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;
它对我来说很完美:)