Callback tulis PHP cURL harus mengembalikan jumlah byte yang ditangani
Patuhi kontrak penghitungan byte saat mengonsumsi potongan respons proxy dan bedakan kegagalan tulis lokal dari koneksi proxy yang gagal.
Proxy mengirimkan data. Callback tulis Anda mengembalikan nilai yang salah. libcurl lalu membatalkan, dan kode di sekitarnya melaporkan “kegagalan unduh melalui proxy” yang lain.
Callback harus melaporkan berapa byte yang diterima benar-benar ditanganinya. Mengembalikan jumlah yang berbeda menandakan kegagalan. Untuk sink tulis yang sengaja memblokir, sebuah fragmen dapat terlihat seperti ini:
curl_setopt($handle, CURLOPT_PROXY, 'http://proxy.example:8080');
curl_setopt($handle, CURLOPT_WRITEFUNCTION,
function ($handle, $chunk) use ($sink) {
$written = fwrite($sink, $chunk);
return $written === false ? 0 : $written;
}
);Ini mengasumsikan aplikasi yang ada memiliki handle dan sink tulis. Tulisan yang gagal atau pendek membatalkan alih-alih diam-diam mengklaim seluruh potongan tersimpan. Sink nonblokir memerlukan desain penyangga dan jeda/lanjutkan yang tepat; fragmen kecil tidak menyediakannya.
Hitung byte, bukan karakter yang ditampilkan. Data bisa biner atau bagian dari urutan teks multibyte. Satu callback tidak selalu satu baris, satu dokumen JSON, atau satu pesan dari layanan.
Penguraian bertahap memerlukan statusnya sendiri di antara callback. Sebaliknya, mengumpulkan setiap potongan hingga selesai bisa benar untuk respons kecil yang terbatas, tetapi bukan kebijakan memori untuk aliran besar atau tanpa akhir.
Simpan hasil transfer dan bukti kegagalan callback. Kesalahan disk lokal atau penghentian parser dapat terjadi setelah rute proxy yang valid terbentuk. Jika Anda berniat berhenti setelah prefiks, tandai penghentian callback yang disengaja itu secara terpisah. Mengganti alamat proxy tidak dapat memperbaiki sink yang berhenti menerima data.