2010-08-23 13 views
8

Actualmente estoy trabajando en mi pequeño proyecto, pero tengo un pequeño problema: quiero establecer la variable de entorno $ PATH en ./bin, de modo que cuando uso exec() y funciones similares, solo busque archivos binarios en ese directorio (a menos que explícitamente indique lo contrario).

Ya he intentado putenv(), que no funcionará a menos que tenga habilitado el modo seguro, que prefiero no; y también intenté apache_setenv(), pero eso tampoco pareció funcionar.

¿Hay alguna otra solución que desee probar?

(estoy usando una máquina Linux con PHP 5.3.2)

+0

¿Querías decir "unless I have safe-mode disabled"? – greg0ire

+0

@ greg0ire, no, en realidad no funcionará a menos que tenga habilitado el modo seguro. Véalo usted mismo en la página del manual: http://php.net/manual/en/function.putenv.php – Frxstrem

+0

"¡Estas directivas solo tienen efecto cuando el modo seguro está habilitado!" desde http://php.net/manual/en/function.putenv.php. que es tonto – muhmuhten

Respuesta

5

Si desea establecer que sólo en circunstancias específicas, puede hacerlo:

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

Gracias, ¿por qué no pensé en eso? ? : P – Frxstrem

+0

que la configuración PATH es inútil ya que también está dando una ruta relativa real. – muhmuhten

+0

@sreservoir No, no lo es. La ruta no afecta solo a la resolución de './Bin' (en este caso, no la afecta en absoluto, ya que es una ruta relativa). Si '. ​​/ Bin' es, por ejemplo, una secuencia de comandos que llama a otras aplicaciones puede afectar la resolución de la ruta para ellas. – Artefacto

2

en lugar de establecer la ruta de acceso a bin y llamando foo, ¿por qué no se invoca explícitamente bin/foo?

0

Si tiene un conjunto de rutas para el usuario Y, si sus scripts se ejecutan como el suyo, lo único que debe hacer es configurar esta ruta para el shell suyo, pero sus scripts se ejecutarán como, por ejemplo. Apache usuario (www-data en sistemas Debian-like) para que esto funcione, debe establecer este camino para que explicte usuario

+0

El problema es que no quiero que se aplique en todas partes en el servidor, solo en ** un ** script PHP ... – Frxstrem

+0

Than, No puede hacer eso sin deshabilitar safe-mode (como mi conocimiento lo dice, pero puedo estar equivocado), PATH es una variable de entorno orientada al shell, no orientada a scripts – canni

4

la manera de alterar la trayectoria utilizado por Apache en Mac OS X se describe aquí: http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

Como se indica en ese puesto:

[a] dd el texto siguiente en [la f ile /System/Library/LaunchDaemons/org.apache.httpd.plist] en la quinta línea de :

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

Consulte la página del manual de launchd.plist(5) para obtener detalles sobre la sintaxis que estoy usando aquí.

Si necesita ejecutar los comandos de PHP como sesiones de CLI, podrás también probablemente necesitará añadir /opt/local/bin como una nueva vía de acceso en /etc/paths.d trabajo. Por ejemplo, algo como esto:

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

Consulte la página del manual de path_helper(8).