我通過ftp_connect
和ftp_login
連接到FTP服務器。一旦連接,我就去ftp_chdir
的目錄。在目錄中,我必須用ftp_delete
刪除文件名中包含單詞「ub」的所有文件。所以我必須以某種方式讀取每個文件名,並且只刪除那些文件名爲「ub」的文件。我不知道如何做到這一點。請幫忙。謝謝。刪除FTP服務器上文件名爲「ub」的文件
0
A
回答
0
如果你使用一個交互式的FTP命令行工具,你可以發出命令
mdel *ub*
但低級別的協議不支持通配符操作;這是必須在客戶端通過獲取所有名稱,與模式進行比較以及逐個刪除來實現的,正如您所說的那樣。你可能想考慮使用命令行ftp來編寫腳本,而不是使用php?
0
@ Pekka的評論有一個可能的解決方案。另一種是使用glob
。
$files = glob('*ub*');
+0
只有當ftp服務器OP試圖連接的機器與php腳本運行在同一臺機器上時,情況纔是正確的 –
0
foreach (glob("*ub*") as $file) {
ftp_delete('YOUR_CONNECTION', $file);
}
問候
0
由於沒有真正回答這個問題,我會用我的功能回答,允許通過ftp刪除多個文件:
/**
* Delete multiple files on FTP server. Allowed wildcards are * and ?.
* @param resource $ftp_connection
* @param string $delete_pattern
* @param bool $case_sensitive Case sensitivity is by default
* @return bool|int Number of deleted files, FALSE on failure
*/
function ftp_mdelete($ftp_connection, $delete_pattern = "", $case_sensitive = TRUE){
if(!is_resource($ftp_connection) || strtolower(get_resource_type($ftp_connection)) !== "ftp buffer"){
trigger_error("First parameter for ftp_mdelete should be a valid FTP connection", E_USER_WARNING);
return FALSE;
}elseif(!is_string($delete_pattern) || !strlen($delete_pattern)){
trigger_error("Second parameter for ftp_mdelete should be a non-empty string", E_USER_WARNING);
return FALSE;
}
$raw_list = ftp_rawlist($ftp_connection, '.');
if(!is_array($raw_list)){
return FALSE;
}
$matched_count = 0;
$deleted_count = 0;
if($raw_list){
$delete_pattern = preg_quote($delete_pattern);
$delete_pattern = '/^'.str_replace(array('\*', '\?'), array('.*', '.'), $delete_pattern).'/S'.($case_sensitive?'':'i');
foreach($raw_list as $entry){
if($entry{0} === '-'){
$entry = preg_split("/[\s]+/S", $entry, 9);
$entry = $entry[8];
if(preg_match($delete_pattern, $entry)){
++$matched_count;
if(ftp_delete($ftp_connection, $entry)){
++$deleted_count;
}
}
}
}
unset($raw_list, $entry);
}
if($matched_count != $deleted_count && $deleted_count){
trigger_error("Only {$deleted_count} out of {$matched_count} files deleted.", E_USER_NOTICE);
}elseif($matched_count && !$deleted_count){
trigger_error("No files were deleted ({$matched_count} files matched given pattern).", E_USER_WARNING);
return FALSE;
}
return $deleted_count;
}
用法示例:
$ftp = ftp_connect('127.0.0.1');
ftp_login($ftp, 'user', 'pass');
ftp_chdir($ftp, 'dir');
$deleted = ftp_mdelete($ftp, '*ub*');
ftp_close($ftp);
echo "Number of deleted files: ".intval($deleted);
相關問題
- 1. 通過FTP連接刪除服務器上的文件夾
- 2. 從iphone應用程序刪除FTP服務器上的文件
- 3. 刪除服務器上傳的文件
- 4. 無法使用php重命名或刪除ftp服務器上的文件
- 5. 刪除服務器文件
- 6. 空文件上傳到FTP服務器
- 7. 上傳文件到FTP服務器
- 8. c#上傳文件到FTP服務器
- 9. ASP.Net文件上傳到FTP服務器
- 10. 上傳文件FTP服務器
- 11. 使用Java在FTP上用文件名刪除文件
- 12. 使用Dropzone.js刪除服務器上的重命名文件
- 13. 使用Java從FTP服務器刪除文件
- 14. Filezilla服務器文件無法FTP。把空白「/ /文件名」
- 15. 如何獲取FTP服務器上文件的文件大小?
- 16. 下載文件時從網絡服務器上刪除文件
- 17. 更改FTP服務器上文件的名稱IOS
- 18. 用於刪除ftp服務器上x天以前的文件的shell腳本
- 19. 使用iPhone上傳FTP服務器上的文本文件
- 20. 在FTP文件服務器上查看超過10,000個文件?
- 21. 使用ftp刪除文件
- 22. 與FTP服務器的文件同步
- 23. 更新FTP服務器上的文本文件?
- 24. 從服務器上自動刪除SFTP上傳的文件
- 25. 瞭解/刪除Azure文件服務上的文件鎖
- 26. 服務器上的文件名編碼
- 27. 通過Ant FTP任務刪除所有文件和文件夾
- 28. 爲什麼java ftp上傳文件損壞到服務器?
- 29. MSBUILD - 直到文件存在於ftp服務器上爲止?
- 30. 架構文件託管FTP服務器
你幾乎在那裏:)參見'ftp_nlist':http://php.net/manual/en/function.ftp-nlist.php –
謝謝!一旦我有目錄中包含的文件列表,我如何刪除文件名中包含單詞「ub」的文件? – Gabriele
使用'strpos'或'preg_match'或任何其他對此類事物有用的函數。 – ceejayoz