2010-08-07 13 views
6

eksik ben almak

exec('echo $PATH; whoami; less /etc/paths; 2>&1') 

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/MAMP/Library/bin:/usr/local/git/bin:/usr/X11/bin 

döndürür

string 'echo $PATH; whoami; less /etc/paths; 2>&1' (length=56) 
array 
    0 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29) 
    1 => string 'eric' (length=4) 
    2 => string '/usr/bin' (length=8) 
    3 => string '/bin' (length=4) 
    4 => string '/usr/sbin' (length=9) 
    5 => string '/sbin' (length=5) 
    6 => string '/usr/local/bin' (length=14) 
    7 => string '/Applications/MAMP/Library/bin' (length=30) 
    8 => string '/usr/bin:/bin:/usr/sbin:/sbin' (length=29) 

Bu Mac OS X'te. Kimse son iki yol öğemin neden eksik olduğunu söyleyebilir mi?

putenv("PATH=" .$_ENV["PATH"]. ':/usr/local/git/bin:/usr/X11/bin'); 
+0

Eğer getenv ("PATH") kullanırsam, apache'de veya cli – mathk

cevap

2

Mac OS X'deki ortam değişkenleri, kodunuzun veya üst sürecinin nasıl başlatıldığına bağlı olarak farklı mekanizmalarla ayarlanır. Etkileşimli bir kabuktan başlatılan öğelerin ve WindowServer tarafından başlatılan öğelerin aynı yola sahip olmasını sağlamak için, ~/.MacOSX/environment.plist dosyasını .profile (veya .cshrc) 'de ayarlanmış olanla senkronize etmeniz gerekir.

10

deneyin?

Muhtemelen PHP'nin ürettiği kabuk (muhtemelen bash yerine sh) komut satırında sahip olduğunuz ortamdan yararlanmıyordur. exec komutunu nasıl çalıştırdığını söylemezsin.

Bu hangi kabuk çalıştırılıyor gösterecektir:

php -r 'echo shell_exec("echo $0");' 

Sen putenv komutunu kullanmak veya yol olması için sırayla /etc/profile, ~/.profile veya ~/.bashrc ayarlanan gerekip gerekmediğini belirlemek gerekebilir aldı.

+1

içinde PHP'yi çağırıyorsanız, eklediğimde doğru yolu döndürür. –

5

Ne vermez::

php -r 'print getenv("PATH");' 

Verdiğiniz Eğer exec aramadan önce bu yürütme

+0

sh ile yanıt verdi. –

+1

@Eric: Komut dosyanızı çalıştırdığınız ortamda (ENV'yi) çalıştırmadan ve dışa aktarmayı deneyin (çalıştırmadan önce). Örneğin: 'export ENV =/etc/profile' veya' export ENV =/home/username/.profile'. (Eğer '/ .bashrc' işlevini kullanırsanız, kodun' sh'un Bash'a özgü kodun anlayamadığı bir kod çalıştırmasını engelleyen bir kod girmesi gerekir.] Bourne kabuğu, yalnızca bir giriş olduğunda bu dosyaları otomatik olarak kaynak olarak kullanır. kabuk. –