Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 08h22   #1
Invité de passage
 
Inscription : août 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 28
Points : 2
Points : 2
Par défaut die comme objet de retour?

Bonjour,

J'utilise Php en jonction avec FlashBuilder, principalement pour des requêtes SQL. J'ai trouvé beaucoup d'exemples de scripts utilisant die comme:
Code :
... or die ("Connexion impossible à la base de données");
Ce que je récupère avec Flash ce sont les résultats de mes requêtes, si elles ont fonctionné ou non. Peut-on récupérer et exploiter ces messages die? Quelle est leur lien avec l’échec d'une requête ou bien une valeur fournie par return?

Merci pour vos éclaircissements!
badoumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 10h21   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Cette forme est très mauvaise, il ne faut JAMAIS l'utiliser en production !
Die est un alias de exit qui provoque l'arrêt du script et affiche la chaine passée en paramètre.

C'est une très mauvaise pratique car elle ne permet pas de décider d'une action à effectuer en cas d'echec critique de l'application (comme par exemple renvoyer un code HTTP 500 ou rediriger vers une page quelconque).

Je ne sais pas comment tu fais communiquer Flash et PHP mais je pense qu'une bonne pratique serait de prévoir une strucure d'échande de données (XML ou JSON sont de bons candidats) Dans tous les cas, en cas d'erreur, il faut renvoyer un token exploitable de l'autre coté.

Exemple de ce que je fais quand je sers du JSON:
Code :
1
2
3
4
5
6
<?php if ($success) {
  echo json_encode($my_data);
}
else {
  echo json_encode(array('success' => false,  'error' => 'Une erreur inatendue est survenue', 'fichier' => 'index.php', 'ligne' => 42));
}
De cette façon, tu peux spécifier le contexte dans lequel tu as rencontré l'erreur et le message que reçoit l'appli tierce (dans mon cas c'est JS) est toujours formaté de la même manière (JSON). Je n'ai pas à comparer ce que j'ai obtenu avec des chaines de caractères.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 11h30   #3
Invité de passage
 
Inscription : août 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 28
Points : 2
Points : 2
ok Benjamin!

FlashBuilder 4.5 communique avec Php à travers un protocole binaire (AMF). Je n'ai pas à ma connaissance de méthode particulière pour renvoyer un contenu d'erreur custom comme tu le démontres. Quand ma requête ne fonctionne pas, Flash est directement notifié d'un message d'erreur et la raison de l'erreur est contenue dans cet évènement. Si ma requête réussie, alors je peux renvoyer à Flash un objet via return.

Je supprime donc tous les die et gère l'exception directement dans Flash en fonction de la nature de l'erreur renvoyée par défaut!

merci
badoumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 11h36   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Encore une fois je ne connais pas Flash mais je pense qu'il est capable de comprendre les status HTTP. Donc je serais toi je ferais quelque chose dans ce genre:
Code :
1
2
3
4
5
6
<?php
if (!mysql_open(...)) {
  header("HTTP/1.0 500 Internal Server Error");
  echo "Unable to connect to database...";
  exit(); // inutile de continuer mais on a servi les bons headers au moins et donc l'erreur est signalée
}
Sinon, tu peux aussi bien tout faire remonter en HTTP 200 (OK) en mettant un flag qui détermine si la requête est effectuée avec succès comme montré plus haut mais du coup il t'appartient de vérifier que la requête s'est bien déroulée, flash croira que c'est le cas à tous les coups.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h14   #5
Invité de passage
 
Inscription : août 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 28
Points : 2
Points : 2
Je ne peux pas malheureusement perdre le profit de mon protocole binaire (rapidité, sécurité) pour envoyer mon contenu perso en HTTP. Mixer les 2 serait une vraie usine à gaz et je perdrais les outils de supervision dédiés intégrés à FlashBuilder.

Mais reçu pour le principe!
badoumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h25   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Ok je m'étais figuré que Flash faisait des appels HTTP à PHP mais si c'est du binaire il va falloir que tu créées ton propre mécanisme d'erreurs
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 18h19   #7
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
AMF ne remplace pas HTTP, il s'appuie dessus.
Typiquement une requête AMF arrive sur le serveur web par un POST sur une URL derrière laquelle il y a du code capable de décoder l'AMF, comme par exemple la librairie amfphp et qui appelle à son tour le code php du programmeur.

La manière de gérer les erreurs dépend de cette librairie. Avec amfphp le code peut générer une exception (dérivée de la classe Exception), par exemple en faisant
Code :
 throw new Exception("mon message d'erreur");
l'erreur sera transmise proprement au Flash par les structures AMF dédiées à ça.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 19h26   #8
Invité de passage
 
Inscription : août 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 28
Points : 2
Points : 2
ok estofilo!

Librairie à consulter donc puisque j'utilise l’intégration Zend de FlashBuilder 4.5. Merci pour le tuyau.
badoumba est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h43.


 
 
 
 
Partenaires

Hébergement Web