heure UNIX

dcèle2
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 05:36

Bonjour,

j'ai un petit problème avec les dates de fichiers.

J'explique ma situation : mes fichiers sont datés par le système quand je les envoie par FTP. Je ne contrôle pas le serveur du FAI (pourtant français). Ses machines sont à l'heure mais pas dans le fuseau horaire français (c'est mon hypothèse non vérifiée) (d'ailleurs je ne sais pas comment obtenir le timezone du serveur).

Par contre php est bien configuré pour notre heure légale, dans le bon fuseau horaire (la fonction date le confirme).

Mais si je récupère l'heure d'un fichier avec filemtime() puis que je tente d'afficher avec date alors il y a un décalage horaire ! Il ne m'indique pas l'heure (française) à laquelle le fichier a été réellement enregistré.

L'objectif est donc d'afficher les dates des fichiers en heure légale française.

Merci aux aideurs...

Eléphant du PHP | 259 Messages

21 juin 2007, 13:07

hello,
date_default_timezone_set( 'Europe/Paris' );
Devrait répondre a ton probleme normalement.
A savoir, si la TZ est pas configurée dans ton php.ini et que tu affiches les erreurs E_STRICT, tu es toujours obligé d'utiliser cette fonction dès lors que tu fais appel à une fonction de date.

Accessoirement essaye cette fonction sur ton script ou tu veux jouer avec date_sunrise() (cf ton autre post)

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 15:03

hello,
date_default_timezone_set( 'Europe/Paris' );
Devrait répondre a ton probleme normalement.
A savoir, si la TZ est pas configurée dans ton php.ini et que tu affiches les erreurs E_STRICT, tu es toujours obligé d'utiliser cette fonction dès lors que tu fais appel à une fonction de date.

Accessoirement essaye cette fonction sur ton script ou tu veux jouer avec date_sunrise() (cf ton autre post)
C'est gentil à toi, mais ce n'est pas le problème : comme je le disais, le code PHP est déjà configuré sur le bon timezone ! (désolé)... et qui plus est pour le sunrise, j'ai aussi vérifié le résultat des exemples de la doc, avec leurs timezones, ça donnait les mauvais horaires.

As-tu réussi à obtenir de bons résultats avec la fonction sunrise pour ta part ?

dcèle2
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 15:13

Ah oui tiens, d'ailleurs, tu fais bien de me le faire remarquer...

il y avait deux messages aussi parce qu'il y avait deux php, j'ai tout mis dans le même forum c'était peut-être une erreur... Le problème sunrise c'est php5. Mon problème de dates de fichiers c'est en php4... (et pas 5).

je le précise, c'est vrai que je ne l'avais pas dit.

Eléphant du PHP | 259 Messages

21 juin 2007, 17:23

En ce qui concerne sunrise, aucune idée, jamais eu l'occasion de m'en servir.

En ce qui concerne filemtime, autant PHP peut etre configuré pour un fuseau horaire quelconque, autant l'heure systeme du serveur peut etre sur un autre. Et il me semblerait logique que l'enregistrement de fichier se fasse avec l'heure systeme. Et là je crois pas qu'il y ait de modifications possibles. La seule chose que tu puisse faire est de rajouter (ou soustraire) le décalage par rapport à l'heure francaise.

A moins qu'il existe une fonction quelconque mais ça m'etonnerait.

Bon courage :)

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 17:43

C'est une super bonne analyse... c'est dommage que le fuseau horaire ne soit pas enregistré dans l'heure du fichier (car après tout on peut changer le réglage entre temps de TZ)

mais alors si, une commande qui permettrait de savoir le fuseau horaire non pas php mais système ça serait pas mal; faut essayer des constantes $_SERVER ? ou peut-être du getenv ?

la variable unix c'est quoi ? TZ ?
je vais essayer des choses du genre ...

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 17:54

oh là là c'est complexe:

cet exemple montre que c'est complexe :
http://forum.ovh.com/showthread.php?t=505

par contre il ne donne pas la solution. Est-ce que qqn a une expérience et une solution pour savoir la date d'un fichier (la date réelle ou avec un décalage horaire connu) ???

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 juin 2007, 18:48

Bonjour,

Une solution possible serait d'effectuer une connexion FTP avec PHP, d'y placer un fichier vide et de faire la différence entre l'heure à laquelle tu a envoyé le fichier et l'heure renvoyé par le serveur.

Sans faire d'upload, tu peux également faire la même manip sur un fichier déjà existant avec la fonction ftp_mdtm()
http://fr.php.net/ftp_mdtm

Dès que tu connais le décalage entre le FTP et l'heure française, tu pourras avec une simple soustraction déterminer l'heure d'envoi réelle de tes fichiers.

Autre piste: plusieurs serveurs FTP indique l'heure dans leur message de bienvenue.
Pour l'obtenir, sous Windows, fait Démarrer, Exécuter, là tu tapes "ftp ton_serveur_FTP.com" (sans les guillemets) et [OK]

Tu pourrai obtenir quelque chose de ce genre:
220---------- Welcome to Pure-FTPd ----------
220-You are user number 2 of 100 allowed.
220-<<
220-Serveur dédié Celeonet.
220-
220-Vous êtes connecté à un serveur Ftp.
220->>
220-Local time is now 18:52. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 5 minutes of inactivity.
Quand tout le reste a échoué, lisez le mode d'emploi...

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 19:13

Merci.
Bien sûr cela donne un résultat. Cependant je trouve cela bancal et peu fiable : si le serveur est remis à l'heure ou change d'heure, ça recommence.

Y'a quand même un truc "pas fiable" je trouve avec les dates de fichiers .
- pas de TZ mémorisé dans le fichier
- des décalages horaires différents selon la méthode de sauvegarde.

Pas très pro tout ça...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 juin 2007, 22:31

Bien sûr cela donne un résultat. Cependant je trouve cela bancal et peu fiable : si le serveur est remis à l'heure ou change d'heure, ça recommence.
[...]
Pas très pro tout ça...
Ce qui est bancal surtout c'est d'avoir un serveur qui n'est pas à l'heure (et pourtant ce n'est pas dur de se synchroniser à un serveur de temps) ou qui ne serait pas sur un fuseau horaire fixe :lol:

Y'a quand même un truc "pas fiable" je trouve avec les dates de fichiers .
- pas de TZ mémorisé dans le fichier
Je vois mal comment ça serait possible :-D la date de création d'un fichier est une propriété du système de fichiers...
Toutefois, rien ne t'empèche de faire un fichier texte ou une base de données avec les heures d'upload de tes fichiers. Tu va te faire chier probablement pour pas grand chose mais si cette propriété est importante pour ton projet alors ça vaudra peut être le coup.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 259 Messages

21 juin 2007, 22:53

A la limite tu peux tenter un touch() sur les fichiers pour remettre les pendules à l'heure. Sans grande conviction toutefois ;)

Invité
Invité n'ayant pas de compte PHPfrance

21 juin 2007, 23:29

Le système sait dans quel fuseau horaire il est supposé être et son heure : il pourrait très bien stocker les deux infos, je ne vois pas en quoi ça serait dur. C'est juste que ça n'a pas été prévu. Mais ça serait pas mal du tout.