2011-11-17 12 views
12

जब भी मैं 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 सही नहीं है, और आवासों को बनाने की आवश्यकता है, लेकिन निश्चित रूप से कुछ प्लेटफार्म अज्ञात कामकाज मौजूद होना चाहिए ताकि फाइल सिस्टम को हिट करने के लिए आगे बढ़ने के लिए हिट किया जा सके, या कम से कम एक गैर-घुसपैठ करने का तरीका इस उद्देश्य के लिए वर्ग-स्वतंत्र कार्य।

सारांश सवाल (रों):

  • है वहाँ कुछ जादुई (हालांकि विश्वसनीय) वैकल्पिक हल, हैक, या अन्यथा पीएचपी वापस आगे घटा फाइल सिस्टम पथ किक करने के लिए सर्वर ओएस के लिए मजबूर करने, परवाह किए बिना ?
  • मुझे लगता है कि उत्तर कोई उपर्युक्त है, इसलिए आगे बढ़ना; निर्देशिका विभाजक के रूप में आगे स्लैश (या जो भी विकल्प, वास्तव में) को लागू करने के लिए मैं क्या प्रावधान कर सकता हूं? मैं उपरोक्त फ़िल्टर फ़ंक्शन के माध्यम से मान रहा हूं, लेकिन अब यह कहां जाना चाहिए?

आगे सब कुछ के लिए स्लेश। भले ही मेजबान ओएस विभाजक #*&@ है।

+2

क्या आपने [DIRECTORY_SEPARATOR] (http://www.php.net/manual/en/dir.constants.php) देखा है? – vascowhite

+1

@ वास्कोवाइट - निश्चित रूप से है। मैं नहीं देखता कि यह किसी भी लाभ का कैसा है। 'पथ' .DS.'to'DS.'file.php 'अगर मैं इसे' डीएस 'से उपनाम करता हूं लेकिन यह भी दर्द है। साथ ही, उपयोगकर्ता द्वारा प्रदान किए गए पथ (* कॉन्फ़िगरेशन फ़ाइलें, आदि *) को अभी भी 'strtr() '-ed होना चाहिए या स्वयं' DIRECTORY_SEPARATOR 'का उपयोग करना होगा। – Dan

+0

आप पथ की तुलना क्यों कर रहे हैं? क्या आप परीक्षण नहीं कर सकते हैं कि फाइल या निर्देशिका PHP के कार्यों का उपयोग कर मौजूद है? ओएस अज्ञेयवादी यह नहीं होगा? – vascowhite

उत्तर

8

जैसा कि मैंने टिप्पणी की है, मैं वास्तव में यह नहीं देख सकता कि आपको ऐसा क्यों करना होगा (मुझे आपकी समस्या को हल करने वाली विशिष्ट समस्या के त्वरित विवरण में रुचि होगी), लेकिन __FILE__ के आउटपुट का उपयोग करके यहां एक संभावित समाधान है एक उदाहरण के रूप: - (? चाहिए)

$path = str_replace('\\', '/', __FILE__); 

यह की * लौटे स्लैश परवाह किए बिना ओएस (मुझे लगता है कि) द्वारा काम करेंगे।

दुर्भाग्य से मुझे "कुछ जादुई (भरोसेमंद) वर्कअराउंड, हैक, या अन्यथा PHP सर्वर को फेंकने के लिए मजबूर करने के लिए मजबूर नहीं किया गया है, सर्वर ओएस के बावजूद, इसके अलावा सर्वर ओएस पर ध्यान दिए बिना। मुझे कल्पना है कि इसे एक सहायक वर्ग में लपेटा जा सकता है, लेकिन यह आपको अभी भी आपके कोड में एक आर्बेटरी निर्भरता देता है।

+0

धन्यवाद @ वास्कोवाइट - मैंने इस समय, एक सहायक वर्ग (* अन्य संबंधित कार्यों के साथ *) में कार्यक्षमता को लपेट लिया है ताकि सबकुछ आगे फिसल गया हो, और निर्देशिकाएं हमेशा पीछे हट रही हैं। – Dan

+0

इसके अलावा, आपकी टिप्पणी के संबंध में; मैं बोलने के लिए "वर्चुअल निर्देशिका" के लिए तुलना कर रहा हूं। मैं इस सवाल में विस्तार से बताऊंगा। – Dan

+0

मैंने अभी एक सहायक वर्ग का उपयोग किया था। 'पथ :: सामान्यीकृत ($ पथ, $ विस्तार);' वास्तविक विस्तार के साथ 'realpath() '। यह 'DIRECTORY_SEPARATOR' से '/' को सामान्य करता है, निर्देशिकाओं में '/' जोड़ता है, और (* वैकल्पिक बूलियन तर्क * द्वारा) सामान्यीकरण करने से पहले पथ का विस्तार करेगा। – Dan

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