2016-08-05 4 views
0

私は画像用のoutputという名前のフォルダ(任意の形式のすべての画像ファイルを含む)をスキャンするPHPプログラムを持っています。イメージファイルは、さまざまなJavaプログラムの端末(私はLinuxを使用しています)の出力のスクリーンショットです。イメージファイルは、main()関数が存在するクラス名に従って命名されます。たとえば、main()関数がpublic Exampleクラス内にある場合、出力スクリーンショットは、.jpg.jpeg.pngまたは.gifのいずれかの拡張子を持つExampleという名前になります。 PHPプログラムには、Javaファイルをスキャンし、ユーザーがクリックして次のページに進むためのリンクを含む順序のないリストにリストされるフロントページがあります。次のページは特定のファイルを読み取り、出力スクリーンショットとともにソースコードを表示します。私が使用しているので、今のFedoraとFedoraはそれが非常に簡単のようで、png形式でスクリーンショットを取る:誰かがどんなフォーマットで出力のスクリーンショットでJavaプログラムをアップロード正規表現を使用してPHPでファイルタイプ拡張子で終わるイメージをロードするにはどうすればよいですか?

echo '<img src="' . $file_name . '".png>' 

しかし、どのような場合には? (jpg,jpeg,png,gif)。どのように拡張子がわからないので、適切な画像ファイルをロードするには?

私はforeachループを使用し、出力フォルダ内にあるすべてのイメージファイルを読み取ってからifという条件を使用して適切なファイル名をさまざまな拡張子でチェックしていますが、プログラミングの練習。

私は一般的にプログラム中に条件を避け、より多くの数学的アプローチの理由を使用して、私に必要なチャレンジを与え、自分のコードが他のものとは違って見えると感じますが、 。

これは正規表現を使用して行うことができますが、私はそれを行う方法がわかりません。私は正規表現を知っていますが、私はこれをどのように使用するのかは分かりません。正規表現を使用しないという答えはありがたいですが、正規表現を使ってこの作業をしたいのです。そのようにして、正規表現の概念に少しの知識を追加することになるからです。

ありがとうございました。

+0

出力がスクリーンショット*(およびテキストとしてのメモ)*として保存されるのはなぜですか?どのようなクレイジーアイデア!なぜあなたは拡張子がわからないのですか? –

+0

誰でも任意の言語のソースファイルを追加することができ、また出力は画像ファイルにあり、拡張子を持つことができます。 –

答えて

1

一つの可能​​な解決策ファイルは、その拡張子(同じ名前を持つ複数のイメージが異なる拡張子を持っていないだろうと仮定)で存在する場合は、あなたがチェックすることができ:

function get_image($file_name) { 
    if (file_exists($file_name . '.png')) { 
     return $file_name . '.png'; 
    } elseif (file_exists($file_name . '.jpg')) { 
     return $file_name . '.jpg'; 
    } elseif (file_exists($file_name . '.gif')) { 
     return $file_name . '.gif'; 
    } 

    return false; 
} 

echo '<img src="' . get_image($file_name) . '">'; 
0

をあなたはようなパターンを定義しますまたは様々な拡張のリスト:

$pattern = '/\.(jpg|png|gif)$/i'; 

我々はまた、必ず、これはドットとの一致を含む(エスケープ)と必ずそれが文字列($)の終わりだことにより拡張されつつあります。最後の "i"は大文字小文字を区別しないマッチングを可能にするので、正規表現はGIFまたはJPGをファイル名で取得します。その後

、テストは非常に簡単です:

例では一緒にそれを置く
if (preg_match($pattern, $filename)) { 
    echo "File $filename is an image"; 
} 

、あなたが見ることができます:

$filename = 'test.png'; 
$pattern = '/\.(jpg|png|gif)$/i'; 

if (preg_match($pattern, $filename)) { 
    echo "File $filename is an image"; 
} 

https://eval.in/618651

あなたがその中をラップするかどうかファイル名が提供された拡張子のどれかと一致しない場合に何を返すかを決める必要があるため、関数であることはあなた次第です。

このテストは、という拡張子に基づいており、内容には基づいていません。ここで

1

は、正規表現を使用していますMMさんへの代替です:

function getImageFilename ($basename, $directory) { 

    $filenames = scandir($directory); 
    $pattern = "/^" . $basename . "\.(jpeg|png|jpg|gif)$/"; 

    foreach($filenames as $filename) { 
     preg_match($pattern, $filename, $matches); 
     if($matches) { 
      return $filename; 
     } 
    } 

    return false; 
} 

あなたはループを使用して避けることができません。可能なファイル名をループして存在を確認するか、ディレクトリ内のすべてのファイルのリストを取得し、パターンマッチングを実行しながらループします。

ディレクトリ内にたくさんのファイルがない場合、OSを一度呼び出すだけで(ディレクトリ内のファイルの一覧を取得する)必要があるため、この機能はパフォーマンスが向上する可能性があります。ファイルが複数存在する場合は、複数のシステムコールが必要です。 (私はそれが正しいと思います...)

関連する問題