>  기사  >  백엔드 개발  >  PHP는 APC 모듈을 사용하여 파일 업로드 진행률 bar_php 기술을 구현합니다.

PHP는 APC 모듈을 사용하여 파일 업로드 진행률 bar_php 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:24:43993검색

이 기사의 예에서는 PHP가 APC 모듈을 사용하여 파일 업로드 진행률 표시줄을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

php5.2 이전 버전에서는 APC 모듈이 전혀 없었기 때문에 APC 모듈을 사용할 수 없었습니다. 업로드 진행률 표시줄을 구현하기 위해 APC 모듈을 사용하려면 php5.2 이상이어야 합니다. .

APC는 5.2부터 오랫동안 모든 사람을 괴롭히던 진행률 표시줄 문제를 해결하는 APC_UPLOAD_PROGRESS라는 기능을 추가했습니다. 그리고 업로드 시 모든 임시 파일을 메모리에 캐싱하던 기존 방식을 임시 파일이 설정값에 도달하면 자동으로 하드디스크에 저장되도록 변경해 메모리 활용도를 효과적으로 향상시켰다.

업로드할 때 각 업로드에 고유 ID를 부여하는 방식으로 작동합니다. PHP 스크립트가 업로드된 파일을 받으면 통역사는 $_POST 배열에서 APC_UPLOAD_PROGRESS라는 숨겨진 필드를 자동으로 확인합니다. 이 필드는 정보를 저장하는 캐시 변수가 됩니다. 스크립트가 업로드 ID를 통해 업로드된 파일에 대한 상태 정보에 액세스할 수 있도록 업로드합니다.

APC는 Alternative PHP Cache의 약어로, PHP용 무료 공개 최적화 코드 캐시입니다. 이는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 개방형의 강력한 프레임워크를 제공하는 데 사용됩니다.

APC 모듈의 매개변수 구성, 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
이름 기본 변경 가능 변경 로그
apc.enabled 1 PHP_INI_ALL
apc.shm_segments 1 PHP_INI_SYSTEM
apc.shm_size 30 PHP_INI_SYSTEM
apc.optimization 0 PHP_INI_ALL
apc.num_files_hint 1000 PHP_INI_SYSTEM
apc.ttl 0 PHP_INI_SYSTEM
apc.gc_ttl 3600 PHP_INI_SYSTEM
PHP_INI_SYSTEM의 apc.cache_by_default
apc.filters "" PHP_INI_SYSTEM
apc.mmap_file_mask "" PHP_INI_SYSTEM
apc.slam_defense 0 PHP_INI_SYSTEM
apc.file_update_protection 2 PHP_INI_SYSTEM
apc.enable_cli 0 PHP_INI_SYSTEM > APC 3.0.6

이제 구성이 완료되었으므로 프로그램 작성을 시작하겠습니다

XML/HTML 코드는 다음과 같습니다:

코드 복사 코드는 다음과 같습니다.
>
동영상 제목: 동영상 설명: 동영상 태그(쉼표로 구분)


가장 중요한 것은 APC_UPLOAD_PROGRESS의 숨겨진 필드입니다. 이를 통해 스크립트는 현재 업로드된 파일의 상태에 액세스할 수 있습니다.

다음은 Ajax 처리를 위한 스크립트입니다. Jquery 프레임워크와 json을 사용하여 메시지를 전송했습니다.


자바스크립트 코드는 다음과 같습니다
:




코드 복사
코드는 다음과 같습니다.

함수 getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess"; $.getJSON(
URL,
{ 진행_키: upid },
함수(json){
$("#progressinner").width(json.per "%")
$("#upstatus").html('파일 크기:' json.total 'KB' ' 업로드됨:' json.current 'KB')
if (json.per < 100){
setTimeout(함수(){
getProgress(upid)
}, 10)
}그밖에{
$("#upstatus").html("동영상 업로드가 완료되었습니다. 데이터를 처리하는 중입니다. 잠시 기다려 주세요..."); }
}
)
}
함수 startProgress(upid){
$("#progressouter").css({ 디스플레이:"블록" })
setTimeout(함수(){
getProgress(upid)
}, 100)
}

다음은 업로드 상태를 읽는 PHP 코드입니다. 업로드된 파일을 처리하는 경우 코드는 다음과 같습니다.


코드 복사 코드는 다음과 같습니다. //파일 업로드 동작 함수는 본인의 뜻에 맞게 작성하시면 됩니다. 필요
함수 upflvAction()
{
if($_SERVER['REQUEST_METHOD']=='POST'){
$subject = Trim($this->f->filter($this->_request->getPost('subject')))
$content = Trim($this->f->filter($this->_request->getPost('content')))
Zend_Loader::loadClass('Custom_FlvOp')
$flv = 새로운 Custom_FlvOp
$flv->uploadFlv('upfile',$subject,$content)
}
}
//업로드 상태를 읽는 함수입니다~~
함수 upprocessAction()
{
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key'])
$json = 배열(
'당'=>$status['현재']/$status['total']*100,
'합계'=>round($status['합계']/1024),
'현재'=>round($status['현재']/1024),
);
require_once("Zend/Json.php")
echo Zend_Json::encode($json)
}
}

APC 구성에 대한 자세한 설명:

apc.enabled 부울

apc.enabled를 0으로 설정하여 APC를 비활성화할 수 있습니다. 이는 APC를 비활성화할 수 있는 다른 방법이 없기 때문에 APC를 PHP로 정적으로 컴파일할 때 주로 유용합니다. .

의 연장선

apc.shm_segments 정수

컴파일 캐시에 할당된 공유 메모리 블록 수입니다. APC에 공유 메모리가 부족하고 apc.shm_size를 시스템에서 허용하는 최대값으로 설정한 경우 이 매개변수의 값을 늘릴 수 있습니다.

apc.shm_size 정수

각 공유 메모리 블록의 크기는 MB 단위입니다. 기본적으로 일부 시스템(대부분의 BSD 변형 포함)은 공유 메모리 블록 크기 제한이 매우 낮습니다.

apc.optimization 정수

최적화 수준. 최적화를 비활성화하려면 0으로 설정하고, 값이 높을수록 더 강력한 최적화를 사용합니다. 적당한 속도 향상을 기대합니다. 이는 아직 실험적인 성격을 띠고 있습니다.

apc.num_files_hint 정수

웹 서버에 포함되어 요청되는 다양한 소스 파일 수에 대한 힌트입니다. 확실하지 않은 경우 0으로 설정하거나 생략하세요. 이 설정은 주로 수천 개의 소스 파일이 있는 사이트에서 유용할 것입니다.

apc.ttl 정수

캐시에서 캐시 항목의 위치가 다른 항목에 필요할 때 고려해야 할 것은 캐시에서 이 캐시 항목의 위치가 유휴 상태로 허용되는 시간(초)입니다. 이 매개변수를 0으로 설정하면 캐시가 오래된 항목으로 채워지고 새 항목이 캐시되지 않음을 의미합니다.

apc.gc_ttl 정수

캐시 항목이 가비지 수집 목록에 남아 있는 시간(초)입니다. 이 값은 캐시된 소스 파일이 실행되는 동시에 서버 프로세스가 종료되는 경우 오류 방지 기능을 제공합니다. 해당 소스 파일이 수정되면 이 매개변수로 설정된 TTL 값에 도달할 때까지 이전 버전의 캐시 항목에 할당된 메모리가 회수되지 않습니다. 0으로 설정하면 이 기능이 비활성화됩니다.

apc.cache_by_default 부울

기본값은 켜짐이지만 꺼짐으로 설정하고 더하기 기호로 시작하는 apc.filters와 함께 사용할 수 있습니다. 파일은 필터와 일치하는 경우에만 캐시됩니다.

apc.filters 문자열

쉼표로 구분된 POSIX 확장 정규식 목록입니다. 패턴이 소스 파일 이름과 일치하면 파일이 캐시되지 않습니다. 일치하는 데 사용되는 파일 이름은 절대 경로가 아니라 포함/요구에 전달된 파일 이름입니다. 정규식의 첫 번째 문자가 이면 표현식은 해당 표현식과 일치하는 모든 파일이 캐시된다는 의미입니다. 첫 번째 문자가 - 이면 일치하는 항목이 캐시되지 않습니다. -는 기본값이므로 생략 가능합니다.

apc.mmap_file_mask 문자열

apc.slam_defense 정수

서버 사용량이 매우 많은 경우 서비스를 시작하든 파일을 수정하든 동일한 파일을 동시에 캐시하려고 하는 여러 프로세스에 대한 경쟁이 발생합니다. 이 옵션은 프로세스가 캐시되지 않은 파일을 캐시하려는 시도를 건너뛰는 비율을 설정합니다. 또는 단일 프로세스가 캐시를 건너뛸 확률로 생각하세요. 예를 들어, apc.slam_defense를 75로 설정하면 프로세스가 캐시되지 않은 파일을 캐시하지 않을 가능성이 75%라는 의미입니다. 따라서 설정이 높을수록 캐시 충돌 확률이 감소할 가능성이 높아집니다. 이 기능을 비활성화하려면 0으로 설정하십시오.

apc.file_update_protection 정수

실행 중인 서버에서 파일을 수정할 때는 원자성 작업을 수행해야 합니다. 즉, 먼저 임시 파일을 작성한 다음 완료되면 파일 이름을 최종 위치로 바꿉니다(mv). 많은 텍스트 편집기, cp, tar 및 기타 유사한 프로그램은 이런 방식으로 작동하지 않습니다. 이는 파일이 기록되는 동안 파일에 액세스하고 (캐시)할 수 있는 기회가 있음을 의미합니다. apc.file_update_protection을 설정하면 캐시가 새 파일 표시를 지연시킵니다. 기본값은 2이며, 이는 파일 수정 시간이 액세스 시간으로부터 2초 미만인 것으로 확인되면 파일을 캐시하지 않음을 의미합니다. 반만 작성된 파일에 액세스하는 불운한 사용자는 기괴한 동작을 보게 되지만 적어도 지속되지는 않습니다. 파일을 업데이트하기 위해 원자성 작업을 자주 사용하는 경우 이 매개변수를 0으로 설정하여 이 보호 기능을 끌 수 있습니다. 시스템에 IO 작업이 너무 많아 업데이트 프로세스에 2초 이상 걸리는 경우 이 값을 늘려야 할 수 있습니다.

apc.enable-cli 정수

주로 테스트 및 디버깅을 위해 CLI 버전의 PHP에 대해 APC 기능을 활성화합니다. 일반적으로 모든 CLI 요청에 대해 APC 캐시를 생성, 포팅 및 폐기하는 것을 생각하지 않지만 다양한 테스트 상황에서 활성화하는 것은 매우 쉽습니다. CLI 버전용 APC

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.