2012-04-26 2 views
1

이미지를 내 서버에 저장하고 데이터베이스에 색인을 지정하여 나중에 이미지를 업로드하는 사용자의 사용자 이름이나 기타 수집 된 정보로 검색 할 수 있습니다. 내 프로그램에서 업로드하는 동안 업로드 위치를 데이터베이스에 저장하도록했습니다. 나는 이것이 가능하다고 확신하지만, PHP에 대한 nubie가되어 시작할 장소가 필요하다.PHP로 서버에 이미지를 저장하고 mysql에 인덱스 할 수 있습니까?

답변

1

에 따를 절차 :

은 당신이 그것에 대해 갈 수있는 몇 가지 방법 Theres는 - 당신의 단지 형태 내에서 이미지를 선택하고 단지 사용자 데이터와 함께 이미지를 저장하려고 여부를 AJAX를 업 로더를 사용하거나합니다. ..

그러나 AJAX에 대한 간단한 과정이 될 것 ...

  • 업로드 이미지
  • 반환 이미지 이름
  • 이미지가 데이터베이스에

그렇지 않으면

  • 저장을 눌러
  • 업로드 이미지를 저장하는 데이터베이스에서 검색 이미지 참조 - 사용자가
  • 검색을 참조하여 데이터베이스에 이미지 이름을 저장 디렉토리에
  • 전송이 성공하면 사용자 정보와 함께 파일 이름을 저장하십시오.
  • Google에서 검색 데이터베이스 참조하고 해당 사용자에게 이미지의 이름을 가져옵니다.
2

파일을 업로드하고 데이터베이스에 메타 데이터를 저장할 때뿐만 아니라, 응용 프로그램이 하이재킹을 막을 수 있도록하십시오.

  • 이미지를 업로드하십시오.

  • 데이터베이스에 메타 데이터를 저장하는 동안 오류가있는 깨진 업로드 또는 업로드를 처리하는 방법을 확인하십시오. (그렇지 않으면 DISCSPACE의 부족 또는 관련 파일없이 데이터베이스 항목을 피하기 위해 가비지 콜렉션 같은 것을 사용합니다.)

  • 항상 사용자 만를 사용 세션 쿠키

  • 만들기를 업로드 할 수 있어야 등록 서버가 유효한 세션의 유효한 양식 데이터 만 수락하는지 확인하십시오.

  • 당신이 바이러스 스캐너가 서버에서 실행 가능하면하는 스크립트가 거기에 반응하지만, 외부에 표시되지 않습니다 할 수 있는지 확인합니다.

  • 이름 바꾸기 !!! 서버에있는 파일은 파일 형식 접미사을 죽입니다 (이 infos를 데이터베이스에 저장하고 보낼 mimetype 포함). 아마도 압축을 사용합니다.

  • 파일 저장 위치를 ​​사용자에게 알려주지 마십시오. 다운로드 스크립트를 사용하여 외부에 대한 파일 경로에 대한 정보를 숨길 수 있습니다!

편집 :

이 전체 목록이 아닙니다 단지 당신에게이 같이 수있는 방법에 대한 인상을 준다!

업로드 : 그런

같은 업로드 스크립트를 작성 ...

  • 빌드 데이터베이스 테이블 :

    파일

    uid, id, filename, real_filename, suffix, content_length, datetime_upload

    확장 (가능성의 목록)

    uid, id, suffix, mimetype

    uid, id, user_id, file_id

  • 확인 업로드 스크립트를 확인 유효한 사용자 세션 또는 종료

  • 만들기에서 호출 관련 사용자 -> 파일 사용자가 데이터 (롤 모델)를 저장하거나 종료 할 수있는 권한이 있는지 확인하십시오.

  • 양식을 받고 양식 데이터가 유효한지 (변수, 보안 문자 등) 또는 종료하는지 확인하십시오.

  • 파일 유형이 허용되는지 확인하고 선택적으로 이진 검사 (헤더의 파일 유형) 및/또는 바이러스를 만듭니다 마지막으로 파일의 빈 항목을 구축하고 FILE_ID를받을

  • 을 저장하기 전에 파일의 확인, 그렇지 않으면

  • 하여 새 파일 이름, 철 빌드 오류 확인을 저장하면 디스크

  • $new_filename = $file_id . '-' . md5($old_filename);

  • 저장 데이터는 업데이트 데이터베이스 항목, 그렇지 않으면

을 FILE_ID 항목 및 오류

  • 스토어 user_id-에 대한 항목> 삭제

    다운로드 :

    다음과 같은 다운로드 스크립트를 작성하십시오.

    • 확인 다운로드 스크립트를 확인은 사용자가이 데이터의 조각 (역할 모델과 사용자 -> 파일 관계)를 다운로드 할 수있는 권리가있는 경우

    • 이 있는지 확인 유효한 사용자 세션 또는 출구에서 호출 또는 종료

    • 파일 허용 뭔가 diff 명령으로 실행되는 것을 방지하기 위해 헤더에 저장된 MIME 유형과 브라우저에 약간의 전송 동작을

    • 보내기 파일을 할 오래된 파일 이름, 크기, MIME 형식을 가져옵니다 erent (f.e. .exe) 클라이언트 쪽. 오른쪽 다운로드 헤더, content-length 및 caching-header를 추가하십시오. 올바른 파일에서 2 진 데이터 스트림을 추가하십시오.

  • +0

    세션 쿠키는 구현 세부 사항과 비슷합니다. 유효한 세션을 요구하는 것은 중요합니다. 쿠키는 오직 한 가지 방법입니다. – Romain

    관련 문제