php 파일 업로드 백 엔 드 처리 팁
업무 장면 1.우 리 는 하나의 파일 만 업로드 할 수 있 고 실시 간 검증 작업 을 할 필요 가 없다.그러면 최적화 할 만 한 것 이 없 을 것 입 니 다.마지막 으로 당신 이 해 야 할 일 은 이 서 류 를 폼 에 넣 고 마지막 에 같이 제출 하고 직접 처리 하면 됩 니 다!
업무 장면 2.여러 개의 파일 을 업로드 해 야 하고 파일 내부 내용 을 수시로 검증 하고 해당 페이지 를 표시 해 야 합 니 다.이러한 상황 에 대해 사용자 가 업로드 파일 을 선택 한 후에 우 리 는 즉시 파일 을 업로드 해 야 합 니 다.왜냐하면 우 리 는 파일 안의 정 보 를 읽 어야 하기 때문에 마지막 으로 제출 할 때 도 파일 을 한 번 제출 해 야 합 니 다.분명 한 것 은 여기 서 중복 업로드 작업 이 존재 합 니 다.하 나 는 사용자 의 시간 을 소모 하고,다른 하 나 는 서버 대역 폭 자원 을 소모 하 는 것 입 니 다!최적화,원 하 는 방법 도 간단 합 니 다.처음 파일 을 업로드 한 후에 서버 에 파일 을 보관 하고 진정 으로 폼 을 제출 할 때 이미 올 라 온 임시 파일 을 읽 으 면 됩 니 다.그래,이것 이 바로 우리 의 처리 사고방식 이 야!
업무 장면 3.장면 2 와 비슷 해서 여러 개의 파일 을 올 려 야 하지만 여러 개의 파일 은 따로 올 릴 수 있 습 니 다.즉,저희 가 처음으로 10M 을 올 렸 을 수도 있 고 두 번 째 로 10M 을 올 렸 을 수도 있 습 니 다.모두 10 번 을 올 렸 습 니 다.그러면 서버 에서 한 번 에 제출 하 는 것 은 업로드 크기 의 제한 을 초과 한 것 입 니 다.하지만 만약 에 저희 가 매번 에 나 누 어 올 렸 다 면 이것 은 가능 합 니 다.마지막 으로 제출 할 때 저 희 는 짧 은 텍스트 정 보 를 올 리 기만 하면 됩 니 다!
사고방식 은 확실히 간단 하 다.보기에 도 문제 가 없 지만,아마도 나 는 능력 에 한계 가 있 을 것 이다.당시 에 나 는 이 무슨 귀신 을 처리 하 는 데 많은 시간 을 들 였 다.다음은 참고 할 수 있 도록 예제 코드 를 드 리 겠 습 니 다.
파일 업로드 기법(단일 업로드 파일 을 임시 파일 로 서버 에 저장)예제 코드:
1.페이지 js 처리
// , ,
$('.upload-real-file').off().on('change', function(){
if(!$(this).val()){
return false;
}
var responseObjId = $(this).attr('response-id');
var responseObj = $('#' + responseObjId);
$('#Form').ajaxSubmit({
url:'/aa/bb/uploadTmpApkTool',
resetForm: false,
dataType: 'json',
beforeSubmit: function(option){
window.loading = layer.load(2);
},
success: function(data, statusText){
layer.close(window.loading);
if(data.status == 1){
responseObj.html(data.apkInfoHtml);
var parentContainer = responseObj.parent().parent(),
nameContainer = parentContainer.find('.file-name-container');
nameContainer.html(data.apkName);
nameContainer.attr('title', data.apkName);
responseObj.find('.file-tmp').html(data.fileInfo); // ,
$(submitId).removeAttr('disabled');
}else{
layer.alert(data.info);
}
},
error: function(data){
layer.close(window.loading);
layer.alert(' , !');
}
});
return false;// dialog
});
2.페이지 에서 파일 정보,배경 처리 코드(PHP)를 가 져 와 야 한 다 는 것 이 분명 합 니 다.
$apkConfig = $this->_getApkConfig();
$params = $this->getFilteredParam('get');
$subFile = $_FILES['apkToolFiles'];
$apkName = $apkInfoHtml = "";
if(empty($subFile))
{
$this->ajaxReturn(array('status' => -4, 'info' => ' '));
}
foreach ($subFile['name'] as $subKey => $subVal)
{
if ($subFile['name'][$subKey])
{
$fileData = $this->_getFileData($subFile, $subKey);
$checkData = array(
'maxSize' => $apkConfig['FILE_MAX_SIZE'],
'savePath' => $apkConfig['TMP_CHILD_PATH'],
'extArr' => array('apk'),
'releaseName' => str_replace('.apk', '', $fileData['fileName']), //
);
$checkResult = $this->_checkFileData($fileData, $checkData);
if ($checkResult['status'] != 1)
{
$this->ajaxReturn($checkResult);
}
//
$filePath = $checkData['savePath'] . '/' . $fileData['fileName'] . '.tmp' . genRandStr(6);;
$this->_moveUploadedFile($fileData['tmpName'], $filePath);
$apkInfo = $this->_apkParser($filePath); //
if($apkInfo['UMENG_CHANNEL'] != 'UMENG_CHANNEL_VALUE')
{
@unlink($filePath); //
$this->ajaxReturn(array('status' => 0, 'info' => "UMENG_CHANNEL UMENG_CHANNEL_VALUE "));
}
$tmpFileArr['file_info'] = array(
'name' => $subFile['name'][$subKey],
'type' => $subFile['type'][$subKey],
'tmp_name' => str_replace($apkConfig['TMP_CHILD_PATH'] . '/', '', $filePath),
'error' => $subFile['error'][$subKey],
'size' => $subFile['size'][$subKey],
); // ,
}
else
{
$this->ajaxReturn(array('status' => 0, 'info' => " "));
}
foreach ($apkInfo as $key => $val)
{
$apkInfoHtml .= "{$key}:{$val} \r
";
}
$apkName = $fileData['fileName'];
$version = $apkInfo['versionName'];
}
$fileInfo = htmlspecialchars(json_encode($tmpFileArr['file_info']));
$fileInfoHtml = "<input name=\"apkToolFileTmp[]\" value='{$fileInfo}' type=\"hidden\"/>"; // htmlspecialchars,
$this->ajaxReturn(array('status' => 1, 'info' => " ", 'version' => $version, 'item' => $item, 'apkName' => $apkName, 'apkInfoHtml' => $apkInfoHtml, 'fileInfo' => $fileInfoHtml));
}
3.두 부분 코드 의 협 조 를 통 해 저 희 는 페이지 에 정확 한 정 보 를 가지 고 있 습 니 다.마지막 으로 양식 을 제출 할 때 서버 에 파일 을 제출 하지 말고 서버 에서 처리 할 때 이전에 올 린 임시 파일 을 위 치 를 이동 하면 됩 니 다.그러면 큰 성 과 를 거 둔 셈 입 니 다!$('.upload-file-real').attr('disabled', 'disabled'); //양식 을 제출 하기 전에 업로드 파일 을 사용 하지 않 습 니 다.
4.후속 작업
임시 파일 을 서버 에 업로드 한 후 사용자 가 현재 작업 을 취소 할 지 여 부 를 판단 할 수 없습니다.취소 하면 임시 파일 은 서버 에 계속 존재 하기 때문에 임시 디 렉 터 리 를 정기 적 으로 정리 하 는 스 크 립 트 가 필요 합 니 다.물론 이것 은 간단 합 니 다.이 디 렉 터 리 를 찾 아서 시간 을 비교 해 보 세 요.예 를 들 어 하루 전 파일 이 삭제 되 는 것 입 니 다.청소 주파 수 를 조절 하면 됩 니 다!
5.별말
로 그 는 정말 중요 합 니 다.어디 가 잘못 되 었 습 니까?어디 가 파일 을 삭 제 했 습 니까?어디 가 데이터 베 이 스 를 청 소 했 습 니까?반드시 기록 을 잘 해 야 합 니 다!
서버 임시 디 렉 터 리 에 파일 을 업로드 합 니 다.백 엔 드 처리 원 리 는 간단 해 보이 지만 자세히 디 버 깅 해 야 합 니 다.적어도 처음에 제 가 이 작은 기능 을 할 때 많은 힘 을 들 여서 야 알 수 있 었 습 니 다!
이상 은 본 논문 의 모든 내용 입 니 다.phop 파일 업로드 백 엔 드 처리 기술 을 습득 하 시기 바 랍 니 다.읽 어 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.