답변:
PHP 함수를 사용할 수 있습니다 apc_clear_cache
.
호출 apc_clear_cache()
하면 시스템 캐시 apc_clear_cache('user')
가 지워지고 호출 하면 사용자 캐시가 지워집니다.
php -r "apc_clear_cache();"
이 답변 중 어느 것도 실제로 명령 줄에서 APC 캐시를 지우는 데 효과적이라고 생각하지 않습니다. 로 프랭크 파머는 위의 댓글을 달았 과정에서 CLI 실행 아파치에서 분리합니다.
명령 줄에서 지우는 솔루션은 APC 지우기 스크립트를 web
디렉토리에 복사하여 액세스 한 다음 삭제 하는 스크립트를 작성하는 것이 었습니다. 스크립트는 로컬 호스트에서 액세스하도록 제한되어 있습니다.
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');
}
캐시 지우기 스크립트
이 스크립트는 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
(또는 시스템에 재로드 명령이 무엇이든간에)
아직 언급되지 않은 명령 줄 사용의 또 다른 가능성은 curl을 사용하는 것입니다.
이것은 주식 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에서 $ PASSWORD로 호출하십시오.
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 스크립트 중 하나를 통해 처리해야합니다.
CacheTool 을 작성 했습니다 이 문제를 정확하게 해결하는 명령 줄 도구 인 하나의 명령으로 명령 줄에서 PHP-FPM APC 캐시를 지울 수 있습니다 (php-fpm에 연결하고 apc 함수를 실행합니다)
opcache에서도 작동합니다.
작동 방식보기 : http://gordalina.github.io/cachetool/
새로운 APC Admin 인터페이스에는 사용자 캐시 및 opcode 캐시를 추가 / 삭제하는 옵션이 있습니다. 흥미로운 기능 중 하나는 opCode 캐시에서 디렉토리를 추가 / 새로 고침 / 삭제하는 것입니다
나에게 좋은 해결책은 배포 후 더 이상 오래된 사용자 캐시를 더 이상 사용하지 않는 것입니다.
각 키에 접두사를 추가하면 캐시 항목의 데이터 구조 변경시 접두사를 변경할 수 있습니다. 배포시 다음과 같은 동작을 수행하는 데 도움이됩니다.
이것은 사용자 캐시에만 가능합니다.
APC.php 파일 생성
foreach(array('user','opcode','') as $v ){
apc_clear_cache($v);
}
브라우저에서 실행하십시오.
Symfony 빌드에 대한 내 해결 방법은 동일한 서버에 많은 인스턴스가 있습니다.
1 단계.
파일 플래그를 설정하는 트리거 또는 무언가를 생성 한 후 (예 : Symfony 명령) 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 및 심볼릭 링크에 문제가있었습니다. 파일 자체의 변경 사항을 무시하는 것 같습니다. 어떻게 든 파일 자체를 터치하는 것이 도움이되었습니다. 파일 수정과 터치의 차이점이 무엇인지 알 수 없지만 어떻게 든 필요했습니다 ...