Verwaiste Datein im IPS Scriptvz. finden

Hier ein kleines Script um verwaiste Datein im IPS Scriptvz. zu finden.
Hinweise:

  • evtl. vorher den Ordner deleted löschen, sonst findet er diese Dateien auch
  • es können evtl. Probleme bei umbenamsten Scripten auftreten

Achtung Benutzung auf eigene Gefahr!
Findet keine Dateien die über include oder ähnliche Befehle eingebunden wurden!


<?
    ############################### User Config #################################

    //Scriptvz. von IPS
   $dir = IPS_GetKernelDir()."scripts/";
   //Dateien die nicht ausgegeben werden sollen
    $hide = array('__compatibility.inc.php','__autoinclude.inc.php');

   #############################################################################

   $out  = array();
   $ids  = IPS_GetObjectList();

    scan($dir);
    sort($out);
    
    $result = $out;
    $array1 = array();
   foreach ($ids as $id)
   {
       if( IPS_GetObject($id)['ObjectType'] == 3 )
      {
          $name     = IPS_GetScriptFile($id);
         $array1[] = $name;
      }
    }

   $array2 = array();
   foreach( $result as $key => $value )
    {
       if ( !in_array( $value , $array1 ) )
        {
          $array2[] = $value;
      }
    }

    print_r($array2);

    function scan($folder)
    {
        global $hide, $out;
          if($content = opendir($folder))
          {
            while(false !== ($file = readdir($content)))
             {
                if(is_dir("$folder/$file") && $file != "." && $file != ".." && !in_array($file, $hide))
                {
                    if( !is_dir($file) ) $out[]= $file;
                   scan("$folder/$file");
              }
                elseif($file != "." && $file != ".." && !in_array($file, $hide))
                {
                    if( !is_dir($file) )
                   $out[]= $file;
              }
            }
            closedir($content);
          }
          return $out;
    }
?>

Besipiel einer Ausgabe:


    [0] => 10336.ips.php
    [1] => 18596 php_mailer_connector.ips.php
    [2] => 25163.ips.php
    [3] => 39791.ips.php
    [4] => 43000.ips.php
    [5] => 49907.ips.php
    [6] => 52755.ips.php
    [7] => 56600.ips.php
    [8] => IPSInstaller.ips.php
    [9] => SZ_Musik_Aus.ips.php
    [10] => Start.ips.php
    [11] => Thomas.ips.php
    [12] => Thomas_Schlummermodus.ips.php
    [13] => ZZ_Modus.ips.php

Hallo
Irgendwas stimmt noch nicht. Habs getestet und bei mir zeigt er nur Dateien an
die im „letzten“ Ordner sind. Die im DeletedOrdner werden garnicht angezeigt.
Ein print_r($result) gleich nach read_dir($dir);
bringt nur die Files im letzten Ordner, die aber doppelt.

Kann eigentlich nicht sein.
Poste mal das Ergebnis foldender Zeilen nach read_dir($dir);


print_r($anzei);
return;

Ein print_r($anzei) bringt eine Riesenliste aller meiner Scripte mit Ordnernamen

Array
(
    [0] => C:\Program Files (x86)\IP-SYMCON\scripts//.currentscript
    [1] => C:\Program Files (x86)\IP-SYMCON\scripts//10253.ips.php
    [2] => C:\Program Files (x86)\IP-SYMCON\scripts//10884.ips.php
    [3] => C:\Program Files (x86)\IP-SYMCON\scripts//11267.ips.php
    [4] => C:\Program Files (x86)\IP-SYMCON\scripts//11800.ips.php
    [5] => C:\Program Files (x86)\IP-SYMCON\scripts//12267.ips.php
    [6] => C:\Program Files (x86)\IP-SYMCON\scripts//12469.ips.php
    [7] => C:\Program Files (x86)\IP-SYMCON\scripts//16456.ips.php
    [8] => C:\Program Files (x86)\IP-SYMCON\scripts//16690.ips.php
    [9] => C:\Program Files (x86)\IP-SYMCON\scripts//16857.ips.php
    [10] => C:\Program Files (x86)\IP-SYMCON\scripts//19272.ips.php
    [11] => C:\Program Files (x86)\IP-SYMCON\scripts//19446.ips.php
    [12] =

Ein print_r($result) bringt nur die Files im letzten Ordner ohne Ordnernamen

Array
(
    [0] => allgemeinertest.ips.php
    [1] => checkversion.ips.php
    [2] => outlook.ips.php
    [3] => test.ips.php
    [4] => test_refresh.ips.php
    [5] => watchdog.ips.php
    [6] => allgemeinertest.ips.php
    [7] => checkversion.ips.php
    [8] => outlook.ips.php
    [9] => test.ips.php
    [10] => test_refresh.ips.php
    [11] => watchdog.ips.php
)

läuft einwandfrei !

Das Script findet bei mir 245 Scripte- da drau ich mir gar nichts löschen :wink:

Ach denn „deleted“ ordner löschen, hab ich vergessen…

@1007

Ich konnte Dein Problem nachstellen.
Neuer Versuch im ersten Beitrag.
Bitte um Info ob es jetzt funktioniert.
Es gab ein Problem in der Recursion wenn diverse Unterverzeichnisse existierten.

Hallo

  1. Das neue Script funktioniert.
  2. Aber !!

Problem ist eigentlich das urspruengliche Problem.
Was ist eine eine „verwaiste Datei“ und was nicht?
Ich hab bei der Ausgabe 1495 Dateien.
Es werden ja nur die Dateinamen angezeigt , aber nicht in welchem Ordner.
Wer zB die IPSLibrary hat wird jede Menge Scripts haben die angezeigt werden aber
wohl nicht im „Baum“ sind.
Bei der IPSLibrary gibt es auch „ini“ Files die ja auch angezeigt werden.
Ich weiss nicht ob der Aufwand lohnt.
Man koennte ja Folders ausnehmen ( DELETED , IPSLibrary ) und nur den root nehmen aber
da faengt der Stress schon an.
Wie gesagt es funktioniert und listet ALLE Dateien auf die im"Baum" nicht vorhanden sind.
Ob sie benutzt werden oder nicht sollte dann der User entscheiden.
Ich steh hier vor 1495 Files meld mich dann wenn ich durch bin :wink:

Das es jetzt funktioniert ist ja erst einmal schön.

Mein Script ist lediglich eine Hilfe es kann und will keine Automatik sein.