-->

Maboite.org

Jan 15

# php syntax checker

find . -iname '*.php' | sed 's/^/php -l /' | bash | egrep -v '^No'

# auto add translate fonction in html page content (appox)

sed -i  's/>\([^<">]*\)</><?= _translate("\1")?></g' *

#get

find . -type f | egrep '.(php|html|php)$'
  | xargs cat
  | sed  -e"s/_translate/\n_translate/g"  
  |  grep '^_translate'
  | sed -e"s/\(.*\)\([\"'])\).*/\1/" 
  |  sed -e"s/_translate(.\(.*\)/\1/g"
  | sort -u  
  | sed -e "s/\(.*\)[\"']).*/\1/" >  string.to.translates.csv

#TODO, coupling with xgetPo & co.

Aug 20

Petit memo perso pour ajouter ou supprimer une ligne en bash avec sed.

Insertion de StringToInsert à la position n de file

sed -i  'ni StringToInsert' file

Exemple: Ajouter Hello World à la deuxième ligne de file :

sed -i  '2i Hello World' file

Effacer la ligne n

sed -i  'nd' file

Exemple: Effacer la première ligne du fichier file:

sed -i  '1d' file
\\ tags:

Nov 27

L’hébergement mutualisé… c’est assez frustrant quand on fait de l’hébergement de devoir intervenir sur une machine mutualisée avec pour seul levier de modification un .htaccess et un accès ftp ; mais bon, il faut bien faire avec parfois.

Alors voici un fichier .htaccess à glisser à la racine (document_root) de votre hébergement mutualisé qui permet de dissocier des noms de domaines qui pointent sur le même serveur et le même document_root.

# on active le moteur de règles de réécriture apache.
RewriteEngine on
# si le HTTP_HOST est www.site-un.com
RewriteCond %{HTTP_HOST} www\.site-un\.com

# et si le REQUEST_URI (le chemin) ne commence pas par /www-site-un-com
# obligatoire sinon la règle bouclerait sur elle même
RewriteCond %{REQUEST_URI} !^/www-site-un-com
# alors tous les requetes sont réécrites dans /www-site-un-com
RewriteRule ^(.*)$ /www-site-un-com/$1

RewriteCond %{HTTP_HOST} www\.site-deux\.com
RewriteCond %{REQUEST_URI} !^/www-site-deux-com
RewriteRule ^(.*)$ /www-site-deux-com/$1

RewriteCond %{HTTP_HOST} www\.site-trois\.com
RewriteCond %{REQUEST_URI} !^/www-site-trois-com
RewriteRule ^(.*)$ /www-site-trois-com/$1

Et voila,  3  domaines avec 3 document_root bien distincts. Mais bon la prochaine fois, opter pour un vrai hébergement mutualisé ou dédié mais pas forcement grand public.

\\ tags: , ,

Nov 27

Petite mésaventure qui arrive forcement quand on fait de l’hébergement de site (hosting) un disque d’un de mes serveurs est mort.  Pas de problèmes me direz vous, le serveur était en raid soft.

Mon prestataire change donc le disque mort mais … il me faut maintenant remplir ce nouveau disque avec les données du serveur pour que le mode mirorring du raid fonctionne.

cat /proc/mdstat
sfdisk -d /dev/sda | sfdisk /dev/sdb
mdadm --manage --add /dev/md0 /dev/sdb1
mdadm --manage --add /dev/md1/dev/sdb2

mdx sont les raids

sdbx sont les partitions

Pendant la copie (qui dure pas mal de temps en fonction de l’espace utilisé sur vos disques durs) vous pouvez regardez l’avancement de la copie avec la commande:
cat /proc/mdstat

\\ tags: ,

Oct 02

Petit mémo pour aller chercher l’entête d’une page (headers) et seulement l’entête.
Expression régulière pour le code HTTP de la page, puis détéction de la nouvelle url si code 301.

$url = "http://maboite.org/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'MyUserAgent');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$headers    = curl_exec($ch);
$CurlErr = curl_error($ch);
curl_close($ch);
if ($CurlErr){
  $status_code  = '404';
}
else{
  # get the status code before downloading the page content
  preg_match("|^HTTP/1\.[0-9]\s([1-5][01][0-9])\s.*$|isU", $headers, $temp);
  $status_code = $temp[1];
}

# if the page has moved, we get the new url
if($status_code == 301){
  preg_match('/\s?[lL]ocation\s?:\s?(.*)\s/',$headers, $temp);
  $url = $temp[1];
}

Pour info, curl est LA meilleur solution pour aller chercher une page sur un serveur distant. file_get_contents et autres fopen ne gèrent pas bien le timeout.

\\ tags: ,

Aug 12

Si dans vos interfaces d’administration (backoffice) vous installez des textarea WYSIWYG type Tinymce, Htmlarea, FCEditor vous avez déjà sans doute remarqué qu’il n’était pas toujours facile de garder des pages W3C compliants.
Allez expliquer à vos clients que la propriété ALT est obligatoire dans les balises IMG…

Voici donc une méthode automatisée, bien sympa, certe peu délicate mais tellement efficace : le module php-tidy (php5-tidy).
Attention ce module ne permet pas de réparer les pages qui contiennent des centaines d’erreurs, le code se doit d’être propre au minimum.

Voici un exemple simple:

<?php ob_start() ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
                       <!-- manque le head -->
<body>
<img src="toto.gif "/> <!-- manque le alt -->
<body>                 <!--erreur-->
</html>


<?php
$html = ob_get_clean();
$cfg = array(
'indent' => true,
'output-xhtml' => true,
'wrap' => 80,
'doctype' => 'strict',
'hide-comments' => true,
'accessibility-check' => 3,
'alt-text' => 'no desc for this image'
);
$tidy = new tidy;
$tidy->parseString($html, $cfg, 'utf8');
$tidy->cleanRepair();
?>

<?=$tidy?>

Et voici le resultat de la page :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <title></title>
  </head>
  <body>
    <img src="toto.gif" alt="no desc for this image" />
  </body>
</html>

Ce traitement est bien entendu gourmand et est à utiliser avant la mise en page de page/template/partial.

\\ tags: , , ,

Aug 07

Un serveur dédié c’est bien mais ça coûte cher.
La plupart du temps, je propose à mes clients de l’hébergement mutualisé avec accès FTP, en général tout le monde connait et sait utiliser un client FTP mais les mises à jour avec ce protocole sont fastidieuses.

Heureusement, certains clients utilisent parfois de bons outils : les outils de gestion de version (svn, cvs …).
Voici un petit script que j’utilise pour donner un accès ssh à un utilisateur sur un serveur mutualisé en toute sécurité.
Il pourra ainsi se logguer sur la machine, effectuer les quelques commandes que je lui ai mis à
disposition (cd, cat, chmod, chown, cp, grep, gunzip, gzip mkdir, more, mv, rm, tar, svn et vi)
Avec ces commandes il peut mettre à jour son site tout seul (site de production ou de préproduction).
Afin qu’il ne puisse absolument pas voir les fichiers des autres clients, son compte est “emprisonné” dans ce qu’on appelle un chroot. Un utilisateur chrooté est un utilisateur auquel on a redéfini la racine (/). En plaçant la racine dans le répertoire de l’utilisateur, il ne peut pas voir les fichiers qui se trouvent au dessus.

Voici une image (horrible) mais qui symbolise très bien le fonctionnement:

(image provenant de sun.com)

Dans le nouveau répertoire racine, on recrée l’arborescence (soit à la main, soit avec un bootstrap par exemple le package debootstrap).

Notez que la création d’un chroot avec debootstrap permet d’avoir une distrib complète en quelques secondes. Ce qui est intéressant également avec cette méthode c’est qu’on peut installer des distributions complètement différentes de celle installée initialement.
Encore mieux que le debootstrap, les serveurs virtuels permettent une meilleur gestion de la partie matérielle.

Revenons à notre simple chroot, voici le script inspiré d’autres trouvés sur le net à droite à gauche datant de quelques années mais qui ne fonctionnaient pas, notamment la gestion des bibliothèques dynamique et des commandes à autoriser.

#!/bin/bash
if [ "$#" != 1 ];
then
  echo "Usage : $0 "
  exit 255;
fi

# list of available commands
cmd="/bin/bash /bin/cat /bin/chmod /bin/chown /bin/cp /bin/grep \
        /bin/gunzip /bin/gzip /bin/ls /bin/mkdir /bin/more /bin/mv /bin/rm /bin/tar \
        /usr/bin/svn /usr/bin/vi"

USER=$1
GROUP=chroot
groupadd "${GROUP}" > /dev/null 2>&1
useradd -c "JailsUser" -d "/home/chroot/${USER}/" -g "${GROUP}" -s "/bin/chroot" "${USER}"

echo "#!/bin/bash\nexec -c /usr/sbin/chroot /home/chroot/\$USER /bin/bash" > /bin/chroot
chmod 555 /bin/chroot

echo "User Password"
passwd "${USER}" > /dev/null

mkdir -p /home/chroot/${USER}/bin/ /home/chroot/${USER}/lib/ /home/chroot/${USER}/dev/
cd /home/chroot/
chmod -R 700 ${USER}

for i in $cmd
  do
    cp -R $i /home/chroot/${USER}/bin/
    # TODO : improve with a simple sed
    sudo ldd $i  | grep '/' | cut -d ">" -f2 \
      | cut -d "(" -f1  \
      | sed -e "s/[\t ]//g" \
      | sed -e "s/^/sudo cp /" \
      | sed -e "s/$/ \/home\/chroot\/${USER}\/lib\//" | bash
  done;
# for using /dev/null
mknod /home/chroot/${USER}/dev/null c 1 3 -m 666
chown -R "${USER}:${GROUP}" /home/chroot/${USER}
chmod u+s /usr/sbin/chroot
echo "User \"${USER}\" created and in jails !"
\\ tags: , , ,

Jul 23

salon linux 2009
Le salon Linux 2009, le 10ème, ouvrira ses portes les 31 mars, 1er et 2 avril 2009 à Paris (Hall 2.2, porte de Versailles).

Quelques chiffres pour ce salon linux 2009 :

  • 3 jours
  • 10 000 visiteurs
  • 220 exposants
  • 550 auditeurs

Vous pouvez déposer vos demandes d’interventions sur  le site www.confsolutionslinuxparis.com jusqu’au 3 octobre 2008, voici les sujets de ce salon 2009 :

  • Sécurité
  • Gestion des individus et des identités
  • SGBD
  • Industrialiser les développements JavaEE
  • SOA et Logiciels Libres
  • Informatique industrielle
  • Data Center et Logiciels libres
  • Virtualisation et Clusters
  • Gouvernance des projets Open Source en entreprise
  • Développeurs
  • Poste de travail
  • Outils de gestion de contenu
  • Plates formes décisionnelles en open source
  • Gestion d’entreprise en Open Source
  • Open Source vs Saas : quels choix pour les outils de gestion d’entreprise
  • Collaboration 2.0 : les outils du web et réseaux sociaux adaptés à l’entreprise
  • Web 2.0
  • Votre plateforme internet et intranet avec PHP
  • Zope et Plone
  • Administration électronique libre
  • Culture et numérique
  • Logiciels libres et interopérabilité
  • L’Europe et la commission européenne
  • Session CNDP

Pas mal de chose dans ce programme, donc rendez vous au salon linux 2009 !!

\\ tags: , , ,

Jun 18

Vous aviez toujours rêvé de savoir ce que le nom de votre dernière distribution Ubuntu veut dire en français ?

Voici les traductions :

Version Nom Nom en français
Ubuntu 4.10 The Warty Warthog le phacochère verruqueux
Ubuntu 6.06 LTS The Dapper Drake le canard pimpant
Ubuntu 6.10 The Edgy Eft la salamandre énervée
Ubuntu 7.04 The Feisty Fawn le faon courageux
Ubuntu 7.10 The Gutsy Gibbon le gibbon fougueux
Ubuntu 8.04 LTS The Hardy Heron le héron robuste
Ubuntu 8.10 The Intrepid Ibbex le bouquetin intrépide

Par contre, c’est à se demander ce qu’ils prennent chez ubuntu …

On peut jouer aussi ?

  • The Jagged Jaguar
  • The K….. Koala

Source : ubuntu-fr.org

Apr 22

Voici un petit script de surveillance des logs apache dont je me sert pour vérifier de ne pas me faire leacher :

#!/bin/bash

HIT_MAX=100;
LOG_PATH="/var/log/apache2";

for i in `sed -e  's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\s.*$/\1/' \
  $LOG_PATH/*.log | grep -v '[::alpha::]'  | sort -u`
  do
    HIT=`grep  $i $LOG_PATH/*.log | wc -l`
    if [ $HIT -gt $HIT_MAX ]; then
      echo "$HIT times  ; $i" ;
    fi
done;

Pour résumer, ce script envoi simplement une liste d’ip trouvé >HIT_MAX dans LOG_PATH/*.log comme suit:

153 times ; 80.154.37.173
150 times ; 81.251.61.124

\\ tags: ,

Création entreprise d'électricité (en étant électricien ou pas)

Créer son entreprise n'est pas facile, je sais de quoi je parle. Alors crée son entreprise en électricité en étant électricien doit être, je suppose, le même combat. Des tonnes de formulaires à remplir, des semaines d'attente de papier en tout genre. Si vous voulez créer une entreprise en électricité, voici déjà comment devenir électricien.

Antigraffiti et hydrogommage

La société HTP Antigraffiti est basée à Paris dans la 18ème arrondissement. Cette société de nettoyage de graffiti(s) et de rénovation propose de l'hydrogommage et bien d'autres techniques pour mettre fin aux graffitiis. Cette société intervient dans tout la France, voici son site internet si vous chercher une entreprise de nettoyage de graffiti

Moteur de recherche RSS

Moteur de rechercher RSS

Vous cherchez un plombier pour une fuite ou des travaux de plomberie ?

Voici un nouveau site, un plombier.com rempli d'informations sur les plombier qui vous permet d'en savoir un peu plus sur les devis de plombier ou sur les différents types de factures.

Vous y trouverez aussi plein d'informtion sur les formations pour devenir plombier.

Vous cherchez un éléctricien ?

Encore un nouveau site, un electricien.com rempli d'informations sur les électricien, des infos pour devenir électricien.