2017-07-25 2 views
0

Ich poste eine Variable in einen PHP-Prozess in dem Versuch, eine Datei in einem Verzeichnis zu finden.PHP Datei finden, wo post INCLUDES Teil des Dateinamens

Das Problem ist der Dateiname ist viel länger als das, was der Benutzer senden wird. Sie werden nur eine Reisenummer einreichen, die wie folgt aussieht:

222INE 

Während der Dateiname wird wie folgt aussehen:

CMDU-YMUNICORN-222INE-23082016.txt 

Also muss ich PHP Lage sein, in das Verzeichnis zu suchen, finden Sie die Datei Das hat die passende Reise-Nummer und bestätigt seine Existenz (ich muss die Datei wirklich herunterladen können, aber das ist für eine andere Frage, wenn ich das nicht herausfinden kann).

Anyways, so ist hier der PHP-Prozess, der eine Variable geschrieben nimmt:

<?php 
    if($_POST['voyage'] == true) 
    { 
    $voyage = mysqli_real_escape_string($dbc, $_POST['voyage']); 
    $files = glob("backup/................."); // <-this is where the voyage will go 
    // it should look like this 
    // $files = glob("backup/xxxx-xxxxxxxx-222INE-xxxx.txt"); 

    if(count($files) > 0) 
    { 
     foreach($files as $file) 
     { 
     $info = pathinfo($file); 
     echo "File found: " . $info["name"]; 
     } 
    } 
    else 
    { 
     echo "File doesn't exist"; 
    } 
    } 
?> 

Der Dateiname wird immer mit CMDU beginnen. Der zweite Teil kann variieren. Dann die Reisenummer. Das Datum, gefolgt von txt.

Ich hoffe, dass das Sinn macht.

Wenn Sie helfen können, würde ich es begrüßen.

Antwort

1

Ok, zuerst müssen Sie ein Verzeichnis tun Listing

<?php 
    if($_POST['voyage'] == true) 
    { 
    $voyage = $_POST['voyage']; //in this case is not important to escape 
    $files = scandir("backup"); // <-this is where the voyage will go ***HERE YOU USE DIR LISTING*** 
    unset($files[0], $files[1]) // remove ".." and "."; 

    if(count($files) > 0) 
    { 
     $fileFound = false; 
     foreach($files as $file) 
     { 

     if((preg_match("/$voyage/", $file) === 1)){ 
      echo "File found: $file \n"; 
      $fileFound = true; 
     } 

     } 
     if(!$fileFound) die("File $voyage doesn't exist"); // after loop ends, if no file print "no File" 
    } 
    else 
    { 
     echo "No files in backup folder"; //if count === 0 means no files in folder 
    } 
    } 
?> 
+0

Ich glaube, das ist, was ich gesucht habe. Noch testen, aber bisher funktioniert das. Ich musste jedoch ändern ("backup") in ("backup /"), damit es funktioniert. Außerdem brauchte ich auch den unscharfen Teil nicht. Akzeptieren Sie Ihre Antwort als Antwort. Danke mein Herr. –

+0

sagen Sie mir, wenn funktioniert, kann ich nicht testen (oder Demo zu Ihnen) auf einem Online-Tester wegen einer Dateisystemanforderung. –

+0

Sie begrüßen :) :) :) :) :) –

1

Sie können die scandir Funktion verwenden.
Es wird ein Array von Dateien in einem Verzeichnis zurückgeben.
So können Sie etwas tun:

$dir = "backup/"; 
$files = scandir($dir); 
$myFile = null; 

foreach($files as $each) { 
    if(preg_match(/*some magic here*/, $each)) { 
     $myFile = $dir . $each; 
} 
return $myFile; 

ich diesen Code kennen einige Fehler haben, aber ich würde so etwas wie dies versuchen.

+0

sieht vielversprechend aus nutzen können, Aber was würde ich ersetzen/* ein bisschen Magie hier * /? –

1

Ich würde die Scandir-Funktion verwenden, um eine Liste der Dateien im Backup-Verzeichnis zu erhalten und sie in die entsprechende Datei zu filtern.

$voyageFiles = array_filter(scandir("backup"), 

    function($var) use ($voyage) { 
     // expand this regexp as needed. 
     return preg_match("/$voyage/", $var); 
    } 
) 
$voyageFile = array_pop($voyageFiles); 
+0

Ich kann $ voyageFile in diesem Fall nicht zurückgeben. Irgendwelche Gedanken? –

0

Ihr regix Muster:

$voyage = $_POST['voyage']; 
$pattern = '/^CMDU-.*-'.$voyage.'-.*\.txt/'; 

Sie $pattern Variable in der preg_match Funktion

Verwandte Themen