2017-07-25 4 views
0

ディレクトリにファイルを見つけるためにPHPプロセスに変数をポストしています。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で始まります。 2番目の部分は異なる場合があります。その後、航海番号。日付とそれに続くtxt。

私はそれが理にかなっていると思います。

お手伝いできれば幸いです。

答えて

1

[OK]を、まず、あなたがディレクトリの一覧を行う必要があります

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

私はこれが私が探していたものだと信じています。まだテストしていますが、これまでのところ、これは動作します。私はそれを動作させるために( "バックアップ")( "バックアップ")に変更しなければならなかった。また、私は未設定部分も必要なかった。あなたの答えを答えとして受け入れる。ありがとうございます。 –

+0

私は動作していると教えてください、私はファイルシステム要求のためオンラインテスターでテストできません。 –

+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; 


だから、あなたはこのような何かを行うことができます。

+0

は有望に見えます、しかし、私はここに/ *いくつかの魔法を置き換えるために何を置きますか?/? –

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); 
+0

この場合、$ voyageFileをエコーバックできません。何かご意見は? –

0

あなたregixパターン:あなたがするpreg_match関数で$pattern変数を使用することができます

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

関連する問題