Re,
Question très simple , je souhaite modifier cette variable pour le PHP (extrait de phpinfo) :
_SERVER[“PATH”] /bin:/usr/bin:/sbin:/usr/sbin
En y ajoutant /opt/bin:/opt/sbin
Seulement , je ne trouve pas ou le PATH est configuré pour Apache-PHP , est-ce dans le php.ini ou bien la vérité est-elle ailleurs ?
Merci.
Je ne suis pas sûr mais je pense que php ne fait que lire le contenu de la variable PATH du user qui exécute php… Donc si tu dois modifier cette valeur, ça doit être directement dans le shell (manuellement ou via u script).
Erf ! C’est étrange , parce que le path de /etc/profile contient bien ces deux répertoires et pourtant ils n’apparaissent pas dans la variable PHP.
C’est grave docteur ?
Il y a plusieurs choses à prendre en compte.
La 1ère, c’est l’utilisateur qui exécute les scripts php. Typiquement, c’est un truc comme “www”, “wwwuser”… Ca, tu peux le savoir en regardant le fichier httpd.conf.
Ensuite, tu as la portée de la variable PATH. Tu as une portée qui s’applique à tous les users, qui est typiquement définie dans /etc/profile (et/ou dans /etc/bashrc, /etc/cshrc, etc.)., fichier qui est généralement inclut dans les scripts de démarrage de ta machine.
Ensuite, par user, tu peux avoir des scripts supplémentaires, généralement ~/.profile, ~/.bashrc, etc, qui peuvent apporter des modifs au PATH défini plus haut, mais dans un contexte utilisateur. Le fichier /etc/profile ne contient donc pas forcément les valeurs des variables que tu retrouveras in fine.
Tu dois donc avec un script pour le user “www” qui modifie le PATH…
Et bien j’ai trois fichiers qui semblent contenir le PATH. Tout d’abord un fichier /root/.profile :
[code]#/etc/profile: system-wide .profile file for ash.
PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin"
umask 022
#This fixes the backspace when telnetting in.
#if [ “$TERM” != “linux” ]; then
stty erase
#fi
export PATH
HOME=/root
export HOME
TERM=${TERM:-cons25}
export TERM
PAGER=more
export PAGER
PS1="hostname
> "
alias dir=“ls -al”[/code]
Le fichier /etc/rc :
[code]#!/bin/sh
Copyright © 2000-2003 Synology Inc. All rights reserved.
HOME=/
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin
export HOME PATH
LinuxVersion=/bin/uname -r | /usr/bin/cut -c1-3
SYNOLoadModule()
{
for MODULE in ${KERNEL_MODULES}
do
MODULE_PATH=/lib/modules/${MODULE}
if [ -f ${MODULE_PATH} ]; then
echo "Load ${MODULE}… "
insmod ${MODULE_PATH}
fi
done
}
.
.
.
.
.[/code]
Et sinon j’ai le fichier /etc/profile qui semble généré le fichier /root/.profile :
[code]#/etc/profile: system-wide .profile file for ash.
PATH="/opt/bin:/opt/sbin:$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin"
umask 022
#This fixes the backspace when telnetting in.
#if [ “$TERM” != “linux” ]; then
stty erase
#fi
PGDATA=/volume1/@database/pgsql
export PATH PGDATA
HOME=/root
export HOME
TERM=${TERM:-cons25}
export TERM
PAGER=more
export PAGER
PS1="hostname
> "
alias dir="ls -al"
alias ll="ls -la"
ulimit -c unlimited[/code]
Mon user apache est root (oui je sais c’est mal , mais j’en ai besoin).
J’utilise un script PHP qui émule une session telnet, PHP shell 2.1. Lors d’une véritable session telnet je n’ai aucuns problèmes, les rep /opt/bin et /opt/sbin sont directement accessibles. Par contre ils ne le sont pas via l’émulateur.
Est-il possible de prendre en compte les changements dans ces fichiers sans rebooter le NAS ?
Aux vues de tes fichiers de conf, je ne vois pas pourquoi ton PATH n’est pas correct B)
Je me demande s’il n’y a pas quelque chose à regarder du côté de php shell…
Exécute la commande suivante et donne nous le résultat :
Bon,
Le problème à été résolu après l’installation du package “BASH” . Pour info , voilà la configuration du dit package situé dans /opt/etc/profile :
[code]#
Bash initialization script
PS1="[\u@\h \W]$ "
PATH=/opt/sbin:/opt/bin:/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}
export PS1 PATH LD_LIBRARY_PATH[/code]
Après , je ne sais pas pourquoi le PATH ci-dessus est pris en compte pour PHP alors que les répertoires /opt/bin et /opt/sbin sont déclarés dans mon /etc/profile