Zend: regler le timeout des connexions MySQL avec pdo_mysql

11Il peut parfois être utile d’augmenter ou de baisser la durée de timeout des connexions MySQL. Par exemple, il peut être intéressant de l’augmenter si certaines de vos requêtes MySQL n’aboutissent pas et si vous obtenez l’erreur « MySQL server went away ».

Ce réglage se fait en passant l’option PDO::ATTR_TIMEOUT (constante de la classe PDO qui vaut 2) au driver pdo_mysql. Cette option marchera aussi pour certains autres pilotes mais sa signification peut différer (avec sqlite par exemple).

Avec Zend, il faut définir cette option lors de la création de l’adapter soit en utilisant Zend_Db::factory soit en créant une nouvelle instance de Zend_Db_Adapter_Pdo_Mysql.

Exemple avec un timeout de 10 secondes en utilisant Zend_Db::factory:

      $driverOptions = array(
          PDO::ATTR_TIMEOUT => 10
      );

      $params = array(
        'host' => '127.0.0.1',
        'port' => '3306',
        'username' => 'user',
        'password' => 'password',
        'dbname' => 'my_db',
        'driver_options' => $driverOptions
      );
      $adapter = Zend_Db::factory('pdo_mysql', $params);

sources/docs:
PDO::setAttribute
documentation Zend_Db_Adapter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

File_get_contents sur une url protegée par htaccess

Voici une petite manip PHP pour faire un file_get_contents d’une URL protégée par un mot de passe:

$login = "votre login";
$password = "password";
$opts = array('http' =>
  array(
    'method'  => 'GET',//GET | POST
    'header'  => "Content-Type: text/html\r\n".
    "Authorization: Basic ".base64_encode($login.':'.$password)."\r\n",
    'timeout' => 300
  )
);
                      
$context  = stream_context_create($opts);
$url = "http://monsite.com/mapageprotegeeparmdp.php";
$result = file_get_contents($url, false, $context, -1, 40000);

Voila!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Afficher les dossiers et fichiers cachés sous Eclipse

Par défaut, Eclipse n’affiche pas les fichiers cachés. Il est pourtant nécessaire parfois de pouvoir les voir dans ses projets comme pas exemple les fichiers « .htaccess » .

Pour cela, il faut changer les filtres d’Eclipse via la petite flèche située à la droite de la vue « PHP Explorer » puis cliquer sur « Filters »:

Dans la nouvelle fenêtre qui s’ouvre il faut simplement décocher la checkbox .* resources:

Et c’est tout. J’espère que ce post permettra à quelques développeurs de gagner un peu de temps!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment utiliser MySql dans un programme C

Pour utiliser une base de données MySql dans un programme écrit en C il faut utiliser le header « mysql.h ».

A priori ce n’est pas bien difficile, il y a juste à rajouter la ligne #include <mysql.h> au début de votre programme. Cela devient un peu plus difficile par contre quand votre compilateur vous dit que la librairie mysql.h n’est pas présente dans votre système…

Pour résoudre ce problème, il faut installer le paquet libmysqlclientXX-dev:

sudo apt-get install libmysqlclient16-dev

Une fois ce paquet installé (et que mysql.h est bien appelé dans votre programme) il suffit de compiler avec la commande suivante:

gcc programme.c `mysql_config --cflags --libs`

Voici maintenant comment exécuter des requêtes dans votre programme:

//premièrement, on initialise la connexion
char *server = "localhost";
char *user = "dbuser";
char *password = "dbpsw";
char *database = "dbname";
MYSQL *conn;

conn = mysql_init(NULL);
mysql_real_connect(conn, server,user, password, database, 0, NULL, 0);

//exemple de SELECT
MYSQL_RES *res;
MYSQL_ROW row;
mysql_query(conn, "SELECT * FROM example_table");
res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL){
//on accède aux valeurs avec row[0], row[1] ...
}

//exemple avec INSERT
char* column1 = "test";
char* column2 = 123;
char temp[512];
sprintf(temp, "INSERT INTO example_table (column1,column2) VALUES ('%s','%i');",column1,column2);
mysql_query(conn, temp);

//On oubli pas de fermer la connexion:
mysql_close(conn); 

Bonne chance!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment créer un écouteur d’évènements pour JW Player

Ajouter un eventListener sur le lecteur JW Player permet de récupérer un tas d’infos sur le lecteur.
Par exemple il est possible d’ajouter un écouteur pour récupérer l’état de la vidéo (lecture, en pause, etc), la position de lecture, les changements de volume …

Voici comment déclarer un listener:

//pour ajouter un écouteur sur le temps et l'état de la vidéo
player.addModelListener("TIME", "timeListener");
player.addModelListener("STATE","stateListener");
//pour ajouter un écouteur sur les changements de volume on utilise une méthode différente
player.addControllerListener("VOLUME", "volumeListener");

Il reste maintenant à traiter ces informations, exemple avec le stateListener:

function stateListener(obj) {
  //affiche une alerte lorsque l'état de la vidéo est "COMPLETED"
  if(obj.newstate == "COMPLETED")
  {
    alert('COMPLETED');
  }
}

Pour info, les autres états sont: BUFFERING PLAYING PAUSED IDLE et vous pouvez aussi récupérer l’ancien état en affichant obj.oldstate .

Pour le listener « timeListener » utilisez obj.position pour récupérer la position. Exemple:

function timeListener(obj) {
  alert(obj.position);
}

Enfin pour récupérer le volume:

function volumeListener(obj)
{
  alert(obj.percentage);
}

Bon courage et à bientôt!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

file_get_contents : gestion des erreurs

Je sais pas si vous avez déjà essayé d’entourer la fonction file_get_contents($url) avec un try catch pour gérer les erreurs si l’url est incorrecte.
Moi j’ai essayé et ca ne marche pas..
La petite astuce pour empêcher d’afficher les erreurs/warnings éventuels c’est de rajouter un arobase devant la fonction:

<?php
  $content = @file_get_contents($url);
  //on test ensuite la valeur de $content
  if ($content== false) { 
   //Gestion des erreurs
  }
?>

De cette manière, les erreurs/warnings ne sont pas affichés à l’écran de l’utilisateur.

Une réflexion au sujet de « file_get_contents : gestion des erreurs »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *