[英]Delete files with special characters in filenames
我需要刪除舊文件文件名中使用特殊字符,如空間, ,
, (
, )
, !
等等,通過PHP。 經典的unlink($filename)
對這些文件不起作用。 如何將文件名轉換為接受unlink函數和文件系統的文件名? 它在Solaris計算機上運行,我沒有其他訪問權限。
你是如何構建$filename
? unlink應該可以處理任何帶有特殊字符的文件名,如果你正常轉義它。 例如
對於一個名稱為this has, various/wonky !characters in it
的文件,其中this has, various/wonky !characters in it
$filename = 'this has\, various\/wonky \!characters in it';
unlink($filename);
應該管用。
unlink接受任何有效的字符串,並嘗試刪除該字符串中的文件。
unlink('/home/user1/"hello(!,');
也許你沒有正確地逃避某些角色。
您還可以使用RegexIterator找到所有需要的文件並取消鏈接:
<?php
$dir = new RecursiveDirectoryIterator('.');
$iterator = new RecursiveIteratorIterator($dir);
$regex = new RegexIterator($iterator, '/(^.*[\s\.\,\(\)\!]+.*)/', RecursiveRegexIterator::GET_MATCH);
foreach ($regex as $file) {
if (is_file($file[0])) {
print "Unlink file {$file[0]}\n";
unlink($file[0]);
}
}
此代碼片段遞歸遍歷當前('。')的所有目錄,並通過regex'/(^。 [\\ s \\,。()!] +。 )/'匹配所有文件,然后刪除它們。
我在Linux中這樣做的方法是使用絕對路徑,例如“rm ./filename”,即點斜杠。
您也可以使用逃脫字符。 就像“rm \\ -filename”那樣 - 反向連字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.