Pour chaque document (.pdf, .txt, .docx ECC) J'ai également un fichier JSON correspondant avec le même nom de fichier.

Exemple: file1.json, fichier1.pdf, fichier2.json, fichier2.txt, filex.json, filex.pdf,

Mais j'ai également reçu des fichiers JSON qui ne sont pas accompagnés du document correspondant.

Je souhaite supprimer tous les fichiers JSON qui n'ont pas de document correspondant. Je suis vraiment coincé parce que je ne trouve pas une solution appropriée à mon problème.

Je sais comment scandir () obtenez le nom de fichier, des extensions de pathinfo () ECC. Mais le problème est que pour chaque fichier JSON, je trouve dans l'annuaire, je dois effectuer un autre pour acheter dans ce répertoire à l'exclusion de tous les fichiers JSON et voir si le même nom de fichier existe ou non plus que je peux décider de la supprimer. (Voici comment je pense que je pense résoudre).

Le problème ici est avec la performance, car il y a des millions de fichiers et pour chaque JSON, je dois exécuter une foreach sur des millions de fichiers.

Quelqu'un peut-il me guider dans une meilleure solution?

Je vous remercie!

Edit: Puisque personne ne vous aidera sans d'abord poster un morceau de code (et cette approche à Stackoverflow est définitivement erronée) Voici comment j'essaie.:

<?php

$dir = "2000/";

$files = scandir($dir);

foreach ($files as $file) {

    $fullName = pathinfo($file);

    if ($fullName['extension'] === 'json') {
        if (!in_array($fullName['filename'].'.pdf', $files)){
            unlink($dir.$file);
        }
    }
}

Comme vous pouvez le voir, je ne peux que rechercher uniquement un type de document (.pdf dans ce cas). Je souhaite rechercher chaque extension excluant .json et je ne veux pas aussi que pour chaque fichier JSON exécute une entreprise / in_array () mais la réalisation de tout cela dans une seule entreprise.

1
Marinario Agalliu 4 mai 2021 à 12:59

1 réponse

Meilleure réponse

Peut-être que vous devriez considérer cela d'une autre manière? Je veux dire, itérale à travers tous les fichiers et essayer de trouver des fichiers correspondants à json, si non trouvé, supprimez-le.

On dirait que tu suit:

$dir = "2000/";

foreach (glob($dir . "*.json") as $file) {
    $file = new \SplFileInfo($dir . $file);
    if (count(glob($dir . $file->getBasename('.' . $file->getExtension()) . ".*")) === 1) {
        unlink($dir . $file->getFilename());
    }
}

Manuel

PHP: splfileinfo

PHP: Glob

1
Karol Gasienica 4 mai 2021 à 12:08