Simple php excel XLS générator

 

source http://php.net/manual/en/ref.dba.php

If you need a ‘download data’ button that
automatically fires up a spreadsheet (like Excel), find that fputcsv()
isn’t working as expected, that none of the installed DBA database
engines create a spreadsheet that can be opened, and that XLS generating
components are just too heavy weight, then this might just hit the
spot:


<?php
// simple table to present
$data = array(
array(
'col1','col2'),
array(
1,2),
array(
3,4)
);

// pretend content (which is XML) is XLS native
header(« Pragma: public »);
header(« Expires: 0 »);
header(« Cache-Control: must-revalidate, post-check=0, pre-check=0 »);
header(« Cache-Control: private », false);
header(« Content-Type: application/vnd.ms-excel »);
header(« Content-Disposition: attachment; filename=\ »sheet.xls\ »; » );

// construct skeleton
$dom = new DOMDocument(‘1.0’, ‘utf-8’);
$dom->formatOutput = $dom->preserveSpaces = true; // optional
$n = new DOMProcessingInstruction(‘mso-application’, ‘progid= »Excel.Sheet »‘);
$dom->appendChild($n);

$workbook = $dom->appendChild(new DOMElement(‘Workbook’));
$workbook->setAttribute(‘xmlns’,‘urn:schemas-microsoft-com:office:spreadsheet’);
$workbook->setAttribute(‘xmlns:o’,‘urn:schemas-microsoft-com:office:office’);
$workbook->setAttribute(‘xmlns:x’,‘urn:schemas-microsoft-com:office:excel’);
$workbook->setAttribute(‘xmlns:ss’,‘xmlns:ss= »urn:schemas-microsoft-com:office:spreadsheet’);
$workbook->setAttribute(‘xmlns:html’,http://www.w3.org/TR/REC-html40);

$styles = $workbook->appendChild(new DOMElement(‘Styles’));
$style = $styles->appendChild(new DOMElement(‘Style’));
$style->setAttribute(‘ss:ID’,‘Default’);
$worksheet = $workbook->appendChild(new DOMElement(‘Worksheet’));
$worksheet->setAttribute(‘ss:Name’,‘sheet1’);
$xmltable = $worksheet->appendChild(new DOMElement(‘Table’));

// populate with data
foreach ($data as $datarow) {
$xmlrow = $xmltable->appendChild(new DOMElement(‘Row’));
foreach (
$datarow as $datacell) {
$xmlcell = $xmlrow->appendChild(new DOMElement(‘Cell’));
$xmldata = $xmlcell->appendChild(new DOMElement(‘Data’, $datacell));
$xmldata->setAttribute(‘ss:Type’, is_numeric($datacell) ? ‘Number’ : ‘String’);
}
}

// display and quit
echo $dom->saveXML();
?>

Configuration d’un client mail pour compte@cantoute.com

Voici les paramètres de configuration standard

Préférez le protocole imap qui vous permettra une synchronisation de vos courriels via l’interface web https://mail.cantoute.com/

Avec le protocole pop, un courriel récupéré sur votre ordi ou votre téléphone sera supprimé du webmail (le client récupère le courrier et non le consulte comme avec le protocol imap)

Je vous recommande de préférer les version sécurisées imaps (ssl) et smtps ou smtp/tls pour l’envoie.
Depuis peut, cantoute s’est procuré des certificats valides 🙂

serveur de réception
imap(s): mail.cantoute.com
port: 993 (ssl) 143 (sans ssl) – ce sont les ports standards
utilisateur: votre.adresse@domaine.com
pass: XXXXXXX

Remarques:
laissez le champ ‘Préfixe du chemin IMAP’ vide
Pour correspondre au webmail,
Sent : vos messages envoyés,
Drafts : vos brouillons
Trash : votre corbeille
(Attention, sensible à la casse – majuscules/minuscule)

 

serveur d’envoie
smtp: mail.cantoute.com
port: 465 (ou 25 sans ssl et qui risque de poser soucis avec bon nombre d’opérateurs – orange, free – qui bloquent le port 25)
utilisateur: votre.adresse@domaine.com
pass: XXXXXXX

 

Capture d’écran 2014-11-19 à 00.20.24

 

Capture d’écran 2014-11-19 à 00.22.32

 

Capture d’écran 2014-11-19 à 00.22.15

 

Capture d’écran 2014-11-19 à 00.23.46

 

Réplication Mysql Master-Master – La bonne méthode

 

http://stackoverflow.com/questions/2366018/how-to-re-sync-the-mysql-db-if-master-and-slave-have-different-database-incase-o

Il vous faudra au préalable avoir créé les users avec les droits de réplication

Sur le serveur A

Dans une console car il faudra maintenir la connexion pour tenir le verrou à l’écriture

$ mysql

mysql> RESET MASTER;
Query OK, 0 rows affected (0.37 sec)

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.10 sec)

mysql> SHOW MASTER STATUS;
+---------------------+----------+--------------+---------------------------------------------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB                                        |
+---------------------+----------+--------------+---------------------------------------------------------+
| A-mysql-bin.000001 |     5235 |              | mysql,performance_schema,information_schema,test         |
+---------------------+----------+--------------+---------------------------------------------------------+
1 row in set (0.00 sec)

puis dumper les bases souhaitées depuis un terminal par exemple
mysqldump -uroot -p --all-databases > /a/path/mysqldump.sql
puis enfin dans la console mysql
UNLOCK TABLES;

 

Sur le serveur B

STOP SLAVE;

importer le dump

mysql < mysqldump.sql
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST = 'serverA', MASTER_PORT = 3306, MASTER_USER = 'slaveuser',
MASTER_PASSWORD = 'xxxxx', MASTER_LOG_FILE = 'A-mysql-bin.000001', MASTER_LOG_POS = 5235;
SLAVE START;

On peut dors et déjà vérifier que la réplication se fait du serveur A vers le serveur B en ajoutant une db ‘bidon’ sur A elle apparaitra sur B. Pour la supprimer il faudra le faire depuis A (sur B ne doit se tenir aucune écriture)

 

Puis il suffit de vérouiller les table en READ sur serveur B et de faire la même chose dans l’autre sens

Sur B saisir dans mysql

mysql> RESET MASTER;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+---------------------+----------+--------------+---------------------------------------------------------+
| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB                                        |
+---------------------+----------+--------------+---------------------------------------------------------+
| B-mysql-bin.000001 |      107 |              | mysql,performance_schema,information_schema,test         |
+---------------------+----------+--------------+---------------------------------------------------------+

Puis sur A
CHANGE MASTER TO MASTER_HOST = 'serverB', MASTER_PORT = 3306, MASTER_USER = 'slaveuser', MASTER_PASSWORD = 'xxxxxx', MASTER_LOG_FILE = 'B-mysql-bin.000001', MASTER_LOG_POS = 107;
SLAVE START;

A ce stade tout devrait être en ordre et la syncro devrait fonctionner dans les deux sens.

 

Sur B ne  pas oublier de lever le verrou

UNLOCK TABLES;

 

 

 

linux: Identifier les sites web (dns) pointant sur une ip virtuelle/failover

 

Chez online.net, un certain nombre d’adresses ip doivent migrer.

Une fois avoir configurer le serveur pour qu’il fonctionne sur l’ancienne ip et la nouvelle conjointement il reste à configurer les dns de chaqu’un des sites hébergés.

Cette ligne de commande permet d’afficher les sites web accédant au serveur sur son ancienne ip 1.2.3.4

# tcpdump -i eth0 -s 0 -A 'dst host 1.2.3.4 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' | grep Host\:

solution inspirée de ces deux articles

http://stackoverflow.com/…-response-header-and-response-body
http://serverfault.com/…capturing-traffic-coming-to-a-specific-virtual-interface

 

5 sep 2014: correction d’une erreur de guillemets typographiques