it-swarm.asia

Bagaimana cara menghapus entri cache APC?

Saya perlu menghapus semua entri cache APC ketika saya menggunakan versi baru situs . APC.php memiliki tombol untuk menghapus semua cache opcode, tapi saya tidak melihat tombol untuk menghapus semua Entri Pengguna, atau semua Entri Sistem , atau semua Entri Per-Direktori.

Apakah mungkin untuk menghapus semua entri cache melalui baris perintah, atau cara lain?

169
lo_fye

Anda dapat menggunakan fungsi PHP apc_clear_cache.

Memanggil apc_clear_cache() akan menghapus cache sistem dan memanggil apc_clear_cache('user') akan menghapus cache pengguna.

141
Travis Beale

Saya tidak percaya salah satu dari jawaban ini benar-benar berfungsi untuk membersihkan cache APC dari baris perintah. Seperti Frank Farmer berkomentar di atas, CLI berjalan dalam proses yang terpisah dari Apache.

Solusi saya untuk membersihkan dari baris perintah adalah menulis skrip yang menyalin naskah kliring APC ke direktori web dan mengaksesnya lalu menghapusnya. Script dibatasi untuk diakses dari localhost.

  1. apc_clear.php

    Ini adalah file yang disalin skrip ke direktori web, mengakses, dan menghapus.

    <?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. Script kliring cache

    Skrip ini menyalin apc_clear.php ke direktori web, mengaksesnya, lalu menghapusnya. Ini didasarkan pada tugas Symfony. Dalam versi Symfony, panggilan dibuat ke bentuk salinan dan pembatalan tautan Symfony, yang menangani kesalahan. Anda mungkin ingin menambahkan cek bahwa mereka berhasil.

    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']);
    
115
Jeremy Kauffman

Saya tahu ini bukan untuk semua orang, tetapi: mengapa tidak melakukan restart anggun Apache?

Untuk mis. dalam hal Centos/RedHat Linux:

Sudo service httpd graceful

Ubuntu:

Sudo service Apache2 graceful
66
Tadas Sasnauskas

Ini tidak dinyatakan dalam dokumentasi, tetapi untuk menghapus cache opcode Anda harus melakukan:

apc_clear_cache('opcode');

EDIT: Ini sepertinya hanya berlaku untuk beberapa versi APC yang lebih lama ..

Apa pun versi yang Anda gunakan, Anda tidak dapat menghapus mod_php atau fastcgi APC cache dari skrip php cli karena skrip cli akan dijalankan dari proses berbeda seperti mod_php atau fastcgi. Anda harus memanggil apc_clear_cache () dari dalam proses (atau proses anak) yang Anda ingin hapus cache. Menggunakan curl untuk menjalankan skrip php sederhana adalah salah satu pendekatannya.

29
ColinM

Jika Anda ingin menghapus cache apc di perintah: (gunakan Sudo jika Anda membutuhkannya)

php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');"
10
Léo Benoist

Jika Anda menjalankan tumpukan NGINX/PHP-FPM, taruhan terbaik Anda adalah dengan memuat ulang php-fpm

service php-fpm reload (atau apa pun perintah muat ulang Anda di sistem Anda)

9
passion4code

Kemungkinan lain untuk penggunaan baris perintah, belum disebutkan, adalah menggunakan curl.

Ini tidak menyelesaikan masalah Anda untuk semua entri cache jika Anda menggunakan skrip stock apc.php, tetapi bisa memanggil skrip yang diadaptasi atau skrip lain yang telah Anda pasang.

Ini membersihkan cache opcode:

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

Ubah parameter OB ke 3 untuk menghapus cache pengguna:

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

Masukkan kedua baris dalam sebuah skrip dan sebut dengan $ PASSWORD di env Anda.

4
Andy Triggs

Sebagaimana didefinisikan dalam Dokumen APC:

Untuk menghapus proses cache: 

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

Jika Anda ingin memantau hasilnya melalui json, Anda dapat menggunakan skrip semacam ini:

<?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);

Seperti disebutkan dalam jawaban lain, skrip ini harus dipanggil melalui http atau curl dan Anda harus diamankan jika terkena di root web aplikasi Anda. (dengan ip, token ...)

4
COil

apc_clear_cache () hanya bekerja pada SAPI php yang sama dengan yang Anda ingin Anda cache dihapus. Jika Anda memiliki PHP-FPM dan ingin menghapus cache apc, Anda harus melakukannya melalui salah satu skrip php, BUKAN baris perintah, karena dua cache dipisahkan.

Saya telah menulis CacheTool , alat baris perintah yang memecahkan masalah ini dengan tepat dan dengan satu perintah Anda dapat menghapus cache PHP-FPM APC Anda dari commandline (terhubung ke php-fpm untuk Anda, dan menjalankan fungsi apc)

Ini juga berfungsi untuk opcache.

Lihat cara kerjanya di sini: http://gordalina.github.io/cachetool/

3
Samuel Gordalina

jika Anda menjalankan fpm di bawah ubuntu, perlu menjalankan kode di bawah ini (diperiksa pada 12 dan 14)

service php5-fpm reload
2
hrnsky

Stabil APC memiliki opsi untuk menghapus cache di antarmuka itu sendiri. Untuk menghapus entri tersebut, Anda harus masuk ke antarmuka APC.

APC memiliki opsi untuk mengatur nama pengguna dan kata sandi dalam file apc.php.

enter image description here

2
vinothvetrivel

apc.ini 

apc.stat = "1" akan memaksa APC untuk membuat stat (memeriksa) skrip pada setiap permintaan untuk menentukan apakah telah dimodifikasi. Jika sudah dimodifikasi akan mengkompilasi ulang dan menyimpan versi yang baru. 

Jika pengaturan ini tidak aktif, APC tidak akan memeriksa, yang biasanya berarti memaksa APC untuk memeriksa kembali file, server web harus direstart atau cache harus dibersihkan secara manual. Perhatikan bahwa konfigurasi server web FastCGI mungkin tidak menghapus cache saat restart. Pada server produksi di mana file skrip jarang berubah, peningkatan kinerja yang signifikan dapat dicapai oleh statistik yang dinonaktifkan.

1
mal

Antarmuka Admin APC baru memiliki opsi untuk menambah/menghapus cache pengguna dan cache opcode, Satu fungsi yang menarik adalah menambah/menyegarkan/menghapus direktori dari opCode Cache

Dokumentasi Admin APC

enter image description here

1
Jithin Jose

Pekerjaan saya di sekitar untuk Symfony build memiliki menjarah instance di server yang sama:

Langkah 1. Buat pemicu atau sesuatu untuk mengatur flag file (mis. Perintah Symfony) kemudian buat marker file .. 

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

Langkah 2. Pada file indeks di awal tambahkan kode kliring dan hapus marker file.

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

Langkah 2. Jalankan aplikasi.

Buat file APC.php 

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

Jalankan dari browser Anda.

0
anshuman

Solusi yang baik bagi saya adalah tidak menggunakan lagi cache pengguna yang sudah usang setelah digunakan.

Jika Anda menambahkan awalan ke masing-masing tombol Anda, Anda dapat mengubah awalan tentang mengubah struktur data entri cache. Ini akan membantu Anda untuk mendapatkan perilaku berikut saat digunakan:

  1. Jangan gunakan entri cache yang kedaluwarsa setelah penerapan hanya struktur yang diperbarui
  2. Jangan bersihkan seluruh cache saat digunakan untuk tidak memperlambat halaman Anda
  3. Beberapa entri lama yang di-cache dapat digunakan kembali setelah mengembalikan penyebaran Anda (Jika entri tersebut belum dihapus secara otomatis)
  4. APC akan menghapus entri cache lama setelah kedaluwarsaATAUpada ruang cache yang hilang

Ini hanya mungkin untuk cache pengguna.

0
mabe.berlin