2011-12-02 16 views
6

एक Windows मशीन पर, निम्न स्क्रिप्ट में:पीएचपी ग्लोब() कोष्ठक निर्देशिका

<?php 

mkdir("c:\\[test]"); 
file_put_contents("c:\\[test]\\test.txt", "some content"); 
chdir("c:\\[test]"); 
echo getcwd()."\n"; 
var_dump(glob('*')); 

?> 

प्रदर्शित करता है यह:

C:\[test] 
array(0) { 
} 

जब यह आशा की जाती है:

C:\[test] 
array(1) { 
    [0]=> 
    string(8) "test.txt" 
} 

मैं समझता हूँ कि glob व्यवहार करता कोष्ठक विशेष वर्ण, जबमें पायापैरामीटर।

पैटर्न * मैचों वर्तमान कार्यशील निर्देशिका में किसी भी फाइल। हालांकि, ग्लोब() बर्ताव करता है जैसे कि यह पैटर्न c:\\[test]\\*

कोष्ठक तो पैटर्न के हिस्से के रूप में व्याख्या की जा रही है, जबकि असल में ऐसा निर्देशिका का हिस्सा हैं के साथ चलाया गया था।

globपैटर्न के हिस्से के रूप पथ के इलाज के लिए माना जाता है? मैं नहीं बल्कि लगता है कि यह एक प्रारंभिक बिंदु के रूप में वर्तमान निर्देशिका का उपयोग करना चाहिए, और फिर पैटर्न केवल पर कार्रवाई होगी।

(संक्षेप में प्रस्तुत करने का प्रयास): glob समारोह में कार्य करता है जैसे कि यह एक मेल खाने वाला पैटर्न के रूप में c:\\[test]\\* हो रही है, और या तो c:\t\*, c:\e\*, या c:\s\* मिलान करने के लिए कोशिश कर रहा है। लेकिन पैटर्न वास्तव में * है और इसे किसी भी मैच से मिलान करने की कोशिश नहीं करनी चाहिए।

+0

मैं मैक पर इस को दोहराने नहीं कर सकते, आप जाँच कर सकते हैं निर्देशिका और फाइल वास्तव में अपने खिड़की पर ठीक से बनाया जाता है? – ajreal

+2

क्या मैं स्पष्ट सुझाव दे सकता हूं, [dir नामों में उपयोग नहीं करें]? –

+2

@ डैगन क्यों [] डीआईआर नामों में इस्तेमाल नहीं किया जा सकता है? – xdazz

उत्तर

4

यह php.net पर इस बग रिपोर्ट में किसी समस्या के रूप में शामिल किया जा रहा है: https://bugs.php.net/bug.php?id=33047

कि धागे पर पिछले पोस्ट के बारे में यह एक बग नहीं किया जा रहा है, लेकिन कैसे ग्लोब व्यवहार करता कोष्ठक से एक मुद्दा है, के रूप में नियमित अभिव्यक्ति का हिस्सा। मुझे यकीन नहीं है कि मैं सहमत हूं। ऐसा लगता है कि आप इसके आसपास काम कर सकते हैं, जब तक कि आप मूल फ़ोल्डर में नहीं जा सकते।

आप अंदर [परीक्षण] फ़ोल्डर में होने का पहली आवश्यकता निकालते हैं, तो आप नीचे दिए गए की तरह एक वाक्य रचना का उपयोग करके फ़ाइल सूची प्राप्त कर सकते हैं:

chdir('..'); 
$glob = glob("[[]test[]]/*"); 

इन जटिलताओं को देखते हुए, मैं का उपयोग नहीं की सिफारिश करेंगे समारोह glob अगर आप खिड़कियां मशीनों पर मुद्दों में चल रहे हैं, और readdir जैसे अन्य फ़ाइल लिस्टिंग कार्यों को देखो।

+1

यह वास्तव में" निष्कर्ष "नहीं है, यह अभी तक आखिरी टिप्पणी पोस्ट की गई है, और जब तक कि मुझे कुछ याद नहीं आ रहा है, तो टिप्पणी सादा गलत है। जो कुछ भी, यह एक वैध बग रिपोर्ट की तरह दिखता है, हालांकि यह बिना किसी फिक्स के बंद हो चुका है। –

+1

अच्छा बिंदु, मैं अपनी पोस्ट संपादित करूंगा। –

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