உடல் முன்னொட்டுக்குப் பிறகு PHP cURL பரிமாற்றத்தை நிறுத்துங்கள்
எழுத்து callback-இல் வரம்புடைய முன்னொட்டை வைத்திருந்து, அந்த callback வேண்டுமென்றே உருவாக்கும் எழுத்துப் பிழையை மட்டும் அடையாளம் காணுங்கள்.
cURL எழுத்து callback ஒரு வரம்புடைய உடல் முன்னொட்டை வைத்திருக்க முடியும், அந்த வரம்பு எட்டியதும் பரிமாற்றத்தை நிறுத்த முடியும். அந்த வேண்டுமென்ற நிறுத்தத்தை மற்றொரு எழுத்துத் தோல்வியிலிருந்து வேறுபடுத்த உங்கள் சொந்தக் கொடியைப் பயன்படுத்துங்கள்.
இலக்கு URL ஏற்கனவே அமைக்கப்பட்ட புதிய handle-க்கு:
$limit = 32768;
$prefix = '';
$limitReached = false;
curl_setopt_array($ch, [
CURLOPT_PROXY => 'socks5h://proxy.example.net:1080',
CURLOPT_HEADER => false,
CURLOPT_WRITEFUNCTION => function ($handle, $chunk)
use (&$prefix, &$limitReached, $limit) {
$remaining = $limit - strlen($prefix);
$prefix .= substr($chunk, 0, $remaining);
if (strlen($prefix) >= $limit) {
$limitReached = true;
return 0;
}
return strlen($chunk);
},
]);
$result = curl_exec($ch);
$error = curl_errno($ch);
$expectedStop = $limitReached && $error === CURLE_WRITE_ERROR;
if ($result === false && !$expectedStop) {
throw new RuntimeException(curl_error($ch), $error);
}
proxy URL-இன் socks5h திட்டம் இலக்கு host பெயரைத் தீர்க்க proxy-ஐக் கேட்கிறது. காட்டப்பட்ட புதிய handle-இல் அனுமதிக்கப்பட்ட பொது இலக்குச் சோதனைக்கு SOCKS5 proxy பட்டியல்லிருந்து கணக்கில்லாத உள்ளீடு அந்த endpoint-ஐ வழங்க முடியும். TLS சான்றிதழ் சரிபார்ப்பு அதன் வழக்கமான அமைப்புகளைத் தக்கவைக்கிறது.
காலியற்ற துண்டுக்கு பூஜ்ஜியம் திருப்பித் தருவது libcurl-க்கு callback வழங்கப்பட்ட தரவை ஏற்கவில்லை என்று தெரிவிக்கிறது. அது CURLE_WRITE_ERROR உடன் நிற்கிறது. இங்கே அந்தப் பிழையும் callback-இன் limitReached கொடியும் சேர்வதை மட்டுமே எதிர்பார்க்கப்பட்டதாகக் கருதுகிறது.
வரம்பை விடக் குறுகிய பதில் இயல்பாக முடிகிறது. வரம்பில் அல்லது அதற்கு மேல் prefix அதிகபட்சம் 32 KiB மட்டுமே வைத்திருக்கும், கடைசி callback பெரிய துண்டைப் பெற்றாலும். துண்டு அளவுகள் மாறுபடும்; கேட்கப்பட்ட buffer அளவு நிலையான நீள அழைப்புகளுக்கு உறுதி அல்ல.
இது வைத்திருக்கப்படும் உடலை மட்டுமே வரம்புபடுத்துகிறது, இணைப்பில் ஏற்கனவே buffer செய்யப்பட்ட அல்லது பரிமாற்றப்பட்ட ஒவ்வொரு பைட்டையும் அல்ல. முன்னொட்டு பல-பைட் எழுத்து, JSON மதிப்பு அல்லது HTML உறுப்புக்குள் முடியலாம், எனவே இது முழுமையாகப் பகுக்கக்கூடிய ஆவணம் என்று கருத வேண்டாம்.