PHP查找文件,其中包含文件名的部分INCLUDES

时间:2017-07-25 20:11:08

标签: php file glob

我正在向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。

4 个答案:

答案 0 :(得分:1)

您可以使用scandir功能 它将返回目录中的文件数组 所以,你可以这样做:

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

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

我知道这段代码可能有一些错误,但我会尝试这样的事情。

答案 1 :(得分:1)

我将使用scandir函数获取备份目录中的文件列表,并将其过滤到相应的文件中。

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

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

答案 2 :(得分:1)

好的,首先,你必须做一个目录列表

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

答案 3 :(得分:0)

你的regix模式:

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

您可以在preg_match函数中使用$pattern变量