Login

deluge webui+

incompatiblité entre deluge 1.3.10-3+deb8u1 (pour jessy) et le plugin webui+

Suite aà la mise a jour de whizy vers jessy impossible de rajouter des torents automatiquement.

erreu:
root@rpi~# [ERROR   ] 22:10:14 json_api:275 Invalid JSON request content-type: text/plain;charset=UTF-8
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/deluge/ui/web/json_api.py", line 297, in render
    d = self._on_json_request(request)
  File "/usr/lib/python2.7/dist-packages/deluge/ui/web/json_api.py", line 257, in _on_json_request
    raise JSONException(message)
JSONException: Invalid JSON request content-type: text/plain;charset=UTF-8
[ERROR   ] 22:10:14 json_api:275 Invalid JSON request content-type: text/plain
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/deluge/ui/web/json_api.py", line 297, in render
    d = self._on_json_request(request)
  File "/usr/lib/python2.7/dist-packages/deluge/ui/web/json_api.py", line 257, in _on_json_request
    raise JSONException(message)
JSONException: Invalid JSON request content-type: text/plain

Solution 1:
nano /usr/lib/python2.7/dist-packages/deluge/ui/web/json_api.py
et mettre en comentaire les lignes 255 256 257

#        if request.getHeader('content-type') != 'application/json':
#            message = 'Invalid JSON request content-type: %s' % request.getHeader('content-type')
#            raise JSONException(message)

Solution 2:
le pluggin à été modifié lais il est pas encore signé.  Attendre quil soit dans les dépots officiels

copy récursive de tous les fichiers avi

Comment faire une copie récursive de fichiers vers un même répertoire:
1- création du repertoire destination newdir
2- copy récursive de tous les fichiers *.avi vers le repertoire newdir

mkdir newdir
find . -type f -name '*.avi' -exec cp {} newdir \;

Activer ou désactiver phpmyadmin

J'aime bien utiliser phpmyadmin c'est un outil fantastique pour tripoter les BD. Pour des raisons de sécurités je voudrais désactiver phpmyadmin lorsque je ne l'utilise pas, et le réactiver lorsque j'en ai besoin.

J'aimerais bien une commande pour activer phpmyadmin du style
/etc/init.d/phpmyadmin start
malheureusement cela n'existe pas, donc voila une solution. (sur debian)

phpmyadmin s’exécute dans le répertoire /usr/share/phpmyadmin, il suffit donc d'interdire l’accès à ce répertoire pour le désactiver.
chmod 000 /usr/share/phpmyadmin

puis pour le réactiver
chmod 755 /usr/share/phpmyadmin

 Voila un script phpmyadmin.sh à placer dans /etc/init.d/

#!/bin/bash

if [ "$1" = "start" ];then
  chmod
755 /usr/share/phpmyadmin
else if [ "$1" = "stop" ];then
  chmod
000 /usr/share/phpmyadmin
else
  echo "usage: phpmyadmin start | stop"
  fi
fi

exit
0

Mise à jour moodle

cd /var/www/site/web/moodle/moodle

sudo -u www-data /usr/bin/php admin/cli/maintenance.php --enable

sudo -u www-data /usr/bin/php admin/cli/upgrade.php

sudo -u www-data /usr/bin/php admin/cli/maintenance.php --disable

rsync

rsync source/ destination/

/usr/bin/sshpass -p motdepasse /usr/bin/rsync -chavzP --stats  userCette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. :/var/www/domaine.fr/web/forum /root/test/

OPtions -> man francais http://www.delafond.org/traducmanfr/man/man1/rsync.1.html
c:   --checksum -> utilise la somme de contrôle, pas la date ni la taille
h:   --help -> affiche l'écran d'aide
a:   --archive -> archive mode; equals -rlptgoD (no -H,-A,-X)
v:    --verbose ->  plus loquace
z:   --compress -> transfert en compressant les données
P:   équivalent à --partial --progress

--partial -> conserve les fichiers partiellement transférés
--progress -> montre l'avancement pendant le transfert

 

SMF

Modifier le footer
editer le fichier index.template.php et rechercher la section <div id="footer_section">
http://www.inmotionhosting.com/support/edu/smf/administration/footer-change

 

Récupérer tous les fichiers et les sous-répertoires avec FTP en ligne de commande

Pour récupérer tous les fichiers se trouvant sur un serveur A au quel on a accès uniquement en FTP et les recopier sur un serveur B en conservant l'arborescence.
Se connecter en ssh sur le serveur B, puis  tapez la commande suivante:

wget -m ftp://USER:motdepasse@serveurA/www/repertoire

-m active la récursivité

ou une facon de faire

 

Il y a environ un mois, j’évoquais l’utilisation de wget en vue de récupérer récursivement une arborescence ftp.

Bien que cette solution se soit avérée pratique, elle présentait un grave inconvénient : la fiabilité de wget qui présentait un comportement hératique.

Je me suis alors rabattu sur la commande lftp qui, outre la faculté de récupérer un ftp en récursif, possède un mode mirroring fiable correspondant plus à mes attentes.

Voici la commande :

lftp -c "open ftp://login:password@adresse_ftp; cd /repertoire/destination; mirror -c -e --allow-suid --no-umask --parallel=4 --verbose=3 --use-cache ./ "

et son détail :

-c : correspond à la commande qui va être passée à lftp, à savoir, l’ouverture du flux ftp

cd /repertoire/destination : se place dans le répertoire qui va accepter les fichiers

mirror -c -e --allow-suid --no-umask --parallel=4 --verbose=3 --use-cache ./ \  : options passées à lftp pour le rapatriement des fichiers :

-c : continue si un mirroring est possible

-e : efface en local les fichiers qui n’apparaissent pas en distant

--allow-suid : check des autorisations (utilisateurs et groupes distants)

--no-umask : N’applique pas de umask sur les fichiers

--parallel=4 : Downloade 4 fichiers en parallèle (paramétrable)

--verbose=3 : niveau d’informations

--use-cache : évident

./ : racine du repertoire distant

\  : dépose dans le répertoire courant (fixé par cd)

 


http://www.fourre-tout.com/ftp-recursif-suite/

Migrer moodle vers un second seveur

Vous avez accès en ligne de commande sur les deux serveurs ? Dans ce cas, utiliser la méthode ci-dessous.
avec l'arbrescence suivate:
web/moodle                            //dossier de tous les fichiers moodle
web/moodle/moodle             //dossier d'installation de moodle
web/moodle/moodledat       //dossier data

Se connecter en ligne de commande sur le serveur du Moodle existant.


rsync -av -e ssh moodle/ Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. :/var/www/domaine.fr/web/moodle/moodle
rsync -av -e ssh moodledata/ Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. :/var/www/domaine.fr/web/moodle/moodledata

 

Exporter la base de données existante, en lançant :

mysqldump --allow-keywords --opt -uMySQL_USERNAME -pPASSWORD 
DATABASE | ssh USER@DOMAIN "mysql -uMySQL_USERNAME -pPASSWORD DATABASE"

 

 

Wake On Lan asus Z97-A

Réglages pour le wol de ma carte asus z97A:
Dans le gestionnaire de périphérique -> carte réseau -> propriétés -> Gestion de l'alimentation:
-> Options d'économie d’énergie
Ne rien cocher : sinon démarrages intempestifs
-> Wake on Lan
Cochez:  Wake on Magic packet d'un état hors tension.
Ne pas cocher : Wake on Pattern Macth (Pattern déterminer par L'OS qui doit faire parfois n'importe quoi)
Ne pas cocher : Wake on Magic packet

Dans le bios activer le wake on lan
1) Advanced -> APM Configuration -> Power On By PCI-E -> Enabled 'Enabled  (cette option est suffisante ..)

Les options suivantes ne sont pas nécessaires: donc les désativer.
Advanced -> APM Configuration -> ErP Ready -> Enabled (S5)
Advanced -> Network Stack Conf. -> Network Stack -> Enabled
Advanced -> Network Stack Conf. -> Network Stack -> Ipv4/IPv6 -> Enabled

Comment arrêter l'enregistrement cron dans syslog

J'ai un script qui s'execute toutes les minutes via un cron, donc toutes les minutes le fichier syslog est mis à jours ...

il faut modifier le fichier /etc/rsyslog.conf (debian, raspbian,...)
repérer la ligne qui commence par *.* et y ajouter cron.none comme ci dessous

* *; Auth, authpriv.none, mail.none, cron.none - / var / log / syslog

la partie significative étant cron.none qui signifie que cron ne sera pas journaliser vers syslog.

Puis il faut redémarrer
/etc/init.d/rsyslog restart

Tchat avec free assistance

Il faudrait peut-être réessayer aux heures de bureau.

Pour l'assistance tchat ou mail , suivre point à point cette procédure *même si ça semble ne pas correspondre à ton besoin* :

S'authentifier sur
https://assistance.free.fr/contact/index.php
avec ton numéro de ligne ou d'abonné

puis :
"S'informer / Aide sur l'installation, ..."
"Le service de téléphonie Freebox"
"Je souhaite obtenir une autre information sur la téléphonie freebox"

puis choisir le service souhaité :

"notre service d'assistance en ligne par tchat, cliquez ici"
"notre service d'assistance eMail, cliquez ici"

Memo PHP SQLITE

 

SQLite est un système de gestion de bases de données léger intégré directement dans PHP5, au moyen d’un simple module.

L’avantage de SQLite est sa simplicité et sa légèreté. La base de données est un simple fichier binaire « .sqlite » rendant la sauvegarde d’un coup beaucoup plus simple.

SQLite peut-être utilisé avec PHP, mais également avec d’autres langages (Java, C/C++, Python…) et il est ainsi utilisé massivement dans de nombreux logiciels (Firefox, LibreOffice…) ou systèmes d’exploitations, y compris les Smartphones (iOS, Android…).

Ci-dessous j’ai noté les moyens d’utiliser SQLite avec PHP. Il n’y a souvent pas d’explications, et je donne la ligne de code à titre d’exemple.

Sommaire

En PHP Procédural

Ouvrir / créer une base

Ceci ouvre la base. Le fichier .sqlite est créé s’il n’existe pas.

$db_handle = sqlite_open('fichier.sqlite', 0666, $error);

// gestion des erreurs
if (!empty($error)) {
    die('Erreur SQLite : '.$error);
}

À la fin, on referme la base de données. C’est plus propre même si SQLite ne peut normalement pas s’altérer.

sqlite_close($db_handle);

Créer une table

C’est comme dans les autres SGBD :

// Ouverture de la base
$db_handle = sqlite_open('fichier.sqlite', 0666, $error);

// requête SQL
sqlite_query($db_handle, "CREATE TABLE matable ( ID INTEGER PRIMARY KEY, champ TEXT, autrechamp INTEGER );", NULL, $error);

// Gestion des erreurs éventuelles
if (!empty($error)) { 
    die('Erreur SQLite : '.$error);
}

Supprimer une table

sqlite_query($db_handle, "DROP TABLE matable", NULL, $error);

Lister les tables dans une base

Il s’agit de lister les éléments de type « table » de la base elle même (et non dans une table). Ici, le résultat est un tableau php (array()) car j’ai utilisé la fonction sqlite_single_query() :

// listage des tables dans un array() :
$tables = sqlite_single_query($db_handle, "SELECT name FROM sqlite_master WHERE type='table'");

$tables contient quelque chose comme ça : array(1 => 'table1', 2 => 'table2', …);

Ceci peut-être utile si vous devez vérifier la présence d’une table dans la base, vu que l’option « IF NOT EXISTS » n’exste pas en SQLite pour la création des tables. On contourne ça en listant les bases présentes et en ajoutant seulement celles qui manquent.

Ajouter une entrée

Basique là aussi, avec INSERT INTO :

INSERT INTO table ( champ, autrechamp ) VALUES ( 'text', 42 )

Ajouter plusieurs entrées « à la volée »

Pour ajouter plusieurs lignes à la table, on peut faire ça :
INSERT INTO table ( one, two ) VALUES ( 'bla', 'bli' )
INSERT INTO table ( one, two ) VALUES ( 'blo', 'blu' )
INSERT INTO table ( one, two ) VALUES ( 'bly', 'ble' )

Mais SQLite est lent à l’accès. Aussi, plutôt que de faire 3 requêtes séparées avec chacun un sqlite_query(), il est largement mieux de regrouper les requêtes en une seule :

Contrairement à MySQL, qui utilise cette syntaxe :

# MYSQL:
INSERT INTO tbl ( one, two) VALUES (
   ('bla', 'bli'),
   ('blo', 'blu'),
   ('bly', 'ble'),
   ...
);

SQLite utilise une syntaxe un peu particulière, peu intuitive (qui marche aussi avec MySQL en fait) :

# SQLite:
INSERT INTO tbl ( one, two)
             SELECT 'bla', 'bli'
   UNION ALL SELECT 'blo', 'blu'
   UNION ALL SELECT 'bly', 'ble'
   ...
;

Modifier plusieurs entrées « à la volée »

Cette méthode, que j’ai élaborée moi même après quelques bidouillages, n’ayant pas vraiment trouvé de solutions sur le net, fonctionne.

Au lieu de faire :

UPDATE tbl SET two='bli' WHERE one='bla';
UPDATE tbl SET two='blu' WHERE one='blo';
UPDATE tbl SET two='ble' WHERE one='bly';

faites, en une seule commande :

UPDATE tbl SET two = (CASE
   WHEN one='bla' THEN 'bli'
   WHEN one='blo' THEN 'blu'
   WHEN one='bly' THEN 'ble'
ELSE two END) 

ATTENTION : n’oubliez pas le ELSE two END à la fin ! Si tous les cas précédent avec WHEN ne sont pas trouvés, il mettra dans two la précédente valeur de two. Si vous ne le mettez pas, alors il met une chaîne vide à la place !

ATTENTION : Remarquez qu’entre les deux solutions (commande unique ou commande multiple), l’ordre des colonnes à changé ! Dans l’écriture de la requête, sur la première on a « bli » puis « bla », alors qu’après on a « bla » puis « bli ».

Supprimer une entrée selon un critère

Facile :

DELETE FROM table WHERE champ='$var'

Et selon deux critères simples :

DELETE FROM table WHERE champ='$var' AND autrechamp='$autrevar'

Supprimer plusieurs entrées « à la volée »

Attention à toujours spécifier un WHERE avec un DELETE, sinon ce sont toutes les lignes de la table que vous supprimez…
Pour supprimer plusieurs lignes, c’est plutôt simple : il suffit d’utiliser OR.

DELETE FROM table WHERE champ='$var' OR champ='$var2' OR champ='$var3' OR ...'

Lire une entrée

Très classique, on utilise SELECT :

Sélectionne toute la ligne (chaque colonne de la ligne) :

SELECT * FROM table WHERE colonne='valeur'

Sélectionne une case « case » de la ligne :

SELECT case FROM table WHERE colonne='valeur'

Lire toute la base et obtenir un tableau « array »

Ceci est pratique si on ne veut pas utiliser des boucles WHILE et le fetch(). Il permet de tout mettre dans un tableau directement, avec la fonction SQLite  :

$query = "SELECT * FROM 'tableau' WHERE id < 3 ORDER BY id"; 
$result = sqlite_array_query($db_handle, $query, SQLITE_ASSOC);

$result contient un tableau. Un print_r($result) donne :

Array
(
  [0] => Array
      (
        [id] => 1
        [one] => bla
        [two] => bli
      )

  [1] => Array
      (
        [id] => 2
        [one] => blo
        [two] => blu
      )

  [2] => Array
      (
        [id] => 3
        [one] => bly
        [two] => ble
      )

  [3] ...
  [4] ...
  ...

)

Recherche par comparaison

Le signe % indique qu’il peut y avoir autre chose :

SELECT * FROM 'table' WHERE champ LIKE '%$recherche%'

Rechercher « bon » dans un champ contenant « bonjour » se fera avec "bon%".
Rechercher « jour » dans un champ contenant « bonjour » se fera avec "%jour".
Rechercher « onjou » dans un champ contenant « bonjour » se fera avec "%onjou%".

Recherche booleenne « non » : le premier champ doit contenur $recherche, mais le seconde champ ne doit pas le contenir

SELECT * FROM 'table' WHERE champ LIKE '%$recherche%' AND NOT autrechamp LIKE '%$recherche%'

En PHP Objet « PDO »

PDO est un moyen d’accéder au bases de données en PHP Objet. Son avantage en pratique, c’est qu’il permet de traiter plusieurs langages SQL avec les memes lignes de code.
Ainsi, il suffira juste de dire qu’on travail avec MySQL au lieu de SQLite par exemple, et ça marchera. Il y a une seule ligne à changer dan toute l’application, et on a plus à changer toutes les requêtes. Mais ça c’est la théorie, car en pratique, il reste quelques différences.

Néanmoins, une grande partie des requêtes PDO que j’ai eu à écrire pour SQLite fonctionnaient directement également avec MySQL.

Notez qu’ici j’utiliserai les requêtes préparées. C’est une façon de procéder qui sécurise automatiquement les requêtes : il n’y a pas besoin d’utiliser les fonctions d’échapement des données saisies par l’utilisateur, PDO le fait lui même.

Notez également la simplicité du code : pas de guillements à outrance, ni rien. C’est beaucoup plus simple.

Ouvrir / créer une base

En PHP-Objet, j’utilise là les gestion d’erreur try/catch.

try {
// Nouvel objet de base SQLite 
   $db_handle = new PDO('sqlite:db.sqlite');
// Quelques options
   $db_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
   die('Erreur : '.$e->getMessage());
}

Créer une table

Ceci se passe évidemment après qu’on ait ouvert la table. Je ne met plus les try/catch, mais ce code est évidemment à placer dans le try{}

$results = $db_handle->exec("CREATE TABLE matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);");

Supprimer une table

C’est la même chose que juste au dessus, la requête étant la même que SQLite en mode procédural :

$results = $db_handle->exec("DROP TABLE matable");

Ajouter une entrée

Même chose, allons au plus simple avec les requêtes préparées :

// On prépare la requête
$req = $db_handle->prepare('INSERT INTO table ( champ1, champ2 ) VALUES (?, ?)');

// On l’éxécute.
$req->execute(array($variable1, $variable2));

Avec les requêtes préparées, faites gaffe par contre : le nombre de variables (le nombre de « ? ») est limité à 999 dans PDO. Je n’ai jamais trouvé comment augmenter cette limite. Il m’est arrivé déjà à devoir insérer 100 lignes de 10 variables et là ça plante. L’astuce conciste à faire par exemple deux requêtes de 50 lignes de 10 variables.

Notez que je n’ai nullement échapé les variables lors de l’éxécution. PDO le fait tout seul. C’est l’énorme avantage des requêtes préparées !
Il est possible d’utiliser les requêtes normale, mais c’est à bannir car moins sécurisé :

$results = $db_handle->exec("INSERT INTO table ( champ1, champ2 ) VALUES ($variable1, $variable2)");

Enfin, il existe une autre forme pour ajouter des éléments à la base, avec les requêtes préparées également mais en remplaçant les « ? » par des noms. C’est plus simple pour s’y retrouver, mais il se trouve que SQLite et PDO ont un bug de longue date qui n’a jamais été corrigé… Je préfère donc conseiller la première méthode. Je vous la donne quand même :

$req = $db_handle->prepare('INSERT INTO table ( champ1, champ2 ) VALUES (:var1, :var2)');
$req->execute(array( 'var1'=> $variable1, 'var2'=> $variable2));

Cette méthode est plus précise car les points d’intérrogations sont nommées et chaque nom renvoie vers une race du tableau, donc on s’embrouille moins. Mais elle bug… (voir là).

Ajouter plusieurs entrées « à la volée »

Là encore, le problème de la lenteur se fait sentir si on veut ajouter plusieurs données : soit on fait plusieurs petites requêtes (lent) soit une grosse requête (rapide). C’est là aussi du UNION SELECT, et qui marche aussi avec MySQL en PDO (c’est-y pas bô ?)

Faisons un exemple où j’ajoute 3 lignes de 2 variables (donc 6 variables en tout) :

$req = $db_handle->prepare("INSERT INTO table ( one, two) SELECT ?, ? UNION ALL SELECT ?, ? UNION ALL SELECT ?, ? ");
$req->execute(array($l1c1, $l1c2, $l2c1, $l2c2, $l3c1, $l3c2));

Modifier plusieurs entrées « à la volée »

Supprimer une entrée selon un critère

Supprimer plusieurs entrées « à la volée »

Lire toute la base et obtenir un tableau « array »

// On prépare et éxécute la requête
$req = $handle->prepare("SELECT champ1, champ2 FROM table WHERE champ=?");
$req->execute(array($variable));

// On change la réponse SQL en réponse PHP.
// Ici, on transforme toute la réponse en un gros tableau
// (au lieu de faire ligne par ligne dans une boucle while() par exemple)
$result = $req->fetchAll();

$result sera un tableau contenant ce genre de choses :

Array
(
  [0] => Array
      (
        [champ1] => valeur01
        [champ2] => valeur02
      )

  [1] => Array
      (
        [champ1] => valeur11
        [champ2] => valeur12
      )

  [2] => Array
      (
        [champ1] => valeur21
        [champ2] => valeur22
      )

  [3] ...
  [4] ...

Recherche par comparaison

Ressources…

 

Autoriser l'accès à distance sur votre serveur MySQL

 

Autoriser l'accès à distance sur votre serveur MySQL

Vous pouvez configurer votre serveur MySQL afin qu'il soit accessible depuis un serveur distant. Cela peut être utile si vous voulez que votre serveur de base de données soit séparé de votre serveur web, ou d'autres serveurs.

1. Accorder des droits à un nom d'utilisateur

Pour ce faire, vous aurez besoin d'accorder les droits nécessaire à un utilisateur MySQL afin que celui-ci ait les droits sur la base autre part que sur le serveur hébergeant la base (localhost). Pour ce faire, tapez la commande suivante (une fois connecté à la console en SSH) : (se connecter d'abord au serveur “mysql”)

 mysql -u root -pmot_de_passe_root

  grant all privileges on *.* to Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
  identified by "userpassword";

Où:

  • *. désigne la ou les bases qui sont autorisées (* signifie toutes les tables, mais vous pouvez n'en choisir qu'une seule si vous le souhaitez),
  • remoteuser est le nom de l'utilisateur MySQL à qui vous accordez l'accès à distance,
  • 123.123.123.123 est l'adresse IP du serveur distant auquel vous donnez l'accès (ceci peut être replacé par * pour TOUS les serveurs),
  • userpassword est le mot de passe associé à l'utilisateur MySQL en question

grant all privileges on domotique.* to Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. identified by "toto";    //toutes les tables de la base domotique

Une fois que c'est fait, n'oubliez pas de “flusher” les privilèges. Cette commande fait en sorte que les modifications soient immédiatement effectives, sans avoir à redémarrer le serveur :

flush privileges;

2. éditer my.cnf

Editez le fichier de configuration:

nano /etc/mysql/my.cnf

Par défaut, MySQL n'écoute que localhost. . Il faudra désactiver la ligne relative au bind-address dans le fichier de configuration mysql:

/* bind-address = 127.0.0.1 */

3. redémarrer le serveur MySQL

/etc/init.d/mysql restart

 

Exécuter des scripts PHP avec cron et wget

Voila une manière de faire pour lancer le script check.php toutes le 30 minutes.

30 * * * * php -f /path/to/your/web/directory/check.php

Le problème vient du fait que j'ai modifié le script check.php en y rajoutant
$serveurName= $_SERVER['SEVER_NAME'];
Lorsque j 'exécute le script en ligne de commande "CLI" comme ci dessus, la variable $_SERVER['SEVER_NAME'] n'est pas accessible (car le script est lancé en CLI et alors certaines variables ne sont pas disponibles).

Pour palier a ce problème il faut utiliser un wget comme ci dessous

30 * * * * wget -q -O /dev/null http://192.168.0.1.1/leboncoin/check.php > /dev/null

 

Unzip en ligne sur le serveur, script unzip.php

Je suis amené à uploader beaucoup de fichiers, à la fois sur un serveur. Au départ, j’uploadais l’ensemble des fichiers de mon CMS par FTP. L’hébergement de ces milliers de petits fichiers prenait jusqu’à 40 minutes… Une réelle perte de temps puisqu’il suffit tout simplement de :

  1. Uploader le fichier ZIP contenant les fichiers sur le serveur de destination
  2. Uploader le fichier unzip.php.
  3. Lancer un script unzip.php qui permet d’exécuter la décompression du fichier ZIP.

unzip.php
<?php
function lsdir()   //affiche le contenu du répertoire courant
{   $chemin = "./";
    $rep = opendir( $chemin );
    chdir( $chemin );
    echo " Cliquez sur le fichier à dézipper <BR>\n";
    while ( $file = readdir( $rep ) ) {
        if ( $file != '..' && $file != '.' && $file != '' ) {
            if ( ( $file ) ) {
                echo "<a href=./unzip.php?action=$file target=_blank>$file</a><br>";
            }
        }
    }
    closedir( $rep );
}

function
 unzip ( $file )  //dézippe le fichier passé en paramètre
{   $zip = new ZipArchive;
    $zip->open( $file );
    $zip->extractTo( './' );
    $zip->close();
    echo "Ok! $file dézipper <br>";
}
//////////////////     main    /////////////////
if ( $_GET['action'] ) {
    unzip ( $_GET['action'] ) ;
    lsdir();
}else
    lsdir ();
?>

<?php

function lsdir()   //affiche le contenu du répertoire courant

{   $chemin = "./";

    $rep = opendir( $chemin );

    chdir( $chemin );

    echo " Ciquez sur le fichier à dézipper <BR>\n";

    while ( $file = readdir( $rep ) ) {

        if ( $file != '..' && $file != '.' && $file != '' ) {

            if ( ( $file ) ) {

                echo "<a href=./unzip.php?action=$file target=_blank>$file</a><br>";

            }

        }

    }

    closedir( $rep );

}

 

function unzip ( $file )  //dézippe le fichier passé en paramètre

{   $zip = new ZipArchive;

    $zip->open( $file );

    $zip->extractTo( './' );

    $zip->close();

    echo "Ok! $file dézipper <br>";

}

//////////////////     main    /////////////////

if ( $_GET['action'] ) {

    unzip ( $_GET['action'] ) ;

    lsdir();

}else

    lsdir ();

?>

/* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;}

Firefox: Nouvel onglet (google.fr)

- Ouvrir un nouvel onglet
- taper: about:config dans la barre d'adresse
- clic sur OK pour Faire attention dans la boite qui s'ouvre.
- trouver la ligne browser.newtab.url
- Double clic dessus et taper: about:home à la place de: about:newtab -> cela donne la page google pour firefox

Pour avoir la page google.fr entrer: www.google.fr à la place de about:blank

Pour avoir une page blanche entrer: about:blank
à la place de about:home

Si vous voulez revenir à la page des vignettes, entrer à la place: about:newtab