2010-07-29 6 views
4

Les ID de ressource PHP sont-ils uniques par instance PHP? Est-ce que la conversion de toutes sortes de ressources à la chaîne retourne "Resource id #X" (où X est un nombre décimal)? Y at-il une fonction qui retourne l'ID de ressource (je connais environ get_resource_type() pour obtenir le type de ressource, mais je n'ai trouvé rien comme get_resouce_id()), ou est-ce que cela doit être fait comme ceci?Les ID de ressource PHP sont-ils uniques?

function get_resource_id($resource) 
{ 
    return is_resource($resouce) 
      ? substr((string) $resource, 13 /* strlen("Resource id #") */) 
      : NULL; 
} 
+1

En ce qui concerne la structure de "Resource id # 1" - Le [manuel PHP] (http://www.php.net/manual/en/language.types.string .php # language.types.string.casting) indique: "Ne comptez pas sur cette structure, elle est sujette à changement.", donc votre méthode pour obtenir l'ID ne doit pas être recommandée. – MrWhite

+0

@ w3d Malheureusement, je ne connais pas de meilleure (autre) méthode pour obtenir l'ID. Le faites vous? –

+0

Désolé non, pas vraiment! Autre que peut être la validation que vous obtenez réellement une chaîne numérique retournée et si non, alors essayez une autre méthode pour obtenir l'ID par exemple. explode() sur le '#' et obtient le 2ème élément (s'il existe) etc. La chaîne retournée dépend-elle uniquement de (la version de) PHP? Ou est-il possible que la ressource elle-même puisse influencer ce qui se passe pendant le casting ?! TBH, si c'est juste PHP alors vous serez probablement assez sûr que j'aurais pensé ... pour l'instant !? Si vous êtes juste après un identifiant unique, alors vous pourriez simplement utiliser la chaîne entière, ou _hash_ il peut être? – MrWhite

Répondre

4

Jakub, oui PHP vous donnera toujours un identifiant unique pour chaque ressource actuellement utilisée. Quand une ressource est unset() ou free'd telle que mysql_free_result. Ensuite, cet ID est disponible à nouveau et PHP pourrait réutiliser ces ressources à nouveau. Méfiez-vous si vous «cachez» ou conservez des ID de ressource dans la session et les réutilisez car PHP peut libérer une ressource, puis recréer une nouvelle ressource avec cet ID et votre ancien ID de ressource peut pointer vers quelque chose de nouveau.

Alors là vous l'avez, les ressources sont uniques, mais pas pour toujours!

Espérons que cela aide à démystifier les types de ressources en PHP pour vous.

+0

N'est-il pas possible que, dans certains environnements, 2 utilisateurs différents puissent obtenir l'ID de ressource _same_ lors de la connexion à la même ressource (partagée)? Ou est-ce impossible? – MrWhite

6

Facile comme coutures

intval($resource) 
Questions connexes