ফাইল, .(বর্তমান ডিরেক্টরি) বা ..(মূল ডিরেক্টরি) ছাড়াই প্রদত্ত ডিরেক্টরিগুলির সমস্ত উপ ডিরেক্টরিগুলি কীভাবে পেতে পারি এবং তারপরে একটি ডিরেক্টরিতে প্রতিটি ডিরেক্টরি ব্যবহার করতে পারি?
ফাইল, .(বর্তমান ডিরেক্টরি) বা ..(মূল ডিরেক্টরি) ছাড়াই প্রদত্ত ডিরেক্টরিগুলির সমস্ত উপ ডিরেক্টরিগুলি কীভাবে পেতে পারি এবং তারপরে একটি ডিরেক্টরিতে প্রতিটি ডিরেক্টরি ব্যবহার করতে পারি?
উত্তর:
আপনি বিকল্প সহ গ্লোব () ব্যবহার করতে পারেনGLOB_ONLYDIR
অথবা
$dirs = array_filter(glob('*'), 'is_dir');
print_r( $dirs);
আপনি কিভাবে GLOB দিয়ে কেবল ডিরেক্টরিগুলি পুনরুদ্ধার করতে পারেন তা এখানে:
$directories = glob($somePath . '/*' , GLOB_ONLYDIR);
$somePathআউটপুটে পাথও অন্তর্ভুক্ত করে
স্প্লাল ডিরেক্টরীআইট্রেটর শ্রেণি ফাইল সিস্টেম ডিরেক্টরিগুলির বিষয়বস্তু দেখার জন্য একটি সহজ ইন্টারফেস সরবরাহ করে।
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
if ($fileinfo->isDir() && !$fileinfo->isDot()) {
echo $fileinfo->getFilename().'<br>';
}
}
আপনার আগের প্রশ্নের মতো প্রায় :
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($yourStartingPath),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $file) {
if($file->isDir()) {
echo strtoupper($file->getRealpath()), PHP_EOL;
}
}
strtoupperআপনার পছন্দসই ফাংশনটি প্রতিস্থাপন করুন ।
getFilename()কেবল ডিরেক্টরির নামটি ফিরিয়ে দেবে।
RecursiveDirectoryIterator::SKIP_DOTSকাছে দ্বিতীয় যুক্তি হিসাবে যুক্ত করতে হয়েছিল RecursiveDirectoryIterator।
এই কোড ব্যবহার করে দেখুন:
<?php
$path = '/var/www/html/project/somefolder';
$dirs = array();
// directory handle
$dir = dir($path);
while (false !== ($entry = $dir->read())) {
if ($entry != '.' && $entry != '..') {
if (is_dir($path . '/' .$entry)) {
$dirs[] = $entry;
}
}
}
echo "<pre>"; print_r($dirs); exit;
অ্যারেতে:
function expandDirectoriesMatrix($base_dir, $level = 0) {
$directories = array();
foreach(scandir($base_dir) as $file) {
if($file == '.' || $file == '..') continue;
$dir = $base_dir.DIRECTORY_SEPARATOR.$file;
if(is_dir($dir)) {
$directories[]= array(
'level' => $level
'name' => $file,
'path' => $dir,
'children' => expandDirectoriesMatrix($dir, $level +1)
);
}
}
return $directories;
}
// অ্যাক্সেস করুন:
$dir = '/var/www/';
$directories = expandDirectoriesMatrix($dir);
echo $directories[0]['level'] // 0
echo $directories[0]['name'] // pathA
echo $directories[0]['path'] // /var/www/pathA
echo $directories[0]['children'][0]['name'] // subPathA1
echo $directories[0]['children'][0]['level'] // 1
echo $directories[0]['children'][1]['name'] // subPathA2
echo $directories[0]['children'][1]['level'] // 1
সমস্ত দেখানোর উদাহরণ:
function showDirectories($list, $parent = array())
{
foreach ($list as $directory){
$parent_name = count($parent) ? " parent: ({$parent['name']}" : '';
$prefix = str_repeat('-', $directory['level']);
echo "$prefix {$directory['name']} $parent_name <br/>"; // <-----------
if(count($directory['children'])){
// list the children directories
showDirectories($directory['children'], $directory);
}
}
}
showDirectories($directories);
// pathA
// - subPathA1 (parent: pathA)
// -- subsubPathA11 (parent: subPathA1)
// - subPathA2
// pathB
// pathC
<?php
/*this will do what you asked for, it only returns the subdirectory names in a given
path, and you can make hyperlinks and use them:
*/
$yourStartingPath = "photos\\";
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($yourStartingPath),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $file) {
if($file->isDir()) {
$path = strtoupper($file->getRealpath()) ;
$path2 = PHP_EOL;
$path3 = $path.$path2;
$result = end(explode('/', $path3));
echo "<br />". basename($result );
}
}
/* best regards,
Sanaan Barzinji
Erbil
*/
?>
আপনি এই ফাংশনটি চেষ্টা করতে পারেন (পিএইচপি 7 প্রয়োজনীয়)
function getDirectories(string $path) : array
{
$directories = [];
$items = scandir($path);
foreach ($items as $item) {
if($item == '..' || $item == '.')
continue;
if(is_dir($path.'/'.$item))
$directories[] = $item;
}
return $directories;
}
সঠিক উপায়
/**
* Get all of the directories within a given directory.
*
* @param string $directory
* @return array
*/
function directories($directory)
{
$glob = glob($directory . '/*');
if($glob === false)
{
return array();
}
return array_filter($glob, function($dir) {
return is_dir($dir);
});
}
লারাভেল দ্বারা অনুপ্রাণিত
GLOB_ONLYDIR, দেখুন php.net/manual/en/function.glob.php
এটি সরাসরি জিজ্ঞাসা করা প্রশ্নটি ভুল করে বন্ধ করা হয়েছে, সুতরাং আমাকে এটি এখানে রাখতে হবে।
এটি ডিরেক্টরিগুলি ফিল্টার করার ক্ষমতাও দেয়।
/**
* Copyright © 2020 Theodore R. Smith <https://www.phpexperts.pro/>
* License: MIT
*
* @see https://stackoverflow.com/a/61168906/430062
*
* @param string $path
* @param bool $recursive Default: false
* @param array $filtered Default: [., ..]
* @return array
*/
function getDirs($path, $recursive = false, array $filtered = [])
{
if (!is_dir($path)) {
throw new RuntimeException("$path does not exist.");
}
$filtered += ['.', '..'];
$dirs = [];
$d = dir($path);
while (($entry = $d->read()) !== false) {
if (is_dir("$path/$entry") && !in_array($entry, $filtered)) {
$dirs[] = $entry;
if ($recursive) {
$newDirs = getDirs("$path/$entry");
foreach ($newDirs as $newDir) {
$dirs[] = "$entry/$newDir";
}
}
}
}
return $dirs;
}
এটি করতে আপনি গ্লোব () ফাংশনটি ব্যবহার করতে পারেন।
এটিতে এখানে কিছু ডকুমেন্টেশন রয়েছে: http://php.net/manual/en/function.glob.php
পুনরাবৃত্তভাবে সমস্ত পিএইচপি ফাইলগুলি সন্ধান করুন। যুক্তিটি টুইঙ্ক করার পক্ষে যথেষ্ট সহজ হওয়া উচিত এবং এটি ফাংশন কলগুলি এড়িয়ে দ্রুত (ইআর) হওয়ার লক্ষ্য করে।
function get_all_php_files($directory) {
$directory_stack = array($directory);
$ignored_filename = array(
'.git' => true,
'.svn' => true,
'.hg' => true,
'index.php' => true,
);
$file_list = array();
while ($directory_stack) {
$current_directory = array_shift($directory_stack);
$files = scandir($current_directory);
foreach ($files as $filename) {
// Skip all files/directories with:
// - A starting '.'
// - A starting '_'
// - Ignore 'index.php' files
$pathname = $current_directory . DIRECTORY_SEPARATOR . $filename;
if (isset($filename[0]) && (
$filename[0] === '.' ||
$filename[0] === '_' ||
isset($ignored_filename[$filename])
))
{
continue;
}
else if (is_dir($pathname) === TRUE) {
$directory_stack[] = $pathname;
} else if (pathinfo($pathname, PATHINFO_EXTENSION) === 'php') {
$file_list[] = $pathname;
}
}
}
return $file_list;
}
আপনি যদি পুনরাবৃত্ত ডিরেক্টরি ডিরেক্টরি সমাধানের সন্ধান করছেন। নীচের কোডটি ব্যবহার করুন আশা করি এটি আপনাকে সহায়তা করবে।
<?php
/**
* Function for recursive directory file list search as an array.
*
* @param mixed $dir Main Directory Path.
*
* @return array
*/
function listFolderFiles($dir)
{
$fileInfo = scandir($dir);
$allFileLists = [];
foreach ($fileInfo as $folder) {
if ($folder !== '.' && $folder !== '..') {
if (is_dir($dir . DIRECTORY_SEPARATOR . $folder) === true) {
$allFileLists[$folder . '/'] = listFolderFiles($dir . DIRECTORY_SEPARATOR . $folder);
} else {
$allFileLists[$folder] = $folder;
}
}
}
return $allFileLists;
}//end listFolderFiles()
$dir = listFolderFiles('your searching directory path ex:-F:\xampp\htdocs\abc');
echo '<pre>';
print_r($dir);
echo '</pre>'
?>
নিম্নলিখিত পুনরাবৃত্ত ফাংশন সাব ডিরেক্টরিগুলির সম্পূর্ণ তালিকা সহ একটি অ্যারে প্রদান করে
function getSubDirectories($dir)
{
$subDir = array();
$directories = array_filter(glob($dir), 'is_dir');
$subDir = array_merge($subDir, $directories);
foreach ($directories as $directory) $subDir = array_merge($subDir, getSubDirectories($directory.'/*'));
return $subDir;
}
সূত্র: https://www.lucidar.me/en/web-dev/how-to-get-subdirectories-in-php/
একটি নির্দিষ্ট ডিরেক্টরিতে সমস্ত ফাইল এবং ফোল্ডার সন্ধান করুন।
function scanDirAndSubdir($dir, &$fullDir = array()){
$currentDir = scandir($dir);
foreach ($currentDir as $key => $val) {
$realpath = realpath($dir . DIRECTORY_SEPARATOR . $val);
if (!is_dir($realpath) && $filename != "." && $filename != "..") {
scanDirAndSubdir($realpath, $fullDir);
$fullDir[] = $realpath;
}
}
return $fullDir;
}
var_dump(scanDirAndSubdir('C:/web2.0/'));
array (size=4)
0 => string 'C:/web2.0/config/' (length=17)
1 => string 'C:/web2.0/js/' (length=13)
2 => string 'C:/web2.0/mydir/' (length=16)
3 => string 'C:/web2.0/myfile/' (length=17)