2012-06-19 4 views
0

저는 이미지에 많이 의존하는 사이트에서 작업하고 있으므로 잘못된 것이 있으면 데이터베이스 나 웹 사이트에서 정리하는 함수를 구현하고 싶습니다. 하위 디렉토리에 이미지가 없으면 데이터베이스 항목을 삭제하는 기능이 있지만 데이터베이스에없는 경우 하위 디렉토리에있는 이미지를 삭제하는 기능은 작동하지 않는 것 같습니다. 다음은 내 코드입니다 (MySQL 데이터베이스의 "images"라는 테이블에 "location"이라는 항목이 있다고 가정하면 "images"라는 하위 디렉토리가 있고 모든 이미지에는 jpg 확장자가 있으며 모든 업로드 된 이미지에는 하위 디렉토리에 같은 데이터베이스에 동일한 키) :하위 디렉토리를 반복하고 데이터베이스 항목과 일치하지 않는 모든 파일을 삭제하십시오.

foreach(glob("images/*.*") as $entry) 
    { 
     if (!mysql_num_rows(mysql_query("SELECT * FROM images WHERE location = '$entry'"))) 
     { 
      if (preg_match("/jpg/", $entry)) 
      { 
       unlink ($entry); 
      } 
     } 
    } 

나는 디버깅 및 하위 디렉토리의 항목이 데이터베이스에 항목을 일치하지만,이 동일한 사실에도 불구하고, SQL 쿼리가 빈 결과를 반환 한했다 .

+0

죄송합니다. 뭐라 구요? –

+2

죄송합니다. 바비 테이블은 여기에 있습니다 : http://bobby-tables.com/ – hakre

+0

새로운 코드를 작성하기 위해 mysql_ * 함수를 사용하지 마십시오. 더 이상 유지 관리되지 않으며 커뮤니티가 [지원 중단 프로세스] (http://goo.gl/KJveJ)를 시작했습니다. [* 빨간색 상자 *] (http://goo.gl/GPmFd)를 참조하십시오. 대신 [prepared statements] (http://goo.gl/vn8zQ)에 대해 알아야하고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용해야합니다. mysqli). 어떤 것을 결정할 수 없다면 [이 기사] (http://goo.gl/3gqF9)가 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 가이드입니다] (http://goo.gl/vFWnC). – gorelative

답변

3

glob은 경로가있는 항목을 images/foo.jpg과 같이 반환합니다. 파일 이름이 일치하지 않는 이유만으로 파일 이름이 데이터베이스에 저장됩니다.

+0

그래서 "images /"를 데이터베이스 항목에 추가해야한다고 말하고 있습니까? –

+0

아니요. "이미지/부분"을 파싱해야한다고 말합니다. – Cfreak

+0

알았어, 고마워. 나는 그것을 시도 할 것이다. –

1

제시 한 코드가 실제 코드가 아니라면, 내 생각 엔 절대 경로를 unlink();으로 전달하지 않는 것입니다. 상대 경로 (예 : "images/test.jpeg") 만 전달하면 스크립트가 해당 파일을 찾을 수 없습니다.

+0

아니요, 항목이 일치하지 않는 것 같습니다. 파일을 완벽하게 연결 해제 할 수있었습니다. –

+0

데이터베이스의 샘플 행을 제공 할 수 있습니까? – jasonlfunk

+0

위치 : 2874.jpg –