-1

何が起こっているのかよくわかりません。基本的に、スクリプトは「if」関数にあり、現在の画像拡張子をページにロードされているファイルと比較します

if ( $row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif') {  

    $img = "obj.php?id=".base64_encode($row['file_path'])."&mode;thumb";

} else {

   $img = "assets/filesystem/file_extension_".$row['file_type'].".png";

}

「&&」を「or」に置き換えると、JPG、PNG、JPEG、GIF では機能しますが、else ステートメントで失敗し、他のすべてのファイル タイプでは実行されないため、file_extension_docx.png 経由で docx が返されません。

なぜこれが起こっているのかについての手がかりはありますか?「&&」のままにしておくと、$img の実行に問題はなく、すべての JPEG/JPG ファイルのサムネイルが返されますが、アセットから返される PNG と GIF は返されません。 obj.php ファイル経由

4

3 に答える 3

4

問題は、次のように$row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif'評価されることです...

$row['file_type'] contains 'jpg'
AND 'jpeg' is a non empty string
AND 'png' is a non empty string
AND 'gif' is a non empty string

実際には、各文字列に対して変数の値をチェックしていません。

これらの値のいずれかが含まれているかどうかを確認したい場合は、たとえば次$row['file_type']の関数を使用できます。in_array()

if (in_array($row['file_type'], array('jpeg', 'jpg', 'png', 'gif'))) {
  // ...
} else {
  // ...
}

または、明示的に行うこともできます

if ($row['file_type'] == 'jpg' || $row['file_type'] == 'jpeg' || $row['file_type'] == 'png'  || $row['file_type'] == 'gif') {
  // ...
} else {
  // ...
}

これが役立つことを願っています。

于 2012-12-24T16:41:10.007 に答える
2
if ( $row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif')

で置き換える

if ( $row['file_type'] == 'jpg' || $row['file_type'] ==  'jpeg' || $row['file_type'] ==  'png' || $row['file_type'] ==  'gif')
于 2012-12-24T16:35:29.707 に答える
2

単なる提案ですが、switch case を使用することもできます。はるかに簡単です。

switch($row['file_type']){

case 'jpg':
case 'jpeg':
case 'png':
case 'gif':
// put your if codes here

break;

// put your else code under default
default: 

break;

}
于 2012-12-24T16:37:33.310 に答える