8798 sujets

Développement web côté serveur, CMS

Bonjour,

Donc j'ai ma chaine qui et comme ceci :

paradise=bandwidth=8321.5 / 90000&creator=admin&default=paradise.power-hosting.biz&ip=127.0.0.1&list=domaine.power-hosting.biz<br>domaine1.power-hosting.biz<br>domaine2.power-hosting.biz<br>&pointer_domaine.power-hosting.biz=domaine4-city.eu|&pointer_domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|&pointer_domaine8.power-hosting.biz=domaine9.fr.nf|&quota=10.1 / 4000&suspended=No&type=user&vdomains=3 / 5

Pour informations tout se qui et en gras c'est se que je veut récupérer j'en ai récupérer une bonne partie mais la partie ou sa commence a marquer $pointer_ je n'y arrive plus a récupérer je pensait faire $pointer ou $pointer_ mais cela ne fonctionne pas donc si vous avez une idées sa serai cool.

Et donc pour récupérer les mots important qui fonctionne très bien j'ai fait comme ceci


$sock->query('/CMD_API_ALL_USER_USAGE');
$users = explode("\n", $sock->fetch_body());
							
foreach ($users as $user)
{
	$username       = strtok($user, '=');
	$data           = substr(strstr($user, '='), 1);

        parse_str(urldecode($data));

echo $username;
echo $creator;
echo $bandwidth;
echo $quota;
echo $vdomains;
echo $suspended;
echo $ip;
echo $list;
}


Merci pour votre aide
Modifié par staff (25 Jun 2009 - 11:16)
Re Smiley smile ,

La manière dont tu veux récupérer tes pointers n'est toujours pas limpide, mais déjà un petit peu plus claire. Alors voyons (je reprends le code proposé dans le premier sujet, légèrement modifié et augmenté) :
[#gray]#nettoyage de ta chaine (cf. premier sujet)[/#]
$lines = preg_replace(
    array('/\n/', '/([^\s=]+)=bandwidth/', '/^\s+/'),
    array('', "\n$1=bandwidth", ''),
    $taChaine
);

[#gray]# séparation de ta chaine en sous-chaine[/#]
$lines = explode("\n", $lines);

[#gray]# extraction des valeurs de chaque sous-chaines[/#]
foreach ($lines as $str) {
    preg_match('/^
        ([^=]*)
        =bandwidth=(.*)\s*
        &creator=(.*)\s*
        &default=(.*)\s*
        &ip=(.*)\s*
        &list=(.*)\s*(?:<br>)?
        (&pointer_(?:.+))?
        &quota=(.*)\s*
        &suspended=(.*)\s*
        &type=(.*)\s*
        &vdomains=(.*)\s*
    $/xU', $str, $matches);
    echo "Résultats de l'extraction regex : " . print_r($matches, true);
	
    $list = explode('<br>', $matches[6]);
    echo "valeurs de list : " . print_r($list, true) . "\n";
	
    $pointers = explode('&pointer_', $matches[7]);
    array_shift($pointers);  [#gray]# à cause du premier &pointer[/#]
    echo "valeurs de pointer : " . print_r($pointers, true) . "\n";
	
    echo '****************************' . "\n\n";;
  
}


Ce qui donne, avec ta chaine d'aujourd'hui :
Résultats de l'extraction regex : Array
(
    [0] => paradise=bandwidth=8321.5 / 90000&creator=admin&default=paradise.power-hosting.biz&ip=127.0.0.1&list=domaine.power-hosting.biz<br>domaine1.power-hosting.biz<br>domaine2.power-hosting.biz<br>&pointer_domaine.power-hosting.biz=domaine4-city.eu|&pointer_domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|&pointer_domaine8.power-hosting.biz=domaine9.fr.nf|&quota=10.1 / 4000&suspended=No&type=user&vdomains=3 / 5
    [1] => paradise
    [2] => 8321.5 / 90000
    [3] => admin
    [4] => paradise.power-hosting.biz
    [5] => 127.0.0.1
    [6] => domaine.power-hosting.biz<br>domaine1.power-hosting.biz<br>domaine2.power-hosting.biz
    [7] => &pointer_domaine.power-hosting.biz=domaine4-city.eu|&pointer_domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|&pointer_domaine8.power-hosting.biz=domaine9.fr.nf|
    [8] => 10.1 / 4000
    [9] => No
    [10] => user
    [11] => 3 / 5
)
valeurs de list : Array
(
    [0] => domaine.power-hosting.biz
    [1] => domaine1.power-hosting.biz
    [2] => domaine2.power-hosting.biz
)

valeurs de pointer : Array
(
    [0] => domaine.power-hosting.biz=domaine4-city.eu|
    [1] => domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|
    [2] => domaine8.power-hosting.biz=domaine9.fr.nf|
)

****************************

Modifié par marcv (25 Jun 2009 - 13:01)
Laurie-Anne a écrit :
Ce sujet serait-il la suite de celui-ci ?

Je ne vois pas de "$pointer" dans ta chaine mais des "&pointer".


C'est la suite sauf que j'arrive a tout récupérer sauf les pointers.
marcv a écrit :
Re Smiley smile ,

La manière dont tu veux récupérer tes pointers n'est toujours pas limpide, mais déjà un petit peu plus claire. Alors voyons (je reprends le code proposé dans le premier sujet, légèrement modifié et augmenté) :
[#gray]#nettoyage de ta chaine (cf. premier sujet)[/#]
$lines = preg_replace(
    array('/\n/', '/([^\s=]+)=bandwidth/', '/^\s+/'),
    array('', "\n$1=bandwidth", ''),
    $taChaine
);

[#gray]# séparation de ta chaine en sous-chaine[/#]
$lines = explode("\n", $lines);

[#gray]# extraction des valeurs de chaque sous-chaines[/#]
foreach ($lines as $str) {
    preg_match('/^
        ([^=]*)
        =bandwidth=(.*)\s*
        &creator=(.*)\s*
        &default=(.*)\s*
        &ip=(.*)\s*
        &list=(.*)\s*(?:<br>)?
        (&pointer_(?:.+))?
        &quota=(.*)\s*
        &suspended=(.*)\s*
        &type=(.*)\s*
        &vdomains=(.*)\s*
    $/xU', $str, $matches);
    echo "Résultats de l'extraction regex : " . print_r($matches, true);
	
    $list = explode('<br>', $matches[6]);
    echo "valeurs de list : " . print_r($list, true) . "\n";
	
    $pointers = explode('&pointer_', $matches[7]);
    array_shift($pointers);  [#gray]# à cause du premier &pointer[/#]
    echo "valeurs de pointer : " . print_r($pointers, true) . "\n";
	
    echo '****************************' . "\n\n";;
  
}


Ce qui donne, avec ta chaine d'aujourd'hui :
Résultats de l'extraction regex : Array
(
    [0] => paradise=bandwidth=8321.5 / 90000&creator=admin&default=paradise.power-hosting.biz&ip=127.0.0.1&list=domaine.power-hosting.biz<br>domaine1.power-hosting.biz<br>domaine2.power-hosting.biz<br>&pointer_domaine.power-hosting.biz=domaine4-city.eu|&pointer_domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|&pointer_domaine8.power-hosting.biz=domaine9.fr.nf|&quota=10.1 / 4000&suspended=No&type=user&vdomains=3 / 5
    [1] => paradise
    [2] => 8321.5 / 90000
    [3] => admin
    [4] => paradise.power-hosting.biz
    [5] => 127.0.0.1
    [6] => domaine.power-hosting.biz<br>domaine1.power-hosting.biz<br>domaine2.power-hosting.biz
    [7] => &pointer_domaine.power-hosting.biz=domaine4-city.eu|&pointer_domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|&pointer_domaine8.power-hosting.biz=domaine9.fr.nf|
    [8] => 10.1 / 4000
    [9] => No
    [10] => user
    [11] => 3 / 5
)
valeurs de list : Array
(
    [0] => domaine.power-hosting.biz
    [1] => domaine1.power-hosting.biz
    [2] => domaine2.power-hosting.biz
)

valeurs de pointer : Array
(
    [0] => domaine.power-hosting.biz=domaine4-city.eu|
    [1] => domaine5.power-hosting.biz=domaine6-city.fr.nf|domaine7-city.fr.nf|
    [2] => domaine8.power-hosting.biz=domaine9.fr.nf|
)

****************************


Bonjour,
Je viens de mettre comme tu ma dit et j'ai donc bien vérifier mais j'ai des erreurs


$sock->set_method('GET');

$sock->query('/CMD_API_ALL_USER_USAGE');
$lines = explode ("\n", $sock->fetch_body());
					
$lines = preg_replace(
array('/\n/', '/([^\s=]+)=bandwidth/', '/^\s+/'),
array('', "\n$1=bandwidth", ''),
$lines
);
					
$lines = explode("\n", $lines);
					
foreach ($lines as $str) {

preg_match('/^
([^=]*)
=bandwidth=(.*)\s*
&creator=(.*)\s*
&default=(.*)\s*
&ip=(.*)\s*
&list=(.*)\s*(?:<br>)?
(&pointer_(?:.+))?
&quota=(.*)\s*
&suspended=(.*)\s*
&type=(.*)\s*
&vdomains=(.*)\s*
$/xU', $str, $matches);

echo "Résultats de l'extraction regex : " . print_r($matches, true);
					
$list = explode('<br>', $matches[6]);

echo "valeurs de list : " . print_r($list, true) . "\n";

$pointers = explode('&pointer_', $matches[7]);

array_shift($pointers);  # à cause du premier &pointer

echo "valeurs de pointer : " . print_r($pointers, true) . "\n";

echo '****************************' . "\n\n";;

}



Notice: Array to string conversion
Résultats de l'extraction regex : Array ( )

Notice: Undefined offset: 6
valeurs de list : Array ( [0] => )

Notice: Undefined offset: 7
valeurs de pointer : Array ( ) ****************************

Modifié par staff (27 Jun 2009 - 11:56)
C'est probablement qu'une nouvelle fois les chaines que tu donnes ne sont pas identiques aux chaines avec lesquelles tu travailles.

C'est pas compliqué, depuis le temps que dure ce sujet, je fais tous mes tests sur le même fichier PHP. Je te le mets en ligne pour que tu puisses voir par toi-même :
- ici avec la première chaine que tu as donnée
- ici après qu'on se soit rendu compte que la chaine n'était pas pareille avant et après le passage par $sock->fetch_body()
- ici avec la chaine que tu donnes dans ce nouveau sujet
(Note: regarde la source, pas le rendu HTML)

Tu verras qu'à chaque fois, toutes tes sous-chaines sont extraites sans problème.

Conclusion : si tu veux (1) obtenir une réponse définitive, et (2) nous faciliter le travail Smiley cligne , il est impératif que tu établisses rigoureusement quelles parties de la chaine peuvent être présentes, absentes, ou différentes (et le cas échéant, en quoi) d'une chaine à l'autre.
Modifié par marcv (27 Jun 2009 - 17:42)