php文件操作技巧FileSystem

1.獲取目前下的子目錄(目錄下的所有同級文件包括文件夾)
php代碼

$path = '/data/logs';
$dirChirdenList = scandir($path);
var_dump($dirChirdenList);

輸出

array(28) {
  [0] => string(1) "."
  [1] => string(2) ".."
  [2] => string(8) "activity"
  [3] => string(5) "admin"
  [4] => string(4) "auth"
  [5] => string(13) "codeexception"
  [6] => string(6) "coobar"
  [7] => string(16) "coobar_error_log"
  [8] => string(4) "cron"
  [9] => string(9) "http_api6"
  [10] => string(13) "http_service6"
  [11] => string(8) "http_sso"
  [12] => string(5) "nginx"
  [13] => string(3) "pay"
  ....
  ...
}

php代碼

$handler = opendir('/data/logs');
$files = [];
while( ($filename = readdir($handler)) !== false ) {
  $files[] = $filename;
}
closedir($handler);
var_dump($files);

輸出

array(28) {
  [0] => string(6) "wallet"
  [1] => string(13) "codeexception"
  [2] => string(19) "php-fpm54.error.log"
  [3] => string(15) "php54.error.log"
  [4] => string(17) "php-fpm.error.log"
  [5] => string(7) "upgrade"
  [6] => string(18) "php-fpm54.slow.log"
  [7] => string(4) "auth"
  [8] => string(8) "activity"
  [9] => string(16) "coobar_error_log"
  [10] => string(13) "http_service6"
  [11] => string(3) "sql"
  [12] => string(1) "."
  [13] => string(6) "rsyncd"
  ...
  ...
}

遞歸獲取該文件下所有文件

$dir = "/databackup/php18/logs/codeexception";
$fileList = [];
$result = getDirFile($dir,$fileList);
function getDirFile($dir,&$fileList)
{
    $handler = opendir($dir);
    while (($filename = readdir($handler)) !== false) {
        if ($filename == '.' || $filename == '..') {
            continue;
        }
        if (is_dir($dir . "/" . $filename)) {
            getDirFile($dir . "/" . $filename,$fileList);
        } else {
            $fileList[] = $dir . "/" . $filename;
        }
    }
    closedir($handler);
    return true;
}

2.將日誌文件變成一個數組 每一行一個key (不推薦打開大文件內容 容易內存溢出)
文件內容

row1
row2
row3
row4
row5
row6

php代碼

$rows = file('/home/hls/test/test.log);
var_dump($rows);

輸出

array(6) {
  [0] => string(5) "row1
"
  [1] => string(5) "row2
"
  [2] => string(5) "row3
"
  [3] => string(5) "row4
"
  [4] => string(5) "row5
"
  [5] => string(5) "row6
"
}

3.逐行讀取文件內容(適合大文件 文件分析)

文件內容

row1
row2
row3
row4
row5
row6

php代碼

$handler = fopen('/home/hls/test/test.log','r');
$rows = [];
while (!feof($handler)) {
  $row = fgets($handler);
  if ($row !== false) {
     $rows[] = $row;
  }
}
fclose($handler);
dump($rows);exit;

輸出

array(6) {
  [0] => string(5) "row1
"
  [1] => string(5) "row2
"
  [2] => string(5) "row3
"
  [3] => string(5) "row4
"
  [4] => string(5) "row5
"
  [5] => string(5) "row6
"
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章