OVH Cloud OVH Cloud

Documentation PHP

12 réponses
Avatar
Pierre Maurette
Bonjour,
Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)
Je suppose, je suis même certain, que l'expression sera évaluée de
gauche à droite, avec arrêt de l'évaluation dès que le résultat est
connu (court-circuit) comme en C.
Ce qui m'embête, c'est que je ne trouve nulle part de document normatif
me garantissant ce comportement. J'utilise:
http://fr.php.net/manual/fr/index.php
J'ai mal cherché ? Y a-t-il un autre document ?
Merci d'avance

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette

10 réponses

1 2
Avatar
Olivier Miakinen

$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
[...]
Je suppose, je suis même certain, que l'expression sera évaluée de
gauche à droite, avec arrêt de l'évaluation dès que le résultat est
connu (court-circuit) comme en C.
Ce qui m'embête, c'est que je ne trouve nulle part de document normatif
me garantissant ce comportement. J'utilise:
http://fr.php.net/manual/fr/index.php
J'ai mal cherché ? Y a-t-il un autre document ?


En partant de <http://fr.php.net/manual/fr/index.php> et en cliquant sur
le chapitre 15, on trouve :
<http://fr.php.net/manual/fr/language.operators.php>, en en particulier
<http://fr.php.net/manual/fr/language.operators.php#language.operators.precedence>
qui donne déjà l'ordre d'évaluation.

La seule chose qui me semble manquer dans la doc, c'est l'assurance de
l'arrêt de l'évaluation dès que le résultat est certain.

Olivier.

P.-S. : ton adresse invalide devrait se terminer par .invalid, et je ne
vois pas pourquoi tu mets une adresse de Reply-To si elle n'est pas
correcte.

Avatar
Pierre Maurette

$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
[...]
Je suppose, je suis même certain, que l'expression sera évaluée de
gauche à droite, avec arrêt de l'évaluation dès que le résultat est
connu (court-circuit) comme en C.
Ce qui m'embête, c'est que je ne trouve nulle part de document normatif
me garantissant ce comportement. J'utilise:
http://fr.php.net/manual/fr/index.php
J'ai mal cherché ? Y a-t-il un autre document ?


En partant de <http://fr.php.net/manual/fr/index.php> et en cliquant sur
le chapitre 15, on trouve :
<http://fr.php.net/manual/fr/language.operators.php>, en en particulier
<http://fr.php.net/manual/fr/language.operators.php#language.operators.precedence>
qui donne déjà l'ordre d'évaluation.
MErci. J'ai bien entendu luces pages, la progression normale étant

d'aller à "Opérateurs".

La seule chose qui me semble manquer dans la doc, c'est l'assurance de
l'arrêt de l'évaluation dès que le résultat est certain.
C'est justement pour *ce* comportement (short-circuit) que je charchais

la doc.
Ceci dit, vu le nombre de .... or die(); que je croise ...

Olivier.

P.-S. : ton adresse invalide devrait se terminer par .invalid, et je ne
vois pas pourquoi tu mets une adresse de Reply-To si elle n'est pas
correcte.
Oui, on m'a dit. J'ai fait les modifs préconisées par les premières

remarques, nom de domaine valide en particulier. Mon adresse n'est pas
correcte, mais le mode d'emploi évident est de plus en signature.
Je modifierai peut-être ce truc, mais j'ai moins de remarques
actuellement, tous groupes confondus, qu'auparavant pour me signaler
que c'était *très con* de laisser son adresse en clair sur usenet.
Alors ..

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette


Avatar
Olivier Miakinen

<http://fr.php.net/manual/fr/language.operators.php>
<http://fr.php.net/manual/fr/language.operators.php#language.operators.precedence>
Merci. J'ai bien entendu lu ces pages



Je n'en doutais plus après les avoir lues moi-même puis relu ton
article, mais avant de chercher je croyais que non.

La seule chose qui me semble manquer dans la doc, c'est l'assurance de
l'arrêt de l'évaluation dès que le résultat est certain.
C'est justement pour *ce* comportement (short-circuit) que je cherchais

la doc.
Ceci dit, vu le nombre de .... or die(); que je croise ...


D'expérience, et quoique ce ne soit clairement écrit nulle part, je me
suis rendu compte que tout ce qui était implicite (c'est-à-dire non dit)
dans la doc de PHP correspondait en fait au comportement du langage C
avec la bibliothèque standard libc. Enfin... pour PHP sur Unix, du moins.

P.-S. : ton adresse invalide devrait se terminer par .invalid, et je ne
vois pas pourquoi tu mets une adresse de Reply-To si elle n'est pas
correcte.
Oui, on m'a dit. J'ai fait les modifs préconisées par les premières

remarques, nom de domaine valide en particulier.


Soit on t'a mal conseillé, soit tu n'as pas compris ce que l'on te
conseillait. À priori, rien n'empêche que le TLD ffrr existe un jour, ni
que le nom de domaine wwaannaaddoooo soit créé sous ce TLD.

En revanche, tu pourrais par exemple prendre ceci :


Mais ceci irait tout aussi bien, et serait plus facile à corriger par un
humain (tout en étant à peu près inaccessible à un robot, sauf s'il est
programmé exprès contre toi) :


Voire, si tu veux simplifier ta signature :


Mon adresse n'est pas
correcte, mais le mode d'emploi évident est de plus en signature.


Note au passage que si jamais l'un de tes articles devait être refusé
par la modération de fclp, tu ne saurais jamais pourquoi. Et avec un
système où il faut retirer une lettre sur deux, tu peux toujours courir
pour que les modérateurs envoient un message d'explication en plus du
refus du robot.

Je modifierai peut-être ce truc, mais j'ai moins de remarques
actuellement, tous groupes confondus, qu'auparavant pour me signaler
que c'était *très con* de laisser son adresse en clair sur usenet.


Ça ne peut pas être plus con que de mettre un Reply-To invalide. En
dehors du virus Swen, les robots ne lisent que le From. Ah si, il y a
plus con : un From valide en plus d'un Reply-To invalide, ce qui emmerde
les humains sans gêner les robots (ne ris pas, je l'ai vu plus d'une fois).

Si vraiment tu ne veux pas mettre ton adresse réelle dans le Reply-To,
alors je t'en supplie, ne sois pas ridicule et *supprime* le Reply-To.
Cela étant, on peut parfaitement vivre avec une adresse valide, même
dans le From, à condition d'avoir de bons filtres. C'est mon cas.

Et puis, je ne sais plus si je l'ai déjà dit, mais ajoute .invalid à la
fin de ton adresse de From.

[ suivi positionné chez moi (adresse valide) pour ne pas prolonger le
hors-charte que j'ai moi-même lancé ]


Avatar
John GALLET
Bonjour,

Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)


"C'est mal."(TM)

Une gestion d'erreur :
1) doit être systématique (ok ici).
2) ne doit pas divulguer d'informations à un attaquant potentiel
3) ne doit pas laisser l'internaute dans une impasse de navigation avec
pour tout affichage un message imbittable auquel il ne comprend rien.


Accessoirement, les variables sont très mal nommées.

$Links <- $result_buffer
$query_Links <- $query_string
$assembleur <- $dad // database access descriptor ou $db_fd pour
database_filedescriptor


a++;
JG

Avatar
Pierre Maurette
Bonjour,
Bonjour, et merci de votre réponse



Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)


"C'est mal."(TM)
Sans doute, mais la question portait sur l'existence d'une norme

complète du langage PHP, et précisément le fait de savoir si le
court-circuit dans les évaluations logiques était assuré.

Une gestion d'erreur :
1) doit être systématique (ok ici).
2) ne doit pas divulguer d'informations à un attaquant potentiel
3) ne doit pas laisser l'internaute dans une impasse de navigation avec
pour tout affichage un message imbittable auquel il ne comprend rien.


Accessoirement, les variables sont très mal nommées.

$Links <- $result_buffer
$query_Links <- $query_string
$assembleur <- $dad // database access descriptor ou $db_fd pour
database_filedescriptor
Je dois dédouaner DW de ces "erreurs", et les prendre éventuellement à

mon compte.
"assembleur" est le nom de ma base MySQL, et correspond au nom du site
(hébergement Free).
"Links" est le nom que j'ai donné à ce jeu d'enregistrements (cette
requête SELECT en fait). J'aurais pu éviter la majuscule (peut-être),
mais à ce moment-là, j'ignorais encore l'usage qu'il serait fait de ce
nom. Sinon, cette partie de la base traite de liens internet, d'où
"Links".
Le code avec plusieurs tables et plusieurs requêtes fait apparaître une
logique de nommage que j'ai personnellement trouvé cohérente, en
particulier dans l'optique de modifications manuelles du code.
C'est vrai également pour le die(), qui ne demande qu'à être
personalisé.

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette


Avatar
Jean-Francois Ortolo
John GALLET wrote:
Bonjour,


Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)




J'avoue que je ne comprend pas très bien.

Si la fonction mysql_query(...) rencontre une erreur, PHP va de toute
façon afficher l'erreur avant le message du die("..."), puisqu'il n'y a
pas d'arobase avant le mysql_query(...) ?

A moins que PHP soit configuré pour ne pas donner les erreurs
rencontrées... ????

En ce qui me concerne, je ne fais appel à des fonction du type
curl_error($ch), ou mysql_error($conn) , que dans de très rares cas, où
l'erreur n'est pas du tout évidente... Je n'utilise la fonction die("");
que sans paramètres, systématiquement.

Une habitude de mes deux Stages Unix/Oracle...

Bien à vous.

Jean Francois Ortolo

--
Mon site donne des Statistiques
et des Historiques Graphiques gratuits
sur les Courses de Chevaux du PMU.
http://www.ortolojf-courses.com


Avatar
John GALLET
Re,

Bonjour, et merci de votre réponse
Il vous en prie ;-)


Sans doute, mais la question portait sur l'existence d'une norme
complète du langage PHP, et précisément le fait de savoir si le
court-circuit dans les évaluations logiques était assuré.
Oui, en revanche la syntaxe "or" ne fonctionne qu'avec "or die()", on ne

peut pas par exemple écrire if($machin==1 or $bidule==4)

"assembleur" est le nom de ma base MySQL, et correspond au nom du site
(hébergement Free).
Et alors ? Le paramètre qu'on passe à mysql_query, c'est le retour de

mysql_connect(). Peu importe vers quoi il pointe.

"Links" est le nom que j'ai donné à ce jeu d'enregistrements (cette
requête SELECT en fait).
Là aussi: qu'importe ce que contient le buffer de résultats. Quand on

l'affectera rang par rang avec mysql_fetch_*(); il sera alors temps de le
nommer focntionnellement. De toutes façons, avant, on ne peu pas utiliser
les données.

Le code avec plusieurs tables et plusieurs requêtes fait apparaître une
logique de nommage que j'ai personnellement trouvé cohérente,


Vous faites comme vous le sentez, mais puisque vous débutez et que vous
cherchez ici des informations relevant de l'expérience, moi voilà juste ce
que j'en dis : comme on programme tous par pomme-c/pomme-v (copié collé
pour les non-initiés) au début vous allez vous prendre le mou à changer
le nom des variables au fur et à mesure, et puis un jour vous allez en
oublier ou en avoir marre, et au beau milieu de la page qui traitera des
zapothithèques d'Amérique du Sud, on aura une magnifique $Link qui
traînera alors qu'en plus elle prête à confusion parce que le 2eme
paramètre est justement un **lien** (de type socket ou pipe) vers le
SGBDR...

Si vous nommez les variables muettes de manière générique, ça vous
permettra de ne pas perdre votre temps sur des âneries.
Vous pouvez aussi écrire une fonction/une méthode de classe qui va faire
pour vous la requête un peu plus en "high level" et vous replir le
buffer de résultats en le passant par référence (pas de recopie inutile
svp merci).

Maintenant moi ce que j'en dis hein... C'est mon avis et je le partage.

C'est vrai également pour le die(), qui ne demande qu'à être
personalisé.


Surtout à être remplacé par une fonction propre qui loggue l'erreur dans
un coin (fichier, alerte mail...), éventuellement selon un niveau de trace
défini dans un fichier de configuration, et met un message d'excuses les
plus plates à l'internaute par un bon vieux exit(require('excuses.html'));
ou dans ce cas là un coup de header("Location:URL_ABSOLUE/excuses.html")
n'est pas nécessairement à proscrire (sauf qu'on ne voit plus l'URL cu
script qui a planté dans le navigateur et parfois ça fait perdre du
temps).

a++;
JG

Avatar
Pierre Maurette
John GALLET wrote:
Bonjour,


Je tombe souvent sur des expressions comme:
$Links = mysql_query($query_Links, $assembleur) or die(mysql_error());
(celle-ci est générée par Dreamweaver, mais on la retrouve dans
beaucoup d'exemples)




J'avoue que je ne comprend pas très bien.

Si la fonction mysql_query(...) rencontre une erreur, PHP va de toute
façon afficher l'erreur avant le message du die("..."), puisqu'il n'y a pas
d'arobase avant le mysql_query(...) ?

A moins que PHP soit configuré pour ne pas donner les erreurs
rencontrées... ????

En ce qui me concerne, je ne fais appel à des fonction du type
curl_error($ch), ou mysql_error($conn) , que dans de très rares cas, où
l'erreur n'est pas du tout évidente... Je n'utilise la fonction die("");
que sans paramètres, systématiquement.

Une habitude de mes deux Stages Unix/Oracle...
Moi non plus, en ce qui concerne le contenu de votre réponse, je ne

comprends pas très bien. Si je génère volontairement une erreur:
$Links = mysql_query($query_Links, &nom_faux) or die(mysql_error());
et
$Links = mysql_query($query_Links, &nom_faux); // or
die(mysql_error());
j'ai deux comportements différents. Mais je saisirais sans doute mieux
dans quelque temps.

Ce que je comprends clairement en revanche, c'est qu'il y a des
exemples (ou des mots) à éviter, voire qu'il vaut mieux se passer
d'exemple. Là, la question était :
<CIT>
Ce qui m'embête, c'est que je ne trouve nulle part de document normatif
me garantissant ce comportement. J'utilise:
http://fr.php.net/manual/fr/index.php
J'ai mal cherché ? Y a-t-il un autre document ?
</CIT>
l'objet du thread étant quant à lui "Documentation PHP".

Bien à vous.
Bien à vous également,




--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette



Avatar
John GALLET
Re,

Si la fonction mysql_query(...) rencontre une erreur, PHP va de toute
façon afficher l'erreur avant le message du die("..."), puisqu'il n'y a
pas d'arobase avant le mysql_query(...) ?
A moins que PHP soit configuré pour ne pas donner les erreurs
rencontrées... ????


Oui ça dépend de la configuration. Paramètre display_errors si ma mémoire
est bonne.

curl_error($ch), ou mysql_error($conn) , que dans de très rares cas, où
l'erreur n'est pas du tout évidente... Je n'utilise la fonction die("");
que sans paramètres, systématiquement.


C'est bien pour de la production. Mais si vosu arrivez à développer en ne
faisant jamais une erreur de syntaxe SQL alors que 99% des requêtes sont
construites dynamiquement, moi pas :-))

a++;
JG

Avatar
Olivier Miakinen

[...] la syntaxe "or" ne fonctionne qu'avec "or die()", on ne
peut pas par exemple écrire if($machin==1 or $bidule==4)


Pourquoi ça ?

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

1 2