0

私は以下のコードを持っています。2 つのディレクトリで画像を検索し、画像が見つかった場合は画像を印刷し、見つからない場合は画像を表示しません。

<?php
$file = 'testimage.png'; 

$dir = 
   [$_SERVER['DOCUMENT_ROOT'] . "/pathA/", 
    $_SERVER['DOCUMENT_ROOT'] . "/pathB/"];

foreach( $dir as $d )
{

    if( file_exists( $d . $file )) 
    {
        $image = $d . $file;    
    }

}

if(empty($image))
{
    $image = null;
}

$img = imagecreatefrompng($image);

header("Content-type: image/png");
imagePng($img);
?>

誰かが私に上記のコードの強化または便利な方法を提供できますか?

4

2 に答える 2

1

$image = null; を設定できます。デフォルトとして empty($image) をチェックする必要はなく、ループにブレークを追加できるため、最初のパスですでに見つかっている場合は、常に両方のパスを調べる必要はありません:

 $image = null;
 foreach( $dir as $d )
 {

    if( file_exists( $d . $file )) 
    {
        $image = $d . $file;    
        break; //Exit loop when the file is found
    }

 } 
 //Remove empty($image)-Check

あるレベルでは、ファイルが存在するかどうかを返す「file_exists」のような関数を使用する必要があるため、チェックを本当に単純化することはできません。また、パスが異なる場合は、パスが見つかるまで (または存在しないまで) チェックする必要があります。

だから:あなたのコードは大丈夫です。

于 2013-10-25T06:17:24.260 に答える
0

そのようなことを行うためのはるかに便利な方法は、サードパーティのライブラリを使用することです。問題がなければ、 Nette FinderまたはSymfony Finder (または他の同様のライブラリ)を調べることができます。

Nette Finder を使用すると、例は次のようになります。

$images = iterator_to_array(Finder::findFiles($file)->in($dir));
$image = $images ? reset($images) : NULL;

$img = imagecreatefrompng($image->getPath());
// ...

ファイルを操作するスクリプトが 1 つしかない場合は、おそらくやり過ぎです。ただし、ファイルをもう少し操作する場合は、試してみる価値があります。

于 2013-10-25T06:09:52.717 に答える