04 กรกฎาคม 2555

แก้ปัญหาการ Upload และ Download ใน PHP

โดยปกติ PHP จะ Error สองแบบ คือ ไม่สามารถ Upload ได้เนื่องจากไฟล์มีขนาดใหญ่เกินไป
และ แบบที่สองคือไม่สามารถดาวน์โหลดได้เนื่องจากไฟล์มีขนาดใหญ่และใช้เวลาดาวน์โหลดนาน
PHP: Fatal Error: Allowed Memory Size of ................... Bytes Exhausted (CodeIgniter + XML-RPC)

1. สร้างไฟล์ .htaccess ดังนี้
    AddDefaultCharset UTF-8
    DefaultLanguage en-US

    php_value post_max_size "20M"             
    # Maximum file size of post data that PHP will accept.

    php_value upload_max_filesize "20M"      
     #Maximum allowed file size for uploaded files.
   
    php_value max_execution_time 200
    #Access upload Time
   
    php_value max_input_time 200
    #Access Download Time
   
    php_value memory_limit "20M"
    #Maximum allowed file size for Download files.   


2. ใช้โค้ดแบบ Limit แบนวิธ สำหรับดาวน์โหลดไฟล์ เพื่อบีบให้มีแบนวิธคงที่

$file = "Filename.zip"; //ชื่อไฟล์
$speed = 50; // i.e. 50 kb/s ความเร็วในการดาวน์โหลด
if(file_exists($file) && is_file($file)) {
   header("Cache-control: private");
   header("Content-Type: application/octet-stream");
   header("Content-Length: ".filesize($file));
   header("Content-Disposition: filename=$file" . "%20");
   flush(); //เคลียHEAD ก่อนดาวน์โหลด
   $fd = fopen($file, "r");
   while(!feof($fd)) {
      echo fread($fd, round($speed*1024)); // $ความเร็ว คูณ kb
      flush();
      sleep(1);
   }
   fclose ($fd);
}
?>
(เครดิตสวนนี้: http://www.developertutorials.com/tutorials/php/how-to-limit-file-download-speed-in-php-114/)

ไม่มีความคิดเห็น: