迭代PHP文件数组并删除任何没有内容的文件

时间:2015-09-16 19:39:55

标签: php

我有一个文件数组,其中包含每个文件的完整目录路径。我需要迭代我的文件数组,然后删除其中包含0byte / non内容的文件。

files.txt

/lib/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php
/lib/Zend/Gdata/App/Extension.php
/lib/Zend/Gdata/App/MediaEntry.php
/lib/Zend/Gdata/App/FeedEntryParent.php
/lib/Zend/Gdata/App/AuthException.php
/lib/Zend/ProgressBar/Adapter.php
/lib/Zend/ProgressBar/alias.php
/lib/Zend/Locale/code.php
/lib/Zend/Server/Reflection/Function/article.php
/lib/Zend/Server/Reflection/ReturnValue.php
/lib/Zend/Server/Reflection.php
/lib/Zend/Dojo/BuildLayer.php
/lib/Zend/Tag/Cloud/start.php
/lib/Zend/Tag/Cloud/user.php
/lib/Zend/Tag/Item.php
/lib/Zend/Tag/Cloud.php
/lib/Zend/Ldap/Filter/Not.php
/lib/Zend/Ldap/Filter/And.php
/lib/Zend/Ldap/Filter/Exception.php
/lib/Zend/Ldap/Node.php
/lib/Zend/Ldap/Exception.php

PHP

// list of files to download
$lines = file('files.txt');

// Loop through our array of files from the files.txt file
foreach ($lines as $line_num =>$file) {
    echo htmlspecialchars($file) . "<br />\n";

    // delete empty files
}

2 个答案:

答案 0 :(得分:2)

到目前为止,您的基本循环看起来不错,我认为您接下来会对filesize()unlink()感兴趣:

$lines = file('files.txt', FILE_IGNORE_NEW_LINES);

foreach ($lines as $line_num => $file) {
    $file_label = htmlspecialchars($file);
    echo $file_label . "<br />\n";

    if (!file_exists($file)) {
        echo "file " . $file_label . " does not exist<br />\n";
    } else if (filesize($file) === 0) {
        echo "deleting file: " . $file_label . "<br />\n";
        unlink($file);
    }
}

虽然你应该非常小心这一点,以确保它只删除特定目录中的文件,可能有一个永远不应删除的文件的白名单等。

更新评论的一个好注意事项是使用FILE_IGNORE_NEW_LINES来电中的file()来删除每个\r\n个字符line return =]

答案 1 :(得分:1)

有两个函数可以执行,一个是filesize(),它检查文件的大小,另一个是file_exists(),它检查文件是否存在。要删除文件,请使用unlink()功能。

foreach ($lines as $line_num =>$file) {
    if(file_exists($file) && filesize($file) === 0) {
        unlink($file);
    }
}