Class php

Fermé
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013 - 9 avril 2013 à 18:30
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 - 10 avril 2013 à 16:50
Bonjour,

j'ai une erreur dans mon code mais je ne l'as vois absolument pas il me marque :

syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in <b>/mnt/116/sdb/8/c/r.chemla/Geoip.class.php</b> on line <b>9


<?php
/*
 * Geoip.class.php
 * Classe d'utilisation de l'API geolocalise-ip.com
 * Compatible PHP 5+
**/
class Geoip {
    # Credentials
    private $email;
    private $pass;
 
    # URL de l'API
    public $endpoint;
 
    # Constructeur
    public function __construct()
    {
        $this->email = 'r.chemla@free.fr';
        $this->pass  = 'cnam2013';
        $this->endpoint = "https://www.geolocalise-ip.com/api.php";
    }
 
    # Set credential (private car confidentiel)
    public function setEmail($email = null){ $this->email = $email; }
    public function setPass($pass = null)  { $this->pass = $pass; }
 
    # Query : retourne les infos de géolosalisation pour l'IP passée en paramètre
    public function query($ip)
    	{
	        # Check param
	        if( empty($ip) )
	        {
	            trigger_error("L'ip est vide.", E_USER_WARNING);
	            return false;
	        }
	 
	        # Appel de l'API
	        $url = $this->endpoint.'?'.http_build_query(array(
	            'email' => $this->email,
	            'pass'  => $this->pass,
	            'ip'    => $ip
	       												 ));
	        $return['apiRequest'] = $url;
	        $result = file_get_contents($url);
	        if( $result == false || empty($result) )
	        {
	            $return['erreur'] = 1;
	            $return['erreur_msg'] = "API indisponible ($url)";
	            return $return;
	        }
	        $result = utf8_encode($result);
	        $return['apiResponse'] = $result;
	 
	        # Decodage de la réponse
	        # 1. Isolation du message d'erreur à la fin
	        if( preg_match('#^(.*?&erreur=.*?)<(.*)$#i', $result, $matches) )
	        {
	            $result = $matches[1];
	            $return['erreur_msg'] = '<'.trim($matches[2]);
	        }
	 
	        # 2. Parse
	        parse_str($result, $geo);
	 
	        # Retour
	        $return = array_merge($return, $geo);
	        return $return;
   	 }
}
?>




A voir également:

7 réponses

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
9 avril 2013 à 18:58
bonjour,

je dis peut être une bêtise mais je crois me souvenir qu'il faut attribuer une valeur aux variables de class à leur déclaration en php.

private $email = null; par exemple
0
LuKro Messages postés 4 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 9 avril 2013
9 avril 2013 à 19:00
ou lui mettre un exemple bidon

private $email = "mail@mail.com";
private $pass = "motdepasse";
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
9 avril 2013 à 19:22
j'ai deja essayer cela ne change rien au probleme
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
9 avril 2013 à 19:47
copie la ligne avant et après la ligne 9.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
9 avril 2013 à 19:49
pourquoi tu utilise # comme caractère de commentaire, tu en a marre des // ou du /* mon commentaire */ change on verra
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
9 avril 2013 à 19:49
tu veut avant la 9 et apres la 9 c'est ça ?

si oui je te met la 8 la 9 et la 10

# Credentials
private $email;
private $pass;
0
ajp55 Messages postés 426 Date d'inscription dimanche 31 juillet 2011 Statut Membre Dernière intervention 17 février 2015 23
9 avril 2013 à 19:56
utilise // ou /* à la place des #
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 11:51
j'avais déjà fait l'essai le code modifié donne ça et toujours la même erreur en local ça marche mais en ligne toujours la même erreur

syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/116/sdb/8/c/r.chemla/Geoip.class.php on line 5


<?php

class Geoip {
	
    private $email = "mail@mail.com";
	private $pass = "motdepasse";
 
    public $endpoint;
 
    
    public function __construct()
    {
        $this->email = 'r.chemla@free.fr';
        $this->pass  = 'cnam2013';
        $this->endpoint = "https://www.geolocalise-ip.com/api.php";
    }
 
    
    public function setEmail($email = null){ $this->email = $email; }
    public function setPass($pass = null)  { $this->pass = $pass; }
 
    
    public function query($ip)
    	{
	        
	        if( empty($ip) )
	        {
	            trigger_error("L'ip est vide.", E_USER_WARNING);
	            return false;
	        }
	 
	        
	        $url = $this->endpoint.'?'.http_build_query(array(
	            'email' => $this->email,
	            'pass'  => $this->pass,
	            'ip'    => $ip
	       												 ));
	        $return['apiRequest'] = $url;
	        $result = file_get_contents($url);
	        if( $result == false || empty($result) )
	        {
	            $return['erreur'] = 1;
	            $return['erreur_msg'] = "API indisponible ($url)";
	            return $return;
	        }
	        $result = utf8_encode($result);
	        $return['apiResponse'] = $result;
	 
	 
	        if( preg_match('#^(.*?&erreur=.*?)<(.*)$#i', $result, $matches) )
	        {
	            $result = $matches[1];
	            $return['erreur_msg'] = '<'.trim($matches[2]);
	        }
	 
	       
	        parse_str($result, $geo);
	 
	       
	        $return = array_merge($return, $geo);
	        return $return;
   	 }
}
?>

0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 11:55
même quand je supprime tout dans la page et que je laisse juste la class vide ça me marque une erreur c'est incomprehensible
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 12:27
j'ai modifier le de la classe rien n'y change pour info le fichier s'appel Geoip.class.php la fonction je l'ai renommer en class ip ! mais pourquoi en local cela marche t'il est pas sur mon ftp
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 avril 2013 à 13:49
Quel sont les version de php de tes différents environnements ?

Ce que tu as fait marche très bien en php5, mais en php4 il n'y a pas de notion de visibilité, une variable de classe se déclare avec le mot-clé var.
Ce qui donnerait donc :

var $email = "mail@mail.com";
var $pass = "motdepasse";
 
var $endpoint;
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 15:14
oui c'était bien ça mais en fait il fallait juste mettre un .htaccess a la racine de mon ftp free .

Mais bon j'ai toujours un problème avec le http_build_query qui ne passe pas apparemment alors qu'en local tout fonctionne.

Je ne comprend vraiment pas
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 avril 2013 à 15:25
Oui, tu as activé php5 =)

Le top serait quand même de faire un echo phpversion(); histoire de voir précisément sous quelle version tu es.

Peux-tu nous dire ce qui ne va pas avec http_build_query ? As-tu un message d'erreur ?
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 15:35
alors la version c'est 5.1.3RC4-dev et le message d'erreur c'est un message personnalisé
mon code c'est

 # Appel de l'API
        $url = $this->endpoint.'?'.http_build_query(array(
            'email' => $this->email,
            'pass'  => $this->pass,
            'ip'    => $ip
        ));
        $return['apiRequest'] = $url;
        $result = file_get_contents($url);
        if( $result == false || empty($result) ){
            $return['erreur'] = 1;
            $return['erreur_msg'] = "API indisponible ($url)";
            return $return;
        }
        $result = utf8_encode($result);
        $return['apiResponse'] = $result;
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 avril 2013 à 16:12
Je me demande si le problème ne viendrait pas du file_get_contents : il est possible que free ne t'autorise pas à appeler une ressource situé sur un serveur différent (pour des raisons de sécurité)
0
raphael94350 Messages postés 10 Date d'inscription mardi 9 avril 2013 Statut Membre Dernière intervention 10 avril 2013
10 avril 2013 à 16:39
oui j'ai regarder c'est ça y'a t'il un autre moyen que le file_get_contents
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 avril 2013 à 16:50
Oui, il faudrait utiliser cURL.
A voir si c'est disponible chez free.
Je n'ai pas trop le temps de tout expliquer mais tu devrais trouver pas mal de tutos et ce n'est pas très compliqué =)
0