Bloc-note 'PHP'
Le 19 décembre 2005, à 0:3 par Ulhume...

Quelques astuces en vrac sur PHP.

Purge des sessions dépassées

Si vous cherchez où PHP sous linux gère cette fonctionnalité (session dépassées après 30 minutes), il fallait chercher dans CRON.. En /etc/crond.d/php.

Authentification via LDAP

Le code suivant permet d'effectuer une authentification sur une serveur LDAP via une page PHP.

<?php
  // Adresse du serveur AD et base de la recherche
  $ldapServer = "x.y.z.q"
  $ldapBase = "DC=DOMAINE,DC=fr"

  // mail et mot de passe de l'utilisateur capable de se connecter sur AD et d'en lire le conten
  $ldapUsername= ""
  $ldapPassword= "USER_AD_PASSWORD"

  // Coordonnees a identifier
  $userLogin="USER"
  $userPassword="LOGIN"

  // Connexion au serveur LDAP
  $ldap = ldap_connect($ldapServer)
  ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3)

  if ($ldap)
  {
  print "Connection a AD/LDAP, OK"
  // Ouverture d'un connexion
  $bind = @ldap_bind($ldap, $ldapUsername, $ldapPassword)
  if (!$bind)
  {
    print "Erreur, impossible de binder l'utilisateur AD/LDAP"
    exit
  }
  print "Bind de l'utilisateur AD/LDAP, OK"

  // Recherche du login a identifier
  $result = @ldap_search($ldap, $ldapBase, "sAMAccountName=".$userLogin)
  if (ldap_count_entries($ldap, $result)==0)
  {
    print "Erreur, aucun utilisateur de ce nom n'a ete trouve"
    exit
  }

  if (ldap_count_entries($ldap, $result)>1)
  {
    print "Erreur, trop d'utilisateur de ce nom trouves"
    exit
  }

  // Authentification si un user existe sur AD
  if (ldap_count_entries($ldap, $result) == 1)
  {
    print "Utilisateur trouve"
    $info = ldap_get_entries($ldap, $result)
    $userDn = $info[0]["dn"]
    $auth = @ldap_bind($ldap, $userDn, $ldapPassword)
  }

  if ($auth)
    print "Utilisateur authentifie : '" . $username . "' (" . $userDn . ")."
  else
    print "Impossible d'authentifier : '" . $username . "'."
  }
  else
  print "Impossible de se connecter AD/LDAP"

  @ldap_close($ldap)
?>

Soucis de mémoire lors de l'exécution d'une fonction GD

En réalité c'est normal, PHP limite l'utilisation de la mémoire à 8MO par scripte. GD typiquement est gourmand et l'erreur suivante se produit alors :

Fatal error: Allowed memory size of 5242880 bytes exhausted (tried to allocate 22425 bytes) in ./sources/functions.php on line 2562

Methode n°1

La solution est simplement d'augmenter l'espace alouer au scripte dans php.ini:

memory_limit = 30M   Maximum amount of memory a script may consume (8MB)

Methode n°2

Changer dynamiquement cette valeur:

//valeur initiale
echo "get_cfg_var(memory_limit) = ".@get_cfg_var('memory_limit')."";
echo "ini_get(memory_limit) = ".@ini_get('memory_limit')."";

//modification
@ini_set("memory_limit",'10M');
// on tente d'allouer 10 M

//modification prise en compte ?
echo "get_cfg_var(memory_limit) = ".@get_cfg_var('memory_limit')."";
echo "ini_get(memory_limit) = ".@ini_get('memory_limit')."";
// on verifie si l'allocation de 10 M a pu etre possible sur le serveur

Suppression des accents

$output = strtr(utf8_decode($output),
  "\xA1\xAA\xBA\xBF".
  "\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF".
  "\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD".
  "\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF".
  "\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF",
  "!ao?AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy");
$output = utf8_encode(strtr($output, array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe",
  "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae",
  "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th")));

Référence au fichier courrant

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...