Stöðva PHP cURL flutning eftir forskeyti úr meginmálinu
Haldið afmörkuðu forskeyti í skriflega callback og þekkið aðeins þá skrifvillu sem það callback veldur viljandi.
cURL skrifcallback getur haldið afmörkuðu forskeyti úr meginmálinu og stöðvað flutninginn um leið og þeim mörkum er náð. Notið eigin fána til að greina þessa viljandi stöðvun frá annarri skrifvillu.
Fyrir nýtt handle þar sem mark-URL er þegar stillt:
$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);
}
socks5h fyrirkomulagið í proxy-URL-inu biður proxy-ið að leysa markhýsilnafnið. Fyrir leyfða prófun á opinbert mark á sýnda nýja handlenu getur færsla án reiknings úr SOCKS5 proxy listanum veitt þann endapunkt. TLS-vottorðssannprófun heldur venjulegum stillingum sínum.
Að skila núlli fyrir ekki-tóman bút segir libcurl að callbackið hafi ekki tekið við gögnunum sem voru afhent. Það stöðvast með CURLE_WRITE_ERROR. Hér er aðeins samspil þeirrar villu og limitReached-fána callbackisins talið vænt.
Svar sem er styttra en mörkin klárast venjulega. Á mörkunum eða yfir heldur prefix að hámarki 32 KiB jafnvel þótt síðasta callbackið fái stærri bút. Bútastærðir eru breytilegar; óskuð biðminnisstærð er ekki loforð um köll af fastri lengd.
Þetta takmarkar geymda meginmálið, ekki hvert bæti sem þegar er í biðminni eða flutt á tengingunni. Forskeytið getur endað inni í fjölbæta stafi, JSON-gildi eða HTML-einingu, svo ekki gera ráð fyrir að það sé heil greinanlegt skjal.