2016-06-07 8 views
0

Also, ich habe eine .TXT-Datei mit Pfaden meiner fehlenden Dateien. Ich möchte ein kleines PHP-Skript schreiben, das nur diese Dateien erstellt und sie leer lässt. DiesesWie erstellt man mehrere Dateien mit unterschiedlichen Namen und in verschiedenen Ordnern? php

xxx/yyy/xyxy/a/w/r/obvestilo.pdf 
xxx/yyy/xyxy/b/print.pdf 
xxx/yyy/xyxy/c/speach.doc 

ist ein Beispiel dafür, wie ich die Dinge in meiner .txt-Datei von fehlenden Dateien. Ich möchte, dass das Skript mir diese Dateien und auch Ordner erstellt, wenn sie noch nicht existieren, aber ich habe keine Ahnung, wo ich anfangen soll. Ich dachte daran, diese .txt-Datei in ein Array zu übertragen und dann durch alle Array-Elemente, die sie erzeugen, zu durchlaufen.

+0

Sie etwas versucht haben? – gontrollez

+0

@gontrollez versuche gerade jetzt, ohne Erfolg ... Ich kann nicht scheinen, TXT-Datei in Array zu setzen ... – user3029612

+0

Ich denke, was ich habe, sollte Ihnen mit ein paar Optimierungen helfen, wenn nötig. Bitte schau dir meine Antwort an. – phreakv6

Antwort

1

Bitte versuchen Sie diese

$fp = fopen('files.txt','r'); 
while(($buffer = fgets($fp,4096)) !== false) { 
    $directory = substr($buffer,0,strrpos($buffer,'/') + 1); 
    mkdir($directory, 0755, true); 
    touch(trim($buffer)); 
} 

files.txt Ihre Dateien im Format haben Sie in Ihrem Beitrag haben.

Die mkdir($directory, 0755, true); erstellt das erforderliche Verzeichnis rekursiv und die touch erstellt eine leere Datei.

+0

Danke, das hat mir geholfen. – user3029612

+0

Großartig. Bitte akzeptiere die Antwort dann. Vielen Dank! – phreakv6

-1

Sie können diese Methode verwenden, um zufällige Namen bestimmter Längen zu erstellen.

/* 
    * 
    * Get Random number(5 digit) 
    * @param int: 5 
    * @return alphnumeric string: length(5) 
    */ 

    public function getRandomNumber($length, $charset = 'abcdefghijkmnopqrpdctvwxyz3456789') { 
     $str = ''; 
     $count = strlen($charset); 
     while ($length--) { 
      $str .= $charset[mt_rand(0, $count - 1)]; 
     } 
     return $str; 
    } 
+0

Die Frage besagt, dass es eine TXT-Datei gibt, die bereits den genauen Verzeichnispfad und den Dateinamen enthält. Daher sehe ich keine Verwendung für diese Methode. –

+0

Ich habe keine Verwendung dieser Methode, da ich Pfad und Dateiname in meiner .txt-Datei habe ... – user3029612

1

versuchen, etwas wie folgt aus:

$data = explode("\n", file_get_contents('file_list.txt')); 
foreach($data as $filename) { 
    if(!file_exists(trim($filename))) { 
    file_put_contents(trim($filename), ''); 
    } 
} 

Das wird eine leere Zeichenfolge für jede Datei in der Liste schreiben, die nicht bereits vorhanden, so dass Sie leere Dateien. Es wird jedoch keine Verzeichnisse für Sie erstellen, wenn Sie das tun möchten, müssen Sie etwas komplizierteres tun ...

+0

tnx, es hat geholfen. – user3029612

1

Ich gehe davon aus, dass die Pfade in Ihrer TXT-Datei absolute Pfade sind. Wenn nicht, müssen Sie eine Art ROOT_DIRECTORY Konstante vor den Pfaden anhängen.

Im Allgemeinen würden Sie diese Funktionalität in einer Klasse setzen wollen, deren einzige Aufgabe ist es, diese leeren Dateien zu erstellen:

class EmptyFileCreater { 
    const USE_RECUSRION = true; 
    const DEFAULT_ACCESS = 0777; 

    public function create($path) { 
     $this->ensureDirectoryExists(dirname($path)); 
     $this->createEmptyFile($path);    
    } 

    private function ensureDirectoryExists($directory) { 
     if (!is_dir($directory)) { 
      mkdir($directory, self::DEFAULT_ACCESS, self::USE_RECUSRION); 
     } 
    } 

    private function createEmptyFile($path) { 
     touch($path); 
    } 
} 

Jetzt können Sie diese Klasse verwenden, um alle Dateien zu generieren.

// Retrieve the .txt file as an array of the lines in the file 
$paths = file('path/to/missing_file_paths.txt'); 

$empty_file_creater = new EmptyFileCreater(); 
foreach ($paths as $path) { 
    $empty_file_creater->create($path); 
} 
+0

danke für die Hilfe, es war nützliche Informationen. – user3029612

1

Dies wird für Sie arbeiten:

<?php 
$lines = file('test.txt'); ///path to your file 
foreach ($lines as $line_num => $line) 
{ 
    $fp = fopen($line,"wb"); 
    fwrite($fp,''); 
    fclose($fp); 
} 
?> 
+0

nützlich, aber ich habe es anders gemacht. – user3029612

Verwandte Themen