Supprimer des doublons dans une table MySQL
Pratique et rapide pour supprimer des doublons dans une table MySQL :
ALTER IGNORE TABLE table ADD UNIQUE INDEX(champA,champB);
Pratique et rapide pour supprimer des doublons dans une table MySQL :
ALTER IGNORE TABLE table ADD UNIQUE INDEX(champA,champB);
Lors de l’utilisation de Prestashop, de sa configuration, son adaptation, il est souvent nécessaire de supprimer les commandes test effectuées avant la mise en ligne, il est nécessaire de vider manuellement des tables, voici les requêtes SQL :
TRUNCATE TABLE `ps_customer`;TRUNCATE TABLE `ps_address`;TRUNCATE TABLE `ps_orders`;TRUNCATE TABLE `ps_order_detail`;TRUNCATE TABLE `ps_order_discount`;TRUNCATE TABLE `ps_order_history`;TRUNCATE TABLE `ps_message`;TRUNCATE TABLE `ps_cart`;TRUNCATE TABLE `ps_cart_product`;TRUNCATE TABLE `ps_cart_discount`;TRUNCATE TABLE `ps_order_return`;TRUNCATE TABLE `ps_order_return_detail`;
Les disques dur ethernet Western Digital My Book World Edition (version led blanche) ont une version de linux AMR ambarqué. Il est donc possible d’ajouter des petites applications et d’y mettre des crons, donc d’automatiser par exemple une sauvegarde du contenu chaque nuit sur un serveur spécifique…
1ere étape, installer un gestionnaire de package :
Quand vous êtes connecté en ssh (login : admin, mot de passe : Welc0me), voici les commandes à lancer pour installer le gestionnaire :
feed=http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable
ipk_name=$(wget -qO- $feed/Packages | awk ‘/^Filename: ipkg-opt/ {print $2}’)
wget $feed/$ipk_name
tar -xOvzf $ipk_name ./data.tar.gz | tar -C / -xzvf –
mkdir -p /opt/etc/ipkg
echo « src armel http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable » > /opt/etc/ipkg/armel-feed.conf
wget http://mybookworld.wikidot.com/local–files/optware/sort_dirname.tar.gz
tar xvfz sort_dirname.tar.gz -C /
Installez nano :
/opt/bin/ipkg install nano
Installez lftp :
/opt/bin/ipkg install lftp
Pour lancer une application installée, par exemple nano :
/opt/bin/nano
Créer un script shell pour lancer la backup :
Via nano : /opt/bin/nano /root/backup.sh
/opt/bin/lftp ftp://identifiant:mot_de_passe@site_de_connexion -e « mirror -e -R /emplacement_local /emplacement_distant ; quit »
Ctrl+O pour sauver
Un p’tit coup de chmod +x pour le passer en executable :
chmod +x /root/backup.sh
Ensuite on ajoute la tache dans le cron et le tour est joué !
Mise en place du cron
Créez le fichier /etc/init.d/S99crond
#!/bin/sh
# Script to enable crond (Dillon’s cron) on My Book whitelight (WWLXN-WDH1NC)
#
# Since /var/spool links to /tmp the default crontabs location in
# /var/spool/cron/crontabs will get blown out on reboot. Instead we’ll
# map the crontabs to /etc/crontabs
#
# Put this script in /etc/init.d/S99crond and chmod 755check_crontabs() {
if test ! -d /etc/crontabs ; then
echo « Creating /etc/crontabs »
mkdir /etc/crontabs
echo « # crond control file for root (system) » > /etc/crontabs/root
echo « # Restart crond after editing (/etc/init.d/S99crond restart) » >> /etc/crontabs/root
echo « # m h dom mon dow command » >> /etc/crontabs/root
echo « # Uncomment next line and restart crond to test » >> /etc/crontabs/root
echo « #* * * * * touch /tmp/crontab.test » >> /etc/crontabs/root
ln -sf /etc/crontabs/root /etc/crontab
fi
}is_running() {
PID=`ps aux | grep « crond -c \/etc\/crontabs » | grep -v grep | sed ‘s/^ *//’ | cut -f 1 -d ‘ ‘`
if test -z $PID ; then
return 0
else
return 1
fi
}start() {
check_crontabs
echo -n « Starting crond: «
is_running
if test $? -eq 0 ; then
/usr/sbin/crond -c /etc/crontabs
touch /var/lock/crond
echo « OK »
else
echo « crond is already running »
fi
}stop() {
echo -n « Stopping crond: «
is_running
if test $? -eq 1 ; then
killall crond
rm -f /var/lock/crond
echo « OK »
else
echo « crond is not running »
fi
}restart() {
stop
start
}case « $1 » in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo $ »Usage: $0 {start|stop|restart} »
exit 1
esacexit $?
Ensuite effecuté un chmod 755 sur ce script
Lancez le.
Vous pouvez maintenant éditer votre crontab via le fichier /etc/crontab
Il arrive parfois qu’avec Tortoise lors d’un commit (souvent sur des fichiers binaires) on rencontre l’erreur :
Erreur en incrémentant les révisions après la propagation / Error bumping revisions post-commit
Et même en faisant un clean, rien toujours le même soucis ! Il est alors nécessaire de supprimer le dossier et de faire un nouvel export !
Le problème est existant uniquement sur des partages Samba, il faut modifier la configuration Samba vérifiant la présence de :
browsable = yes
create mask = 0644
force create mode = 0600
security mask = 0555
force security mode = 0600
Le piratage de site web se fait le plus souvent via des injections SQL.
Il existe plusieurs solutions pour se protéger contre ce genre d’attaques.
La première est simple suffit de bien coder ses requêtes et de protéger les variables qu’on intègre.
$requete="SELECT champ
FROM table
WHERE id='".mysql_real_escape_string($variable)."'";
RewriteEngine On
RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
RewriteCond %{QUERY_STRING} ^(.*)(SELECT|INSERT|DELETE|CHAR\(|UPDATE|REPLACE|LIMIT)(.*)$
RewriteRule (.*) - [F]
Dans les calculs de date on a souvent besoin de transformer les secondes en heures… voici une petite fonction simple permettant de le faire :
function secondetoheure ($temps)
{
$heures = floor ($temps / 3600);
$minutes = floor(($temps - ($heures * 3600)) / 60);
if ($minutes < 10)
{
$minutes = "0".$minutes;
}
$secondes = $temps - ($heures * 3600) - ($minutes * 60);
if ($secondes < 10)
{
$secondes = "0".$secondes;
}
if ($heures < 10)
{
$heures = "0".$heures;
}
return $heures.':'.$minutes.':'.$secondes;
}
L’utilisation de la fonction Php de soundex est bien pratique, par exemple pour faire un moteur de recherche phonétique… malheureusement elle se base sur une phonétique anglophone… donc au final… c’est un peu bloquant pour un développement d’un progiciel ou d’un outil qui cause français… voici donc une fonction permettant d’avoir une version soundex francophone :
function soundex_fr($sIn)
{
static $convVIn, $convVOut, $convGuIn, $convGuOut, $accents;
if (!isset($convGuIn)) {
$accents = array(
'É' => 'E', 'È' => 'E',
'Ë' => 'E', 'Ê' => 'E',
'Á' => 'A', 'À' => 'A',
'Ä' => 'A', 'Â' => 'A',
'Å' => 'A', 'Ã' => 'A',
'Ï' => 'I', 'Î' => 'I',
'Ì' => 'I', 'Í' => 'I',
'Ô' => 'O', 'Ö' => 'O',
'Ò' => 'O', 'Ó' => 'O',
'Õ' => 'O', 'Ø' => 'O',
'Ú' => 'U', 'Ù' => 'U',
'Û' => 'U', 'Ü' => 'U',
'Ç' => 'C', 'Ñ' => 'N',
'Ç' => 'S', '¿' => 'E',
'é' => 'e', 'è' => 'e',
'ë' => 'e', 'ê' => 'e',
'á' => 'a', 'à' => 'a',
'ä' => 'a', 'â' => 'a',
'å' => 'a', 'ã' => 'a',
'ï' => 'i', 'î' => 'i',
'ì' => 'i', 'í' => 'i',
'ô' => 'o', 'ö' => 'o',
'ò' => 'o', 'ó' => 'o',
'õ' => 'o', 'ø' => 'o',
'ú' => 'u', 'ù' => 'u',
'û' => 'u', 'ü' => 'u',
'ç' => 'c', 'ñ' => 'n');
$convGuIn = array(
'GUI', 'GUE', 'GA',
'GO', 'GU', 'SCI',
'SCE', 'SC', 'CA',
'CO', 'CU', 'QU',
'Q', 'CC', 'CK',
'G', 'ST', 'PH');
$convGuOut = array(
'KI', 'KE', 'KA',
'KO', 'K', 'SI',
'SE', 'SK', 'KA',
'KO','KU', 'K',
'K', 'K', 'K',
'J', 'T', 'F');
$convVIn = array(
'/E?(AU)/', '/([EA])?[UI]([NM])([^EAIOUY]|$)/',
'/[AE]O?[NM]([^AEIOUY]|$)/',
'/[EA][IY]([NM]?[^NM]|$)/',
'/(^|[^OEUIA])(OEU|OE|EU)([^OEUIA]|$)/',
'/OI/', '/(ILLE?|I)/',
'/O(U|W)/', '/O[NM]($|[^EAOUIY])/',
'/(SC|S|C)H/', '/([^AEIOUY1])[^AEIOUYLKTPNR]([UAO])([^AEIOUY])/',
'/([^AEIOUY]|^)([AUO])[^AEIOUYLKTP]([^AEIOUY1])/', '/^KN/',
'/^PF/', '/C([^AEIOUY]|$)/', '/E(Z|R)$/',
'/C/', '/Z$/', '/(?<!^)Z+/', '/H/', '/W/');
$convVOut = array(
'O', '1\3', 'A\1',
'E\1', '\1E\3', 'O',
'Y', 'U', 'O\1', '9',-
'\1\2\3', '\1\2\3', 'N',
'F', 'K\1', 'E',
'S', 'SE', 'S', '', 'V');
}
// Si il n'y a pas de mot, on sort immédiatement
if ( $sIn === '' ) return ' ';
// On supprime les accents-
$sIn = strtr( $sIn, $accents);
// On met tout en minuscule-
$sIn = strtoupper( $sIn );
// On supprime tout ce qui n'est pas une lettre
$sIn = preg_replace( '`[^A-Z]`', '', $sIn );
// Si la chaîne ne fait qu'un seul caractère, on sort avec.
if ( strlen( $sIn ) === 1 ) return $sIn . ' ';
// on remplace les consonnances primaires
$sIn = str_replace( $convGuIn, $convGuOut, $sIn );
// on supprime les lettres répétitives
$sIn = preg_replace( '`(.)\1`', '$1', $sIn );
// on réinterprète les voyelles
$sIn = preg_replace( $convVIn, $convVOut, $sIn);
// on supprime les terminaisons T, D, S, X (et le L qui précède si existe)
$sIn = preg_replace( '`L?[TDX]?S?$`', '', $sIn );
// on supprime les E, A et Y qui ne sont pas en première position
$sIn = preg_replace( '`(?!^)Y([^AEOU]|$)`', '\1', $sIn);
$sIn = preg_replace( '`(?!^)[EA]`', '', $sIn);
return substr( $sIn . ' ', 0, 4);
}
Il arrive souvent lors de l’édition d’un contenu via un CMS que les images insérées comporte le chemin complet du site et lors de la mise en ligne cela pose problème… une édition à la main étant surtout fastidieuse !
Voici une requête pour effectuer un remplacement :
UPDATE table SET champ = REPLACE(champ ,'recherche','remplace');
Pour capturer un site voici une utilisation bien pratique de wget :
wget -r -k -np -T 10 -t 1 http://www.monsite.com
Problème d’espace disque sous linux ?
Pour trouver rapidement les fichiers qui prennent de la place :
du -hms /dossier/* | sort -nr | head
Bien pratique !