Нэг сайт дээр маань татагдсан файлын хэмжээ уг файлаасаа зөрөөд алдаатай татагдаад байсныг засах гэж нэлээн юм боллоо. Локалхост дээр ямар ч асуудалгүйн дээр миний бичсэн код бусад нөхдүүдийн бичсэн жишээ кодтой зарчмын хувьд яг адил мөртөө яг веб хост дээр алдаатай ажиллаад байсан юм л даа.

Хамгийн түрүүнд удирдлагын самбараар дамжуулан upload хийхэд алдаа гарсан биз хэмээн FTP-гээр дамжуулан хууллаа. Удаад нь gzip шахалтыг жаал гөрдлөө. Нэмэргүй шүү. Арга ядаад catch рүү бурууг тохох гэж ч оролдлоо. Яг л бахь байдгаараа..

Одоо ямар арга байх вэ, өөр ямар шалтгаан байж болох вэ гэсэн бодолд автлаа даа. Ингээд цөхрөнгөө барсан хүн HTTP response юу болж байгааг, нэн ялангуяа Content-Length ямар утгатай байгааг шалгаж үзлээ. Анхнаасаа файлын хэмжээ буцаадаг PHP-гийн filesize() функцэд бүрэн итгэлтэй байсан болохоор үүнд нэг их анхаарахгүй л яваад байсан юм. Гэтэл итгэл алдармаар үр дүн гарч Content-Length "тэнэчихсэн" явж байна шүү. Ингээд filesize() функцийг ялд унагах гэсэн авч угаасаа гэмтэн биш болохоороо өөртөө хир халдаах шинжгүй. Ингээд эрэл хайгуул үргэлжилсээр..

Дор файл татах үеийн HTTP хариу мэдэгдлийг PHP ашиглан боловсруулах скрипт харагдаж байна.

<?php
$file = 'example.zip';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-type: '.mime_content_type($file));
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

Хаа сайгүй нийтлэг харагддаг байдаг л нэг скрипт. Ихэнх функц нь дотны танилууд. Ингээд танил бус ob_clean() болон flush() функцүүдийг нягталсны эцэст ердөө л ob_clean() функцийг

while (ob_get_level()){
ob_end_clean();
}

гэж өөрчлөх буюу нэмж output buffering-ийг унтраах ёстой байжээ.