그누보드에 있는 스마트 에디터를 일반 사이트에 적용할때 이미지 업로드 문제
먼저 file_uploader.php 을 아래와 같이 수정하고
// default redirection $url = $_REQUEST["callback"].'?callback_func='.$_REQUEST["callback_func"]; $bSuccessUpload = is_uploaded_file($_FILES['Filedata']['tmp_name']); $data_dir = "mydir";$data_url = "myurl"; // SUCCESSFUL if(bSuccessUpload) { $tmp_name = $_FILES['Filedata']['tmp_name']; $name = $_FILES['Filedata']['name']; $filename_ext = strtolower(array_pop(explode('.',$name))); if (!preg_match("/(jpe?g|gif|bmp|png)$/i", $filename_ext)) { $url .= '&errstr='.$name; } else { $file_name = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])).'_'.time().".".$filename_ext; $save_dir = sprintf('%s/%s', $data_dir, $file_name); $save_url = sprintf('%s/%s', $data_url, $file_name); @move_uploaded_file($tmp_name, $save_dir); $url .= "&bNewLine=true"; $url .= "&sFileName=".$name; $url .= "&sFileURL=".$save_url; }}// FAILEDelse { $url .= '&errstr=error';} header('Location: '. $url);
다음 file_uploader_html5.php 파일을 아래와 같이 수정하였습니다.
$data_dir = "mydir";$data_url = "myurl"; $sFileInfo = ''; $headers = array(); foreach($_SERVER as $k => $v) { if(substr($k, 0, 9) == "HTTP_FILE") { $k = substr(strtolower($k), 5); $headers[$k] = $v; } } $file = new stdClass; //$file->name = str_replace("\0", "", rawurldecode($headers['file_name'])); $file->name = str_replace("\0", "", rawurldecode($headers['file_name'])); $file->size = $headers['file_size']; $file->content = file_get_contents("php://input"); $filename_ext = strtolower(array_pop(explode('.',$file->name))); if (!preg_match("/(jpe?g|gif|bmp|png)$/i", $filename_ext)) { echo "NOTALLOW_".$file->name; exit; } //$file_name = iconv("utf-8", "cp949", $file->name); $file_name = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])).'_'.time().".".$filename_ext; $newPath = $data_dir."/".$file_name; $save_url = sprintf('%s/%s', $data_url, $file_name); if(file_put_contents($newPath, $file->content)) { $sFileInfo .= "&bNewLine=true"; $sFileInfo .= "&sFileName=".$file->name; $sFileInfo .= "&sFileURL=".$save_url; } echo $sFileInfo;
그리고 php폴더에 있는 index.php 파일을 아래와 같이 수정하였습니다.
/* * jQuery File Upload Plugin PHP Example 5.14 * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2010, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */include_once("./_common.php");@include_once("./JSON.php");if( !function_exists('json_encode') ) { function json_encode($data) { $json = new Services_JSON(); return( $json->encode($data) ); }}@ini_set('gd.jpeg_ignore_warning', 1);$data_dir = "mydir";$data_url = "myurl";require('UploadHandler.php');$options = array( 'upload_dir' => $data_dir, 'upload_url' => $data_url, // This option will disable creating thumbnail images and will not create that extra folder. // However, due to this, the images preview will not be displayed after upload 'image_versions' => array());$upload_handler = new UploadHandler($options);
결론적으로 3개의 파일속 소스에서 $data_dir , $data_url 의 경로만 바꾼상태입니다.
그리고 사진 업로드 테스트 하면 해당 경로에 파일은 정상적으로 올라가는 상태입니다.
그러나 화면에는 아래와 같은 에러가 나네요
그누보드가 아닌 다른 일반 사이트에 쓸려면 또 수정해야되는 파일이 있는지요?
버전이라든지 알라봐야 할 부분좀 알려주시면 감사하겠습니다.
집에 가고 싶습니다. ㅠㅠ
답변 3개 / 댓글 4개
안녕하세요? 해결하셨나요? 저도 동일한 부분 진행중인데 서로 도움이 될까해서요
그누보드5 배포에 포함된 스마트에디터의 사진 첨부하기 창은 네이버에서 배포하는 소스랑 틀립니다.
사진 올리는 부분은
https://github.com/blueimp/jQuery-File-Upload 에서 배포하는 것을 조금 수정해서 만든거에요.
위 스샷의 사진 첨부하기 창의 파일첨부를 수정하실려면,
php폴더에 있는 index.php, UploadHandler.php 를 수정하시면 됩니다.
file_uploader.php, file_uploader_html5.php 는 사용하고 있지 않습니다.( 위의 파일첨부창과 아무런 상관이 없음 )
$data_dir = "mydir";
$data_url = "myurl";
위의 $data_dir 은 절대 경로로 적어주시는게 좋습니다. ( 쓰기 권한 주셔야 합니다 )
예) /home/내계정/www/파일저장되는폴더/
$data_url 은 url 형식으로 해줘야 합니다.
예) http://www.도메인.com/파일저장되는폴더/
답변에 대한 댓글 2개
protected function handle_file_upload <<< 파일저장처리 함수인데요. 여기서 파일 저장이 잘 되는지 관련값은 잘 리턴 되는지 디버깅 해 보세요.
http://lovelydoll.tistory.com/35
참고해 보시구요..
기억으로는 실제업로드는
UploadHandler.php
에서 실행되는거로 알고 있습니다.
개발자도구 네트워크 탭열어놓으시고 테스트해보세요
화면에 나오지 않는 에러가 보일수도 있습니다.
네이버 스마트에디터는
그누에서 시작된게 아니기 때문 에러부분 캐치되시면 검색통해 해결하실 수 있으세요..
그나저나...아직도 집에 못가시면..ㅜ.ㅜ
집에 들어가셔서 쉬시고 내일 해결하시는게 빠를수도 있습니다....
답변에 대한 댓글 2개
답변을 작성하려면 로그인이 필요합니다.
UploadHandler.php 보니 뭔가 어려워 어딜 수정해야될지 감이 안오네요 ㅠ
혹시 건드려봐야할 라인이나 함수부분 알려주시면 감사하겠습니다.