|
|
|
ดาวน์โหลดพวก .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 :
1531 |
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|