getcwd () और exec ('pwd') हमेशा मिलान करेगा? - PHP, बाश

प्रश्न

कर रहे हैं getcwd() तथा exec("pwd") हमेशा एक ही परिणाम वापस करने जा रहे हैं? और यदि नहीं, तो वे किस परिस्थिति में नहीं होंगे?

मैंने क्या कोशिश की

मैंने करने की कोशिश की exec("cd ..") और फिर echo exec("pwd") लेकिन वह वही रास्ता लौटा जो उसके पास होगा अगर मैंने ऐसा नहीं किया cd ..। जो मुझे तब से आश्चर्य नहीं करता है cd .. शायद केवल अवधि की अवधि के लिए रहता है exec() जिसमें यह किया गया था।

उत्तर:

जवाब के लिए 2 № 1

"कामकाजी निर्देशिका" होने का एक प्रतीकात्मक लिंक कम से कम एक मामला है getcwd() तथा exec("pwd") अलग हो सकता है - यहां तक ​​कि बश भी बनाया गया है pwd तथा /bin/pwd यहां अलग है।

# ll /res4/Linux/eldk
lrwxrwxrwx 1 armali ARNGO_res4 9 Oct 20  2008 /res4/Linux/eldk -> eldk3.1.1
# cd /res4/Linux/eldk
# php
<?php
echo getcwd(), "n";
echo exec("pwd"), "n";
?>
/res4/Linux/eldk3.1.1
/res4/Linux/eldk
# pwd
/res4/Linux/eldk
# /bin/pwd
/res4/Linux/eldk3.1.1

वहां pwd इसके बारे में विकल्प:

   -L, --logical
use PWD from environment, even if it contains symlinks

-P, --physical
avoid all symlinks

जाहिर है, बिश बिल्टिन pwd डीएल, और के लिए डिफ़ॉल्ट /bin/pwd टू-पी

लेकिन अधिकांश उपयोग मामलों के लिए, आपके सहित, दोनों रूप काम करेंगे, इसलिए अंतर यहां कोई फर्क नहीं पड़ता।


उत्तर № 2 के लिए 1

यदि आप सापेक्ष पथ को पूर्ण पथ में बदलना चाहते हैं तो आप इसका उपयोग कर सकते हैं realpath():

$abs_path = realpath("../path/to/binary");

संबंधित सवाल
सबसे लोकप्रिय