테스트 사이트 - 개발 중인 베타 버전입니다

디비와 파일 체크 하는 부분만 해결하면 되는데요 ㅠㅠ 채택완료

웹스토리2 9년 전 조회 5,599

에디터를 사용하고 있는데요. 그냥 이미지를 올려 놓고 페이지를 나가 버리면 불용파일이 생겨버려서 너무 너무 고민 입니다. ㅠ.ㅠ

 

그래서 글 등록을 하게 되면 이미지 주소와 인덱스 번호 까지 해서 디비에 올리는 팁을 봐서 적용까지는 하였는데요

 

실제적으로 사용안하는 이미지는 디비에 내용이 없고 파일만 존재 하는데 까지는 성공 했는데

 

너무 초보라서 이 이상진도가 힘드네요..ㅠ.ㅠ 일주일 넘게 팁을 찾고 시도 해봐도 답이 안나옵니다 ㅠㅠ

 

디비랑 파일이랑 비교해서 없는거만 찾아 주는거만 하면 이제 문제가 없을꺼 같은데요..

 

그래서 아래 팁을 찾아 내긴 했는데 활용하기가 너무 힘드네요.

 

아래 팁은 첨부파일이 실제로 있는지를 체크해주는건데요. 제가 여기서 보고 만든 디비랑 너무 상이 해서 활용이 힘듭니다. ㅠㅠ

 

고수님들 도움이 너무 필요합니다. 어떻게 이 난관을 헤쳐나가야 할까요..ㅠ.ㅠ

 

현재 글 등록을 하면 올라 가는 디비의 구조와 팁에서 본 소스 내용 입니다.

 

 

 

 "CREATE TABLE `g5_images` (

`idx` int(11) NOT NULL AUTO_INCREMENT,

`bo_table` varchar(100) NOT NULL DEFAULT '' COMMENT '게시판 이름',

`path` varchar(255) NOT NULL DEFAULT '' COMMENT '첨부 이미지',

`wr_id` int(11) NOT NULL DEFAULT '0' COMMENT '게시물 번호',

`reg_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '등록 시간',

PRIMARY KEY (`idx`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

 

 

이하는 여기서 찾은 팁인데 비교해서 저 위 테이블에 없는 파일로 어떻게 찾을수 있을까요

 

 

<?php

$sub_menu = '100920';

include_once('./_common.php');

 

if ($is_admin != 'super')

alert('최고관리자만 접근 가능합니다.', G5_URL);

 

$g5['title'] = '첨부파일 디비확인';

include_once('./admin.head.php');

?>

 

<div class="local_desc02 local_desc">

<p>

완료 메세지가 나오기 전에 프로그램의 실행을 중지하지 마십시오.

</p>

</div>

 

<?php

$directory = array();

$dl = array('file');

 

$cnt = 0; $cnt2 = 0;

echo '<ul>'.PHP_EOL;

 

foreach($dl as $val) {

if($handle = opendir(G5_DATA_PATH.'/'.$val)) {

while(false !== ($entry = readdir($handle))) {

if($entry == '.' || $entry == '..' || $entry == 'index.php')

continue;

 

$path = G5_DATA_PATH.'/'.$val.'/'.$entry;

 

if(is_dir($path)) {

$directory[] = array( $val, $entry, $path );

}

 

if($handle2 = opendir($path)) {

while(false !== ($entry2 = readdir($handle2))) {

if($entry2 == '.' || $entry2 == '..' || $entry2 == 'index.php' || $entry2 == 'thumb')

continue;

 

$cnt++;

$row = sql_fetch(" select bf_source from {$g5['board_file_table']} where bo_table = '{$entry}' and bf_file = '{$entry2}' ");

 

if (!$row['bf_source']) {

$cnt2++;

echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";

}

flush();

 

}

}

 

}

}

}

 

if (empty($directory)) {

echo '<p>file 디렉토리를 열지못했습니다.</p>';

}

 

echo '<li>완료됨</li></ul>'.PHP_EOL;

echo '<div class="local_desc01 local_desc"><p><strong>첨부파일 '.$cnt.' 건 중 '.$cnt2.' 개가 검색되었습니다.</strong><br>프로그램의 실행을 끝마치셔도 좋습니다.</p></div>'.PHP_EOL;

?>

 

<?php

include_once('./admin.tail.php');

?>

 

댓글을 작성하려면 로그인이 필요합니다.

답변 15개

채택된 답변
+20 포인트

  DB 에 접속한다

  db 필드중에 이미지파일 경로를 가져온다

  ftp에 파일이 있는가를 확인한다

  없는경우 db 내용을 삭제한다

 

대 체 어디서 막히는 데요?

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

웹스토리2
9년 전
아래 소스는 첨부파일을 비교하는 소스라서요. g5_images 테이블에서 비교해서 디비에 없는 이미지가 있으면 표시를 해주고 싶습니다 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

생각을 해보면 되게지요

또 여러가지 php 함수를 찾아보면 ...

근데 좀 귀찬을듯, ㅎㅎㅎ

저는 이만 자러가요

즐거운 하루되세요 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

웹스토리2
9년 전
감사합니다. 항상 행복한 일들만 가득 하시길 진심으로 기원 하겠습니다.

댓글을 작성하려면 로그인이 필요합니다.

댓글을 작성하려면 로그인이 필요합니다.

매달 바뀌는 것을 소스상에 구현하면되죠 쉽게 생각하시면되요 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

웹스토리2
9년 전
에디터에서 저장을 할때 년월로 해서 파일을 다 저장 시키는 방식 같습니다.
웹스토리2
9년 전
그냥 /data/editor/ 이하 폴더 모두 포함 되도록 하는 방법이 없을까요? 그러면 한눈에 볼수 있을꺼 같아서요~!!!!

댓글을 작성하려면 로그인이 필요합니다.

많이 구찬 지만 그러면

$row['path'] 에  /data/editor/1606/20160608193836_wxoalriz.gif  이러게 있다면

$row = sql_fetch(" select * from g5_images where  path='/data/editor/1606/".$entry2."'");

이런식으로 바꿔보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

웹스토리2
9년 전
우와아아아아아아아아!! 됐습니다!!!!! 디비에 올라온거는 이제 안나옵니다 우와아!!!!!!! 정말 진심으로 감사드립니다. 정말 정말 너무 감사드립니다!!!! ㅠㅠㅠㅠㅠ 그런데 1606 은 매달 바뀌는건데 대책이 없을까요?ㅠㅠ
웹스토리2
9년 전
저 path 라는 변수명이 경로 같은데 경로가 잘 안넘어 와서 이랬던건가요? ㅠ.ㅠ
웹스토리2
9년 전
여기까지 구형 된것만 해도 열린이글님 아니였으면 엄두도 못냈을겁니다.

댓글을 작성하려면 로그인이 필요합니다.

그럼 이제 정리를 해보자구요 저 파일중에 필요 없는 파일이 먼데요?

다운받아서 확인 해보면되게네요 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

웹스토리2
9년 전
20160608193836_wxoalriz.gif 파일 하나만 디비에 등록되어 있기 때문에 이거 제외 하고는 4개가 디비에 없는 파일이라고 나와줘야 됩니다~~ㅠㅠ 파일은 5개 올라가 있는데 4개는 디비에 등록 안되게 올려 놓은거에요~!
웹스토리2
9년 전
단순하게 다시 정리를 해보자면 g5_image 라는 디비에 path 라는 곳에 /data/editor/1606/20160608193836_wxoalriz.gif 라고 필드 저장이 되어 있습니다. 이걸 저 5개의 파일과 비교해서 있으면 안나오고 없으면 이 파일은 디비에 없는 파일이야 라고 나와줘야 되는 상황 입니다
그래야 이건 디비에 있는 파일이니까 안지우고 나중에 4개 파일을 지워 주면 되는거거든요

댓글을 작성하려면 로그인이 필요합니다.

그러면 커리문을 찍어보세요

 

$row = sql_fetch(" select * from g5_images where path LIKE %.$entry2.% ");

if (!$row['path']) {
$cnt2++;

echo " select * from g5_images where path LIKE %".$entry2."% <br>"; 

이런식으로 그러면  4개는 맞는게 나올테고 1개가 안맞는게 왜그런지 파악이될꺼같은데요
      echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";  

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

웹스토리2
9년 전
$row = sql_fetch(" select * from g5_images where path LIKE %.$entry2.% ");

if (!$row['path']) {
$cnt2++;
echo " select * from g5_images where path LIKE %".$entry2."% <br>";
echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";

이랬을때 결과문이 이렇게 나옵니다.

select * from g5_images where path LIKE %20160608193836_wxoalriz.gif%
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608193836_wxoalriz.gif
select * from g5_images where path LIKE %20160608145930_fixezcur.jpg%
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608145930_fixezcur.jpg
select * from g5_images where path LIKE %20160608155850_murzxeym.jpg%
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155850_murzxeym.jpg
select * from g5_images where path LIKE %20160608155659_kgyesxst.jpg%
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155659_kgyesxst.jpg
select * from g5_images where path LIKE %20160608155220_obizsffv.jpg%
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155220_obizsffv.jpg
완료됨
첨부파일 5 건 중 5 개가 검색되었습니다.

댓글을 작성하려면 로그인이 필요합니다.

$row = sql_fetch(" select * from g5_images where path LIKE %.$entry2.% ");

 

이거는 폴더에 있는 파일 명 $entry2 가 들어간 디비를 찾아라 는 검샋 문구입니다

그런데 5개 가 나와다는 거는 디비 에는 없고 폴더에는 쓸대없는 파일이 5개 가있다는 애기죠 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

웹스토리2
9년 전
디비에 올라간 파일은 한개고 4개는 디비에 없는 파일입니다. 그래서 4개가 등록 안됐다고 나와야 참 입니다 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

ftp 에서 저 경로에 있는 걸 다운받아보세요

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

웹스토리2
9년 전
해당 경로에 20160608193836_wxoalriz.gif 라는 파일이 있습니다. 저 폴더에 5개의 파일명이 잘 출력 되고 있어요 ㅠㅠ;
웹스토리2
9년 전
$row = sql_fetch(" select * from g5_images where path LIKE %.$entry2.% ");

$aa = explode("/", $row['path']);
if ($aa[4]!=$entry2) {
echo $aa[4]."===".$entry2."<br>";
$cnt2++;
echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";
}

해보니까

===20160608193836_wxoalriz.gif
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608193836_wxoalriz.gif
===20160608145930_fixezcur.jpg
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608145930_fixezcur.jpg
===20160608155850_murzxeym.jpg
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155850_murzxeym.jpg
===20160608155659_kgyesxst.jpg
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155659_kgyesxst.jpg
===20160608155220_obizsffv.jpg
파일이 디비에 없습니다. - /home/u322749029/public_html/data/editor/1606/20160608155220_obizsffv.jpg
완료됨

댓글을 작성하려면 로그인이 필요합니다.

아 미초 저걸 생각 못햇네요



select * from g5_images where path LIKE %".$entry2."%"

식으로 바꿔보세요

 

if (!$row['path']) {

$cnt2++;

echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

웹스토리2
9년 전
$row = sql_fetch(" select * from g5_images where path LIKE %.$entry2.% ");

if (!$row['path']) {
$cnt2++;
echo "<li>파일이 디비에 없습니다. - " . $path . "/" . $entry2 . "</li>\n";

위에 $aa 부분은 없애고 하는거 맞죠? 이렇게 하니까 여전히 5건 있다고 뜨네요 ㅠ,ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인