0

以下が画像がアップロードされていることを認識しないのはなぜですか (.jpg)?

アップロードされたファイルは画像ではありません!!!

$finfo = finfo_open(FILEINFO_MIME_TYPE, 'C:\xampp\php\extras\magic\magic.mime');
if(strpos(finfo_file($finfo, $_FILES['userfile']['tmp_name']),"image")===0) {    

  // prepare the image for insertion
  $imgData =addslashes (file_get_contents($_FILES['userfile']['tmp_name']));

  // put the image in the db...
  // database connection
  mysql_connect($host, $user, $pass) OR DIE (mysql_error());

  // select the db
  mysql_select_db ($db) OR DIE ("Unable to select db".mysql_error());

  // our sql query
  $sql = "INSERT INTO uploaded_images
  (image, name)
  VALUES
  ('{$imgData}', '{$_FILES['userfile']['name']}');";

  // insert the image
  mysql_query($sql) or die("Error in Query: " . mysql_error());
  $msg='<p>Image successfully saved in database with id ='. mysql_insert_id().' </p>';
}
else
  $msg="<p>Uploaded file is not an image.</p>";
4

2 に答える 2

1

GD ライブラリにアクセスできない場合は、それを使用するだけ getimagesize()で、画像でない場合は false が返されます。http://php.net/manual/en/function.getimagesize.php

于 2012-11-29T12:13:48.380 に答える
0

ファイルの種類の検出は、驚くほど信頼できません。単純な低レベルのファイル タイプ検出プログラムの中には、ファイル拡張子を使用してタイプを判別しようとするものがあります。

imagemagickコードを実行しているサーバーにインストールできる場合は、 などの画像専用のツールを使用することをお勧めします。ファイル名に依存せずに、ファイルが実際に JPEG 画像であるかどうかを示す例を次に示します。

exec("identify $image_file",$out);
if(!empty($out)){
    $info = $out[0];
    $info = explode(' ',$out[0]);
    $type = $info[1];
    if($type == 'JPEG'){
        return true;
    }
}

ただし、imagemagick をインストールするアクセス権がない場合は、GD ライブラリを使用できます。それができない場合は、ファイル拡張子が正しいことを信頼するか、ファイルが画像であることを信頼する必要があります。

別の注意として、特にレンダリングされた画像として配信される場合は特に、画像をデータベースに保存することはほとんど良い考えではありません。MySQL は、その点で効率的になるようには設計されていません。一般に公開されているディレクトリにファイルとして保存することをお勧めします。そうは言っても、私はあなたのアプリケーションを知りませんので、あなたは最善の行動方針を決定するのに最適な場所になります.

于 2012-11-29T11:51:22.140 に答える