Archives de
Author: Dayo

Développeur depuis 2008, j’écris pour me souvenir et explorer de nouveau horizons.
Création d’une miniature avec HTML5

Création d’une miniature avec HTML5

En trainant sur le net j’ai trouvé un petit tuto qui explique comment faire la miniature d’une image en HTML5 sans uploader le fichier. L’image est afficher a coté du champ input.

La première étape et de créer un formulaire avec un champ input de type file et une balise output pour afficher la miniature..

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>HTML5 File Reader</title>
  </head>
  <body>
    <input type="file" id="files" />
    <output id="out"></output>
    <script>
    </script>
    </body>
</html>

Viens ensuite la partie javascript. Avant toute chose, Il faut vérifié que le navigateur supporte l’API FileReader.

if (window.FileReader) {
  function handleFileSelect(evt) {
} else {
  alert('Ce navigateur ne supporte pas FileReader');
}

Une fois cela fait un event listener est ajouté afin de mettre à jour la miniature lors de la sélection d’une nouvelle image.

document.getElementById('files').addEventListener('change', handleFileSelect, false);

Pour finir nous construisons la miniature grâce a l’image que nous récupérons par l’API FileReader.

function handleFileSelect(evt) {
  var files = evt.target.files;
  var f = files[0];
  var reader = new FileReader();

  reader.onload = (function(theFile) {
    return function(e) {
      document.getElementById('out').innerHTML = ['<img src="', e.target.result,'" title="', theFile.name, '" width="50"/>'].join('');
    };
  })(f);

  reader.readAsDataURL(f);
}

Le fichier final est le suivant :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>HTML5 File Reader</title>
  </head>
  <body>
    <input type="file" id="files" />
    <output id="out"></output>
    <script>
      if (window.FileReader) {
        function handleFileSelect(evt) {
          var files = evt.target.files;
          var f = files[0];
          var reader = new FileReader();

          reader.onload = (function(theFile) {
            return function(e) {
              document.getElementById('out').innerHTML = ['<img src="', e.target.result,'" title="', theFile.name, '" width="50"/>'].join('');
            };
          })(f);

          reader.readAsDataURL(f);
        }
      } else {
        alert('Ce navigateur ne supporte pas FileReader');
      }
      document.getElementById('files').addEventListener('change', handleFileSelect, false);
    </script>
  </body>
</html>

 

Pour le voir en action c’est par ici.

Connexion MySQL avec le mamp de macports

Connexion MySQL avec le mamp de macports

Pour faire suite à l’installation de mamp avec macports, j’ai voulu installer symfony2. Lors de la configuration de la base de données, je n’ai pas rencontré de problèmes particuliers. Lorsque j’ai voulu créer la base de données avec symfony j’ai eu l’erreur suivante :

Could not create database for connection named `symfony`
SQLSTATE[HY000] [2002] No such file or directory

Après quelques recherches sur le net j’ai enfin trouvé la réponse. Lors de la configuration de la base de données, la valeur de l’hôte MySQL est localhost. Or la version de MySQL installé avec macports est configurée pour avoir le fichier mysqld.sock dans le dossier suivant:

/opt/local/var/run/mysql5/

Quand a PHP, il s’attend a le trouvé dans

/tmp

Forcement, cela pose problème. Pour le résoudre un lien suffit :

ln /opt/local/var/run/mysql5/mysqld.sock /tmp/mysql.sock

Et voilà la connexion MySQL en utilisant localhost fonctionne.

Un mamp avec macports 2

Un mamp avec macports 2

Voici la suite du premier post sur l’installation d’un mamp avec macports. Il nous faut configurer mysql, php et apache.

Avant toute chose je conseil de rebooter le mac.

Commençons par mysql: lancez la commande suivante afin de définir un nouveau mot de passe root pour mysql :

/opt/local/lib/mysql5/bin/mysqladmin -u root password 'changezmoi'

Passons à PHP: je ne modifie que date.timezone pour y mettre la valeur « Europe/Paris ». Le fichier php.ini se trouve dan s/opt/local/etc/php54.

Viens enfin le tour d’apache. Le fichier httpd.conf est situé dans /opt/local/apache2/conf

Dans un premier temps cherchez le bloque « IfModule dir_module » et changez sa valeur par : « DirectoryIndex index.html index.php ».

Dans le bloque « IfModule mime_module » ajoutez : « AddType application/x-httpd-php .php »

Pour finir nous allons configurer apache pour gérer les hôtes virtuel dynamique.

Changez la directive DocumentRoot pour le répertoire de votre choix, dans mon cas /Users/aurel/Sites

Dans le deuxième block Directory apres le DocumentRoot modifier la valeur par le même que celle du DocumentRoot

Enfin à la fin ajouter le code suivant :

NameVirtualHost *:80
UseCanonicalName Off
<VirtualHost *:80>
      VirtualDocumentRoot /Users/aurel/Sites/%-2+
</VirtualHost>

Cela aura pour effet de chercher dans le repertorie /Users/aurel/Sites si un dossier sans la deniere extension existe. Par exemple, si le nom de domaine www.blog.dayo.fr.dev est redirigé vers la machie et qu’un dossier www.blog.dayo.fr existe dans le repertoire /Users/aurel/Sites alors ce contenu sera afficher.

Relancez apache avec la commande suivante :

sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper restart

Et voila il ne reste plus qu’a modifier votre fichier hosts et créer les répertoire associé dans votre DocumentRoot

Un mamp avec macports 1

Un mamp avec macports 1

Suite l’installation de mamp et n’étant pas satisfait de son utilisation, je me suis décider a regarder du coté des autres solutions. Celle qui ma le plus plu est l’installation à travers le gestionnaire de paquet macports.

Concernant l’installation de macports rien de bien compliqué. Un fichier dmg a installer, vérifier que xcode est installé et dans les préférences xcode installer les « Command Line Tools ».

Créé un fichier mamp.sh et copiez le contenu suivant:

#launch with sudo
# install all softwares
port install mysql5-server
port install php54-mbstring
port install php54-intl
port install php54-apc
port install php54-posix
port install php54-xdebug
port install php54-pdo
port install php54-iconv
port install php54-mysql
port install php54-sqlite
port install php54-gd
port install php54-openssl
port install apache2
port install php54-apache2handler
port select php php54

# create init file
cp /opt/local/etc/php54/php.ini-development /opt/local/etc/php54/php.ini

# add php module to apache
cd /opt/local/apache2/modules
/opt/local/apache2/bin/apxs -a -e -n php5 mod_php54.so

# load mysql and apache at startup
port load apache2
port load mysql5-server

# start mysql
sudo -u _mysql mysql_install_db5
/opt/local/lib/mysql5/bin/mysqld_safe &

 

Une fois sauvegarder, utiliser la commande suivante : sudo mamp.sh

Ce script installe apache2, mysql et php54.

Dans le prochaine post j’expliquerais comment configurer le tous.

xdebug et MAMP

xdebug et MAMP

Suite à l’installation de MAMP, j’ai voulu installer xdebug.

Les premiers tutoriels que j’ai trouvés parlaient de précompilation avec différents outils. Rien de bien simple. Ce soir en m’y repenchant je suis tombé sur ce tuto assez simple.

Depuis 2009 certaines choses ont changé, je vais donc réexpliquer la démarche.

La première chose a faire et lancer MAMP et localiser ou ce situe le fichier php.ini ainsi que le dossier des extensions. Pour cela, allez sur http://127.0.0.1/MAMP/help.php?language=English et cherchez « php.ini » et « extension_dir » notez bien ces deux valeurs.

Le deuxième est de télécharger la librairie « PHP Remote Debugging » depuis le site du projet Komodo. La version Mac OS X la plus récente fera l’affaire. Une fois téléchargé, décompresser le fichier et allez dans le répertoire de votre version de PHP. Copiez alors le fichier « xdebug.so » dans le dossier des extensions PHP.

Éditez ensuite le fichier php.ini pour décommenter la ligne en dessous de « [xdebug] ». Le chemin sur la ligne doit être le bon ( le même que celui dans lequel vous avez copié le fichier xdebug.so.

Il suffit alors de redémarrer MAMP pour que xdebug soit pris en compte.