PHP move_uploaded_file()함수(업로드 한 파일 을 새 위치 로 이동)

7871 단어 PHPmove uploaded file
정의 와 용법
4.567914.함수 가 업로드 한 파일 을 새로운 위치 로 이동 합 니 다.
성공 하면 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
문법
move_uploaded_file(file,newloc)
매개 변수
묘사 하 다.
file
필수이동 할 파일 을 정 하 다.
newloc
필수문서 의 새 위 치 를 규정 하 다.
설명 하 다.
이 함 수 는 file 이 지정 한 파일 이 합 법 적 으로 업로드 되 었 는 지 확인 합 니 다(즉,PHP 의 HTTP POST 업로드 메커니즘 을 통 해 업로드 되 었 습 니 다).파일 이 합 법 적 이면 new loc 가 지정 한 파일 로 이동 합 니 다.
file 이 합 법 적 으로 파일 을 업로드 하지 않 으 면 어떠한 조작 도 일어나 지 않 습 니 다.moveuploaded_file()은 false 로 돌아 갑 니 다.
file 이 합 법 적 으로 파일 을 업로드 하지만 어떤 이유 로 이동 할 수 없 으 며 어떠한 조작 도 일어나 지 않 습 니 다.moveuploaded_file()은 false 로 돌아 가 고 경 고 를 보 냅 니 다.
이 검 사 는 특히 중요 하 다.업로드 한 파일 이 사용자 나 이 시스템 의 다른 사용자 에 게 내용 을 표시 할 수 있다 면.
제시 와 주석
설명:이 함 수 는 HTTP POST 를 통 해 업로드 되 는 파일 에 만 사 용 됩 니 다.
메모:대상 파일 이 존재 하면 덮어 씁 니 다.
안전
w3c 의 소개 로 제 가 만난 문 제 를 말씀 드 리 겠 습 니 다.
일반적으로 우 리 는 저장 파일 을 이렇게 쓴다.

$fileName = $_SERVER['DOCUMENT_ROOT'].'/Basic/uploads/'.$_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'],$fileName ) 
먼저 이 두 코드 의 의 미 를 설명 합 니 다.파일 을 직접 저장 하 는 동시에 파일 이름 도 사용자 가 업로드 한 파일 이름 입 니 다.
자,이제 위험 이 온다.
① 파일 을 직접 저장한다.
이것 은 파일 을 식별 하지 않 는 다 는 것 을 의미 합 니 다.만약 에 사용자 가 배경 코드 를 jpg 접미사 나 다른 것 으로 저장 했다 면 관리자 가 주의 하지 않 고 phop 으로 표시 한 다음 에 이 배경 에 방문 하면 그 가 배경 에서 있 는 데이터 베 이 스 를 삭제 하면 전체 사이트 가 직접 GG 를 실행 할 것 임 을 알 수 있 습 니 다.아무튼 파일 을 직접 저장 하 는 것 은 위험 하 다.
② 사용자 파일 이름과 같은 파일 이름 을 사용 합 니 다.
상기 코드 는 사용자 가 중국어 파일 이름 을 사용 하면 오류 가 발생 할 수 있 습 니 다.
파일 이름 이 걸 리 면 인 코딩 이 걸 려 있 습 니 다.파일 이름 이 영어+숫자 라면 괜 찮 습 니 다.중국 어 를 포함 하면 머리 가 크 고 다시 인 코딩 해 야 합 니 다.
나 는 믿 을 만 한 보존 이 이렇게 해 야 한다 고 생각한다.
① 사용자 가 업로드 한 파일 을 식별 해 야 한다.
파일 인식,이 부분 은 여러 가지 기능 이 있 는데 MIME type 을 사용 하면 좋 을 것 같 고 이것 도 위조 하기 어렵다 고 생각 합 니 다.
② 파일 이름 을 바 꿔 야 한다.
나 는 시간의 형식 으로 바 꾸 는 것 이 가장 좋다 고 생각한다.예 를 들 어'2018032641421'과 같은 파일 이름 도 파일 이름과 데이터 베 이 스 를 대응 할 수 있다.
보충:
두 개의 인자 가 있 습 니 다.첫 번 째 인 자 는 업로드 한 임시 파일 이름 으로 시스템 에서 자동 으로 생 성 됩 니 다.보통 그 스타일 은:
$_FILE["file"]["tmp_name"];
그 중의 file 은 프론트 파일 에 폼 의 이름 을 올 려 줍 니 다.
두 번 째 매개 변 수 는 경로 가 있 는 새로운 파일 이름 을 포함 하 는 것 입 니 다.예:
"upload/1.jpg";
그러면 업로드 한 파일 을 현재 디 렉 터 리 의 upload 라 는 하위 디 렉 터 리 로 이동 하고 파일 이름 을 1.jpg 로 저장 합 니 다.
move_uploaded_file()함수 인 스 턴 스
move 사용uploaded_file()함수 가 서버 에 파일 을 업로드 합 니 다.

<?php
  $tmp_filename = $_FILES['myupload']['tmp_name'];
  if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) {
   echo "An error has occurred moving the uploaded file.<BR>";
   echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file.";
   exit;
  } else {
   echo "The file has been successfully uploaded!";
  }
?>
move_uploaded_file 파일 업로드 실패 사례 및 해결 방법
오늘 사용자 가 등록 할 때 이미지 파일 을 업로드 하 는 PHP 스 크 립 트 를 구현 할 때 문제 가 발생 했 습 니 다.php 스 크 립 트 코드 는 다음 과 같 습 니 다.

<?php 
define('ROOT',dirname(__FILE__).'/'); 
 if ($_FILES["file"]["error"] > 0) 
 { 
  echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
 } 
 else 
 { 
  echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
  echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 
  echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
  if (file_exists("upload/" . $_FILES["file"]["name"])) 
  { 
   echo $_FILES["file"]["name"] . " already exists. "; 
  } 
  else 
  { 
   if(is_uploaded_file($_FILES['file']['tmp_name'])){ 
    $stored_path = ROOT.'/upload/'.basename($_FILES['file']['name']); 
     
    if(move_uploaded_file($_FILES['file']['tmp_name'],$stored_path)){ 
     echo "Stored in: " . $stored_path; 
    }else{ 
     echo 'Stored failed:file save error'; 
    } 
   }else{ 
    echo 'Stored failed:no post '; 
   } 
   } 
 } 
?>
위의 스 크 립 트 를 실행 할 때 스 크 립 트 출력"Stored failed:file save error"가 잘못 되 었 습 니 다.phperror_log 파일 에서 오류 문 제 를 보 았 습 니 다.권한 이 부족 해서 오류 가 발생 한 곳 을 찾 았 습 니 다.저희 가 그림 을 저장 하 는 목적 디 렉 터 리 는 PHP 를 실행 하 는 사용자 에 게 권한 이 없습니다.PHP 스 크 립 트 를 실행 하 는 사용자 와 제 가 스 크 립 트 코드 를 쓰 고 그림 폴 더 를 만 드 는 사용 자 는 같은 사용자 가 아니 기 때문에 파일 권한 을 777 로 바 꾸 면 됩 니 다.
PHP 개발 학습 파일 업로드(moveuploaded_file)
기능:업 로드 된 임시 파일 을 upload 디 렉 터 리 아래로 이동 합 니 다.upload 는 루트 디 렉 터 리 에서 이미 만 들 어 졌 습 니 다!!

<form action="" enctype="multipart/form-data" method="post" 
  name="uploadfile">    :<input type="file" name="upfile" /><br> 
 <input type="submit" value="  " /></form> 
<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
 $upfile=$_FILES["upfile"]; 
//         
 $name=$upfile["name"];//         
 $type=$upfile["type"];//        
 $size=$upfile["size"];//        
 $tmp_name=$upfile["tmp_name"];//            
//        
 switch ($type){ 
  case 'image/pjpeg':$okType=true; 
   break; 
  case 'image/jpeg':$okType=true; 
   break; 
  case 'image/gif':$okType=true; 
   break; 
  case 'image/png':$okType=true; 
   break; 
 } 
 
 if($okType){ 
  /** 
   * 0:      <br/> 
   * 1:       , php.ini     <br/> 
   * 2:        MAX_FILE_SIZE      <br/> 
   * 3:         <br/> 
   * 4:       <br/> 
   * 5:       0 
   */ 
  $error=$upfile["error"];//          
  echo "================<br/>"; 
  echo "       :".$name."<br/>"; 
  echo "       :".$type."<br/>"; 
  echo "       :".$size."<br/>"; 
  echo "          :".$error."<br/>"; 
  echo "            :".$tmp_name."<br/>"; 
 
  echo "        <br/>"; 
//           upload    (upload            !!!) 
  move_uploaded_file($tmp_name,"upload/".$name); 
  $destination="upload/".$name; 
  echo "================<br/>"; 
  echo "    :<br/>"; 
  if($error==0){ 
   echo "       !"; 
   echo "<br>    :<br>"; 
   echo "<img src=".$destination.">"; 
//echo " alt=\"    :\r   :".$destination."\r    :\">"; 
  }elseif ($error==1){ 
   echo "       , php.ini     "; 
  }elseif ($error==2){ 
   echo "        MAX_FILE_SIZE      "; 
  }elseif ($error==3){ 
   echo "         "; 
  }elseif ($error==4){ 
   echo "       "; 
  }else{ 
   echo "       0"; 
  } 
 }else{ 
  echo "   jpg,gif,png      !"; 
 } 
} 
?> 
실행 결과:

자,이 글 은 여기까지 소개 하 겠 습 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기