簡體   English   中英

PHP:如何在不列出子目錄的情況下列出目錄中的文件

[英]PHP: How to list files in a directory without listing subdirectories

這是我的代碼的起始部分,用於列出目錄中的文件:

$files = scandir($dir); 
$array = array(); 
foreach($files as $file)
{
    if($file != '.' && $file != '..' && !is_dir($file)){
          ....

我試圖列出目錄中的所有文件而不列出子文件夾。 代碼正在運行,但同時顯示文件和文件夾。 我在上面的代碼中添加了!is_dir($file) ,但結果仍然相同。

應該是這樣的,我想:

$files = scandir($dir); 
foreach($files as $file)
{
    if(is_file($dir.$file)){
      ....

只需使用is_file

例子:

foreach($files as $file)
{
    if( is_file($file) )
    {
       // Something
    }
}

這將掃描文件,然后檢查 . 或 .. 在一個數組中。 然后推送不包括 . 和 .. 在新的 files[] 數組中。

嘗試這個:

$scannedFiles = scandir($fullPath);
$files = [];

foreach ($scannedFiles as $file) {
    if (!in_array(trim($file), ['.', '..'])) {
        $files[] = $file;
    }
}

看起來如此簡單的事情真是太痛苦了! 沒有什么對我有用......為了得到結果,我假設文件名有一個擴展名,在我的情況下它必須。

if ($handle = opendir($opendir)) {
    while (false !== ($entry = readdir($handle))) {
        $pos = strpos( $entry, '.' );
        if ($entry != "." && $entry != ".." && is_numeric($pos)  ) {

…… 好入門

這是一個快速簡單的單行列表,僅列出文件。 由於用戶只想列出文件,因此無需掃描目錄並返回所有內容並排除目錄。 只需獲取任何類型或特定類型的文件。 使用 * 返回所有文件而不考慮擴展名,或者通過將 * 替換為擴展名來獲取具有特定擴展名的文件。

獲取所有文件而不考慮擴展名:

$files = glob($dir . DIRECTORY_SEPARATOR . "*");

獲取所有帶有 php 擴展名的文件:

$files = glob($dir . DIRECTORY_SEPARATOR . "*.php");

獲取所有擴展名為 js 的文件:

$files = glob($dir . DIRECTORY_SEPARATOR . "*.js");

我對我的網站使用以下內容:

function fileList(string $directory, string $extension="") :array
{
    $filetype = '*';
    if(!empty($extension) && mb_substr($extension, 0, 1, "UTF-8") != '.'):
        $filetype .= '.' . $extension;
    else:
        $filetype .= $extension;
    endif;
    return glob($directory . DIRECTORY_SEPARATOR . $filetype);
}

用法 :

$files = fileList($configData->includesDirectory, '');

使用我的自定義函數,我可以包含擴展名或將其留空。 此外,我可能會忘記放置 . 在擴展之前,它會成功。

使用DIRECTORY_SEPARATOR常量也將文件附加到其目錄路徑。

    function getFileNames($directoryPath) {
        $fileNames = [];
        $contents = scandir($directoryPath);

        foreach($contents as $content) {
            if(is_file($directoryPath . DIRECTORY_SEPARATOR . $content)) {
                array_push($fileNames, $content);
            }
        }

        return $fileNames;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM