Կտրվե՞լ է PHP cURL-ի պատասխանը։
Նախքան ներբեռնված չափը Content-Length-ի հետ համեմատելը ստուգեք cURL-ի փոխանցման արդյունքը, պատասխանի կարգավիճակը և մարմնի ներկայացումը։
Սկսեք cURL-ի արդյունքից, երբ վստահված սերվերի միջոցով ներբեռնված էջը թերի է թվում։ Կարճ պատասխանը, ձախողված փոխանցումը և ամբողջական արգելափակող էջը տարբեր բացատրություններ են պահանջում։
Երբ գոյություն ունեցող կարգավորված handle-ի վրա միացված է CURLOPT_RETURNTRANSFER-ը՝
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$downloaded = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD_T);
$declared = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T);
Հավաքեք այս արժեքները նախքան handle-ը թողնելը։ Խիստ համեմատությունը տարբերում է փոխանցման ձախողումը հաջող մարմիններից, ինչպիսիք են դատարկ տողը կամ “0”-ը։ HTTP սխալի կարգավիճակները ինքնաբերաբար curl_exec-ի ձախողումներ չեն, ուստի մեկնաբանեք նաև կարգավիճակը։
Ներբեռնվածի հաշվիչը չի ներառում վերնագրերը։ Հայտարարված արժեքը գալիս է Content-Length-ից և -1 է, երբ չափը անհայտ է։ Պատասխանը կարող է օրինականորեն բաց թողնել Content-Length-ը. անհայտ արժեքը կտրված ֆայլի ախտորոշում չէ։
Բովանդակության ավտոմատ վերծանումը ներկայացնում է ևս մեկ տարբերություն։ Content-Length-ը սովորաբար նկարագրում է սեղմված ներկայացումը, մինչդեռ PHP տողը կարող է պարունակել ապասեղմված բայթեր։ strlen($body)-ը այդ վերնագրի հետ համեմատելը համեմատում է տարբեր ներկայացումներ։
cURL-ը կարող է հաղորդել CURLE_PARTIAL_FILE, երբ փոխանցումը խախտում է սպասվող չափը։ Պահպանեք այդ սխալը՝ ցանկացած ոչ դատարկ ելք որպես հաջողություն չընդունելու փոխարեն։ Հակառակ դեպքում՝ փոքր 200 պատասխանով հաջող փոխանցումը կարող է լինել այն ամբողջ էջը, որը սկզբնաղբյուրը կամ վստահված սերվերը որոշել է վերադարձնել։
Վերջում ստուգեք անհրաժեշտ բովանդակությունը։ cURL-ով բերված HTML-ը JavaScript չի կատարում էջը լրացնելու համար։ Բրաուզերի ցուցադրած բաժինները կարող են բացակայել սկզբնական պատասխանից, նույնիսկ եթե յուրաքանչյուր փոխանցված բայթ հասել է։