উদাহরণস্বরূপ আমার কাছে `টেম্প 'নামে একটি ফোল্ডার ছিল এবং আমি পিএইচপি ব্যবহার করে এই ফোল্ডার থেকে সমস্ত ফাইল মুছতে বা ফ্লাশ করতে চেয়েছিলাম। আমি কি এটা করতে পারি?
উদাহরণস্বরূপ আমার কাছে `টেম্প 'নামে একটি ফোল্ডার ছিল এবং আমি পিএইচপি ব্যবহার করে এই ফোল্ডার থেকে সমস্ত ফাইল মুছতে বা ফ্লাশ করতে চেয়েছিলাম। আমি কি এটা করতে পারি?
উত্তর:
$files = glob('path/to/temp/*'); // get all file names
foreach($files as $file){ // iterate files
if(is_file($file))
unlink($file); // delete file
}
আপনি যদি htaccess এর মতো 'লুকানো' ফাইলগুলি মুছতে চান তবে আপনাকে ব্যবহার করতে হবে
$files = glob('path/to/temp/{,.}*', GLOB_BRACE);
আপনি (সাবফোল্ডার সহ) এই সংমিশ্রণ ব্যবহার ফোল্ডার থেকে সবকিছু মুছে ফেলতে চান array_map
, unlink
এবং glob
:
array_map( 'unlink', array_filter((array) glob("path/to/temp/*") ) );
এই কলটি খালি ডিরেক্টরি পরিচালনা করতে পারে (টিপটির জন্য ধন্যবাদ, @ মজুবা!)
glob("...") ?: []
(পিএইচপি 5.4+) কারণ খালি ডিরেক্টরি glob()
রিটার্নের জন্য false
।
array_map('unlink', ( glob( "path/to/temp/*" ) ? glob( "path/to/temp/*" ) : array() ) );
এখানে স্ট্যান্ডার্ড পিএইচপি লাইব্রেরি (এসপিএল) ব্যবহার করে আরও আধুনিক পদ্ধতির ব্যবস্থা করা হয়েছে ।
$dir = "path/to/directory";
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
$file->isDir() ? rmdir($file) : unlink($file);
}
return true;
foreach (new DirectoryIterator('/path/to/directory') as $fileInfo) {
if(!$fileInfo->isDot()) {
unlink($fileInfo->getPathname());
}
}
Http://php.net/unlink থেকে এই কোড :
/**
* Delete a file or recursively delete a directory
*
* @param string $str Path to file or directory
*/
function recursiveDelete($str) {
if (is_file($str)) {
return @unlink($str);
}
elseif (is_dir($str)) {
$scan = glob(rtrim($str,'/').'/*');
foreach($scan as $index=>$path) {
recursiveDelete($path);
}
return @rmdir($str);
}
}
দেখুন দ্বারা readdir এবং লিঙ্কমুক্তের ।
<?php
if ($handle = opendir('/path/to/files'))
{
echo "Directory handle: $handle\n";
echo "Files:\n";
while (false !== ($file = readdir($handle)))
{
if( is_file($file) )
{
unlink($file);
}
}
closedir($handle);
}
?>
ধরে নিই যে আপনার ফোল্ডারে প্রচুর ফাইল রয়েছে এবং সেগুলি দুটি পড়া এবং তারপরে দুটি পদক্ষেপে মুছে ফেলা যে পারফরম্যান্স তা নয়। আমি বিশ্বাস করি ফাইলগুলি মুছে ফেলার সর্বাধিক সম্পাদিত উপায় হ'ল কেবলমাত্র একটি সিস্টেম কমান্ড ব্যবহার করা।
উদাহরণস্বরূপ লিনাক্সে আমি ব্যবহার করি:
exec('rm -f '. $absolutePathToFolder .'*');
অথবা এটি যদি আপনি পুনরাবৃত্ত ফাংশন লেখার প্রয়োজন ছাড়াই পুনরাবৃত্ত মোছা করতে চান
exec('rm -f -r '. $absolutePathToFolder .'*');
পিএইচপি দ্বারা সমর্থিত কোনও ওএসের জন্য একই সঠিক কমান্ড বিদ্যমান। মনে রাখবেন এটি ফাইল মুছে ফেলার এক পারফর্মিং উপায়। এই কোডটি চালানোর আগে o পরমপথটোফোল্ডারটি অবশ্যই চেক করা উচিত এবং সুরক্ষিত হওয়া উচিত এবং অনুমতি অবশ্যই মঞ্জুর করতে হবে।
$absolutePatToFolder
কখনও ফাঁকা থাকে
পিএইচপি-র কোনও ফোল্ডার থেকে সমস্ত ফাইল মোছার সহজ এবং সর্বোত্তম উপায়
$files = glob('my_folder/*'); //get all file names
foreach($files as $file){
if(is_file($file))
unlink($file); //delete file
}
এখান থেকে এই উত্স কোডটি পেয়েছেন - http://www.codexworld.com/delete-all-files-from-folder-using-php/
আরেকটি সমাধান: এই শ্রেণীটি সাব ডিরেক্টরিগুলির সমস্ত ফাইল, উপ ডিরেক্টরি এবং ফাইলগুলি মুছবে।
class Your_Class_Name {
/**
* @see http://php.net/manual/de/function.array-map.php
* @see http://www.php.net/manual/en/function.rmdir.php
* @see http://www.php.net/manual/en/function.glob.php
* @see http://php.net/manual/de/function.unlink.php
* @param string $path
*/
public function delete($path) {
if (is_dir($path)) {
array_map(function($value) {
$this->delete($value);
rmdir($value);
},glob($path . '/*', GLOB_ONLYDIR));
array_map('unlink', glob($path."/*"));
}
}
}
লিঙ্ক-লিঙ্ক ফাংশন পুনরাবৃত্তভাবে নির্দিষ্ট স্ক্রিপ্টটি মুছে দেয় না তা নিশ্চিত করে নির্দিষ্ট পথে সমস্ত ফোল্ডার এবং ফাইলগুলি মুছে দেয়।
function unlinkr($dir, $pattern = "*") {
// find all files and folders matching pattern
$files = glob($dir . "/$pattern");
//interate thorugh the files and folders
foreach($files as $file){
//if it is a directory then re-call unlinkr function to delete files inside this directory
if (is_dir($file) and !in_array($file, array('..', '.'))) {
echo "<p>opening directory $file </p>";
unlinkr($file, $pattern);
//remove the directory itself
echo "<p> deleting directory $file </p>";
rmdir($file);
} else if(is_file($file) and ($file != __FILE__)) {
// make sure you don't delete the current script
echo "<p>deleting file $file </p>";
unlink($file);
}
}
}
আপনি যদি এই স্ক্রিপ্টটি রাখেন এমন সমস্ত ফাইল এবং ফোল্ডারগুলি মুছতে চান তবে নীচের হিসাবে এটি কল করুন
//get current working directory
$dir = getcwd();
unlinkr($dir);
আপনি যদি কেবলমাত্র পিএইচপি ফাইলগুলি মুছতে চান তবে নীচের হিসাবে এটি কল করুন
unlinkr($dir, "*.php");
আপনি ফাইলগুলি মুছতে অন্য যে কোনও পথ ব্যবহার করতে পারেন
unlinkr("/home/user/temp");
এটি হোম / ব্যবহারকারী / অস্থায়ী ডিরেক্টরিতে থাকা সমস্ত ফাইল মুছে ফেলবে।
অনুলিপি, সরানো, মুছতে, আকার গণনা ইত্যাদির জন্য সাধারণ উদ্দেশ্যে ফাইল এবং ফোল্ডার হ্যান্ডলিং ক্লাস পোস্ট করেছে, যা কোনও একক ফাইল বা ফোল্ডারগুলির সেট পরিচালনা করতে পারে।
https://gist.github.com/4689551
ব্যবহার করা:
একটি একক ফাইল বা ফোল্ডার / ফাইলের একটি সেট অনুলিপি (বা সরানো):
$files = new Files();
$results = $files->copyOrMove('source/folder/optional-file', 'target/path', 'target-file-name-for-single-file.only', 'copy');
কোনও একক ফাইল বা সমস্ত ফাইল এবং ফোল্ডারগুলিকে একটি পথে মুছুন:
$files = new Files();
$results = $files->delete('source/folder/optional-file.name');
একটি একক ফাইলের আকার বা ফোল্ডারের একটি সেটে ফাইলগুলির একটি সেট গণনা করুন:
$files = new Files();
$results = $files->calculateSize('source/folder/optional-file.name');
<?
//delete all files from folder & sub folders
function listFolderFiles($dir)
{
$ffs = scandir($dir);
echo '<ol>';
foreach ($ffs as $ff) {
if ($ff != '.' && $ff != '..') {
if (file_exists("$dir/$ff")) {
unlink("$dir/$ff");
}
echo '<li>' . $ff;
if (is_dir($dir . '/' . $ff)) {
listFolderFiles($dir . '/' . $ff);
}
echo '</li>';
}
}
echo '</ol>';
}
$arr = array(
"folder1",
"folder2"
);
for ($x = 0; $x < count($arr); $x++) {
$mm = $arr[$x];
listFolderFiles($mm);
}
//end
?>
আমার জন্য, সমাধানটি readdir
সর্বোত্তম ছিল এবং কবজির মতো কাজ করেছিল। সাথে glob
, ফাংশনটি কিছু পরিস্থিতিতে ব্যর্থ হয়েছিল।
// Remove a directory recursively
function removeDirectory($dirPath) {
if (! is_dir($dirPath)) {
return false;
}
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
$dirPath .= '/';
}
if ($handle = opendir($dirPath)) {
while (false !== ($sub = readdir($handle))) {
if ($sub != "." && $sub != ".." && $sub != "Thumb.db") {
$file = $dirPath . $sub;
if (is_dir($file)) {
removeDirectory($file);
} else {
unlink($file);
}
}
}
closedir($handle);
}
rmdir($dirPath);
}
সাবফোল্ডারগুলির মাধ্যমে ফাইলগুলি সরাতে আমি @ স্টিচোজার উত্তর আপডেট করেছি।
function glob_recursive($pattern, $flags = 0) {
$fileList = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$subPattern = $dir.'/'.basename($pattern);
$subFileList = glob_recursive($subPattern, $flags);
$fileList = array_merge($fileList, $subFileList);
}
return $fileList;
}
function glob_recursive_unlink($pattern, $flags = 0) {
array_map('unlink', glob_recursive($pattern, $flags));
}
"পুষেহ" নামে একটি প্যাকেজ রয়েছে। এটি ব্যবহার করে, আপনি একটি ডিরেক্টরি সাফ করতে পারেন বা একটি ডিরেক্টরি পুরোপুরি সরিয়ে ফেলতে পারেন ( গিথুব লিঙ্ক )। এটি প্যাকেজিস্টেও উপলব্ধ ।
উদাহরণস্বরূপ, আপনি যদি Temp
ডিরেক্টরিটি সাফ করতে চান তবে আপনি এটি করতে পারেন:
Pusheh::clearDir("Temp");
// Or you can remove the directory completely
Pusheh::removeDirRecursively("Temp");
আপনি যদি আগ্রহী হন তবে উইকিটি দেখুন ।