जब भी मैं PHP (अक्सर) के साथ काम करता हूं, तो मैं आमतौर पर विंडोज बॉक्स पर काम करता हूं, हालांकि मैं ( पर प्रयास करें) प्लेटफार्म अज्ञेय अनुप्रयोग विकसित करना; समस्या विभाजक का उपयोग होने का मुद्दा एक प्रमुख बिंदु है।PHP निर्देशिका विभाजक, आगे स्लैश मजबूर; गैर-घुसपैठ
कई लोग जानते हैं कि PHP में विंडोज वातावरण में कोई भी फाइल सिस्टम काम कर रहा है, तो आप पिछड़े के बदले में आगे की स्लैश का उपयोग कर सकते हैं, और PHP इसे हुड के नीचे आउट करता है। fopen()
या जो भी हो, उसे मार्ग पारित करने के लिए स्ट्रिंग अक्षर का उपयोग करने की बात आती है यह सब ठीक है; लेकिन पथों को पुनर्प्राप्त करते समय, __FILE__
हो या realpath()
के साथ विस्तारित हो, तो पथ पुनर्प्राप्त किए गए पथ ओएस उपयुक्त स्लैश का उपयोग कर रहे हैं। इसके अलावा, मैंने पीछे की ओर झुकाव में कुछ विसंगतियों को देखा है। एक या दो बार __DIR__
एक (एक बैकस्लैश) और realpath()
भी संलग्न है (मैं स्लैश पसंद करते हैं, लेकिन रुक-रुक कर नहीं)
यह स्पष्ट रूप से स्ट्रिंग तुलना के लिए एक समस्या है, क्योंकि बजाय करने का:
compare_somehow('path/to/file.php', __DIR__);
विश्वसनीयता के लिए, मैं जाने के लिए कर रहा हूँ:
compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/');
इस काम की बहुत की तरह लगता है। मैं इसे एक समारोह में छोड़ सकता हूं, निश्चित रूप से; अब मैं अपने सभी ओओ कोड में मनमाने ढंग से कार्य निर्भरता के साथ फंस गया हूं।
मैं समझता हूं कि PHP सही नहीं है, और आवासों को बनाने की आवश्यकता है, लेकिन निश्चित रूप से कुछ प्लेटफार्म अज्ञात कामकाज मौजूद होना चाहिए ताकि फाइल सिस्टम को हिट करने के लिए आगे बढ़ने के लिए हिट किया जा सके, या कम से कम एक गैर-घुसपैठ करने का तरीका इस उद्देश्य के लिए वर्ग-स्वतंत्र कार्य।
सारांश सवाल (रों):
- है वहाँ कुछ जादुई (हालांकि विश्वसनीय) वैकल्पिक हल, हैक, या अन्यथा पीएचपी वापस आगे घटा फाइल सिस्टम पथ किक करने के लिए सर्वर ओएस के लिए मजबूर करने, परवाह किए बिना ?
- मुझे लगता है कि उत्तर कोई उपर्युक्त है, इसलिए आगे बढ़ना; निर्देशिका विभाजक के रूप में आगे स्लैश (या जो भी विकल्प, वास्तव में) को लागू करने के लिए मैं क्या प्रावधान कर सकता हूं? मैं उपरोक्त फ़िल्टर फ़ंक्शन के माध्यम से मान रहा हूं, लेकिन अब यह कहां जाना चाहिए?
आगे सब कुछ के लिए स्लेश। भले ही मेजबान ओएस विभाजक #*&@
है।
क्या आपने [DIRECTORY_SEPARATOR] (http://www.php.net/manual/en/dir.constants.php) देखा है? – vascowhite
@ वास्कोवाइट - निश्चित रूप से है। मैं नहीं देखता कि यह किसी भी लाभ का कैसा है। 'पथ' .DS.'to'DS.'file.php 'अगर मैं इसे' डीएस 'से उपनाम करता हूं लेकिन यह भी दर्द है। साथ ही, उपयोगकर्ता द्वारा प्रदान किए गए पथ (* कॉन्फ़िगरेशन फ़ाइलें, आदि *) को अभी भी 'strtr() '-ed होना चाहिए या स्वयं' DIRECTORY_SEPARATOR 'का उपयोग करना होगा। – Dan
आप पथ की तुलना क्यों कर रहे हैं? क्या आप परीक्षण नहीं कर सकते हैं कि फाइल या निर्देशिका PHP के कार्यों का उपयोग कर मौजूद है? ओएस अज्ञेयवादी यह नहीं होगा? – vascowhite