Site icon PlusMagi's Blog By Pitt Phunsanit

curl: ดาวน์โหลดไฟล์

การใช้ curl ไป download file จากเซิร์ฟเวอร์อื่นๆ ไม่ได้ซับซ้อนเหมือนการอัพโหลดในตัวอย่าง curl: ส่งไฟล์ การทำงานค่อนข้างตรงไปตรงมาก คือ มีไฟล์ที่มี code curl ทำหน้าที่ request และมีไฟล์หรือโปรแกรมที่ทำหน้าที่จ่ายไฟล์ให้ โดยดัดแปลงให้แสดง error กลับมาในรูปแบบที่ง่ายกับการแสดง error ในฝั่งรีเควสท์

เพื่อความปลอดภัย จะมีการเขียนการตรวจสอบเล็กน้อย

<?php
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Expires: 0');
header('Pragma: no-cache');

$post = [
    'file' => 'test.docx',
    'token' => $token,
];
$token = 'HH89VOiirgXlCdEqDrFs';
$url = 'http://localhost/snippets/PHP/download.php';

$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_ENCODING => 'UTF-8',
    CURLOPT_FRESH_CONNECT => true,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => http_build_query($post),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => $url,
]);

$result = curl_exec($ch);

switch ($result) {
    case 'bad token':{
            curl_close($ch);
            exit('check token in ' . $url);
        }break;

    case 'file not found':{
            curl_close($ch);
            exit('file not found in target server.');
        }break;

    default:{
            header('Content-Disposition: attachment; filename="' . $post['file']);
            echo $result;
        }
}
curl_close($ch);

<?php
$fileDir = '../assets/';
$token = 'HH89VOiirgXlCdEqDrFs';

if ($_REQUEST['token'] != $token) {
    exit('bad token');
}

$file = $fileDir . $_REQUEST['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: ' . mime_content_type($file));
    header('Content-Disposition: attachment; filename="' . basename($file) . '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));

    //readfile($file);
    echo file_get_contents($file);
} else {
    exit('file not found');
}
Exit mobile version