2016-08-29 6 views
0
<?php 
error_reporting(E_ALL); 
ini_set('display_errors' ,1); 

//expression to be found in file name 
$find = '.5010.'; 

//directory name 
//we will store renamed files here 
$dirname = '5010'; 
if(!is_dir($dirname)) 
    mkdir($dirname, 0777); 

//read all files from a directory 
//skip directories 
$directory_with_files = './'; 
$dh = opendir($directory_with_files); 
$files = array(); 
while (false !== ($filename = readdir($dh))) 
{ 
    if(in_array($filename, array('.', '..')) || is_dir($filename)) 
     continue; 

    $files[] = $filename; 
} 

//iterate collected files 
foreach($files as $file) 
{ 
    //check if file name is matching $find 
    if(stripos($file, $find) !== false) 
    { 

     //open file 
     $handle = fopen($file, "r"); 
     if ($handle) 
     { 
      //read file, line by line 
      while (($line = fgets($handle)) !== false) 
      { 

       //find REF line 
       $refid = 'REF*2U*'; 
       if(stripos($line, $refid) !== false) 
        { 
        //glue refernce numbers 
        //check if reference number is not empty 

        $refnumber = str_replace(array($refid, '~'), array('', ''), $line); 
       if($refnumber != '') 
        { 
       $refnumber = '_'. $refnumber .'_'; 

       $filerenamed = str_replace($find, $refnumber, $file); 
        copy($file, $dirname . '/' . $filerenamed); 
         } 

       echo $refnumber . "\n"; 
        } 
      } 

      //close file 
      fclose($handle); 
     } 
    } 
} 

?> 

Ich habe diesen Code, der Ausgang sollte der Ersatz von ".5010." mit "ref" im endgültigen Namen, jedoch, wenn ich den Code ausführen, zeigt es mir nur, um nicht den Rest des Dateinamens, ich versuchte es auf meinem Computer Kitt und stellt sich heraus, gibt es ein "?" nach der ref-nummer, gibt es eine möglichkeit, das zu beheben?Unerwartete Ausgabe für Dateiname

Zum Beispiel; Meine Datei

4867586.5010.476564.ed wird, nachdem der Code ausgeführt und liest die Datei, sollte die Ausgabe sein: 4867586_SMIL01_476564.ed sondern seine: 4867586_SMIL01

Und wenn ich es auf Kitt Name der Datei ausgecheckt wurde : 4867586_SMIL01? _476564.ed

+0

Ich verstehe nicht, wo ist das "?" kommen von? Und was versuchst du zu erreichen? Sie sollten auch ein Beispiel für die aktuelle Verzeichnisstruktur und Dateien angeben, wie es mit dem aktuellen Code aussieht und wie es aussehen soll. –

+0

Okay, bitte überprüfen Sie es, ich habe es behoben. Ich denke es ist, weil ich die alte Version von PHP verwende, also gibt es eine Möglichkeit, dass das das Problem ist und wie man es beheben kann? @Passerby –

+0

Das Problem ist höchstwahrscheinlich mit dieser Zeile: '$ refnumber = str_replace (Array ($ refid, '~'), Array ('', ''), $ -Zeile);'. Können Sie bestätigen, dass die .ed-Datei kein '?' oder ungültige Zeichen? –

Antwort

1

Die ? im Dateinamen bedeutet, dass es ein non-printable Zeichen irgendwo in der refnumber Zeile gibt.

Dies ist höchstwahrscheinlich ein Zeilenendezeichen oder etwas anderes.

$refnumber = str_replace(array($refid, '~'), array('', ''), $line); 

zu

$refnumber = str_replace(array($refid, '~'), array('', ''), $line); 
$refnumber = trim($refnumber); // remove any whitespaces or line endings. 

Falls die letzten sind, dann werden Sie Ihr $refnumber Variable mit einem der sanieren müssen: Wenn es die frühere ist, dass kann dann durch Änderung der Leitung gelöst werden Datei Desinfektionsfunktionen online verfügbar.

+0

Hey kannst du dir meine andere Frage ansehen, wenn es nicht zu viel Mühe macht? –

Verwandte Themen