PHP-файл, где post INCLUDES часть имени файла

Я отправляю переменную в PHP-процесс, пытаясь найти файл в каталоге.

Проблема в том, что имя файла намного длиннее, чем пользователь будет отправлять. Они отправят только номер рейса, который выглядит следующим образом:

222INE 

Если имя файла будет выглядеть так:

 CMDU-YMUNICORN-222INE-23082016.txt 

Поэтому мне нужно, чтобы PHP мог заглянуть в каталог, найти файл с соответствующим номером рейса и подтвердить его существование (мне действительно нужно иметь возможность загружать указанный файл, но это будет для другого вопроса, если я не может понять это).

В любом случае, вот PHP-процесс, который принимает опубликованную переменную:

 <?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"; } } ?> 

Имя файла всегда будет начинаться с CMDU. Вторая часть может отличаться. Затем номер рейса. Дата, за которой следует txt.

Я надеюсь, что в этом есть смысл.

Если вы можете помочь, я был бы признателен.

Related of "PHP-файл, где post INCLUDES часть имени файла"

Итак, во-первых, вы должны сделать список каталогов

 <?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 } } ?> 

Вы можете использовать функцию scandir .
Он вернет массив файлов внутри каталога.
Итак, вы можете сделать что-то вроде этого:

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

Я знаю, что этот код может иметь некоторые ошибки, но я бы попробовал что-то вроде этого.

Я бы использовал функцию scandir, чтобы получить список файлов в каталоге резервного копирования и отфильтровать его до соответствующего файла.

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

ваш шаблон реестра:

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

вы можете использовать переменную $pattern в функции preg_match