Οι συναρτήσεις επιστροφής εγγραφής της PHP cURL πρέπει να επιστρέφουν τον αριθμό των byte που χειρίστηκαν
Τηρήστε τη σύμβαση μέτρησης byte κατά την κατανάλωση τμημάτων απόκρισης του proxy και διακρίνετε ένα τοπικό σφάλμα εγγραφής από μια αποτυχημένη σύνδεση proxy.
Ο proxy παραδίδει δεδομένα. Η συνάρτηση επιστροφής εγγραφής σας επιστρέφει λάθος τιμή. Στη συνέχεια το libcurl ματαιώνει και ο γύρω κώδικας αναφέρει άλλη μια «αποτυχία λήψης μέσω proxy».
Η συνάρτηση πρέπει να αναφέρει πόσα byte που ελήφθησαν χειρίστηκε πραγματικά. Η επιστροφή διαφορετικού αριθμού σηματοδοτεί αποτυχία. Για έναν σκόπιμα αποκλειστικό προορισμό εγγραφής, ένα απόσπασμα μπορεί να μοιάζει έτσι:
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;
}
);Αυτό προϋποθέτει ότι η υπάρχουσα εφαρμογή κατέχει το handle και τον προορισμό εγγραφής. Μια αποτυχημένη ή σύντομη εγγραφή ματαιώνει αντί να ισχυριστεί σιωπηλά ότι ολόκληρο το τμήμα αποθηκεύτηκε. Ένας μη αποκλειστικός προορισμός χρειάζεται κατάλληλο σχεδιασμό προσωρινής αποθήκευσης και παύσης/συνέχισης· το μικρό απόσπασμα δεν παρέχει κάτι τέτοιο.
Μετρήστε byte, όχι εμφανιζόμενους χαρακτήρες. Τα δεδομένα μπορεί να είναι δυαδικά ή μέρος ακολουθίας κειμένου πολλών byte. Μια κλήση δεν είναι απαραίτητα μία γραμμή, ένα έγγραφο JSON ή ένα μήνυμα από την υπηρεσία.
Η σταδιακή ανάλυση χρειάζεται δική της κατάσταση μεταξύ των κλήσεων. Αντιστρόφως, η συσσώρευση κάθε τμήματος μέχρι την ολοκλήρωση μπορεί να είναι σωστή για μια μικρή περιορισμένη απόκριση, αλλά δεν είναι πολιτική μνήμης για μεγάλη ή ατελείωτη ροή.
Διατηρήστε το αποτέλεσμα της μεταφοράς και τα στοιχεία αποτυχίας της συνάρτησης. Ένα τοπικό σφάλμα δίσκου ή ματαίωση του αναλυτή μπορεί να συμβεί αφού έχει καθιερωθεί μια έγκυρη διαδρομή proxy. Αν σκοπεύετε να σταματήσετε μετά από ένα πρόθεμα, σημειώστε αυτή τη σκόπιμη διακοπή της συνάρτησης ξεχωριστά. Η αντικατάσταση της διεύθυνσης proxy δεν μπορεί να διορθώσει έναν προορισμό που σταμάτησε να δέχεται δεδομένα.