Các callback ghi của PHP cURL phải trả về số byte đã xử lý
Tuân thủ giao ước đếm byte khi tiêu thụ các đoạn phản hồi từ proxy và phân biệt lỗi ghi cục bộ với kết nối proxy thất bại.
Proxy gửi dữ liệu đến. Callback ghi của bạn trả về giá trị sai. Sau đó libcurl hủy bỏ, và mã xung quanh báo cáo một “lỗi tải xuống qua proxy” khác.
Callback phải báo cáo số byte đã nhận mà nó thực sự đã xử lý. Trả về một số khác nghĩa là lỗi. Với một đích ghi cố ý chặn, một đoạn có thể trông như sau:
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;
}
);Điều này giả định ứng dụng hiện có sở hữu handle và đích ghi. Một lần ghi thất bại hoặc ngắn sẽ hủy bỏ thay vì âm thầm tuyên bố toàn bộ đoạn đã được lưu. Một đích không chặn cần thiết kế đệm và tạm dừng/tiếp tục phù hợp; đoạn nhỏ không cung cấp điều đó.
Đếm byte, không đếm ký tự hiển thị. Dữ liệu có thể là nhị phân hoặc một phần của chuỗi văn bản nhiều byte. Một callback không nhất thiết là một dòng, một tài liệu JSON hay một thông điệp từ dịch vụ.
Việc phân tích tăng dần cần trạng thái riêng giữa các callback. Ngược lại, tích lũy mọi đoạn cho đến khi hoàn tất có thể đúng với một phản hồi nhỏ có giới hạn, nhưng không phải là chính sách bộ nhớ cho một luồng lớn hoặc vô tận.
Giữ kết quả truyền và bằng chứng lỗi của callback. Lỗi đĩa cục bộ hoặc việc dừng bộ phân tích có thể xảy ra sau khi một tuyến proxy hợp lệ được thiết lập. Nếu bạn định dừng sau một tiền tố, hãy đánh dấu riêng việc dừng callback có chủ đích đó. Việc thay địa chỉ proxy không thể sửa chữa một đích đã ngừng nhận dữ liệu.