문제

새 버전의 사이트를 배포 할 때 모든 APC 캐시 항목을 지워야합니다. APC.PHP에는 모든 Opcode 캐시를 지우기위한 버튼이 있지만 모든 사용자 항목 또는 모든 시스템 항목 또는 모든 디렉토리 당 항목을 지우는 버튼이 표시되지 않습니다.

명령 행 또는 다른 방법을 통해 모든 캐시 항목을 지울 수 있습니까?

도움이 되었습니까?

해결책

PHP 기능을 사용할 수 있습니다 apc_clear_cache.

부름 apc_clear_cache() 시스템 캐시 및 호출을 지우겠습니다 apc_clear_cache('user') 사용자 캐시를 지 웁니다.

다른 팁

이 답변 중 어느 것도 실제로 명령 줄에서 APC 캐시를 지우는 데 효과가 있다고 생각하지 않습니다. 처럼 프랭크 파머 위에서 언급 한 CLI는 Apache와 분리 된 프로세스에서 실행됩니다.

명령 줄에서 지우기위한 내 솔루션은 APC 지우기 스크립트를 복사하는 스크립트를 작성하는 것이 었습니다. web 디렉토리와 액세스 한 다음 삭제합니다. 스크립트는 로컬 호스트에서 액세스하는 것으로 제한됩니다.

  1. APC_CLEAR.PHP

    스크립트가 웹 디렉토리에 복사하는 파일, 액세스 및 삭제 파일입니다.

    <?php
    if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
    {
      apc_clear_cache();
      apc_clear_cache('user');
      apc_clear_cache('opcode');
      echo json_encode(array('success' => true));
    }
    else
    {
      die('SUPER TOP SECRET');
    }
    
  2. 캐시 지우기 스크립트

    이 스크립트는 APC_CLEAR.PHP를 웹 디렉토리에 복사하여 액세스 한 다음 삭제합니다. 이것은 Symfony 과제를 기반으로합니다. Symfony 버전에서는 오류를 처리하는 Symfony 형태의 사본 및 해제되지 않은 링크로 호출이 이루어집니다. 그들이 성공한다는 수표를 추가 할 수 있습니다.

    copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory
    
    $url = 'http://localhost/apc_clear.php'; //use domain name as necessary
    $result = json_decode(file_get_contents($url));
    
    if (isset($result['success']) && $result['success'])
    {
      //handle success
    }
    else
    {
      //handle failure
    }
    
    unlink($apcPaths['web']);
    

나는 그것이 모든 사람을위한 것이 아니라는 것을 알고 있습니다 : 왜 우아한 아파치 재시작을하지 않습니까?

Centos/Redhat Linux의 경우 : 예를 들어 :

sudo service httpd graceful

우분투 :

sudo service apache2 graceful

이것은 문서에 명시되어 있지 않지만 opcode 캐시를 지우려면 다음을 수행해야합니다.

apc_clear_cache('opcode');

편집 : 이것은 일부 이전 버전의 APC에만 적용되는 것 같습니다.

어떤 버전을 사용하든 CLI 스크립트가 MOD_PHP 또는 FASTCGI와 다른 프로세스에서 실행되므로 PHP CLI 스크립트에서 Mod_php 또는 FastCGI APC 캐시를 지울 수 없습니다. 캐시를 지우려는 프로세스 (또는 자식 프로세스) 내에서 APC_CLEAR_CACHE ()를 호출해야합니다. Curl을 사용하여 간단한 PHP 스크립트를 실행하는 것이 그러한 접근법 중 하나입니다.

명령에서 APC 캐시를 지우려면 : (필요한 경우 sudo를 사용하십시오)

apcu

php -r "apcu_clear_cache();" 

APC

php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"

nginx / php-fpm 스택에서 실행중인 경우 가장 좋은 방법은 아마도 PHP-FPM을 다시로드하는 것입니다.

service php-fpm reload (또는 귀하의 Reload 명령이 시스템에있을 수 있음)

APC 문서에 정의 된대로 :

캐시 실행을 지우려면 :

php -r 'function_exists("apc_clear_cache") ? apc_clear_cache() : null;'

아직 언급되지 않은 명령 줄 사용의 또 다른 가능성은 컬을 사용하는 것입니다.

Stock APC.PHP 스크립트를 사용하는 경우 모든 캐시 항목에 대한 문제를 해결하지는 않지만 적응 된 스크립트 또는 다른 스크립트를 호출 할 수 있습니다.

Opcode 캐시가 지워집니다.

curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=1&`date +%s`"

OB 매개 변수를 3으로 변경하여 사용자 캐시를 지우십시오.

curl --user apc:$PASSWORD "http://www.example.com/apc.php?CC=1&OB=3&`date +%s`"

두 줄을 스크립트에 넣고 ENV에서 $ 암호로 호출하십시오.

JSON을 통해 결과를 모니터링하려면 이런 종류의 스크립트를 사용할 수 있습니다.

<?php

$result1 = apc_clear_cache();
$result2 = apc_clear_cache('user');
$result3 = apc_clear_cache('opcode');
$infos = apc_cache_info();
$infos['apc_clear_cache'] = $result1;
$infos["apc_clear_cache('user')"] = $result2;
$infos["apc_clear_cache('opcode')"] = $result3;
$infos["success"] = $result1 && $result2 && $result3;
header('Content-type: application/json');
echo json_encode($infos);

다른 답변에서 언급했듯이,이 스크립트는 HTTP 또는 CURL을 통해 호출되어야하며 응용 프로그램의 웹 루트에 노출되면 안전해야합니다. (IP로, 토큰 ...)

APC_CLEAR_CACHE ()는 캐시를 지우는 것과 동일한 PHP SAPI에서만 작동합니다. PHP-FPM이 있고 APC 캐시를 지우려면 두 캐시가 분리되어 있기 때문에 명령 줄이 아닌 PHP 스크립트 중 하나를 통해 수행합니다.

나는 썼다 캐시 툴,이 문제를 정확하게 해결하는 명령 줄 도구와 하나의 명령을 사용하면 CommandLine에서 PHP-FPM APC 캐시를 지울 수 있습니다 (PHP-FPM에 연결하고 APC 기능을 실행합니다).

Opcache에서도 작동합니다.

여기에서 어떻게 작동하는지 확인하십시오. http://gordalina.github.io/cachetool/

안정적인 APC는 인터페이스 자체에서 캐시를 지우는 옵션이 있습니다. 해당 항목을 지우려면 APC 인터페이스에 로그인해야합니다.

APC는 apc.php 파일에서 사용자 이름과 비밀번호를 설정하는 옵션이 있습니다.

enter image description here

Ubuntu에서 FPM을 실행하는 경우 아래 코드를 실행해야합니다 (12 및 14에서 확인).

service php5-fpm reload

apc.ini

APC.stat = "1"은 APC가 각 요청의 스크립트를 통계로 강제로 강제하여 수정되었는지 확인합니다. 수정 된 경우 새 버전을 다시 컴파일하고 캐시합니다.

이 설정이 꺼지면 APC가 확인되지 않으므로 일반적으로 APC가 파일을 다시 확인하도록하려면 웹 서버를 다시 시작하거나 캐시를 수동으로 지워야합니다. FASTCGI 웹 서버 구성은 다시 시작시 캐시를 지우지 않을 수 있습니다. 스크립트 파일이 거의 변경되지 않는 프로덕션 서버에서 비활성화 된 통계로 상당한 성능 향상을 달성 할 수 있습니다.

새 APC Admin 인터페이스는 사용자 캐시 및 Opcode 캐시를 추가/지우는 옵션이 있습니다. 흥미로운 기능 중 하나는 Opcode 캐시에서 디렉토리를 추가/새로 고침/삭제하는 것입니다.

APC 관리 문서

enter image description here

나에게 좋은 해결책은 배포 후 오래된 사용자 캐시를 더 이상 사용하지 않는 것이 었습니다.

각 키에 접두사를 추가하면 캐시 항목의 데이터 구조 변경시 접두사를 변경할 수 있습니다. 배포에서 다음과 같은 동작을 얻는 데 도움이됩니다.

  1. 업데이트 된 구조 만 배포 한 후 오래된 캐시 항목을 사용하지 마십시오.
  2. 배포의 전체 캐시를 청소하지 않도록 페이지 속도를 늦추지 마십시오.
  3. 배치 후 일부 기존 캐시 항목은 재사용 할 수 있습니다 (항목이 자동으로 제거되지 않은 경우)
  4. APC는 만료 후 이전 캐시 항목을 제거합니다 또는 누락 된 캐시 공간에서

사용자 캐시에만 가능합니다.

apc.php 파일을 만듭니다

foreach(array('user','opcode','') as $v ){
    apc_clear_cache($v);
}

브라우저에서 실행하십시오.

동일한 서버에서 인스턴스가 전리품이있는 Symfony 빌드에 대한 내 작업 :

1 단계.파일 플래그 (예 : Symfony Command)를 설정하는 트리거 또는 무언가를 작성한 다음 작성하십시오. marker file ..

file_put_contents('clearAPCU','yes sir i can buggy')

2 단계.시작시 인덱스 파일에서 클리어링 코드 추가 및 제거 marker file.

if(file_exists('clearAPCU')){
    apcu_clear_cache();
    unlink('clearAPCU');
}

2 단계.앱 실행.

우리는 APC와 Symlinks에 Symlinks를 파일에 대한 문제를 일으켰습니다. 파일 자체의 변경 사항을 무시하는 것 같습니다. 어떻게 든 파일 자체를 터치하는 것이 도움이되었습니다. 파일 수정과 접촉의 차이점을 알 수는 없지만 어떻게 든 필요했습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top