2010-08-23 26 views
8

Şu an kendi küçük projem üzerinde çalışıyorum, fakat küçük bir sorunum var: $ PATH ortam değişkenini ./bin olarak ayarlamak istiyorum, böylece exec() ve benzeri işlevleri kullandığımda, yalnızca ikili dosyaları arayabilirim dizin (aksi açıkça belirtmedikçe).

putenv()'u denedim; güvenli modda etkin olmadığım sürece çalışmaz; ve ben de apache_setenv() denedim, ama bu da işe yaramadı.

Denemek isteyebileceğim başka çözümler var mı?

+0

"Güvenli mod devre dışı olmadıkça" derken? – greg0ire

+0

@ greg0ire, hayır, güvenli modda etkin olmadığım sürece çalışmaz. Manüel sayfada kendiniz görün: http://php.net/manual/en/function.putenv.php – Frxstrem

+0

"Bu yönergeler sadece güvenli modun kendisi etkin olduğunda etkindir!" http://php.net/manual/en/function.putenv.php adresinden. aptalca. – muhmuhten

cevap

5

için bu PATH ayarlamanız gerekir, bunu yapabilirsiniz:

exec("PATH=/my/path ./bin"); 
+2

Teşekkürler, neden bunu düşünmedim ? : P – Frxstrem

+0

, PATH ayarının gerçek bir göreceli yol sağladığınız için anlamsız olduğunu. – muhmuhten

+0

@sreservoir Hayır, öyle değil. Yol sadece './Bin'ün çözünürlüğünü etkilemez (bu durumda, göreceli bir yol olduğu için hiç etkilemez). './Bin 'ise ör. Diğer uygulamaları çağıran bir betik onlar için yol çözünürlüğünü etkileyebilir. – Artefacto

2

(PHP 5.3.2 ile bir Linux makinesini kullanıyorum) yerine bin yolunu ayarlama ve foo arayarak, neden açıkça bin/foo çağırmak değil mi?

0

Kullandığınız kullanıcı için bir yolunuz varsa VE komutlarınız Sizin kullanıcı kullanıcısı olarak çalışıyorsa, Yapmanız gereken tek şey, bu yolun Kendi Kabuğunuz için ayarlanmasıdır, ancak Sizin komut dosyalarınız örn. apache kullanıcısı (debian benzeri sistemlerde www-data) bu iş için sadece belirli şartlar altında bunu ayarlamak istiyorsanız, O kullanıcı explicte

+0

Sorun şu ki, sunucuda her yerde uygulamak istemiyorum, sadece ** bir ** PHP betiği ... – Frxstrem

+0

Daha, Güvenli modunu devre dışı bırakmadan bunu yapamazsınız (benim bildiğim gibi, ama yanılmış olabilirim), PATH kabuk odaklı bir ortam değişkeni, betik odaklı değil – canni

4

Mac OS X apachenin tarafından kullanılan yolunu değiştirmek üzere bir yol burada açıklanmaktadır: bu yayında belirtildiği gibi http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

:

[A] [f aşağıdaki metni dd Beşinci çizgisinde ile /System/Library/LaunchDaemons/org.apache.httpd.plist]:

<key>EnvironmentVariables</key> 
<dict> 
<key>PATH</key> 
<string>/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin</ string> 
</dict> 

burada kullanarak ben olduğum sözdizimine ilişkin ayrıntılar için launchd.plist(5) için man sayfasına bakın.

CLI oturumları olarak PHP komutları çalıştırmak gerekiyorsa

, ayrıca muhtemelen /etc/paths.d işin altında yeni yolu olarak /opt/local/bin eklemeniz gerekir. Örneğin, böyle bir şey:

shell> sudo echo "/opt/local/bin" >> /etc/paths.d/macports 

path_helper(8) man sayfasına bakın.

İlgili konular