Class php

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;
   	 }
}
?>




7 réponses

  1. 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
    1. 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 ?
    2. 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;
      
    3. 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é)
    4. oui j'ai regarder c'est ça y'a t'il un autre moyen que le file_get_contents
    5. 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é =)
  2. 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;
    1. utilise // ou /* à la place des #
    2. 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;
         	 }
      }
      ?>
      
      
    3. 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
    4. 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
    5. 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;
  3. pourquoi tu utilise # comme caractère de commentaire, tu en a marre des // ou du /* mon commentaire */ change on verra
    1. ou lui mettre un exemple bidon

      private $email = "mail@mail.com";
      private $pass = "motdepasse";
      1. 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