CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [PHP] Alternative à la function touch ?

DébutPage précedente
1
Page suivantePage suivante
GrandeGuerre GrandeGuerre
MP
Niveau 11
23 avril 2019 à 22:31:26

Hello,

Il y a peu j'ai une grande quantité d'images (~10'000) qui ont perdu leur date de modification. Conséquence, c'est un enfer de les trier manuellement, mais heureusement elles possèdent la date dans leur nom (sous forme IMG-YYYYMMDD).

J'ai donc voulu utiliser la fonction touch ( https://www.php.net/manual/fr/function.touch.php ) qui semble avoir des soucis sur Windows. Cependant je suis en version de PHP 7, donc ça devrait fonctionner. :(

Voilà mon bout de code (dégueulasse hein, mais détails :noel: )

<?php

/* This script is used to edit datetime of files */
/* You need a subfolder called "folder" to put your files into */

$files = scandir('folder');
$i = count($files);
$e = 0;
foreach($files as $file) {
	if (preg_match("/IMG\-[0-9]{8}\-.*/", $file)) {
		$date = explode("-", $file)[1];
		$val = strtotime($date);
		echo $val . " ( " . $date . " )<br>";
		echo touch( __DIR__ . '/' . $file, $val, $val) ? "ok <br>" : "ko <br>";
		var_dump( stat($file)) . "<br>";
	}
	else {
		$e++;
	}
}

echo "Il y a $i fichiers, dont $e n'ont pas été modifiés";

Pourtant quand je regarde mon var_dump, il m'indique que ctime et atime sont modifiés, mais rien ne s'affiche sur mon Windows. :pf:
var_dump : https://puu.sh/DiSeD/5c7d68c7a1.png (avec en haut le comparatif timestamp / date)
Display Windows : https://puu.sh/DiSiI/98fdd73580.png

A partir de là, est-ce qu'il y a des alternatives à cette fonction touch ? Ou bien il faut que j'aille installer un Ubuntu en machine virtuelle pour le plaisir de lancer un script de 10 lignes ? :hap:

godrik godrik
MP
Niveau 22
24 avril 2019 à 01:27:49

ton code il tourne dans un serveur apache ou un truc du genre, ou tu t'en sert en ligne de commande?

(Je demande parcequ'il y a des gens qui disent: PHP won't touch if it is not the current owner of the file, even if the directory and files are writeable by the PHP user.)

20_cent_2017 20_cent_2017
MP
Niveau 10
24 avril 2019 à 13:32:02

Le 23 avril 2019 à 22:31:26 GrandeGuerre a écrit :
Hello,

Il y a peu j'ai une grande quantité d'images (~10'000) qui ont perdu leur date de modification. Conséquence, c'est un enfer de les trier manuellement, mais heureusement elles possèdent la date dans leur nom (sous forme IMG-YYYYMMDD).

J'ai donc voulu utiliser la fonction touch ( https://www.php.net/manual/fr/function.touch.php ) qui semble avoir des soucis sur Windows. Cependant je suis en version de PHP 7, donc ça devrait fonctionner. :(

Voilà mon bout de code (dégueulasse hein, mais détails :noel: )

<?php

/* This script is used to edit datetime of files */
/* You need a subfolder called "folder" to put your files into */

$files = scandir('folder');
$i = count($files);
$e = 0;
foreach($files as $file) {
	if (preg_match("/IMG\-[0-9]{8}\-.*/", $file)) {
		$date = explode("-", $file)[1];
		$val = strtotime($date);
		echo $val . " ( " . $date . " )<br>";
		echo touch( __DIR__ . '/' . $file, $val, $val) ? "ok <br>" : "ko <br>";
		var_dump( stat($file)) . "<br>";
	}
	else {
		$e++;
	}
}

echo "Il y a $i fichiers, dont $e n'ont pas été modifiés";

Pourtant quand je regarde mon var_dump, il m'indique que ctime et atime sont modifiés, mais rien ne s'affiche sur mon Windows. :pf:
var_dump : https://puu.sh/DiSeD/5c7d68c7a1.png (avec en haut le comparatif timestamp / date)
Display Windows : https://puu.sh/DiSiI/98fdd73580.png

A partir de là, est-ce qu'il y a des alternatives à cette fonction touch ? Ou bien il faut que j'aille installer un Ubuntu en machine virtuelle pour le plaisir de lancer un script de 10 lignes ? :hap:

Windows c'est de la merde .... et tu peux surement faire ça en shell
a mon avis modifie plutôt dans le mime windows est sensé récupérer la date de prise de vue. Sinon ta des outils de gestion de media qui existe...

et windows fais le taf ..

GrandeGuerre GrandeGuerre
MP
Niveau 11
25 avril 2019 à 12:00:20

Hello, et merci pour vos deux réponses !

Je lance ça sur un serveur Apache en localhost, et le problème ne vient pas de Windows mais d'un bon vieux PEBCAK des familles. :noel:
C'est à présent corrigé, mais mon code je faisais ça :

$files = scandir('folder');
[...]
        echo touch( __DIR__ . '/' . $file, $val, $val) ? "ok <br>" : "ko <br>";

Donc forcément si je fais un scandir d'un sous-dossier et que je touch pas dans le sous-dossier, ça marche pas. :hap:

Quoiqu'il en soit ça fonctionne très bien, l'étape suivant c'est que le périphérique cible arrête de modifier les valeurs de modification à la date de copie du fichier. :siffle:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment