<archivé>
Source : www.manuelphp.com
Source : www.manuelphp.com
Source : http://fr.php.net/manual/fr/function.touch.php
bool touch ( string filename [, int time [, int atime]] )
touch() tente de forcer la date de modification du fichier désigné par le paramètre filename à la date de spécifiée par le paramètre time. Si time est omis, c’est l’heure courante qui est utilisée. Si le troisième paramètre time est fourni, il est utilisé comme date de dernier accès. Notez bien que la date de dernier accès est modifiée, quelque soit le nombre de paramètres.
Si le fichier n’existe pas, PHP tente de le créer. Cette fonction retourne TRUE en cas de succès, FALSE en cas d’échec.
AVERTISSEMENT : Il n’est pour le moment pas possible de changer la date de modification d’un dossier avec cette fonction sous Windows.
Exemple avec touch() :
<?php
if ( touch($NomDeFichier) ) {
echo "La date de modification de $NomDeFichier a été fixée à maintenant";
} else {
echo "Désolé, il est impossible de changer la date de modification de $NomDeFichier";
}
?>
Différentes méthodes : crypt() ; sha1() ; md5()
md5() est considérée la moins sûre et crypt() la plus sûre.
Syntaxe de crypt() :
crypt('chaine_a_crypter','clé');
La « clé » (ou « salt », « sel ») permet :
voir ou générer un script sur www.editeurjavascript.com
Attention : le script brut de sortie peut être à nettoyer ! (vérifier quotes, syntaxe, balises…)
un exemple du code généré :
<style type="text/css">
.ejs_scroll {
font-size:11px;
font-family:Verdana;
color:#000000;
text-decoration:none
}
</syle>
<script type="text/javascript">
/*
SCRIPT EDITE SUR L'EDITEUR JAVASCRIPT
http://www.editeurjavascript.com
*/
ejs_scroll_largeur = 400;
ejs_scroll_hauteur = 200;
ejs_scroll_bgcolor = '#FFFFFF';
/* Mettre ici le chemin de l'image de fond */
ejs_scroll_background = "";
/* Mettre ici le temps en secondes */
ejs_scroll_pause_seconde = 5;
ejs_scroll_message = new Array;
ejs_scroll_message[0]='<a class="ejs_scroll" href="http://www.fb-graphic.com">Lien vers un site</a>'
ejs_scroll_message[1]='<a class="ejs_scroll" href="http://www.fb-graphic.fr">Un autre site</a>';
function d(texte)
{
document.write(texte);
}
d('<div id="ejs_scroll_relativ" style="position:relative;width:'+ejs_scroll_largeur+';height:'+ejs_scroll_hauteur+';background-color:'+ejs_scroll_bgcolor+';background-image:url('+ejs_scroll_background+'">');
d('<div id="ejs_scroll_cadre" style="position:absolute;width:'+(ejs_scroll_largeur-8)+';height:'+(ejs_scroll_hauteur-8)+';top:4;left:4;clip:rect(0 '+(ejs_scroll_largeur-8)+' '+(ejs_scroll_hauteur-8)+' 0)">');
d('<div id="ejs_scroller_1" class="ejs_scroll" style="position: absolute; left: 0pt; top: 0pt;">'+ejs_scroll_message[0]+'</div>');
d('<div id="ejs_scroller_2" class="ejs_scroll" style="position: absolute; left: 0pt;">'+ejs_scroll_message[1]+'</div>');
d('</div></div>');
ejs_scroll_mode =1;
ejs_scroll_actuel = 0;
function ejs_scroll_start()
{
if(ejs_scroll_mode == 1)
{
ejs_scroller_haut = "ejs_scroller_1";
ejs_scroller_bas = "ejs_scroller_2";
ejs_scroll_mode = 0;
}
else
{
ejs_scroller_bas = "ejs_scroller_1";
ejs_scroller_haut = "ejs_scroller_2";
ejs_scroll_mode = 1;
}
ejs_scroll_nb_message = ejs_scroll_message.length-1;
if(ejs_scroll_actuel == ejs_scroll_nb_message)
ejs_scroll_suivant = 0;
else
ejs_scroll_suivant = ejs_scroll_actuel+1;
if(document.getElementById)
document.getElementById(ejs_scroller_bas).innerHTML = ejs_scroll_message[ejs_scroll_suivant];
ejs_scroll_top = 0;
if(document.getElementById)
setTimeout("ejs_scroll_action()",ejs_scroll_pause_seconde*1000)
}
function ejs_scroll_action()
{
ejs_scroll_top -= 1;
document.getElementById(ejs_scroller_haut).style.top = ejs_scroll_top;
document.getElementById(ejs_scroller_bas).style.top = ejs_scroll_top+ejs_scroll_hauteur;
if((ejs_scroll_top+ejs_scroll_hauteur) > 0)
setTimeout("ejs_scroll_action()",10)
else
ejs_scroll_stop()
}
function ejs_scroll_stop()
{
ejs_scroll_actuel = ejs_scroll_suivant;
ejs_scroll_start()
}
window.onload = ejs_scroll_start;
</script>
L’affichage par défaut des listes et lignes de listes peut varier d’un navigateur à l’autre – il faut toujours tester et stabiliser avec des margin et padding explicites :
margin) par défaut est créée dans IE.padding) par défaut est créée dans les navigateurs « sains ».Voir ici : Styling an input type="file" <archivé>
références : httpd.apache.org – v. aussi https://craym.eu/tutoriels/…
Création et utilisation de « références » (autrement dit, des variables, réutilisables dans le code htaccess) (v. httpd.apache.org) :
En utilisant des parenthèses dans les lignes de condition (RewriteCond) ou de règle de réécriture (RewriteRule), on crée des références qui peuvent être résumées et rappelées par %N ou $N (« N » représentant le rang de la variable, dans l’ordre de création de ces variables).
%N : variables issues des lignes conditionnelles
$N : variables issues des lignes de règles de réécriture
Ex. :
RewriteEngine On
RewriteCond %{HTTP_HOST} !fb-graphic.com [NC]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.fb-graphic.com/$1?domaine=%1 [L]
traduction :
références :
www.webmaster-hub.com
www.magneto.be
https://craym.eu/tutoriels/…
On commence toujours le htaccess de réécriture d’url par le code suivant (cf. références) :
Options +FollowSymlinks
RewriteEngine on
On écrit éventuellement une ou plusieurs lignes de conditions de redirection sous la forme :
RewriteCond %{HTTP_HOST} !www.fb-graphic.com [OR]
RewriteCond %{QUERY_STRING} !^123456$ [NC]
([OR] et [NC] sont des exemples de « flags »)
On écrit la règle de réécriture sous la forme :
RewriteRule ^(.*)\.htm$ $1.php [L]
la première partie (^(.*)\.htm$) représente ce qui doit être réécrit ; elle peut utiliser les expressions régulières et des variables
^ signifie « début de la chaîne obligatoirement »
$ signifie « fin de la chaîne obligatoirement »
la deuxième partie ($1.php) indique la forme de réécriture souhaitée ; elle peut utiliser des variables
$1 représente une variable
Pour une régle sans réécriture d’url, on utilise le signe -.
Exemple : RewriteRule \.(gif|jpg|png)$ - [F,L]
références :
www.webmaster-hub.com
httpd.apache.org
| [L] | Celui-ci vous semble familier, comme nous l’avons vu dans notre précédent exemple. Il mérite toutefois une précision. Lorsque le module de réécriture est actif, les règles sont lues séquentiellement et l’URL est comparée ligne à ligne avec le premier argument de celles-ci jusqu’à la dernière. Si une réécriture est effectuée, c’est la forme réécrite qui sera utilisée en entrée pour les règles suivantes. Le flag [L] permet de sortir prématurément de la boucle. |
| [R] [R=code] |
Dans ces deux formes une redirection est effectuée. Si l’argument code n’est pas précisé, une redirection 302 (déplacé temporairement) est effectuée. Si vous souhaitez faire savoir au navigateur/robot qu’une page a été remplacée définitivement, utiliser le code 301 comme dans : RewriteRule ^ancien\.html$ http://domaine.tld/nouveau.html [R=301,L] Dans ce cas précis, une réécriture « externe » s’impose (utilisation de http://…) |
| [F] | Forbidden – interdit. Retourne un code 403, par exemple : RewriteRule ^secret.html$ – [F] |
| [NC] | NoCase, ou « insensible à la casse ». La règle suivante : RewriteRule ^script\.php$ programme.php [NC,L] S’appliquera aussi bien à script .php, SCRIPT.PHP ou ScRiPt .PhP |
| [G] | Gone. Cette page n’existe plus et retourne une entête http 410 |
| [N] | Force l’analyse et l’exécution de toutes les règles en repartant du début de la liste. Ici encore, comme expliqué plus haut ([L]), c’est l’URL modifiée après exécution de la dernière règle qui est utilisée en entrée, et non l’URL originelle. Attention aux boucles infinies ! |
| [C] | Chain, chaînage avec la ou les règles suivantes jusqu’à la première règle ne se terminant pas par [C] Apache interprète ce flag comme suit : s’il y a réécriture (la règle est vérifiée), la règle suivante est exécutée avec la chaîne réécrite en entrée. Si la règle ne se vérifie pas, toutes les règles qui suivent jusqu’à la première ne comportant pas le flag [C] ne sont pas appliquées. |
| [QSA] | Query String Append. Rajoute le QUERY_STRING à la fin de l’expression, après la réécriture. À réserver pour la dernière règle de réécriture. Utilisée le plus souvent avec le flag [L], comme dans [QSA,L] |
QUERY_STRING = paramètres d’url
Avec le flag [QSA] on indique à la règle de réécriture qu’elle doit ajouter en fin d’url (et, le cas échéant, à la suite des paramètres existants dans la réécriture, avec « & ») les paramètres de l’url d’origine (avant réécriture).
Sans drapeau [QSA], le QUERY_STRING demandé par la réécriture remplace automatiquement celui d’origine, sinon, celui d’origine est automatiquement ajouté (si l’url réécrite n’en demande pas un nouveau donc) (ceci dépend peut-être des réglages de serveur).
Pour forcer la disparition de tout QUERY_STRING, il suffit de faire terminer la réécriture par un point d’interrogation et ne pas mentionner [QSA].
Exemples :
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?objet=stylo
RewriteRule ^.* http://www.fb-graphic.com/trouve.php [QSA,L]
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?trousse&objet=stylo
RewriteRule ^.* http://www.fb-graphic.com/trouve.php?trousse [QSA,L]
=> Une page cherche.php?objet=stylo deviendra http://www.fb-graphic.com/trouve.php?trousse
RewriteRule ^.* http://www.fb-graphic.com/trouve.php?trousse [L]
=> Une page cherche.php?objet=stylo » deviendra http://www.fb-graphic.com/trouve.php
RewriteRule ^.* http://www.fb-graphic.com/trouve.php? [L]
Un cookie n’est valide et lisible que pour l’hôte (domaine) qui l’a créé.
L’utilisation d’une chaîne optionnelle « domain » dans setcookie en php (v. fr.php.net/manual) ou dans document.cookie (JavaScript) n’est pas probante voire est totalement impossible.
Une solution consiste à appeler une page du domaine ciblé (B) dans une page html du domaine initial (A) dans un <object>, la page appelée contenant le script de création de cookie. Ce cookie sera automatiquement attaché au domaine B.
Si la page appelée doit être masquée dans la page « mère », on peut appliquer à l’<object> des dimensions h. et l. et des marges négatives de mêmes valeurs. Un simple style display:none rend inopérant le script dans certains navigateurs (Google Chrome) et l’idée de masquer <object> en le plaçant simplement dans le header n’est pas valable dans tous les navigateurs.
Le délai du cache est réglable généralement en tête de code des templates ; il est exprimé en secondes.
exemple (dist/rubrique.html) : #CACHE{3600} pour un rafraichissement après 1 heure.
Il est également possible d’intervenir globalement dans le fichier ecrire/public/cacher.php pour le délai et réglage du cache.
Les fichiers htaccess et associés, les fichiers textes, doivent être téléchargés en mode ascii !
[include-post id= »640″]
blog.deconcept.com (méthode avec JavaScript)
www.moock.org
méthode Satay (valide W3C)
CSS – tester la typo courante : http://typetester.maratz.com/
Accessibilité : http://validateur-accessibilite.apinc.org/
Pour utiliser plusieurs versions d’Internet Explorer en même temps :
http://www.my-debugbar.com/wiki/IETester/HomePage
Archives de navigateurs :
http://www.oldversion.com/
http://browsers.evolt.org/
http://sillydog.org/narchive/
http://mac.oldapps.com/browsers.php
Vous pouvez trouver quelques-unes des principales archives des navigateurs les plus courants dans ce répertoire : http://www.fb-graphic.com/-archives/navigateurs/
d’après www.phpcs.com/codes/ENVOI-MAIL-AVEC-PIECE-JOINTE_26501.aspx (+ exemple d’envoi de 2 pièces-jointes) :
<?php
// function mail_attachement($to , $sujet , $message , $fichier , $typemime , $nom , $reply , $from){
$to = "destinataire@domaine.tld";
$sujet = "test envoi pj";
$message = "un test";
$fichier = "test.jpg";
$typemime = "image/jpeg";
$nom = "test.jpg";
$reply = "expediteur@domaine.tld";
$from = "expediteur@domaine.tld";
$limite = "_parties_".md5(uniqid (rand()));
$mail_mime = "Date: ".date("l j F Y, G:i")."\n";
$mail_mime .= "MIME-Version: 1.0\n";
$mail_mime .= "Content-Type: multipart/mixed;\n";
$mail_mime .= " boundary=\"----=$limite\"\n\n";
// Le message en texte simple pour les navigateurs qui n acceptent pas le HTML
$texte = "This is a multi-part message in MIME format.\n";
$texte .= "Ceci est un message est au format MIME.\n";
$texte .= "------=$limite\n";
$texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$texte .= "Content-Transfer-Encoding: 7bit\n\n";
$texte .= $message;
$texte .= "\n\n";
// le fichier
$attachement = "------=$limite\n";
$attachement .= "Content-Type: $typemime; name=\"$nom\"\n";
$attachement .= "Content-Transfer-Encoding: base64\n";
$attachement .= "Content-Disposition: attachment; filename=\"$nom\"\n\n";
$fd = fopen( $fichier, "r" );
$contenu = fread( $fd, filesize( $fichier ) );
fclose( $fd );
$attachement .= chunk_split(base64_encode($contenu));
$attachement .= "\n\n\n------=$limite\n";
// return mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\nFrom: $from\n".$mail_mime);
mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\nFrom: $from\n".$mail_mime);
// }
?>
Pour trouver la longueur d’un tableau (array) en php :
count($array)
Le site de référence pour PHP et les fonctions PHP :
<?php echo $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?><?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; ?>
Pour récupérer la chaîne de caractères (valeurs de variables…) passés dans l’url après le » ? » : $_SERVER['QUERY_STRING'] :
exemple :
<?php
if ( ($_SERVER['QUERY_STRING']) == '' ) {
// si l'url ne contient aucun parametre (donnees apres un point d'interrogation),
// on fait une redirection :
header('Location: index.php?rubrique1');
}
?>
<?php
if ( ($_SERVER['QUERY_STRING']) == '' ) {
// si l'url ne contient aucun parametre (donnees apres un point d'interrogation),
// on fait une redirection :
header('Location: index.php?rubrique1');
}
?>
La commande pour rediriger une url est simplement :
header('Location: chemin_souhaite')
header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.
Corrections apportées à IE 6 et IE 5.5 par ce patch :
voir aussi :
http://www.christopher-jablonski.com/fr/reperes/
https://sourceforge.net/
http://dean.edwards.name/IE7/install.html
http://dean.edwards.name/IE7/usage/
http://www.estvideo.com/
Le patch de Dean Edwards agit uniquement :
Voir un modèle de boîtes flottantes.
Remarques :
clear: both vienne à la suite des blocs flottants dans le même bloc contenantoverflow: hidden il est utile de lui attribuer la propriété overflow: hidden;.
clear (suite pour le cours du texte)
Avec clear : on peut interrompre le cours du texte pour en forcer la poursuite sous l’élément/le passage entouré. Les données suivantes sont possibles :
clear: left impose pour float: left la poursuite en dessous.
clear: right impose pour float: right la poursuite en dessous.
clear: both impose dans chaque cas la poursuite dessous.
clear: none n’impose pas de poursuite dessous. (réglage normal).
Un exemple
le css :
#conteneur {
padding: 5px;
background: #F8F8F8;
border: 1px solid #666666;
width: 380px;
overflow: hidden; /* étend la hauteur du bloc pour contenir tous les blocs flottants */
}
.float {
width: auto; /* mention width indispensable si mention float présente */
background: #FFFFFF;
border: 1px solid #000000;
float: left;
padding: 5px;
margin: 2px;
}
le html :
<div id="conteneur"> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> <div class="float">bloc flottant</div> </div>
référence : http://www.w3.org/International/
« Les navigateurs grand public actuels peuvent afficher un fichier HTML soit en mode « standard » soit en mode « quirks ». Cela signifie que des règles d’affichage différentes seront appliquées au fichier, la première se conformant à une interprétation du comportement attendu conforme aux standards du w3C, la seconde se conformant à d’autres attentes basées sur le comportement non standard des anciens navigateurs. […] »
C’est LA galère du CSS (lorsqu’on cherche à appliquer le centrage vertical sur des objets de hauteur variable).
voir l’article d’Alsacreations sur le sujet
Le plus intéressant est parfois de se résoudre à recourir à une cellule de tableau pour centrer verticalement un élément – parfois d’ailleurs la seule façon d’obtenir exactement le résultat voulu :
<table> <tr><td style="vertical-align:middle"><img src="image.jpg"></td></tr> </table>
On peut utiliser la méthode avec filter + AlphaImageLoader :
objet {
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader([Enabled], sizingMethod, src)
}
avec pour sizingMethod la valeur scale (l’image s’étire pour couvrir la surface de l’objet) ou crop (dimension originale fixe)
références :
http://msdn.microsoft.com/en-us/library/ms532969(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms532920(VS.85).aspx
Autres méthode pour les PNG-24 ici : sur le blog de la blonde.
un article : http://css-tricks.com/css-transparency-settings-for-all-broswers/
div.transparent {
opacity: 0.5;
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
}
opacity : 0.5; est la norme CSS
filter:alpha(opacity=50); est spécifique à IE
-moz-opacity : 0.5; pour les navigateurs « Mozilla » anciens (Netscape…)
-khtml-opacity : 0.5; pour les navigateurs « khtml » anciens (Safari 1.x…)
Le contenu d’un bloc transparent devient normalement lui aussi transparent.
rappel : pour être reconnus les fichiers doivent être téléchargés en mode ascii !
# fichier .htaccess pour le répertoire prive AuthType Basic AuthName "espace prive" AuthUserFile /usr/local/etc./htdocs/www/lesite/prive/.htpasswd AuthGroupFile /usr/local/etc./htdocs/www/lesite/prive/.htgroups require user Audrey Christian Antoine require group techniciens
note à propos du chemin réel sur le serveur (décrit à AuthUserFile et AuthGroupFile) :
il est possible de connaître ce chemin à l’aide de php. Il suffit de créer un fichier php avec le code <?php echo realpath("index.php"); ?> (s’il n’y a pas de fichier index.php dans le répertoire de ce fichier, indiquer un fichier existant ou encore ce fichier lui-même).
# Fichier .htaccess pour le répertoire prive AuthType Basic AuthName "espace-Service" AuthUserFile /usr/local/etc/httpd/htdocs/www.lesite.com/prive/.htpasswd AuthGroupFile /usr/local/etc/httpd/htdocs/www.lesite.com/prive/.htpasswd.htgroups <Files *.htm> require user Audrey Christian Antoine require group techniciens </Files>
selfhtml : « Dans le repère d’ouverture, derrière la parenthèse pointue d’ouverture, peut figurer soit Files, comme dans l’exemple ci-dessus, soit Limit. Derrière, vous pouvez faire uniquement une mention restrictive. Avec *.htm comme dans l’exemple, vous limitez la protection aux fichiers HTML. Avec une mention comme secret.htm ce seul et unique fichier serait protégé. Avec Limit vous pouvez limiter la méthode d’accès par exemple à GET ou bien à POST. »
# Fichier d'utilisateurs pour le repertoire "prive" Audrey:INGoUvP4QNWNM Michel:INw2mPEH.owe2 Christelle:INt4TUI7dOlQ6 Fanny:IN0w9l5E2Rltw Norbert:INP0Mscg62Cbg Diane:INbi/z9y/ogns Christine:INmkm1zgB8qGk Gaspard:INeRD/cUQIFP6 Christian:INL8hI.TVvsds Antoine:INEyrT70PYPlo
Les mots de passe sont cryptés.
Attention : Free n’autorise pas le cryptage des mots de passe.
# Fichier de groupe pour le repertoire "prive" techniciens: Gaspard Diane Christelle
Les favicons peuvent être fixes ou animés (gif animé).
page de référence W3C : www.w3.org/2005/10/howto-favicon