Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[Résolu]Charger un fichier mis en argument dans un script.


lol.2.dol

Messages recommandés

Salut tout le monde,

Voilà je suis une grosse quiche en programmation, et j'ai récupéré un script php qui permet de transformer les logs de conversation Kopete en logs compatible avec Pidgin.

Je l'ai analyser, j'ai compris comment ça fonctionnait, mais ça fait pas exactement ce que je veux, il mériterait des modifications.

 

En gros, je suis obligé de mettre dans le script le nom du fichier que je veux traiter, ça fonctionne c'est sûr, mais j'aimerai plutôt pouvoir le lancer en faisant un truc $php script.php liste_des_fichiers_a_traiter.xml

 

Le script se trouve ici. Je vous le recopie

 

<?
$doc = new DOMDocument();
$doc->load( 'klinkel107.200808.xml' );
$date = $doc->getElementsByTagName("date");
$month = $date->item(0)->getAttribute('month');
$year = $date->item(0)->getAttribute('year');
$contacts = $doc->getElementsByTagName("contact");
foreach($contacts as $contact){
if($contact->getAttribute("type") == "myself"){
	$me = $contact->getAttribute("contactId");
}else{
	$you = $contact->getAttribute("contactId");
}
}

$days = array();

$messages = $doc->getElementsByTagName("msg");

foreach($messages as $msg){
$tmptime = explode(" ", $msg->getAttribute("time"));
$day = $tmptime[0];
$time = $tmptime[1];
if(isset($days[$day])){
	array_push($days[$day], array($time, $msg));
}else{
	$days[$day] = array(array($time, $msg));
}
}

foreach($days as $my_day => $my_message){
$first_message_time = $my_message[0][0];
$first_message = strtotime($month."/".$my_day."/".$year." ".$first_message_time);
$long_date = date("D d M Y g:i:s A", $first_message)." EDT";
$filename = date("Y-m-d.His", $first_message)."-0400EDT.html";
$data = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\r\n<title>Conversation with ".$you." at ".$long_date." on ".$me." (aim)</title></head><body><h3>Conversation with ".$you." at ".$long_date." on ".$me." (aim)</h3>";
foreach($my_message as $message){
	$user = $message[1]->getAttribute("from");
	if($user == $me){
		$color = "#16569E";
	}else{
		$color = "#A82F2F";
	}
	if($message[1]->getAttribute("nick") != ""){
		$user = $message[1]->getAttribute("nick");
	}
	$data .= "\r\n<font color=\"".$color."\"><font size=\"2\">(".$message[0].")</font> <b>".$user.":</b></font> <br/><html><body><span style='font-family: Arial; color: #000000;'>".$message[1]->nodeValue."</span></body></html><br/>";
}
$data .= "</body></html>";
file_put_contents("cmb/logs/".$filename, $data);
echo "Wrote ".$filename;
}
?>

Si j'ai bien compris il faudrait juste changer la fonction $doc->load( 'klinkel107.200808.xml' );.

J'ai cherché sur le net, mais j'ai rien trouvé d'exploitable.

 

Donc je vous sollicite votre aide. Merci.

Modifié par lol.2.dol
Lien vers le commentaire
Partager sur d’autres sites

Euhhh, j'ai fait du C...

Mais comment dire, j'étais une sacré quiche.

Je vais quand même me pencher sur ce que tu me dis.

 

 

edit;

Si j'ai bien compris, il faut que j'utilise argv, parce que argc c'est juste pour compter le nombre d'argument...

 

J'ai essayé de faire

$doc->load( $argc );

 

Mais ça fonctionne pas...

Pourtant je pensais que ça allait le faire, parce que si je remplace tout les $doc en $argc, il va seulement prendre la chaine de caractère, et il ne pas charger le fichier...

Modifié par lol.2.dol
Lien vers le commentaire
Partager sur d’autres sites

<?php
foreach ($argv as $key => $arg) {
	echo "L'argument ".$key." est ".$arg."\n";
}
?>

 

ce bout de code affiche les arguments de la ligne de commande

Lien vers le commentaire
Partager sur d’autres sites

$argc te dit le nombre d'éléments présents dans $argv (car $argv est un tableau). Si tu utilises "$argv" tout seul, c'est un coup à avoir des erreurs en cas de mauvaise utilisation des paramètres (au lieu d'un élégant message "Usage : [nom du prog] [argument1] [etc]") ou en cas de volonté, plus tard, d'utiliser des paramètres différents (ou si tu veux gérer le passage de plusieurs noms de fichiers en paramètre)...

Lien vers le commentaire
Partager sur d’autres sites

  • Modérateurs

Eh bien oui, lorsque tu écris script.php blabla.xml, “blabla.html” est une chaîne de caractères que tu récupères dans le premier poste de la table des arguments d'entrée, c'est-à-dire $argv[0], et que tu transfères dans $doc->load($argv[0]);

 

Ainsi, c'est bien le fichier blabla.xml qui sera traité par ton script :P

 

Pour plus de précisions, tu trouveras des tutos sur la Toile, dont l'excellent PHP / MySQL du Site du ZérO :P

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...