2011-03-10 9 views
14

निष्पादित करने वाली निर्देशिका के समान कैसे सेट करें, मैं अपनी वेबसाइट को एक सर्वर से दूसरे सर्वर में स्थानांतरित करने की प्रक्रिया में हूं। मेरे पास कुछ php स्क्रिप्ट हैं जो is_readable फ़ंक्शन का उपयोग करती हैं जो वर्तमान कार्यशील निर्देशिका का उपयोग करती है।PHP: वर्तमान कार्य निर्देशिका को स्क्रिप्ट

पुराने सर्वर पर, जब मैं getcwd() को कॉल करता हूं, तो यह उस फ़ोल्डर को आउटपुट करता है जिसमें स्क्रिप्ट निष्पादित की जा रही है। नए सर्वर पर यह रूट निर्देशिका '/' आउटपुट करता है।

मैं जानना चाहता हूं कि मैं '/' के बजाय वर्तमान फ़ोल्डर का उपयोग करने के लिए PHP को कैसे कॉन्फ़िगर कर सकता हूं। मैं किसी भी PHP कोड को बदलना नहीं चाहता जो पहले से ही पुराने सर्वर पर काम करता है। मैं नया सर्वर कॉन्फ़िगर कर सकता हूं, लेकिन यह नहीं जानता कि कौन सी सेटिंग बदलनी है। मैं apache2 का उपयोग कर रहा हूं, अगर यह मदद करता है।

संपादित करें: ऐसा लगता है जैसे मेरी कामकाजी निर्देशिका जड़ नहीं है जैसा मैंने सोचा था। जब मैं एक testFile.php बना सकते हैं और getcwd गूंज() यह निर्देशिका php फ़ाइल में है पता चलता है। लेकिन मेरी समस्या फ़ाइल में, एक ही निर्देशिका में, getcwd() के रूप में '/'

+0

होगा दो अलग-अलग सर्वर php के विभिन्न संस्करणों, सही चल रहे हैं? – klang

+1

हां: पुराना सर्वर 5.2 का उपयोग करता है। नया सर्वर 5.3 का उपयोग करता है। – MF86

+0

संभावित डुप्लिकेट [PHP में, वर्तमान कार्य निर्देशिका सुनिश्चित करने का सर्वोत्तम तरीका सीएलआई का उपयोग करते समय स्क्रिप्ट के समान है] (http://stackoverflow.com/questions/192092/in-php-best-way-to-ensure-current -working-directory-is-same-as-script-when-us) –

उत्तर

19

chdir(__DIR__);

दिखाता है

या

chdir(dirname(__FILE__));

(chdir और magic constants देखें)।

लेकिन यह डिफ़ॉल्ट रूप से होना चाहिए।

+1

धन्यवाद, लेकिन क्या मैं इसे php.ini या कुछ कॉन्फ़िगरेशन फ़ाइल में डाल सकता हूं? मैं अपने मौजूदा PHP कोड को संपादित नहीं करना चाहता हूं। – MF86

+0

@ एमएफ 86 आप इसे अपने php.ini में नहीं डाल सकते हैं। लेकिन आप इसे कॉन्फ़िगरेशन फ़ाइलों में डाल सकते हैं जो सादे PHP कोड के रूप में लिखे गए हैं। (ईजी एक कॉन्फ़िगरेशन फ़ाइल जिसमें '

2

आप वर्तमान निर्देशिका प्राप्त कर सकते हैं एक स्क्रिप्ट dirname(__FILE__) या __DIR__ यदि> = PHP 5.3 के साथ है।

+0

+1' chdir' का सुझाव नहीं देने के लिए कोड है, जिसमें अवांछित साइड इफेक्ट्स हो सकते हैं। संभवतः अजीब व्यवहार जारी रखने की तुलना में वर्तमान कार्यशील निर्देशिका क्या है, इस पर ध्यान न देने के लिए स्क्रिप्ट को समायोजित करना बेहतर होगा। – Charles

+0

मैं मौजूदा स्क्रिप्ट को बदलने के बिना ऐसा करने में सक्षम होना चाहता हूं। पुराने सर्वर getcwd() वर्तमान निर्देशिका को स्क्रिप्ट निष्पादित करता है। – MF86

+0

यदि आपको मशीनों पर काम करने के लिए अपने कोड की आवश्यकता है जिस पर आप कॉन्फ़िगरेशन को नियंत्रित नहीं कर सकते हैं, तो आपको बाहरी कॉन्फ़िगरेशन की परवाह नहीं करने के लिए * अपना कोड बदलने की आवश्यकता होगी। '__DIR__' या' dirname (__ FILE __) 'आपको वह निर्देशिका प्राप्त करने की गारंटी है जिसमें फ़ाइल cwd की देखभाल किए बिना रहता है। – Charles

3

यह CLI mode:

में सामान्य है यह स्क्रिप्ट का है कि करने के लिए काम निर्देशिका नहीं बदलता है। (-सी और --no-chdir स्विच संगतता के लिए रखा)

एक त्वरित समाधान का

chdir(dirname(__FILE__)); 
+0

धन्यवाद। क्या आप जानते हैं कि मैं सीएलआई मोड से कैसे बाहर निकल सकता हूं? – MF86

+0

@ एमएफ 86 आप पहली जगह में क्यों हैं? आपकी स्क्रिप्ट कहाँ चल रही है? –

+0

मुझे यकीन नहीं है कि मैं हूं। मेरी स्क्रिप्ट अपाचे पर चल रही है, मेरे www फ़ोल्डर में। – MF86

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