Getcwd () ve dirname (__FILE__) Arasındaki Fark?

2 Cevap php

PHP ne arasındaki fark

getcwd()
dirname(__FILE__)

Ben CLI'den echo ikisi aynı sonucu döndürür

echo getcwd()."\n";
echo dirname(__FILE__)."\n";

İade:

/home/user/Desktop/testing/
/home/user/Desktop/testing/

Hangi kullanmak için en iyi biridir? Bu önemli mi? Daha gelişmiş bir PHP geliştiricileri için ne tercih?

2 Cevap

__FILE__ Eğer yürütme dosyanın tam yolunu içeren sihirli bir sabittir. Bir içerme içinde iseniz, onun yol __FILE__ içeriği olacaktır.

Bu kurulum ile So:

/folder/random/foo.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n" ;
echo "-------\n";
include 'bar/bar.php';

/folder/random/bar/bar.php

<?php
echo getcwd() . "\n";
echo dirname(__FILE__) . "\n";

Bu çıktıyı almak:

/folder/random
/folder/random
-------
/folder/random
/folder/random/bar

dirname(__FILE__) dosya bağımlı iken Yani getcwd(), yürütülmesini başladı dizinini döndürür.

Benim webserver, getcwd() aslında yürütme başladı dosyasının konumunu döndürür. Eğer idam eğer ne olsun eşittir CLI kullanarak pwd. Bu getcwd kılavuzu sayfasında bir yorum tarafından desteklenmektedir:

CLI SAPI yok - diğer SAPI'lerinin aksine - otomatik olarak başlatan komut in bulunduğu biri geçerli çalışma dizini değiştirmek DEĞİL

So like:

thom@griffin /home/thom $ echo "<?php echo getcwd() . "\n" ?>" >> test.php
thom@griffin /home/thom $ php test.php 
/home/thom
thom@griffin /home/thom $ cd ..
thom@griffin /home $ php thom/tet.php 
/home

Tabii ki, http://php.net/manual/en/function.getcwd.php de manuel ayrıca bkz

bu deneyin.

Başka bir dizine dosya taşımak demek testing2.

Bu sonuç olmalıdır.

/home/user/Desktop/testing/
/home/user/Desktop/testing/testing2/

I dirname(__FILE__) __FILE__ sihirli sabiti kullanır ve gerçek dosya yolu kullanır burada getcwd, dosya işlemleri için kullanılır. düşünürdüm


Edit: Yanılmışım.

Peki chdir ile, çalışma dizinini değiştirebilirsiniz.

Yani siz eğer ...

chdir('something');
echo getcwd()."\n";
echo dirname(__FILE__)."\n";

Bu farklı olmalıdır.