linux下文件夾文件名稱最大長度


今天突發奇想,如果創建一個文件,不寫入內容,就如我們之前說的寫入擴展屬性能快速查找數據,但是在SSD下只能寫4000個左右的字符,那么有沒有更快速的方法存儲這樣的信息呢?

我想到可以同文件名來存儲信息,測試了一下發現

<?php
$file  = './file/';

for ($i=0; $i < 1000; $i++) {
  $name = str_repeat("a", $i); 
  $res = touch($file . $name . ".txt");
  if (!$res) {
    var_dump($i);exit;
  }
}
PHP Warning:  touch(): Unable to create file ./file/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt because File name too long in /home/dir/index.php on line 6
int(252)

發現運行到252的時候報錯了,252加上 ".txt" 這4個字符是256個字符,也就是說一個文件名最大可以是255個字符,那這255個字符就可以用來存儲數據了。

如何使用這樣的數據呢,可以這樣,將你要存儲的數據使用_分割開來然后查找的時候glob過濾

<?php
$file  = './file/';
$res = touch($file . "_2000_2001_2002_2003_.txt");
var_dump($res);
// bool(true)

$list = glob("./file/*_2000_*.txt");
var_dump($list);
// array(1) {
//   [0]=>
//   string(32) "./file/_2000_2001_2002_2003_.txt"
// }

同理可測文件夾最大長度也是255

<?php
$file  = './file/';

for ($i=1; $i <= 1000; $i++) {
  $name = str_repeat("a", $i);
  $res = mkdir($file . $name, 0755, true);
  if (!$res) {
    var_dump($i);exit;
  }
}
PHP Warning:  mkdir(): File name too long in /home/dir/index.php on line 6
int(256)

使用的時候也是可以這樣glob過濾

<?php
$file  = './file/';
$dir = $file . "_2020_2021_2022_";
is_dir($dir) || $res = mkdir($dir, 0755, true);

$list = glob("./file/*_2021_*");
var_dump($list);
// array(1) {
//   [0]=>
//   string(23) "./file/_2020_2021_2022_"
// }

不過這個效率不怎么高,執行一次大概在0.09ms左右,換算成1秒也就只能跑1萬次左右,還是沒有xattr的讀取效率高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM