|  | 
	                
  
    | 
	 
        ดาวน์โหลดพวก .gif, .png, .jpg, .zip, .docx, .pdf, .doc, .swf, .rar แล้วใช้งานไม่ได้     |  
    |  |  
 
	
		|  |  |  |  |  
		|  |  | 
          
            | ดาวน์โหลดพวก .gif, .png, .jpg, .zip, .docx, .pdf, .doc, .swf, .rar แล้วใช้งานไม่ได้ 
 มันจะแจ้งว่า เช่น รูปภาพ=ภาพไม่ถูกต้อง และ ไฟล์.docx=ไม่สามารถเปิดได้เนื่องจากมีปัญหากับเนื้อหา ประมาณนี้
 
 ผมไม่เข้าใจเท่าไหร่ว่าทำไม แต่ดูในโฟลเดอร์ที่ไฟล์นั้นจัดเก็บอยู่ สามารถใช้งานได้ปกติ
 ในโฟลเดอร์เป็นแบบนี้
  
 ไม่รู้ว่ามีปัญหากับโค้ดที่อัพโหลดไปหาป่าว ส่วนโค้ดที่อัพโหลดเป็นแบบนี้
 Code (อัพโหลด)
 
 <?php 
include "class.resizepic.php";
$db = new mysqli("localhost", "root", "123456", "dbboard");
if(mysqli_connect_errno()) die("Connect Failed! :" . mysqli_connect_error());
$db->set_charset('utf8');
if(isset($_POST['Submit1'] ))
{
	$num_file = count($_FILES['file']['name']);
	$select = false;
	$count = 0;
	for($i = 0; $i < $num_file ; $i++)
	{
		if($_FILES['file']['error'][$i] != 0) 
		{
		    $count++;
			continue;
		}
		if($_FILES['file']['name'][$i] != "")
		{
			
			#ฟังก์ชั่นนี้ใช้สำหรับ Rename ชื่อไฟล์ที่ทำการอัพโหลดใหม่ รับค่า $_FILES['file']['name']
			#ผลลัพธิ์จะได้ เช่น รับค่า ทดสอบ.docx ฟังก์ชั่นจะส่งค่ามาเป็น Acdeq12345678.docx เป็นต้น
			function getNewName($fileName){
				$fileName = explode('.',$fileName);
				$i = count($fileName)-1;
				$fileType = strtolower($fileName[$i]);
				$rand = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),0,5);
				$result = $rand.time().'.'.$fileType;
				return $result;
			}
			
			$Filename = getNewName($_FILES['file']['name'][$i]);
			$originalFilename = $_FILES['file']['name'][$i];
			$type = $_FILES['file']['type'][$i];
			
			// .gif, .png, .jpg, .zip, .docx, .pdf, .doc, .swf, .rar
			if ( $type == "image/gif") {$pic_type = 'GIF'; }
			else if ($type == "image/png") {$pic_type = 'PNG'; }
			else if (($type == "image/jpg") or ($type=="image/jpeg") or ($type == "image/pjpeg")) {$pic_type = 'JPG'; }
			else if ($type == "application/octet-stream") {$pic_type = false;}
			else if ($type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {$pic_type = false;}
			else if ($type == "application/pdf") {$pic_type = false;}
			else if ($type == "application/msword") {$pic_type = false;}
			else if ($type == "application/x-shockwave-flash") {$pic_type = false;}
			else if ($type == "application/octet-stream") {$pic_type = false;}
			
			
	
			if(move_uploaded_file($_FILES['file']['tmp_name'][$i], "fileUpload/".$Filename)){
			
			if($pic_type){
					$original_image = "fileUpload/". $Filename ; 
					$pic_size = getimagesize($original_image);
					$desired_width = 250 ;
					$per_div = abs($desired_width - $pic_size[0]) * 100 / $pic_size[0];
					$desired_height = $pic_size[0] > $desired_width ?  $pic_size[1] - floor( $pic_size[1] * $per_div / 100) : $pic_size[1] + floor( $pic_size[1] * $per_div / 100);
					$image = new hft_image($original_image);
					$image->resize($desired_width, $desired_height, '0');
					$image->output_resized("fileUpload/".$Filename, "JPG");
				}
				
					$sql = $db->query("insert into files (doc_type,doc_from,doc_num,doc_quote,doc_date,doc_subject,doc_to, doc_detail,doc_num_get,doc_date_get,upload_admin,original_file_name,file_name,file_url) 
					VALUES ('{$doc_type}', '{$doc_from}','{$doc_num}','{$doc_quote}','{$doc_date}' ,'{$doc_subject}','{$doc_to}','{$doc_detail}' ,'{$doc_num_get}','{$doc_date_get}','{$upload_admin}','{$originalFilename}','{$Filename}','{$file_url}')");
				if($sql)
				{
			 		echo "<META HTTP-EQUIV=refresh CONTENT=\"0; URL=page_admin.php\">";
					$upload_true = true;
			 	}else{
			 		echo "<H3>ERROR:Can not Upload</H3>";
				 }
			}
		}else{
			$count++;
		}
	}
}
?>
 ส่วนโค้ดดาวน์โหลดเป็นแบบนี้
 Code (แสดง)
 
 <a href="download.php?pic=<?= $r["file_name"];?>">โหลด</a>
 
 Code (ดาวน์โหลด)
 
 <?
header("Content-Disposition: attachment; filename=".$_GET["pic"]."");
readfile($_GET["pic"]);
?>
 มีคนให้ echo $_GET["pic"]; ดู
 พอลองแล้วจะแสดง 5ftRi1449823219.docx
 
 เค้าให้แก้เป็นอย่างนี้
 Code (PHP)
 
 <?
echo $_GET["pic"];
exit;
header("Content-Disposition: attachment; filename=".$_GET["pic"]."");
readfile($_GET["pic"]);
?>
 สรุป สุดท้ายลองทำตามที่มีคนเคยบอกแล้ว
 แก้ไม่ได้อ่ะ มันจะแจ้งว่า เช่น รูปภาพ=ภาพไม่ถูกต้อง และ ไฟล์.docx=ไม่สามารถเปิดได้เนื่องจากมีปัญหากับเนื้อหา ประมาณนี้ ช่วยหน่อยนะครับ
 
 
 
 Tag : PHP
 
 
 |  
            |  |  
            | 
              
                |  |  |  |  
                |  | 
                    
                      | Date :
                          2015-12-12 11:55:19 | By :
                          NuItMaster | View :
                          1624 | Reply :
                          6 |  |  |  
                |  |  |  |  |  
            |  |  
		            |  |  
		|  |  |  |  |  
  
    | 
 
        
          |  |  |  |  |  
          |  |  | 
            
              | echo ออกมาได้ 5ftRi1449823219.docx 
 แสดงว่าโครงสร้างโฟล์เดอร์ของท่านไฟล์ download.php กับ 5ftRi1449823219.docx (ที่เป็นต้นฉบับ) อยู่โฟลเดอร์เดียวกันใช่หรือไม่
 
 ถ้าอยู่คนละโฟล์เอร์ท่านต้องระบุพาร์ทตรง readfile($_GET["pic"]); ให้ถูก
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 15:12:52 | By :
                            noMerzy |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | อยู่คนละโฟลเดอร์ ครับ 
 ไฟล์ download.php อยู่ใน Folder/download.php ส่วน
 ไฟล์เอกสาร 5ftRi1449823219.docx อยู่ใน Folder/fileUpload/5ftRi1449823219.docx ครับ
 
 ที่บอกว่ากำหนดให้ถูกคือ ต้องนำไฟล์ download.php เข้าไปอยู่ใน Folder/fileUpload/ และเปลี่ยนแปลง Code (PHP)
 
 <a href="download.php?pic=<?= $r["file_name"];?>">โหลด</a>
 
 ให้เป็น Code (PHP)
 
 <a href="fileUpload/download.php?pic=<?= $r["file_name"];?>">โหลด</a>
 
 ประมาณนี้ปะครับ
 
 |  
              | 
 ประวัติการแก้ไข
 2015-12-12 15:50:46
 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 15:42:33 | By :
                            NuItMaster |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ทดสอบแล้วใช้ได้ครับ ต้องขอขอบคุณครับ 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 15:47:21 | By :
                            NuItMaster |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ผมไม่รู้ว่าโปรแกรมนี้มันทำงานได้ยังไง ถ้ามีการ upload รูปภาพ มากว่า 1 รูป เพราะ เอา function getNewName($fileName) มาไว้ใน loop มันควรจะเกิด เออเร่อร์แจ้ง ว่า function ซ้ำัน
 
 ต้องย้ายม้นไปไว้ ต้นไฟล์ก่อนบันทัดที่ 2
 Code (PHP)
 
 <?php
// แยกฟังก์ชั่นเอาออกมาไว้นอก loop
function getNewName($fileName){
	$fileName = explode('.',$fileName);
	$i = count($fileName)-1;
	$fileType = strtolower($fileName[$i]);
	$rand = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),0,5);
	$result = $rand.time().'.'.$fileType;
	return $result;
}
//////////////////////////////////////////////////////////
include "class.resizepic.php";
$db = new mysqli("localhost", "root", "123456", "dbboard") or die( $db->error);
$db->set_charset('utf8');
if(isset($_POST['Submit1'] )){
	foreach( $_FILES['file']['name'] as $i=>$fn){
		if($_FILES['file']['error'][$i]==UPLOAD_ERR_OK){
			$Filename = getNewName($fn);
			$original_image = "fileUpload/". $Filename ; 
			if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $original_image)){
				if( $pic_size = getimagesize($original_image) ){ 
					// กรณีที่ไฟล์ ไม่ใช่ image $pic_size จะได้ค่า false ถ้าใช่จะเป็น array
					$desired_width = 250 ;
					$desired_height  = $pic_size[1] * $desired_width / $pic_size[0]; 
					// หาความสูง ตาม อัตราส่วน ความกว้าง
					// ไม่เข้าใจ โค๊ดข้างล่าง ทำอะไรนะครับ
					//$per_div = abs($desired_width - $pic_size[0]) * 100 / $pic_size[0];
					//$desired_height = $pic_size[0] > $desired_width ? 
					//		$pic_size[1] - floor( $pic_size[1] * $per_div / 100) : $pic_size[1] + floor( $pic_size[1] * $per_div / 100);
					
					$image = new hft_image($original_image);
					$image->resize($desired_width, $desired_height, '0');
					$image->output_resized("fileUpload/".$Filename, "JPG");
				}
				$db->query( $sql=
					"insert into files (
						doc_type,doc_from,doc_num,doc_quote,doc_date,doc_subject,
						doc_to,doc_detail,doc_num_get,doc_date_get,upload_admin,
						original_file_name,file_name,file_url
					) VALUES (
						'$doc_type','$doc_from','$doc_num','$doc_quote','$doc_date','$doc_subject',
						'$doc_to','$doc_detail','$doc_num_get','$doc_date_get','$upload_admin',
						'$originalFilename','$Filename','$file_url'
					)"
				);
				if( $db->errno)  $error .= $sql . '<br>' . $db->error."<br>";
			}else $error .= "Can not Move Upload File.<br>";
		}else $error .= "Upload Error<br>";
	}
	if( $error=='' ){
		// เอา ตรวจสอบ error มาไว้นอก loop  
		echo "<META HTTP-EQUIV=refresh CONTENT=\"0; URL=page_admin.php\">";
		$upload_true = true;		
	}else{
		echo "<H3>File ERROR: Can not Upload</H3>".$error;
	}
}
?>
 |  
              | 
 ประวัติการแก้ไข
 2015-12-12 15:59:57
 2015-12-12 17:50:23
 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 15:59:22 | By :
                            NewbiePHP |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ยินดีด้วยครับ 
 ปรมมือๆๆๆๆๆๆ
 
 ยื้อกันมาหลายวันเลย
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 16:08:10 | By :
                            noMerzy |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  
 
        
          |  |  |  |  |  
          |  |  | 
            
              | ขอบคุณครับ เดี๋ยวผมจะทอลองดูนะครับ 
 ขอบคุณทุกท่านครับ
 
 |  
              | 
                
                  |  |  |  |  
                  |  | 
                      
                        | Date :
                            2015-12-12 16:13:45 | By :
                            NuItMaster |  |  |  
                  |  |  |  |  |  |  |  
          |  |  |  |  |  |  |