Class php

raphael94350 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
Azraka Messages postés 252 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   274
 
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   Statut Membre Dernière intervention  
 
ou lui mettre un exemple bidon

private $email = "mail@mail.com";
private $pass = "motdepasse";
0
raphael94350 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai deja essayer cela ne change rien au probleme
0
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   23
 
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   Statut Membre Dernière intervention   23
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   23
 
utilise // ou /* à la place des #
0
raphael94350 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   13
 
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