2011-02-24 5 views
1

je suis une chaîne dans le format suivant:analyse syntaxique d'une chaîne en PHP

a:5:{s:21:"securimage_code_value";s:4:"4l7z";s:6:"userID";s:2:"25";s:8:"username";s:6:"lupoxy";s:10:"angemeldet";s:4:"true";s:9:"user_role";s:3:"111";} 

Je dois analyser les entrées dans les citations, et d'obtenir un tableau comme celui-ci:

$testarray[0]['key'] = "securimage_code_value"; 
$testarray[0]['value'] = "417z"; 

$testarray[1]['key'] = "userID"; 
$testarray[1]['value'] = "25"; 

et ainsi sur ...

Non je n'essaie pas de pirater des sessions;) J'utilise Uploadify avec Codeigniter, et je dois vérifier, qu'un utilisateur est autorisé à télécharger, en fonction de sa session. Je ne peux pas utiliser les fonctions de session Codeigniter, puisque Uploadify crée sa propre session pour le script PHP Upload. Donc, je passe le session_id en tant que Uploadify scriptdata, et ensuite je cherche l'ID de session dans la table ci_sessions, pour analyser moi-même les données d'utilisateur de session requises. Peut-être que quelqu'un connaît une meilleure solution pour cela aussi? ;)

+0

Cette chaîne me fait peur. –

Répondre

6
$params = unserialize($string); 

$testarray = array(); 
foreach($params as $key => $value) { 
    $testarray[]= compact('key', 'value'); 
} 

Voir la documentation unserialize.


MISE À JOUR. Vous pouvez également hériter/patch sess_read() de système/bibliothèques/session.php pour faire accepter la session personnalisée ID:

Avant:

function sess_read() { 
    ... 
    // Unserialize the session array 
    $session = $this->_unserialize($session); 
    ... 
} 

Après:

function sess_read($session_id = null) { 
    ... 
    // Unserialize the session array 
    $session = $this->_unserialize($session); 
    if ($session_id) $session['session_id'] = $session_id; 
    ... 
} 

Souvenez-vous également de définir sess_match_useragent = false dans le fichier de configuration de session, sinon la demande de Uploadify sera rejetée, car l'agent utilisateur de Flash est différent de l'agent utilisateur de broswer.

Et maintenant, vous pouvez charger une session par ID:

$this->session->sess_read($custom_session_id) 

Beaucoup moins d'un hack que l'analyse des données de DB manuellement.

+0

ça a marché ... merci beaucoup! Je ne suis pas encore expérimenté en PHP, et je me suis un peu perdu en faisant toutes ces choses de la session, votre message m'a beaucoup aidé !!! – sebastian

1

le code complet

<?php 

$s = 'a:5:{s:21:"securimage_code_value";s:4:"4l7z";s:6:"userID";s:2:"25";s:8:"username";s:6:"lupoxy";s:10:"angemeldet";s:4:"true";s:9:"user_role";s:3:"111";}'; 

$final = array(); 
foreach (unserialize($s) as $k => $v) { 
    $final[] = array('key' => $k, 'value' => $v); 
} 

var_dump($final);