[前][次][番号順一覧][スレッド一覧]

mysql:9541

From: Shiro Ozawa <Shiro Ozawa <shiro@xxxxxxxxxx>>
Date: Mon, 07 Jun 2004 15:50:40 +0900
Subject: [mysql 09541] 画像データの登録に関する1064エラー

小澤と申します.
初めて投稿させて頂いております.

現在,WEB経由で画像をデータベースに登録するシステムを作成しています.
使用しているシステムは

RedHat9 (kernel:2.4.20-8)
httpd-2.0.40-21
php-4.2.2-17
mysql-3.23.54a-11

で,PHPとMySQLについてはデフォルトでインストールしてあります.

まず手始めにとWEB経由で画像を登録するスクリプトの骨組みを,過去ログ
[mysql 02349]を参考にして作成しました(本文文末にソースを添付).

ソース中のImageDataフィールドはlongblobになっております.
PHPの設定で送信ファイルサイズの最大値は2MBになっております.

スクリプト作成後,まず数KBのGIFファイルのアップロード実行したところ,問
題なく登録できました.
そこで,次に20KB程度のJPEGファイルのアップロードを試みたところ1064エラー(
パースエラー)が出てしまい,データ登録に失敗しました.
その後,

・データ読込を"r"→"rb"とした
・クエリー文作成を'".$Binary."'→'$Binary'とした

を試しましたが,エラーは改善されませんでした.
そこで今度は数KBのJPEG画像をアップロードしたところ,登録出来ました.

PHP側の受け取り可能ファイルサイズは102400にしているので100KBまでですから,
20KBの画像でエラーが出るとは思えません.
試しにデータベースに登録せずに,そのままサーバのディスクに保存して表示す
ることはできたので,やはりPHP側の問題では無さそうです.

一方で,MySQL側ではフィールドをlongblobにしているのでデータサイズが大き
すぎるということは無いと思います.

となると,addslashesを疑いたくなるのですが,小さいファイルでは問題なく登
録できているのでそれもできません.

あれこれ調べたのですが,万策尽きた感があります.
原因として何が考えられますでしょうか?

このMLの方々にお知恵を拝借できれば幸いです.

よろしくお願い致します.


------------------------------------------------------------- img_up.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>UPLOAD</title>
</head>
<body>
<?PHP

	if($_FILES["upfile"]["name"]==''){

	//アップロード画面の表示

	echo '
<form action="img_up.php" method="POST" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="102400">
<table border=1>
<tr>
<td>タイトル</td>
<td><input type=text name=sub size="35" value=""></td>
</tr>
<tr>
  <td><b>コメント</b></td>
  <td><textarea name=com cols="48" rows="4" wrap=soft></textarea>
  </td>
</tr>
<tr>
  <td><b>添付File</b></td>
  <td><input type=file name=upfile size="35"></td>
</tr>
<tr><td colspan=2>
  <input type=submit value="送信する"><input type=reset value="リセット">
</td></tr></table></form>
	';
	
	}
	else{

		//アップロード処理
		echo "アップロード情報<br>\n";
		echo "<table border=1>\n";
		echo "<tr><td>一時ファイル名</td><td>".$_FILES["upfile"]["tmp_name"]."</td></TR>\n";
		echo "<tr><td>ファイル名</td><td>".$_FILES["upfile"]["name"]."</td></TR>\n";
		echo "<tr><td>ファイルサイズ</td><td>".$_FILES["upfile"]["size"]."</td></TR>\n";
		echo "<tr><td>MIMEタイプ</td><td>".$_FILES["upfile"]["type"]."</td></TR>\n";
		echo "<tr><td>タイトル</td><td>".$_POST["sub"]."</td></TR>\n";
		echo "</table>\n";
		echo "<hr>";

		//フィルタリング
		if($_FILES["upfile"]["size"]>102400){
			echo ("ファイルサイズが大きすぎます\n");
		}
		else{
			//DBへの接続
			$conn=mysql_connect("localhost","***","***");
			if(!mysql_select_db("img_db",$conn)){echo ("データベースに接続できませんでした\n");}

			//ファイル処理
			$tmpfile = $_FILES["upfile"]["tmp_name"];

			$fp=fopen($tmpfile,"r");
			$Binary=addslashes(fread($fp,filesize($tmpfile)));
			fclose ($fp);
			unlink($tmpfile);

			//DB登録
			$query = "insert into img_db(ImageName,ImageData) values('".$_POST["sub"]."','".$Binary."');";

			if(mysql_query($query)){
				echo("データベースへの登録が完了しました<br>");
			}
			else{
				echo mysql_errno().": ".mysql_error();
				echo ("<hr>");
				echo("データベースへの登録に失敗しました");
			}

		}
	
	}

?>
</body>
</html>

------------------------------------------------------------------------



-- 
Shiro Ozawa <shiro@xxxxxxxxxx>


[前][次][番号順一覧][スレッド一覧]

->    9541 2004-06-07 15:50 [Shiro Ozawa <shiro@x] 画像データの登録に関する1064エラー      
      9560 2004-06-07 23:04 ┗["KAWAI,Takanori" <GC]                                       
      9567 2004-06-08 09:30  ┗[Shiro Ozawa <shiro@x]                                     
      9582 2004-06-09 16:43   ┗[Shiro Ozawa <shiro@x]