GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ตรวจสอบว่าคนที่โหลดโหลดเสร็จหรือว่าโหลดแล้วล้มเหลวหรือยกเลิก

ผมก็ได้ทำโปรเจ็คเว็บให้บริการ download แล้วมีอยู่โจทย์หนึ่งที่ทำให้ลำบากอยู่พอควรก็คือพอเสียตังค์แล้วก็ให้โหลดได้ครั้งเดียว
แล้วคำถามในใจก็เกิดขึ้นนั้นก็คือแล้วถ้าคนโหลดตอนนั้นมันเน็ตหลุดไฟดับจะทำไง งานเข้าสิครับ เสียตังค์แล้วดันโหลดได้ครั้งเดียวไฟดับ
เน็ตหลุดโหลได้ครึ่งทางแล้วจะทำไงละไม่มีหลักฐานสะด้วยว่าเราโหลดเสร็จหรือไม่เสร็จ ผมก็เลยไปค้นหาในเจ้าประจำนั้นก็คือคุณ
google ผมก็ไปเจอเว็บนี้มาโดนเลยครับผมให้เครดิสคุณ petersprc@gmail.com เป็นฝรั่งเด้อเราก็มาดู code กันเลยดีกว่าว่ามายาวละ

// Sample usage

function sendTest(){
   
  $res = sendFile('010153GS05.mp3', 'application/octet-stream');

if ($res['status']) {
    // succeeded
}else{
    //failed
}

@saveDownloadStatus($res);
}

sendTest(); //ใช้งานฟังชั่น

function sendFile($path, $contentType = 'application/octet-stream'){
 ignore_user_abort(true);

 header('Content-Transfer-Encoding: binary');
 header('Content-Disposition: attachment; filename="' .basename($path) . "\";");
 header("Content-Type: $contentType");

 $res = array(
  'status' =>false,
  'errors' =>array(),
  'readfileStatus' =>null,
  'aborted' =>false
 );

$res['readfileStatus'] = readfile($path);
if ($res['readfileStatus'] === false) {
 $res['errors'][] = 'readfile failed.';
 $res['status'] = false;
}

if (connection_aborted()) {
 $res['errors'][] = 'Connection aborted.';
 $res['aborted'] = true;
 $res['status'] = false;
}

return $res;
}

// Save the status of the download to some place

function saveDownloadStatus($res){
$ok = false;
$fh = fopen('download-status-' . $_SERVER['REMOTE_ADDR'] . '-' .date('Ymd_His').'.txt', 'w');
 if ($fh) {
  $ok = true;
  if (!fwrite($fh, var_export($res, true))) {
   $ok = false;
  }
  if (!fclose($fh)) {
   $ok = false;
  }
 }
return $ok;
}

ผมจะไม่อธิบายอะไรนะให้เพื่อนๆ เข้ามาแกะเกากันเองเพื่อจะทำให้เกินความรู้อื่นๆ ตามมาถ้าโดยปกติแล้วใครที่เขียน jsp ก็จะมี ConnectionException รองรับอยู่แล้วแต่ php จะไม่มีเราก็จะใช้ฟังชั่น  ignore_user_abort() และ connection_aborted()
มาช่วยครับผมให้เครดิสเว็บ http://bytes.com/topic/php/answers/551302-how-detect-if-file-download-completed-cancelled ผมก็ขอจบเพียงเท่านี้นะครับนานๆ มาเขียนทีหนึ่งงานเยอะมากช่วงนี้เหอะ

ให้สังเกตุ aborted นะถ้าโหลดสำเร็จจะเป็น false ถ้าโหลดไม่สำเร็จจะเป็น true
0SHAREFacebookLINE it!
^