Archive pour novembre, 2008

Encodage des array() en PHP

admin novembre 21st, 2008

Il arrive parfois que les tableaux de donnée Array en PHP se corrompent quand il se présente des accents ou apostrophes “à la Word” dans les contenus que on les stock en base de donnée Mysql via un serialize().

Dans ce cas, le tableau ne devient plus utilisable si on fait un unserialize() !

Pour palier à ce problème voici deux fonctions que j’utilise qui me garantissent que le stockage en base ne va pas corrompre mon tableau :

// Encode et decode un array pour l'insérer en base ou le lire
function Encode_Array($x)
{
	return base64_encode(serialize($x));
}
 
function Decode_Array($x)
{
	return unserialize(base64_decode($x));
}

Récupérer des contenus textes de fichiers Word, Pdf, Rtf

admin novembre 19th, 2008

Dans un site ou vous désirez que le moteur de recherche soit capable de trouver des textes présent dans des fichiers uploadés ou récupérer le texte pour en faire ce que vous voulez, voici quelques fonctions déclinables à l’infini (puisqu’elles utilisent des applications Linux via la fonction exec()).

// # Pdftotext ###################################################
// # Conversion de texte du PDF en Jpeg
// # Retour :
function Pdftotext($fichier_pdf)
{
	global $tmp_path;
	$fichier_text=tempnam($tmp_path,'tmpPdftotext');
 
	$commande_transformation="pdftotext -f 1 -l 1 ".$fichier_pdf."
".$fichier_text;
	$log_commande=exec($commande_transformation);
 
	if (is_file($fichier_text))
	{
		$text=file_get_contents($fichier_text);
	}
 
	unlink($fichier_text);
 
	return $text;
}
 
// # Wordtotext ###################################################
// # Conversion de texte du fichier word en texte
// # Retour :
function Wordtotext($fichier_word)
{
	global $tmp_path;
	$fichier_text=tempnam($tmp_path,'tmpWordtotext');
	$commande_transformation="wvText ".$fichier_word." ".$fichier_text;
	exec($commande_transformation);
 
	if (is_file($fichier_text))
	{
		$text=file_get_contents($fichier_text);
	}
 
	unlink($fichier_text);
 
	return $text;
}
 
// # Rtftotext ###################################################
// # Conversion de texte du fichier rtf en texte
// # Retour :
function Rtftotext($fichier)
{
	global $tmp_path;
	$fichier_text=tempnam($tmp_path,'tmpRtftotext');
	$commande_transformation="unrtf ".$fichier." >".$fichier_text;
	exec($commande_transformation);
 
	if (is_file($fichier_text))
	{
		$text=file_get_contents($fichier_text);
	}
 
	unlink($fichier_text);
 
	return $text;
}
 
// # Ppttotext ###################################################
// # Conversion de texte du fichier Ppt en texte
// # Retour :
function Ppttotext($fichier)
{
	global $tmp_path;
	$fichier_text=tempnam($tmp_path,'tmpRtftotext');
	$commande_transformation="catppt ".$fichier." >".$fichier_text;
	exec($commande_transformation);
 
	if (is_file($fichier_text))
	{
		$text=file_get_contents($fichier_text);
	}
 
	unlink($fichier_text);
 
	return $text;
}

Voici la liste des packages à installer pour disposer de ces fonctions :

  • Pdfinfo - http://linux.about.com/library/cmd/blcmdl1_pdfinfo.htm
  • Pdftotext - http://www.foolabs.com/xpdf/download.html
  • Unrtf lecture de fichiers rtf - http://www.gnu.org/software/unrtf/unrtf.html
  • wv lecture de fichier doc - http://wvware.sourceforge.net/
  • elinks nécessaire au fonctionnement de wvtext
  • catdoc - http://linux.die.net/man/1/catppt

failed to bring up eth0 - Serveur Debian

admin novembre 18th, 2008

Et bien j’espère que ce post servira bien un jour à toute personne qui rencontrera le même problème que moi et d’autres suite au passage d’un serveur debian de Stable à Testing ! Il se dit dans les milieux “autorisés” que la Testing peut supporter un environnement de production si on utilise pas de packages exotiques. Et bien cela n’est pas toujours aussi simple.

Suite à une simple mise à jour d’un serveur débian 2.6.24.5, et à un reboot pour prise en compte de modifications de lilo, voici que le serveur ne répond plus au ping ! Etrange.. , j’ai d’abord pensé à un kernel panic. Le temps de chercher un petit peu du coté de la modification faite dans lilo, ovh a pris la main sur ma machine, changé la carte mère et réseau !!!! Dingue, il leur a du coup fallu 4 heures pour me rendre la machine. => Dans le même état qu’au départ ! Encore plus incroyable. J’ai donc attendu tout ce temps pour rien, ou presque. Ovh me donnait une précieuse information en disant :

“Reboot soft éffectué en mode netboot bzimage le message suivant est apparut ‘failed to bring up eth0”

Piste intéressante. je me suis donc enfin jeté sur les logs du système :

tail -50000 /var/log/syslog | grep eth0

La réponse fut :

kernel: udev: renamed network interface eth0 to eth1

Mais qui donc a bien eu l’idée de renommer l’interface réseau eth0 en eth1. Pas étonnant que le serveur ne réponde plus au ping !!!

Un coup de Google m’a aidé à trouver ce post très intéressant que je reprend ci dessous

Nous avons donc a faire avec un bug débian finalement assez simple à corriger, mais pas simple à trouver !

Udev a crée automatiquement une ou plusieurs règles pour monter automatiquement les interfaces réseau.

Il faut donc modifier manuellement les règles générées par udev pour indiquer que le montage de l’interface réseau se fait sur eth0.

Trouvez une règle qui se nomme ….persistent-net.rules dans /etc/udev/

vi /etc/udev/rules.d/70-persistent-net.rules

Commenter la première règle qui doit correspondre en gros à cela :

#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:22:33:44:55",
NAME="eth0"

Pour la ligne qui correspond à l’adresse Mac de votre carte réseau remplacer le ethxxx par eth0

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="01:23:45:67:89:ab", ATTR{type}=="1", KERNEL=="eth*",
NAME="eth1"
 
devient
 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="01:23:45:67:89:ab", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Sauver le fichier puis rebooter le serveur (sans oublier de passer le boot de la machine sur hd dans le manager Ovh)

En espérant que la multiplication de ce type d’article permettra de vite trouver la solution à ceux qui rencontre le problème.

Références :
http://forum.ovh.com/showthread.php?t=39674
http://forum.ovh.com/showthread.php?t=34764

http://www.debianadmin.com/rename-network-interface-using-udev-in-linux.html

Fonction Get_Urls

admin novembre 13th, 2008

Cette fonction vous permet de récupérer tous les urls des “médias” attachés au document html parcouru, en recherchant les balises de type href,src,url.
Si vous ne voyez pas quoi en faire, elle me permet d’encapsuler des pages html, et ses médias dans une page existante.
Cela peut aussi servir à lister les images, les liens, les css, etc présents dans un document html.
La fonction retourne les résultats avec une clé pour chaque type de lien et la liste des liens trouvés.

Cette fonction ne prend pas en compte les liens css avec @import url(”css/styles.css”);, mais cela doit se faire sans mal en modifiant un peu l’expression régulière.

// # Get_Urls ###################################################
// # Retourne toutes les url du type demandé
// # Parametres :
//		$texte, type d'url
// # Retour : urls
 
function Get_Urls($string,$lestypes=array())
{
	$types = array("href", "src", "url");
 
	if (count($lestypes)>0)
	{
		$types=$lestypes;
	}
 
	while(list(,$type) = each($types)) {
		preg_match_all
("|$type\s?\=?\(?\"?'?`?\s?([[:alnum:]:?=&@/#._\-éèàöôa\'\s]+)\s?\)?\"?'?`?|i",
$string, &$matches);
		$ret[$type] = $matches[1];
	}
 
	return $ret;
}