2012-12-07 12 views
13

__DIR__ और __FILE__ स्थिरांक का उपयोग एक सिम्लिंक स्थिति में काम नहीं करते हैं। इसके लिए कामकाज क्या है?PHP __DIR__ या __FILE__ सिम्लिंक

उदाहरण के लिए:

/home/me/modules/myfile.php 

यह सांकेतिक रूप से लिंक किया गया है::

मैं एक फ़ाइल है

/var/www/project/app/myfile.php 
/home/me/modules/myfile.php में से

मैं कि /var/www/project

में स्थित है एक फ़ाइल को शामिल करने की जरूरत है

EDIT

realpath() का उपयोग करने के सुझावों के लिए - दुर्भाग्य से यह काम नहीं करता है।

var_dump(__DIR__); 
var_dump(realpath(__DIR__)); 

दोनों बिल्कुल एक ही filepath

+3

[ 'realpath()'] (http://us3.php.net/manual/en/function.realpath.php) –

+0

अजीब , realpath() झूठी रिटर्न देता है और फ़ाइल निश्चित रूप से मौजूद है –

+0

'realpath()' _what_ का झूठा रिटर्न? 'realpath (__ डीआईआर __)' –

उत्तर

0

लौट आप सांकेतिक लिंक का विस्तार करने के realpath() फ़ंक्शन का उपयोग कर सकते हैं। मेरी सिफारिश, हालांकि, इस तरह symlinks का उपयोग नहीं करना होगा। (/var/www/project/app, या उचित पैरेंट निर्देशिका जोड़ें, अपने PHP में इसके बजाय पथ शामिल हैं।)

+0

मुझे डर है कि वास्तविकता मुझे सिग्नलिंक किए गए स्थान को –

+0

['readlink()'] (http://php.net/readlink) दे सकती है? यदि नहीं, तो मुझे नुकसान हुआ है। – duskwuff

+1

@duskwuff देखें http://stackoverflow.com/questions/13771021/php-dir-or-file-symlinked#comment18933995_13771021 ओपी रीयलपैथ के विपरीत प्रभाव चाहता है और रीडलिंक –

2

क्या आपने निम्न का प्रयास किया है?

dirname($_SERVER['SCRIPT_FILENAME'])

आपके मामले में यह वापस आ जाएगी: /var/www/project/app

+0

यह स्वीकार्य उत्तर –

+0

होना चाहिए यह केवल यह मानता है कि PHP एक वेब सर्वर के माध्यम से चल रहा है जैसे अपाचे, कमांड लाइन पर नहीं। – Greg

+0

सच नहीं है। यह इस पर ध्यान दिए बिना कि आप कंसोल के वेब सर्वर का उपयोग कर रहे हैं या नहीं। यह अभी भी एक सर्वर/एसएपीआई के माध्यम से जा रहा है - एक कंसोल के मामले में, यह apache-cgi के बजाय fpm-cgi के माध्यम से जाएगा, उदाहरण के लिए। मैंने इसका परीक्षण किया है और '$ _SERVER ['SCRIPT_FILENAME'] 'निश्चित रूप से काम करता है। –

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