मेरे पास 1.3 मिलियन फाइलों वाली एक निर्देशिका है जिसे मुझे डेटाबेस में स्थानांतरित करने की आवश्यकता है। मुझे पूरी निर्देशिका स्कैन किए बिना निर्देशिका से एक फ़ाइल नाम पकड़ने की जरूरत है। इससे कोई फर्क नहीं पड़ता कि मैं कौन सी फाइल पकड़ता हूं क्योंकि जब मैं इसके साथ काम करता हूं तो उसे हटा दूंगा और फिर अगले स्थान पर जाउंगा। क्या यह संभव है? मुझे लगता है कि सभी उदाहरण एक सरणी में पूरी निर्देशिका लिस्टिंग स्कैन करने लगते हैं। मुझे केवल प्रोसेसिंग के लिए एक समय में एक को पकड़ने की जरूरत है ... हर बार 1.3 मिलियन नहीं।PHP: मैं पूरी निर्देशिका स्कैन किए बिना निर्देशिका से एक फ़ाइल कैसे प्राप्त कर सकता हूं?
उत्तर
यह करना चाहिए:
<?php
$h = opendir('./'); //Open the current directory
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..') { //Skips over . and ..
echo $entry; //Do whatever you need to do with the file
break; //Exit the loop so no more files are read
}
}
?>
निर्देशिका में अगले प्रविष्टि का नाम देता है। प्रविष्टियों को उस क्रम में वापस कर दिया जाता है जिसमें वे फाइल सिस्टम द्वारा संग्रहीत होते हैं।
मैं बजाय 1.3 एम बार चेक करने के बजाय डेटाबेस में '.and' .. 'डालना चाहता हूं। –
@ सैमी डिंडेन, उस चेक में काफी समय नहीं लगेगा, विशेष रूप से डिस्क से फ़ाइल पढ़ने और डेटाबेस में संग्रहीत करने की तुलना में ... – Zombaya
फिर भी, ओवरहेड को केवल दो कॉल चलाकर बचाया जा सकता है (हर छोटी मदद) लूप से पहले 'readdir', '.' और' ..' हमेशा पहली प्रविष्टियां होती हैं। – connec
readdir चाल करेगा। उस पृष्ठ पर परीक्षा की जांच करें लेकिन लूप में रीडडियर कॉल करने की बजाय, बस इसे एक बार करें। आपको निर्देशिका में पहली फाइल मिल जाएगी।
नोट: आपको "।", "..", और सर्वर के आधार पर अन्य समान प्रतिक्रियाएं मिल सकती हैं, इसलिए हो सकता है कि आप कम से कम लूप चाहें जब तक कि आपको वैध फ़ाइल न मिल जाए।
बस निर्देशिका इटरेटर प्राप्त करने और पहली प्रविष्टि एक फाइल है कि देखने के लिए:
foreach(new DirectoryIterator('.') as $file)
{
if ($file->isFile()) {
echo $file, "\n";
break;
}
}
यह भी सुनिश्चित करता है कि आपके कोड एक जैसा कि आप उम्मीद की तुलना में कुछ अन्य फ़ाइल-प्रणाली व्यवहार पर निष्पादित किया जाता है।
DirectoryIterator
और SplFileInfo
देखें।
क्या यह पूरी निर्देशिका सामग्री को सरणी में लोड नहीं करता है? काइल बचने की कोशिश कर रहा है।जब आपके पास फ़ोल्डर में हजारों फाइलें हों तो इससे कोई फर्क पड़ सकता है। – skibulk
@skibulk: नहीं, यह नहीं है, यह ** DirectoryIterator ** पर पुनरावृत्त करता है जो एक सरणी नहीं बल्कि एक वस्तु है। यह प्रभावी रूप से रोकता है कि आप क्या डरते हैं: एक सरणी। – hakre
कूल। मैं 'foreach'ing arrays के लिए प्रयोग किया जाता है। तो जब 'foreach'' DirectoryIterator' की अगली अनुक्रमणिका तक पहुंचता है, तो यह वास्तव में एक विधि (IE getNextFile()) का आविष्कार कर रहा है? अजीब। – skibulk
क्या आप पहली निर्देशिका या पहली फ़ाइल वापस करना चाहते हैं? दोनों? इस का उपयोग करें:
2 तर्क के साथ "pickfirst" समारोह बनाने
function pickfirst($address,$file) { // $file=false >> pick first dir , $file=true >> pick first file
$h = opendir($address);
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..' && (($file==false && !is_file($address.$entry)) || ($file==true && is_file($address.$entry))) )
{ return $entry; break; }
} // end while
} // end function
अगर आप पहले निर्देशिका अपना पता गलत पर सेट $file
में लेने चाहते हैं और अगर आप पहले लेने चाहते हैं (पते और मोड निर्देशिका या फ़ाइल?) अपने पते में फ़ाइल $file
को सत्य पर सेट करें।
शुभकामनाएं :)
- 1. स्कैन रूट निर्देशिका प्राप्त करना
- 2. मैं एक फ़ाइल से CGImageRef कैसे प्राप्त कर सकता हूं?
- 3. मैं लिनक्स पर निर्देशिका पुनरावृत्ति के बिना केस संवेदनशील पथ कैसे प्राप्त कर सकता हूं?
- 4. मैं एक गिट रिपोजिटरी से दूसरी निर्देशिका में एक निर्देशिका की प्रतिलिपि कैसे बना सकता हूं?
- 5. सी में निर्देशिका निर्देशिका कैसे प्राप्त करें?
- 6. मैं मौजूदा आइटमों की एक पूरी निर्देशिका कैसे जोड़ूं
- 7. मैं सक्रिय निर्देशिका से उपयोगकर्ताओं की सूची कैसे प्राप्त कर सकता हूं?
- 8. मैं पर्ल में निर्देशिका (फ़ाइल पथ) विभाजक कैसे प्राप्त कर सकता हूं?
- 9. मैं निर्देशिका में फ़ाइलों की संख्या को कुशलता से कैसे प्राप्त कर सकता हूं?
- 10. php निर्देशिका में एक फ़ाइल को हटाएं
- 11. एंड्रॉयड कैसे मैं एक निर्देशिका
- 12. मैं पर्सफोर्स से निर्देशिका का आकार कैसे प्राप्त करूं?
- 13. मैं अपने एंड्रॉइड ऐप से संसाधनों की निर्देशिका सूची कैसे प्राप्त कर सकता हूं?
- 14. मैं एक पर्ल कमांड में निर्देशिका और पैरेंट निर्देशिका कैसे बना सकता हूं?
- 15. मैं स्टेजिंग क्षेत्र से निर्देशिका उपट्री कैसे हटा सकता हूं?
- 16. मैं आयाम निर्दिष्ट किए बिना पूरी स्क्रीन को iframe कैसे फिट कर सकता हूं?
- 17. मैं Emacs के भीतर से निर्देशिका कैसे बना सकता हूं?
- 18. मैं निर्देशिका और फ़ाइल नाम में एक पूर्ण पथ कैसे अलग कर सकता हूं?
- 19. क्या मैं एआरएल कमांड में निर्देशिका शामिल कर सकता हूं?
- 20. वर्तमान कार्यशील निर्देशिका को बदले बिना मैं फ़ाइल कैसे जोड़ सकता हूं?
- 21. मैं फ़ाइल नाम में एक कोलन के साथ फ़ाइल कैसे स्कैन कर सकता हूं?
- 22. PHP बनाना एक उप-निर्देशिका
- 23. मैं जावास्क्रिप्ट में वर्तमान निर्देशिका नाम कैसे प्राप्त कर सकता हूं?
- 24. मैं वर्तमान निर्देशिका में उपनिर्देशिका को कैसे हटा सकता हूं?
- 25. मैं एक निश्चित निर्देशिका
- 26. फ़ाइल को एक निर्देशिका कैसे बनाएं?
- 27. मैं पर्ल में निर्देशिका से फ़ाइल को कैसे अलग करूं?
- 28. मैं कैसे बता सकता हूं कि "ls" से एक निर्देशिका एक सिम्लिंक है या नहीं?
- 29. मैं उप-निर्देशिका के .htaccess को कैसे कॉन्फ़िगर कर सकता हूं ताकि यह किसी भी मूल निर्देशिका की .htaccess को पूरी तरह से अनदेखा कर सके?
- 30. व्यक्तिगत फ़ाइलों को स्कैन किए बिना सिंक करें?
@ जोनाथन सैम्पसन मुझे संदेह है कि वह फ़ाइल नाम की परवाह करता है। वह किसी भी फाइल को पकड़ना चाहता है, इसे डेटाबेस में रखता है, और अगले स्थान पर जाता है। –