OVH Cloud OVH Cloud

Probleme avec HTTP_USER_AGENT

12 réponses
Avatar
Eric
Bonjour,

Si j'écris un petit script que je nommerai test.php :

<?
$navigateur = $_SERVER['HTTP_USER_AGENT'];
echo "nav = ".$navigateur;
?>

Cela fonctionne parfaitement... mais si j'écris le script suivant ensuite :

<?
include ('test.php');
?>

Ca fonctionne mais pas sous Netscape 4.7... Or c'est justement ce genre de
navigateur que je souhaite détecter...

Si quelqu'un peut m'expliquer...

Merci.

@+

Eric

10 réponses

1 2
Avatar
luc
$_SERVER['HTTP_USER_AGENT'] detecte le navigateur qui a appeler la page
; ) lorsque tu fais un include c'est pas le navigateur qui appel la page
incluse, mais la page qui inclut ....

@+
Luc


Bonjour,

Si j'écris un petit script que je nommerai test.php :

<?
$navigateur = $_SERVER['HTTP_USER_AGENT'];
echo "nav = ".$navigateur;
?>

Cela fonctionne parfaitement... mais si j'écris le script suivant ensuite :

<?
include ('test.php');
?>

Ca fonctionne mais pas sous Netscape 4.7... Or c'est justement ce genre de
navigateur que je souhaite détecter...

Si quelqu'un peut m'expliquer...

Merci.

@+

Eric


Avatar
Eric
"luc" a écrit dans le message de
news:40d02b33$0$21573$
$_SERVER['HTTP_USER_AGENT'] detecte le navigateur qui a appeler la page
; ) lorsque tu fais un include c'est pas le navigateur qui appel la page
incluse, mais la page qui inclut ....


Merci pour ta réponse qui me ridiculise un peu mais me satisfait pleinement
;-)

@+

Eric

Avatar
Bertrand Usse
On Wed, 16 Jun 2004 11:05:02 +0000, Eric wrote:

[$_SERVER['HTTP_USER_AGENT'+include()...]

Ca fonctionne mais pas sous Netscape 4.7... Or c'est justement ce genre
de navigateur que je souhaite détecter...


La seule raison valable pour que ça ne fonctionne pas sous un navigateur
en particulier, c'est que celui-ci ne renseigne pas le champ
'HTTP_USER_AGENT' dans l'en-tête des messages HTTP Request qu'il envoie
aux serveurs Web. La version de PHP peut aussi jouer un rôle vis à vis
de la méthode d'accès à cette information.

Plus d'infos serait les bienvenues ... version de PHP, serveur Web,
éventuel message d'erreur, etc.

--
Bertrand USSE

Avatar
Olivier Miakinen

"luc" a écrit dans le message de
news:40d02b33$0$21573$
$_SERVER['HTTP_USER_AGENT'] detecte le navigateur qui a appeler la page
; ) lorsque tu fais un include c'est pas le navigateur qui appel la page
incluse, mais la page qui inclut ....


Merci pour ta réponse qui me ridiculise un peu mais me satisfait pleinement
;-)


Pourtant, ta façon de faire était irréprochable, alors que la remarque
de Luc est infondée : un bout de code appelé par include() fait partie
de la *même* page html que le code qui l'appelle.

Lis plutôt la réponse de Bertrand.


Avatar
John Gallet
Bonjour,

lorsque tu fais un include c'est pas le navigateur qui appel la page
incluse, mais la page qui inclut ....


Un include (ou require) est RIGOUREUSEMENT équivalent à un copié collé
du contenu du fichier indiqué en paramètre. Donc cette "explication" est
totalement fausse.

a++
JG

Avatar
luc
Bonjour,


lorsque tu fais un include c'est pas le navigateur qui appel la page
incluse, mais la page qui inclut ....



Un include (ou require) est RIGOUREUSEMENT équivalent à un copié collé
du contenu du fichier indiqué en paramètre. Donc cette "explication" est
totalement fausse.

a++
JG
d'accord mais alors comment explique tu que cela marche dans une page

normale, et ne marche plus lors d'un include ??? ce que dis bruno je
crois a ^propos des header est très bine mais ne répond absolument pas
au problème !!!!! qui est ca marche dans une page et ca marche pas lors
d'un include ...
Euh dite moi vous lisez les questions jusqu'a la fin ??????????????


Avatar
John Gallet
Bonjour,

d'accord mais alors comment explique tu que cela marche dans une page
normale, et ne marche plus lors d'un include ???


Je ne l'explique pas. C'est probablement une erreur de manipulation ou
de configuration. Par exemple parce que le fichier inclus est
inaccessible (hors include_path) et que le display_errors ou le
error_reporting fait que les messages d'erreur ne s'affichent pas. Il y
a plein d'auters cas tordus du même genre possible. En revanche c'est
clairement pas ce que tu as dit (qui prouve que tu n'as pas compris le
mécanisme des include, ni de portée des variables en php, ceci étant dit
en passant).

ce que dis bruno je
crois a ^propos des header est très bine mais ne répond absolument pas
au problème !!!!! qui est ca marche dans une page et ca marche pas lors
d'un include ...


Je n'y crois pas un seul instant. Ou alors c'est que le binaire
embarquant php est compilé maison et totalement pourri. Il suffit de
faire un test unitaire prenant 17 secondes à créer pour s'apercevoir que
le problème n'est pas reproductible :

[saphirtech]$ cat tst.php
<?php
include('user_agent.php');
?>

[saphirtech]$ cat user_agent.php
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

Appelle http://www.saphirtech.com/fclphp/user_agent.php d'abord.
Puis appelle http://www.saphirtech.com/fclphp/tst.php
Tu ne verras pas de différence et c'est normal.


Euh dite moi vous lisez les questions jusqu'a la fin ??????????????
Pire que ça : je décide de leur publication ou non. Et là on est

clairement face à un problème de catégorie "à la con" qu'on va mettre
deux jours à comprendre et 10 secondes pour faire la modif salvatrice
liée à la config ou au fait qu'en fait les tests faits n'étaient
nullement représentatifs.

a++
JG

Avatar
Eric
Bonjour,

Voici les infos sur php.
Bon désolé mais je n'y connais vraiment pas grand chose. Je n'ai pas
directement la main sur le serveur mais je peux demander au service
informatique de faire d'éventuelle modifications
Merci de votre aide.

@+

Eric

PHP Version 4.3.6

System Linux monsite.fr 2.4.22-1.2188.nptlsmp #1 SMP Wed Apr 21 20:12:56
EDT 2004 i686
Build Date May 13 2004 05:59:30
Configure Command './configure' '--host=i386-redhat-linux'
'--build=i386-redhat-linux' '--target=i386-redhat-linux-gnu'
'--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin'
'--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share'
'--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec'
'--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man'
'--infodir=/usr/share/info' '--cache-file=../config.cache'
'--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d'
'--enable-force-cgi-redirect' '--disable-debug' '--enable-pic'
'--disable-rpath' '--enable-inline-optimization' '--with-bz2'
'--with-db4=/usr' '--with-curl' '--with-exec-dir=/usr/bin'
'--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-gd'
'--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-ncurses'
'--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl'
'--with-png' '--with-pspell' '--with-regex=system' '--with-xml'
'--with-expat-dir=/usr' '--with-dom=shared,/usr' '--with-dom-xslt=/usr'
'--with-dom-exslt=/usr' '--with-xmlrpc=shared' '--with-pcre-regex=/usr'
'--with-zlib' '--with-layout=GNU' '--enable-bcmath' '--enable-exif'
'--enable-ftp' '--enable-magic-quotes' '--enable-safe-mode'
'--enable-sockets' '--enable-sysvsem' '--enable-sysvshm'
'--enable-discard-path' '--enable-track-vars' '--enable-trans-sid'
'--enable-yp' '--enable-wddx' '--without-oci8' '--with-pear=/usr/share/pear'
'--with-imap=shared' '--with-imap-ssl' '--with-kerberos'
'--with-ldap=shared' '--with-mysql=shared,/usr' '--with-pgsql=shared'
'--with-snmp=shared,/usr' '--with-snmp=shared' '--enable-ucd-snmp-hack'
'--with-unixODBC=shared' '--enable-memory-limit' '--enable-bcmath'
'--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio'
'--enable-mcal' '--enable-mbstring' '--enable-mbstr-enc-trans'
'--enable-mbregex' '--with-apxs2=/usr/sbin/apxs'
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php.ini
Scan this dir for additional .ini files /etc/php.d
additional .ini files parsed /etc/php.d/ldap.ini, /etc/php.d/mysql.ini,
/etc/php.d/pgsql.ini
PHP API 20020918
PHP Extension 20020429
Zend Extension 20021010
Debug Build no
Thread Safety disabled
Registered PHP Streams php, http, ftp, https, ftps, compress.bzip2,
compress.zlib
Avatar
Bertrand Usse
On Fri, 18 Jun 2004 09:53:26 +0000, Eric wrote:

Bonjour,

Voici les infos sur php.
Bon désolé mais je n'y connais vraiment pas grand chose. Je n'ai pas
directement la main sur le serveur mais je peux demander au service
informatique de faire d'éventuelle modifications Merci de votre aide.

[snip, les infos détaillées]


Oui, donc en clair : Redhat Linux + Apache2 + PHP4 ; Donc, oui ça _doit_
marcher comme prévu.

Cf. la réponse de John () qui explique bien
le mécanisme d'inclusion.

Je te recommande la lecture de la documentation officielle de PHP en
général et de cet article en particulier :

<http://www.php.net/manual/en/function.include.php>

Quote:
"When a file is included, the code it contains inherits the variable
scope of the line on which the include occurs. Any variables available
at that line in the calling file will be available within the called
file, from that point forward. When a file is included, the code it
contains inherits the variable scope of the line on which the include
occurs."

En clair : tout code inclu a accès aux mêmes variables que le code se
trouvant à proximité de la commande d'inclusion. Si ça peut t'aider, tu
peux voir la fonction 'include' comme une directive de preprocesseur qui
demande de remplacer la directive elle-même par le code contenu dans le
fichier à inclure. Bref, include ou pas include : c'est la même chose.

Pour en revenir à ton problème, tu donnes pleins d'infos sur
l'environement logiciel, c'est c00l!, mais tu as oublié de préciser s'il
y avait des messages d'erreur (et si oui, lesquels), parce que "ça
marche/fonctionne pas", c'est un peu vague non ?

--
Bertrand USSE

Avatar
Eric
Hello,

Bon, je viens de tester ton script et là aucun soucis... je reteste mon
script initial dans mon message d'origine et ça fonctionne aussi..
Intrigué je repars dans mes pages web et là ça re-bloque... Après tout un
tas de tests j'ai fini non pas par "comprendre" (je ne suis pas encore assez
calé en php) mais par constater la chose suivante.

- Si je fais dans mon fichier tst.php

include ('http://monsite.fr/user_agent.php');
Ca ne fonctionne pas, pas de message d'erreur...

include ('user_agent.php');
Tout est ok

include ('user_agent.php?var=$variable');
Message d'erreur : [...] failed to open stream: No such file or directory in
[...]

Alors comme j'avais mis dans mon script l'url complète avec une variable....
:-(

Bon merci à tous, j'ai quand même appris plein de truc !

@+

Eric
1 2