2017-01-03 11 views
1

ユーザのアバターは、../wordpress/wp-content/uploads/フォルダに名前と拡張子を入力のものとして保存されます。つまり、PNGファイルがアップロードされると、拡張子はuser_avatar0.pngになります。そうでない場合は、JPGがアップロードされるとuser_avatar0.jpgになります。 ループごとに複数のユーザーアバターをロードしています。パスから異なる種類のファイルを見つける方法

$path="../wordpress/wp-content/uploads/"; 
$av=$path."user_avatar0.png|.jpg"; // if jpg exists loads jpg otherwise load png 
<img src="'. $av .'" height="200" width="200" border="0" > 

がどのように異なる拡張子(JPG、PNGなど)のファイルを含むディレクトリからファイルを選択する:

これは、コード私はアバターファイルをロードするために使用しているのですか?

+0

複数の拡張子を持つファイルは、 'file.en.html'のようなものです。これは有効ですが、おそらくあなたがここで意味するものではありません。 – Progrock

答えて

1

あなたが賢い人でしようとしているのは、残念ながら知られている構文ではありません。.png|.jpg PHPまたはHTMLを解析するブラウザによって解釈されることはありません。 PHPにはシェルパラメータ拡張の方法でパス変数を自動入力する機能はありません?。もちろんglob()がありますが、jpg/png拡張子を持つ単一のファイルを取得するためにディレクトリ全体をグロブすることは非常に非効率的です。あなたは、ファイルの拡張子が何であるかのレコードを持っていない場合は

(?あなたのWPのデータベースを照会できます)、あなたは単にJPG/PNG形式を想定し、このような何かに確認する必要がありますのみ可能です:

$file = 'user_avatar0.'; 
$file .= file_exists($file.'jpg') ? 'jpg' : 'png'; 

これは、一致するものがある場合はjpgという拡張子のベースネームを連結し、一致しない場合はpngに戻ります。ユーザーにアバターがまったくない可能性がある場合は、代わりにif-elseif-elseを実行し、file_existsのチェックに失敗した場合は標準のプレースホルダーを使用します。また、realpath(),is_file()またはstream_resolve_include_path()を使用してファイルが存在するかどうかを確認することもできます。ロジックは変わりません。噂は最後の選択肢が最速になるが、どちらの場合でもそれぞれの結果がキャッシュされる。

定期的なページロードで同じユーザーのアバターを表示し続けている場合は、これらのチェックの結果を$_SESSIONアレイに保存して、重複チェックを繰り返すことを検討することをおすすめします。 PHPのファイルキャッシュとセッションキャッシュのベンチマークを行うことにします。

+0

関連する関数には、正規表現パターンに一致するファイルが存在するかどうかをチェックするために使用できる 'fnmatch()'〜http://php.net/manual/en/function.fnmatch.php〜があります。しかし、それはブール値を返すだけなので、OPの場合は役に立ちません。レコードのためだけに、PHPのシェルパターンと同じです。 –

+0

この行に構文エラーがあればそれはありますか? '$ file。= file_exists($ file.'jpg ')? 'jpg:' png '; ' –

+0

' 'jpg'の後ろに閉じられていない引用符。今すぐポストで修正。 –

関連する問題