2010-08-23 21 views
8

Attualmente sto lavorando al mio piccolo progetto, ma ho un piccolo problema: voglio impostare la variabile di ambiente $ PATH su ./bin, in modo che quando utilizzo exec() e funzioni simili, si cerchino solo i file binari in quel directory (a meno che non lo dica esplicitamente).

Ho già provato putenv(), che non funzionerà a meno che non sia attivata la modalità provvisoria, che preferirei di no; e ho anche provato apache_setenv(), ma non sembrava funzionare.

Ci sono altre soluzioni che potrei voler provare?

(sto usando una macchina Linux con PHP 5.3.2)

+0

Intendevi "se non ho disabilitato la modalità provvisoria"? – greg0ire

+0

@ greg0ire, no, in realtà non funzionerà se non sono abilitato in modalità provvisoria. Guardate voi stessi nella pagina del manuale: http://php.net/manual/en/function.putenv.php – Frxstrem

+0

"Queste direttive hanno effetto solo quando la modalità provvisoria è abilitata!" da http://php.net/manual/en/function.putenv.php. che è sciocco. – muhmuhten

risposta

5

Se si desidera impostare solo in circostanze specifiche, si può fare:

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

Grazie, perché non ci ho pensato ? : P – Frxstrem

+0

che l'impostazione PATH è un po 'inutile dato che stai dando un vero percorso relativo. – muhmuhten

+0

@sreservoir No, non lo è. Il percorso non ha effetto solo sulla risoluzione di './Bin' (in questo caso non ha alcun effetto, poiché è un percorso relativo). Se './Bin' è ad es. uno script che chiama altre applicazioni può influenzare la risoluzione del percorso per loro. – Artefacto

2

invece di impostare il percorso per bin e chiamando foo, perché non solo richiama esplicitamente bin/foo?

0

Se hai impostato il percorso per il tuo utente E se i tuoi script funzionano come il tuo utente, l'unica cosa che dovresti fare è impostare questo percorso per la tua shell, ma gli script di Your funzionano come es. utente apache (www-dati in sistemi Debian-like) per far funzionare tutto questo, è necessario impostare questo percorso per l'utente explicte

+0

Il problema è che non voglio che si applichi ovunque sul server, solo in ** uno ** script PHP ... – Frxstrem

+0

Than, Non è possibile farlo senza disattivare la modalità provvisoria (come dice la mia conoscenza, ma potrei sbagliarmi), PATH è una variabile di ambiente orientata alla shell, non orientata allo script – canni

4

il modo per modificare il percorso utilizzato da Apache su Mac OS X è descritto qui: http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

Come indicato in questo post:

[a] dd il seguente testo nel [f ile /System/Library/LaunchDaemons/org.apache.httpd.plist] alla quinta riga :

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

Vedere la pagina man per launchd.plist(5) per i dettagli sulla sintassi Sono usando qui.

Se è necessario eseguire i comandi PHP come sessioni CLI, avrete anche probabilmente bisogno di aggiungere /opt/local/bin come un nuovo percorso in /etc/paths.d lavoro. Per esempio, qualcosa di simile:

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

vedere la pagina man per path_helper(8).

Problemi correlati