webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 2009
-
11 mai 2008 à 19:24
cs_ptt
Messages postés6Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention17 juin 2010
-
17 juin 2010 à 01:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_ptt
Messages postés6Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention17 juin 2010 17 juin 2010 à 01:31
salut super script bvo!
par contre peux tu me dire comment changer le nom du fichier dans le mail (le.doc) car il met ip_session+export.doc en fichier joint...
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 14 mai 2008 à 07:45
Salut,
Alors pour faire cour, l'importance des entêtes HTML est crutiale par rapport au comportement que va avoir le navigateur. Si tu utilise le HTML4 (c'est ton cas), il faut savoir que tout les navigateurs ne le supporte pas forcément pleinement. En fait, celà joue surtout sur l'interprétation des balises. En HTML1, tu ne pouvais pas faire les mêmes choses qu'en HTML2 ou 3.
Perso, je te conseillerais d'aller visiter le site du W3C et récupérer un entête type que eux recommendent. Comme ça tu sera sûr de pas te planter.
"c'est parce que je ne l'ai pas mis dans le code HTML directement ? ou alors il y a mieux ?" ((oui et non) et oui). Il faut absolument que tu prennes l'habitude de séparer les languages. Encore une fois, je ne critique pas le fonctionnement du programme mais bien la syntaxe et la grammaire. Alors je pleure parceque le code 'echo "= PHP5 uniquement
$newmail = new CMailFile($ligne[2],$ligne[0],$mon_mel,$ligne[3]."\n\nCi-joint un fax. Enregistrez sur votre ordinateur pour le lire, merci.","../".$ligne[4],"base 64");
$newmail->sendfile();
$buffer .= " Envoyé ";
} else {
$buffer . = " Pas un mel";
}
}
fclose($m);
$buffer .= "
<center> FERMER ";
// Affichage du temps
$time_end = getMicroTime();
$time = round($time_end - $time_start,4);
$buffer .= "
Exécution en $time secondes";
?>
Voilà, ce n'est pas parfait, mais c'est beaucoup plus propre comme ça. Force toi à respecter les indentation pour visualiser tout de suite où sont les débuts et fins de crochets
Renseigne toi bien sur ce que fait une instruction avant de l'utiliser. (cf www.php.net)
Enfin, pour avoir des exemples je te conseil de regarder les codes de certaines bêtes du php (coucou47, malalam... j'en passe , mais la liste est plutot longue, commence par regarder les codes de ceux là et tu suis le fils des conversation pour trouver les autres) qui rodent dans le coin. Tu verra que tout est structuré. Comme ça, c'est plus facile à maintenir.
ddempt
Messages postés24Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention 4 juin 2008 13 mai 2008 à 23:03
Bonjour,
Merci pour tout ton commentaire masternico.
Je suis contient que mon code n'est pas très aux "normes", MAIS ça marche et c'est ce que je cherchais jusqu'à aujourd'hui on peut, et je ne suis pas contre quelques trucs et conseils pour améliorer mon code et pourquoi pas améliorer la rapidité.
Pour cela, je n'ai jamais mis de DOCTYPE car je ne voyais pas pourquoi il fallait le mettre, une idée ?
Sinon pour ce que tu me conseil de mettre dans le php.ini cela ne poserait pas un problème pour ceux qui prendrait mon code et ne l'aurait pas gérer dans leur php.ini ?
"""echo ""; // passez moi les mouchoirs, je pleure""" c'est parce que je ne l'ai pas mis dans le code HTML directement ? ou alors il y a mieux ?
En effet j'ai fais des testes et la mémoire "gonfle" un peut je vais suivre ton conseil. Bien sur si après tu as de 128K en connexion c'est encore + long pour l'envoi, je vais peut être voir pour une version qui n'enverrais qu'un lien vers le document.
Enfin, non ça ne passe pas trop le W3C, mais comme je te le disais mon code fonctionne, là tu testé ?
masternico
Messages postés487Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention 1 septembre 2011 13 mai 2008 à 01:20
Salut,
il veut juste dire qu'il est plus judicieux de commencer par mettre le code php en début de script avant de commencer à afficher du HTML.
A moins, évidemment d'utiliser la buffurisation de sortie ob_start() (très pratique d'ailleur) puis de récupérer le contenu du buffer en fin de page et d'envoyer le contenu au navigateur.
Il a aussi voulu dire que la gestion du temps d'execution maximal de script se gère dans le fichier php.ini. Il en va de même pour la gestion de ce que php doit afficher comme erreur à l'écran.
En dévellopement, c'est bien pratique de faire afficher les erreurs, mais dès que ton script est en production, il faut impérativement désactiver l'affichage des erreurs. Les erreurs doivent êtres 'logguée' dans un fichier que tu pourras consulter quand tu veux. Gros avantage, tu récupères les messages d'erreurs de TOUT le monde. Super gain de temps pour le debuggage et surtout, super gain en sécurité car les messages d'erreurs sont des mines d'information pour les petits malins et un tels script exposé aux menaces d'Internet ne résiste pas longtemps. Alors, évidemment, il semblerais que ton script ne soit destiné qu'à un usage local ou intranet mais bon, quand même.
j'ai lu en diagonale mais j'ai vu des prb d'analyse de scipt (je ne critique pas le fonctionnement, mais la syntaxe). Les includes de class se font en début de script (cf remarque précédente). Tu mélanges alègrement php et HTML.
/*************************************
****************************************/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
error_reporting (E_ERROR|E_PARSE); //à supprimer et à gérer dans php.ini
session_start(); //ne fonctionne pas puisque tu as déjà envoyé du code html
set_time_limit(3600); //à supprimer et à gérer dans php.ini
$mon_mel= "";
//temps d'execution
function getMicroTime() {
$microsecondes=microtime();
list($micro,$time)=explode(' ',$microsecondes);
return($micro+$time);
}
$time_start = getmicrotime(); //??? tu mélange les nom de proc??? en déclaration on a getMicroTime et maintenant getmicrotime en minuscule??? j'ai pas testé, mais il marche ton code?
/* Insert de la class qui envoie la pièce jointe */
require "CMailFile.php"; // à mettre en début de page
echo ""; // passez moi les mouchoirs, je pleure
$fileLines=file("../".$_SESSION['session']."/exports/mels.txt");
echo count($fileLines)." mels à envoyer";
for ($ligne fgetcsv($fic, 1024, ";"); !feof($fic); $ligne fgetcsv($fic, 1024, ";")) {
echo "
".$ligne[0];
if (filter_var($ligne[0], FILTER_VALIDATE_EMAIL)) { // !!! >= PHP5 uniquement
//************************************************************//
// heuuu... tu instancie un nouvel objet pour chaque mail??? t'as déja fait tourné ton programme avec une base de plusieurs miliers de mails??? je vois le plantage mémoire à l'horizon... l'objet doit être instancié une fois puis réutilisé pour tous les mails. Ou bien il faut détruire l'objet avant d'en créer un nouveau. Sinon, l'utilisation de ta mémoire gonfle, gonfle, puis tout explose...
//************************************************************//
$newmail = new CMailFile($ligne[2],$ligne[0],$mon_mel,$ligne[3]."\n\nCi-joint un fax. Enregistrez sur votre ordinateur pour le lire, merci.","../".$ligne[4],"base 64");
$newmail->sendfile();
echo " Envoyé ";
} else {
echo " Pas un mel";
}
}
fclose($m);
echo "
<center>FERMER";
// Affichage du temps
$time_end = getmicrotime();
$time = round($time_end - $time_start,4);
echo "
Exécution en $time secondes";
?>
<SCRIPT language=JavaScript>
<!--
var res=document.getElementById("res");
function cacher() {
alert("Envoi effectué");
}
//-->
</SCRIPT>
/********************************
***********************************/
/*???????????????????????????????????????
et la balise de fin de corps et de fin de html??? ton script ne passe certainement pas la validation du W3C
*/
ddempt
Messages postés24Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention 4 juin 2008 12 mai 2008 à 06:52
2/ Pourquoi ne fais-tu pas tes traitements PHP avant le code HTML ?
Je ne comprends pas ce que tu veux dire.
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 11 mai 2008 à 19:24
Je ne jugerai pas la qualité du code HTML qui assez mauvaise. Concernant PHP :
1/ En production on n'affiche pas les erreurs. Tu peux laisser un error_reporting à E_ALL mais il faut que le serveur n'affiche pas les erreurs (display_errors à Off) et les loggues (log_errors à On).
2/ Pourquoi ne fais-tu pas tes traitements PHP avant le code HTML ?
17 juin 2010 à 01:31
par contre peux tu me dire comment changer le nom du fichier dans le mail (le.doc) car il met ip_session+export.doc en fichier joint...
14 mai 2008 à 07:45
Alors pour faire cour, l'importance des entêtes HTML est crutiale par rapport au comportement que va avoir le navigateur. Si tu utilise le HTML4 (c'est ton cas), il faut savoir que tout les navigateurs ne le supporte pas forcément pleinement. En fait, celà joue surtout sur l'interprétation des balises. En HTML1, tu ne pouvais pas faire les mêmes choses qu'en HTML2 ou 3.
Perso, je te conseillerais d'aller visiter le site du W3C et récupérer un entête type que eux recommendent. Comme ça tu sera sûr de pas te planter.
"c'est parce que je ne l'ai pas mis dans le code HTML directement ? ou alors il y a mieux ?" ((oui et non) et oui). Il faut absolument que tu prennes l'habitude de séparer les languages. Encore une fois, je ne critique pas le fonctionnement du programme mais bien la syntaxe et la grammaire. Alors je pleure parceque le code 'echo "= PHP5 uniquement
$newmail = new CMailFile($ligne[2],$ligne[0],$mon_mel,$ligne[3]."\n\nCi-joint un fax. Enregistrez sur votre ordinateur pour le lire, merci.","../".$ligne[4],"base 64");
$newmail->sendfile();
$buffer .= " Envoyé ";
} else {
$buffer . = " Pas un mel";
}
}
fclose($m);
$buffer .= "
<center> FERMER ";
// Affichage du temps
$time_end = getMicroTime();
$time = round($time_end - $time_start,4);
$buffer .= "
Exécution en $time secondes";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<SCRIPT type='text/javascript'>
//<![CDATA[
var res=document.getElementById("res");
function cacher() {
alert("Envoi effectué");
}
//]]>
</SCRIPT>
</HEAD>
<?php
echo $buffer;
?>
</HTML>
/********************************
**********************************/
Voilà, ce n'est pas parfait, mais c'est beaucoup plus propre comme ça. Force toi à respecter les indentation pour visualiser tout de suite où sont les débuts et fins de crochets
Renseigne toi bien sur ce que fait une instruction avant de l'utiliser. (cf www.php.net)
Enfin, pour avoir des exemples je te conseil de regarder les codes de certaines bêtes du php (coucou47, malalam... j'en passe , mais la liste est plutot longue, commence par regarder les codes de ceux là et tu suis le fils des conversation pour trouver les autres) qui rodent dans le coin. Tu verra que tout est structuré. Comme ça, c'est plus facile à maintenir.
13 mai 2008 à 23:03
Merci pour tout ton commentaire masternico.
Je suis contient que mon code n'est pas très aux "normes", MAIS ça marche et c'est ce que je cherchais jusqu'à aujourd'hui on peut, et je ne suis pas contre quelques trucs et conseils pour améliorer mon code et pourquoi pas améliorer la rapidité.
Pour cela, je n'ai jamais mis de DOCTYPE car je ne voyais pas pourquoi il fallait le mettre, une idée ?
Sinon pour ce que tu me conseil de mettre dans le php.ini cela ne poserait pas un problème pour ceux qui prendrait mon code et ne l'aurait pas gérer dans leur php.ini ?
"""echo ""; // passez moi les mouchoirs, je pleure""" c'est parce que je ne l'ai pas mis dans le code HTML directement ? ou alors il y a mieux ?
En effet j'ai fais des testes et la mémoire "gonfle" un peut je vais suivre ton conseil. Bien sur si après tu as de 128K en connexion c'est encore + long pour l'envoi, je vais peut être voir pour une version qui n'enverrais qu'un lien vers le document.
Enfin, non ça ne passe pas trop le W3C, mais comme je te le disais mon code fonctionne, là tu testé ?
13 mai 2008 à 01:20
il veut juste dire qu'il est plus judicieux de commencer par mettre le code php en début de script avant de commencer à afficher du HTML.
A moins, évidemment d'utiliser la buffurisation de sortie ob_start() (très pratique d'ailleur) puis de récupérer le contenu du buffer en fin de page et d'envoyer le contenu au navigateur.
Il a aussi voulu dire que la gestion du temps d'execution maximal de script se gère dans le fichier php.ini. Il en va de même pour la gestion de ce que php doit afficher comme erreur à l'écran.
En dévellopement, c'est bien pratique de faire afficher les erreurs, mais dès que ton script est en production, il faut impérativement désactiver l'affichage des erreurs. Les erreurs doivent êtres 'logguée' dans un fichier que tu pourras consulter quand tu veux. Gros avantage, tu récupères les messages d'erreurs de TOUT le monde. Super gain de temps pour le debuggage et surtout, super gain en sécurité car les messages d'erreurs sont des mines d'information pour les petits malins et un tels script exposé aux menaces d'Internet ne résiste pas longtemps. Alors, évidemment, il semblerais que ton script ne soit destiné qu'à un usage local ou intranet mais bon, quand même.
j'ai lu en diagonale mais j'ai vu des prb d'analyse de scipt (je ne critique pas le fonctionnement, mais la syntaxe). Les includes de class se font en début de script (cf remarque précédente). Tu mélanges alègrement php et HTML.
/*************************************
****************************************/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<?php
error_reporting (E_ERROR|E_PARSE); //à supprimer et à gérer dans php.ini
session_start(); //ne fonctionne pas puisque tu as déjà envoyé du code html
set_time_limit(3600); //à supprimer et à gérer dans php.ini
$mon_mel= "";
//temps d'execution
function getMicroTime() {
$microsecondes=microtime();
list($micro,$time)=explode(' ',$microsecondes);
return($micro+$time);
}
$time_start = getmicrotime(); //??? tu mélange les nom de proc??? en déclaration on a getMicroTime et maintenant getmicrotime en minuscule??? j'ai pas testé, mais il marche ton code?
/* Insert de la class qui envoie la pièce jointe */
require "CMailFile.php"; // à mettre en début de page
echo ""; // passez moi les mouchoirs, je pleure
$fileLines=file("../".$_SESSION['session']."/exports/mels.txt");
echo count($fileLines)." mels à envoyer";
$fic=fopen("../".$_SESSION['session']."/exports/mels.txt","r");
for ($ligne fgetcsv($fic, 1024, ";"); !feof($fic); $ligne fgetcsv($fic, 1024, ";")) {
echo "
".$ligne[0];
if (filter_var($ligne[0], FILTER_VALIDATE_EMAIL)) { // !!! >= PHP5 uniquement
//************************************************************//
// heuuu... tu instancie un nouvel objet pour chaque mail??? t'as déja fait tourné ton programme avec une base de plusieurs miliers de mails??? je vois le plantage mémoire à l'horizon... l'objet doit être instancié une fois puis réutilisé pour tous les mails. Ou bien il faut détruire l'objet avant d'en créer un nouveau. Sinon, l'utilisation de ta mémoire gonfle, gonfle, puis tout explose...
//************************************************************//
$newmail = new CMailFile($ligne[2],$ligne[0],$mon_mel,$ligne[3]."\n\nCi-joint un fax. Enregistrez sur votre ordinateur pour le lire, merci.","../".$ligne[4],"base 64");
$newmail->sendfile();
echo " Envoyé ";
} else {
echo " Pas un mel";
}
}
fclose($m);
echo "
<center>FERMER";
// Affichage du temps
$time_end = getmicrotime();
$time = round($time_end - $time_start,4);
echo "
Exécution en $time secondes";
?>
<SCRIPT language=JavaScript>
<!--
var res=document.getElementById("res");
function cacher() {
alert("Envoi effectué");
}
//-->
</SCRIPT>
/********************************
***********************************/
/*???????????????????????????????????????
et la balise de fin de corps et de fin de html??? ton script ne passe certainement pas la validation du W3C
*/
12 mai 2008 à 06:52
Je ne comprends pas ce que tu veux dire.
11 mai 2008 à 19:24
1/ En production on n'affiche pas les erreurs. Tu peux laisser un error_reporting à E_ALL mais il faut que le serveur n'affiche pas les erreurs (display_errors à Off) et les loggues (log_errors à On).
2/ Pourquoi ne fais-tu pas tes traitements PHP avant le code HTML ?