2009-02-12 14 views
15

मैं कुछ चित्रों के साथ एक निर्देशिका के माध्यम से पढ़ रहा हूँ में फ़ाइलों को वापस नहीं है और इस तरह अनुसरण करना) के readdir का एक बहुत सरल कार्यान्वयन (का उपयोग करते हुए:पीएचपी readdir() वर्णमाला के क्रम

if ($handle = opendir($path)) { 
    while (false !== ($szFilename = readdir($handle))) { 
    if ($szFilename[0] !== '.') { 
     if (is_file($path.$szFilename)) { 
       // do stuff 
      } 
     } 
    } 
} 

समस्या यह है कि मैं कर रहा हूँ फ़ाइलें readdir() राज्य के लिये दस्तावेज के रूप में वर्णमाला के क्रम में पढ़ा नहीं जा रहा है:

निर्देशिका से अगले फ़ाइल के फ़ाइल नाम देता है। फ़ाइल नाम क्रम में लौटाए गए हैं जिसमें वे फाइल सिस्टम द्वारा संग्रहीत हैं।

एक और अजीब बात यह है कि, स्थानीय परीक्षण सर्वर पर, एक ही कोड बहुत अच्छा काम करता है। यह दोनों मामलों में एलएएमपी स्टैक का उपयोग कर सर्वर पर चल रहा है।

मुझे पता है कि मैं एक सरणी बना सकता हूं और बस इसे सॉर्ट कर सकता हूं, लेकिन मैं सोच रहा था कि मैं जो कुछ कर रहा था उसमें कुछ खो रहा था।

उत्तर

28

वर्णमाला क्रम :: मुझे लगता है कि आप टुकड़ा आप उद्धृत पढ़ने में भूलना ...

निर्देशिका से अगले फ़ाइल का फ़ाइल नाम देता है। फाइलनाम को उस क्रम में वापस कर दिया जाता है जिसमें वे फाइल सिस्टम द्वारा संग्रहीत होते हैं।

तथ्य यह है कि 'एलएस' (आमतौर पर) वर्णमाला क्रम में फ़ाइलों को प्रदर्शित करेगा इसका मतलब यह नहीं है कि वे फाइल सिस्टम पर कैसे संग्रहीत हैं। PHP spec के रूप में व्यवहार कर रहा है, मुझे डर है।

यदि आप वर्णमाला क्रमबद्ध करना आवश्यक है, तो आप अपने प्रयासों के आधार के रूप में scandir का उपयोग करने पर विचार करना चाहेंगे।:)

+2

/मुझे माथे slaps स्कैंडर() वह है जो मैं देख रहा था। धन्यवाद! – Buggabill

+1

बीटीडब्ल्यू: ls -U फ़ाइलों को सूचीबद्ध करता है ताकि निर्देशिका में उनकी निर्देशिका प्रविष्टियां संग्रहीत हों। –

+0

'ग्लोब()' फ़ंक्शन भी यहां सहायता कर सकता है। http://php.net/glob डिफ़ॉल्ट रूप से यह वर्णानुक्रमित क्रमबद्ध फ़ाइलों को लौटाता है। ओपी में –

4

मुझे लगता है कि दस्तावेज़ यहां स्पष्ट हैं।

वे किस क्रम में फाइल सिस्टम में जमा हो जाती

वर्णमाला क्रम

+0

मेब और उन्होंने छवियों को वर्णमाला क्रम में अपने परीक्षक पर संग्रहीत किया, जिससे वर्णमाला क्रम के बराबर संग्रहीत आदेश – Jacco

+0

क्रम वर्णमाला होने की गारंटी नहीं है। डॉक्स कहते हैं कि यही है। – SilentGhost

+0

दस्तावेज़ यह नहीं कहते हैं कि आदेश वर्णमाला होने की गारंटी नहीं है। मैं नहीं कहूंगा कि वे फ़ाइल-सिस्टम ऑर्डर वर्णमाला क्रम से अलग होने के बारे में "काफी स्पष्ट" हैं। दस्तावेज़ वर्णमाला के बारे में कुछ भी नहीं कहते हैं। वे अंतर के बारे में स्पष्ट हो सकते हैं। –

1

आप डॉक्स ग़लत व्याख्या कर रहे हैं के रूप में ही नहीं है:

फ़ाइल नामों में लौटा दिए जाते हैं ऑर्डर जिसमें वे फाइल सिस्टम द्वारा संग्रहीत हैं।

का अर्थ है कि फ़ाइलों को बनाए गए क्रम में वापस कर दिया गया है।

+1

नाइटपिक: _probably_ का मतलब है कि वे बनाए गए ऑर्डर =) एक फाइल सिस्टम बनाना संभव है जो फ़ाइलों को किसी अन्य क्रम में लौटाता है, मैं कल्पना करता हूं। – gnud

12

आप एक सरणी में सभी फ़ाइल नाम नकल कर सकता है और उसके बाद

<?php 
sort($filesArray); 
?> 
-1

एक जोड़े हैं आप उपयोग कर सकते हैं का उपयोग करें:

वर्णमाला क्रमबद्ध करें:

<?php 
sort($handle); 
?> 

रिवर्स वर्णमाला क्रमबद्ध :

<?php 
rsort($handle); 
?> 
+0

'$ हैंडल 'एक [' संसाधन'] (http://php.net/manual/en/language.types.resource.php) है, जो न तो ['sort'] (http: // php .NET/manual/en/function.sort.php) न ही ['rsort'] (http://php.net/manual/en/function.rsort.php) स्वीकार करें। किसी को पूरी सरणी को मेमोरी में खींचने की आवश्यकता होगी और फिर 'sort() 'या' rsort() 'को कॉल करें। यदि कोई ऐसा करने के लिए परेशान है, तो कोई भी सभी आधुनिक PHP कार्यान्वयन में 'स्कैंडिर' का उपयोग कर सकता है। – bishop

संबंधित मुद्दे