उदाहरण के लिए मेरे पास `Temp 'नामक एक फ़ोल्डर था और मैं PHP का उपयोग करके इस फ़ोल्डर से सभी फ़ाइलों को हटाना या फ्लश करना चाहता था। क्या मैं ऐसा कर सकता था?
उदाहरण के लिए मेरे पास `Temp 'नामक एक फ़ोल्डर था और मैं PHP का उपयोग करके इस फ़ोल्डर से सभी फ़ाइलों को हटाना या फ्लश करना चाहता था। क्या मैं ऐसा कर सकता था?
जवाबों:
$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/*") ) );
यह कॉल खाली निर्देशिका (टिप के लिए धन्यवाद, @mojuba!) को भी संभाल सकती है
glob("...") ?: []
(PHP 5.4+) भी करूंगा क्योंकि खाली निर्देशिका glob()
रिटर्न के लिए false
।
array_map('unlink', ( glob( "path/to/temp/*" ) ? glob( "path/to/temp/*" ) : array() ) );
यहाँ मानक PHP लाइब्रेरी (SPL) का उपयोग करके अधिक आधुनिक दृष्टिकोण है ।
$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);
}
}
वाचडायर देखें और अनलिंक करें ।
<?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 .'*');
PHP द्वारा समर्थित किसी भी OS के लिए वही सटीक कमांड मौजूद है। ध्यान रखें कि यह फ़ाइलों को हटाने का एक सही तरीका है। $ AbsPathToFolder इस कोड को चलाने से पहले जाँच और सुरक्षित किया जाना चाहिए और अनुमतियाँ दी जानी चाहिए।
$absolutePatToFolder
कभी खाली हो
PHP में एक फ़ोल्डर से सभी फ़ाइलों को हटाने का सरल और सबसे अच्छा तरीका है
$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);
यदि आप बस php फ़ाइलों को बस हटाना चाहते हैं, तो इसे निम्नानुसार कॉल करें
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);
}
मैंने सबफ़ोल्डर्स के माध्यम से फ़ाइलों को हटाने के लिए @Stichoza के उत्तर को अपडेट किया।
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));
}
"पुशे" नामक एक पैकेज है। इसका उपयोग करके, आप एक निर्देशिका को साफ़ कर सकते हैं या एक निर्देशिका को पूरी तरह से हटा सकते हैं ( जीथूब लिंक )। यह Packagist पर भी उपलब्ध है ।
उदाहरण के लिए, यदि आप Temp
निर्देशिका साफ़ करना चाहते हैं, तो आप कर सकते हैं:
Pusheh::clearDir("Temp");
// Or you can remove the directory completely
Pusheh::removeDirRecursively("Temp");
यदि आप रुचि रखते हैं, तो विकी देखें ।