mysql dp 에 그림 업로드하는 php 코드
글쓴이: ant01 / 작성시간: 일, 2012/08/26 - 3:07오후
아래는 php로 작성한 mysql에 그림 업로드하는 test프로그램입니다.
그런데 image라는 변수를 포스트로 받는 데 if(!empty($image))의 분기를 타지 않아
몇 개의 코드를 삽입했습니다. 그런데 echo $image; echo $_POST[image]; 모두 값을 출력하지 않습니다.
어디를 손 봐야 할까요?
<?php
$connect=mysql_connect("localhost","php","test06") or die(mysql_error());
mysql_select_db("shop0") or die("데이타베이스를 선택할 수 없습니다.");
echo $image;
if(empty($image)) $image=$_POST[image];
echo $_POST[image];
if (!$_POST['uploaded']){
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"
ENCTYPE="multipart/form-data">
Upload:<br><br>
<input type="file" name="image"><br><br>
<input type="hidden" name="uploaded" value="1">
<input type="submit" value="Upload">
</form>
<?php
}
else {
$ip=$REMOTE_ADDR;
if (!empty($image)){
echo "jkdjd";
copy($image, "./temporary/".$ip."");
$filename1 = "./temporary/".$REMOTE_ADDR;
$fp1 = fopen($filename1, "r");
$contents1 = fread($fp1, filesize($filename1));
fclose($fp1);
$encoded=$contents1;
//$encoded = chunk_split(base64_encode($contents1));
$query="INSERT INTO test (code,picture)"."VALUES ('1','$encoded')";
$result=mysql_query($query,$connect);
unlink($filename1);
}
}
?> Forums:


$_FILES 전역 변수를...
$_FILES 전역 변수를 이용하셔야 할듯합니다.
print_r($_FILES[image]);
해보세요
감사합니다. 그런데
알려주신대로 하니 이번에는 무조건 if(!empty($image))의 분기를 탑니다.
그리고 blob에 0byte가 저장됩니다.
이제는 어디를 손 봐야 할까요?
파일을 DB에 저장해본적이 없어서
파일을 DB에 저장해본적이 없어서, 정확히는 모르겠지만..
print_r($FILES[image]) 을 해보면 아래와 같이 출력됩니다.
Array ( [name] => test.jpg [type] => image/jpeg [tmp_name] => /tmp/phpAB2iA9 [error] => 0 [size] => 92006 )
파일이름, 타입, 임시로저장된파일, 에러, size 의 정보를 갖고 있습니다.
if ($_FILES[image][size]>0){ // 파일사이즈가 0 이상 일때만 $fp = fopen($_FILES[image][tmp_name], "r"); // 실제 파일은 임시파일로 저장되어 있으므로, 그것을 읽어온다. $contents = fread($fp, $_FILES[image][size]); fclose($fp); echo $contents; // 실제 데이터가 들어있는 변수. 테스트용도로 출력해봄 // $contents 를 DB에 저장 //$query="INSERT INTO test (code,picture)"."VALUES ('1','$encoded')"; //$result=mysql_query($query,$connect); }위의 코드를 참고로 해보면 답이 나오지 않을까요?
감사합니다.
알려주신대로 하니 그림 출력은 됩니다. 그런데 왜 저장은 안될까요? blob는 데이타 양만 클 뿐
다른 데이터 형처럼 쓰면 된다고 하는 것 같은데요?
지금도 계속 0byte 저장됩니다. 이유를 모르겠습니다.
일단 결과만 나오는 답변 :
일단 결과만 나오는 답변 : mysql_escape_string()
권장하는 답변 : http://kr.php.net/manual/en/pdostatement.bindparam.php
ps. file_get_contents()
https://xenosi.de/
여러분의 도움으로 코드 완성하였습니다. 감사합니다.
http://antonio.pyy.kr/index.php?mid=computer&document_srl=3979
에 작동 확인 후 소스 올려 놓았습니다. php5로 된 소스는 찾기 힘들 더군요.
참고들 하세요. addslashes 를 하니 잘 저장 되더군요.
그런데 결과가 다르네요.
하도 출력이 되질 않아서 db에 저장하기전의 데이터를 phpmyadmin에서 저장한 blob데이터와 비교해 보았습니다.
그런데 결과가 다르네요.
addslashes 단독으로, addslashes-mysql_escape_string ,mysql_escape_string-addslashes 모두 해 보았는데
결과는 모두 상이합니다.
이미 위에 글 보신 분들에게는 죄송하구요. 지금 왜 그런가 알아보는 중인데 누구 아시느 분이 좀 알려 주시면 감사하겠습니다.
아래는 비교 코드입니다.
<?php $connect=mysql_connect("localhost","php","test06") or die(mysql_error()); mysql_select_db("shop0") or die("데이타베이스를 선택할 수 없습니다."); mysql_query("set names utf8"); if(empty($image)){ $image=$_FILES[image][tmp_name]; } if (!$_POST['uploaded']){ ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" ENCTYPE="multipart/form-data"> Upload:<br><br> <input type="file" name="image"><br><br> <input type="hidden" name="uploaded" value="1"> <input type="submit" value="Upload"> </form> <?php } else { if (!empty($image)){ $fp = fopen($_FILES[image][tmp_name], "r"); $data2 = fread($fp, $_FILES[image][size]); fclose($fp); $data2=addslashes($data2); $data2=mysql_escape_string($data2); $query="select * from test where no='1'"; $result=mysql_query($query,$connect); $data=mysql_fetch_array($result); $data1=$data[picture]; if($data1==$data2) echo "same"; else echo "different"; unlink($filename1); } } mysql_close($connect); ?>송효진님의 답을 이제야 조금 알겠습니다. 감사합니다.
http://antonio.pyy.kr/index.php?mid=computer&document_srl=3984
에 출력되는 결과까지 확인하고 다시 정리하여 올렸습니다.
댓글 달기