convertir un array en utf8
dans un précédent article nous avons vu comment convertir un texte en utf8.
aujourd'hui on va voir comment faire la même chose mais avec un tableau, sans passer par un foreach, ni aucune autre boucle.
pour cela nous allons utiliser une seule fonction qui convertira ce qu'on lui donne en entrée en utf8.
pour l'instant elle va savoir gérer, les chaînes de caractères et les tableaux.
function toUTF8($param) { if(is_array($param)) { array_walk_recursive($param, create_function('&$item, $index', '$item = toUTF8($item);')); return $param; } mb_detect_order('UTF-8, ISO-8859-15, ISO-8859-1, Windows-1252'); //parfois si le dernier caractère de la chaine est accentué, la conversion peut foirer, //donc on force avec un caractère qui ne l'est pas. //(astuce trouvée sur les commentaires de la doc sur php.net) $param .= '_'; $currentCharset = mb_detect_encoding($param); if ($currentCharset != 'UTF-8') { $param = mb_convert_encoding($param, 'UTF-8', $currentCharset); } return substr($param, 0, strlen($param)-1); } |
et voilà, cette fonction convertira array ou string en utf8 sans brancher...
en bonus voici une fonction somme que j'ai trouvé dans les commentaire de la doc sur php.net (une sorte de coup de coeur pour moi :-D)
function sum(){ $s=0; foreach(func_get_args() as $a) $s+= is_numeric($a)?$a:0; return $s; }; print sum(1,2,3,4,5,6); // will return 21 print sum(3,2,1); // will return 6 print sum(false,array(),5,5); // will return 10 |
trop fort non ?
Installer libssh2, ssh2 pour php
Dans cet article nous allons voir comment installer l'extension ssh2 pour php5, cette extension permet l'utilisation de fonctionnalités SSH2 avec php (très utiles quand on veut faire du SFTP par exemple) pour plus d'informations cf. la documentation officielle sur php.net
Pour l'installation, ce n'est pas très compliqué, il suffit de suivre ces quelques étapes à la lettre et tout ira très bien ;-)
tout d'abord il faut s'assurer d'avoir les bons paquets d'installés, en voici une liste :
- php5-dev
- openssl
- libssl-dev
- gcc
- make
- etc. je suppose que si vous installez cette extension, c'est que vous avez déjà php, apache etc.
Toute la suite s'effectue en root
mais avant toute chose, n'oublions pas de faire un petit :
apt-get update apt-get upgrade |
en suite il faut créer un répertoire de travail :
cd ~ mkdir libssh2 cd libssh2 |
ensuite télécharger libssh2 :
wget http://ovh.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz |
puis l'extraire :
tar -xzvf libssh2-0.14.tar.gz |
aller dans le répertoire créé et installer libssh2 :
cd libssh2-0.14 ./configure && make all install |
maintenant que libssh2 est installée, passons a ssh2 :
on sort du repertoire de libssh2 et on télécharge ssh2 :
cd .. wget http://pecl.php.net/get/ssh2-0.10.tgz |
extraire l'archive téléchargée :
tar -xzvf ssh2-0.10.tgz |
aller dans le répertoire créé et installer ssh2 :
cd ssh2-0.10 phpize && ./configure --with-ssh2 && make |
maintenant que l'installation est terminée, on active l'extension, ici on va copier le fichier ssh2.so dans le répertoire des extension de php5 (il peut être différent du mien selon la distrib et l'installation) :
cp modules/ssh2.so /usr/lib/php5/20060613+lfs |
puis on ajoute l'extension en créant un fichier ssh2.ini dans le répertoire conf.d (comme pour toutes les autres extensions de php) on n'oublie pas de le faire pour apache mais aussi pour le mode CLI.
echo "extension=ssh2.so" > /etc/php5/cli/conf.d/ssh2.ini echo "extension=ssh2.so" > /etc/php5/apache2/conf.d/ssh2.ini /etc/init.d/apache2 restart |
Et voilà, notre extension est installée, a vous ssh2 et sftp avec php :)
Comment installer fileinfo sous debian
Les fonctions de l'extension FileInfo essaient de savoir le type de contenu et l’encodage d’un fichier en regardant certaines séquences d’octet "magique" à des positions spécifiques à l’intérieur du fichier. Bien qu'il ne s'agit pas d'une approche infaillible, la méthode heuristique effectue un très bon travail.
le problème avec cette extension c'est qu'elle est un peu dur à installer, en réalité pas si dur que ça, il suffit de prendre le temps de le faire. Il faut juste savoir qu'un simple apt-get install php5-fileinfo ne suffira pas, tout simplement parce qu'il n'existe pas de paquet debian pour cette extension (pas encore...).
Donc pour l'installer, voici la procédure :
Il faut d'abord installer PEAR :
apt-get install php-pear |
ensuite il faut installer php5-dev si ce n'est pas déjà fait, ceci installera phpize ce qui nous évitera l'erreur :
sh: phpize: command not found ERROR: `phpize' failed |
installation de php5-dev :
apt-get install php5-dev |
c'est presque bon mais pas encore :
maintenant il faut installer libmagic pour nous éviter une erreur lors de l'installation de fileinfo :
apt-get install libmagic-dev |
maintenant tout est bon, nous allons enfin pouvoir lancer l'installation de notre extension :
pecl install fileinfo |
Voilà, maintenant fileinfo est installée, nous allons pouvoir vérifier les types mime des fichiers avec des méthodes plus fiables ;-)
Normalement tout devrait fonctionner maintenant, mais il ce peut que l'extension ne soit pas activée comme il faut, dans ce cas il faudra créer un fichier fileinfo.ini dans /etc/php5/apache2/conf.d avec le contenu suivant :
extension=fileinfo.so |
reloader apache avec /etc/init.d/apache2 reload et le tour est joué :)
Forcer le téléchargement d’un fichier avec PHP
Dance cet article nous allons voir comment forcer le navigateur à télécharger un fichier (n'importe lequel) au lieux de l'ouvrir. Pour cela nous allons utiliser les Headers qu'envoie le serveur au navigateur (fonction header de php).
Voici le code a utiliser :
//date actuelle $date = gmdate('D, d M Y H:i:s'); header("Content-Type: text/xml"); //Ici par exemple c'est pour un fichier XML, a changer en fonction du type mime du fichier voulu. header('Content-Disposition: attachment; filename=NOM_FICHIER.xml'); header('Last-Modified: '. $date . ' GMT'); header('Expires: ' . $date); //header specifique IE :s parce que sinon il aime pas if(preg_match('/msie|(microsoft internet explorer)/i', $_SERVER['HTTP_USER_AGENT'])){ header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); }else{ header('Pragma: no-cache'); } echo $CONTENU_DE_NOTRE_FICHIER; // ou readfile('CHEMIN_FICHIER'); En fonction du type de fichier. |
Le type Mime doit être celui du fichier qu'on veut pouvoir télécharger (liste des types mime disponibles). En voici quelques exemples :
image GIF : image/gif fichier XML : text/xml fichier rtf : application/rtf fichier avi : video/msvideo |
Maintenant à vos fichiers dl.php ;-)
Extraire le contenu d’un zip directement sur son FTP chez free
Dans cette article nous allons voir comment procéder pour dézippé le contenu d'une archive directement sur son FTP free. Ceci peut être très intéressant si on a plusieurs (beaucoup) fichiers à envoyer sur le ftp, parfois ce genre d'upload peut s'avérer très difficile en fonction de la connexion, du logicile client FTP, mais aussi de l'humeur du serveur FTP de chez free. On peut se retrouver avec un certain nombre de fichiers qui ne seront pas envoyé (perdus en route ?!).
L'astuce consiste à mettre tous ses fichiers dans ZIP, uploader le zip sur le FTP et l'extraire sur place avec script PHP. Parce que envoyer UN SEUL fichier quelque soit sa taille, est toujours plus simple que d'en envoyer 36 000.
Pour commencer il faut savoir que Free ne propose aucune librairie PHP pour gérer les archives, donc nous utiliserons une classe de substitution, pour l'exemple, on va utiliser pclzip.
Maintenant, il faut créer un fichier ZIP (test.zip pour l'exemple) dans lequel on mettra tous nos fichiers à uploader sur le FTP.
Ensuite, il faut créer un fichier php (extract.php pour l'exemple) dans lequel on mettra le code suivant (à adapter selon votre cas) :
//Extrait de la documentation de la class. require_once('pclzip.lib.php'); $archive = new PclZip('test.zip'); //METTRE LE VRAI NOM DU ZIP ;) //Extrait dans le repertoire courant. if ($archive->extract() == 0) { die("Error : ".$archive->errorInfo(true)); } |
maintenant on se retrouve avec 3 fichiers :
- extract.php
- pclzip.lib.php
- test.zip
On peut maintenant envoyer nos 3 fichiers dans le répertoire sensé accueillir les fichiers finaux (contenus dans le zip) sur le FTP.
maintenant prendre son navigateur et aller à l'url http://adresse_du_site.free.fr/repertoire/extract.php
et le tour est joué :-)
N.B. Cette procédure et valable pour tout hébergement mutualisé (ou pas) ne proposant pas les extensions PHP Zlib ou équivalent.