|
|
|
สอบถามerror เมื่อเปิดfile ที่downloadลงมาที่ client.. แต่หากดูไฟลล์ที่เก็บไว้ที่ Local Server folder กลับใช้ได้ |
|
|
|
|
|
|
|
เรียนผู้รู้ช่วยแนะนำด้วยค่ะ มี 2 ปัญหา
1.ชื่อ ไฟลล์ที่เป็นภาษาไทย ที่ Code PHP ทำการ move_uploaded_file ไปไว้ใน folder ที่สร้างขึ้นมารหัสภาษาไทย เพี้ยน ทั้งๆที่การinsert ลงใน field ของ MySQL รหัสภาษาไทยถูกต้อง
ได้แนบ Code PHP ช่วงที่ upload ขึ้นไป ซึ่งไม่แน่ใจว่า เป็นส่วนที่ทำให่้ผลของไฟล์ Application ไม่ถูกต้องหรือไม่ แต่แปลกใจ ว่า ก็สามารถเปิด file application ใน folder ใน Local Server ได้แม้รหัสภาษาไทยของชื่อไฟล์ไม่ถูกต้องก็ตาม
Code (PHP)
<?php
$link = @mysqli_connect("localhost", "root", "", "pmj")
or die(mysqli_connect_error()."</body></html>");
mysqli_set_charset($link, "utf8");
if(is_uploaded_file($_FILES['file']['tmp_name'])) {
$e = $_FILES['file']['error'];
//ถ้าเป็นเลขที่ไม่ใช่ 0 แสดงว่าเกิดข้อผิดพลาด
if($e != 0) {
$msg = "";
if($e == 1 || $e == 2) {
$msg = "ไฟล์ที่อัปโหลดมีขนาดเกินกำหนด";
}
else {
$msg = "เกิดข้อผิดพลาดในการอัปโหลดไฟล์";
}
echo '<span class="err">'.$msg.'</span>';
}
else {
$mime_type = $_FILES['file']['type'];
$name = $_FILES['file']['name'];
$tmp_name = $_FILES['file']['tmp_name'];
$size = $_FILES['file']['size'];
$detail = $_POST['file_detail'];
//$accept = array("image", "video", "audio");
$accept = array("image", "video", "audio", "application");
$t = explode("/", $mime_type);
$type = $t[0];
if(!in_array($type, $accept)) {
echo '<span class="err">ต้องเป็นไฟล์ภาพ, เสียง หรือวิดีโอเท่านั้น</span>';
mysqli_close($link);
exit("</body></html>");
}
@mkdir($type); //ถ้ายังไม่มีไดเร็กทอรี ให้สร้างขึ้นใหม่
$target = "$type/$name";
$newname = $name;
if(file_exists($target)) {
$oldname = pathinfo($name, PATHINFO_FILENAME);
$ext = pathinfo($name, PATHINFO_EXTENSION);
$newname = $oldname;
do {
$r = rand(1000, 9999);
$newname = $oldname."-".$r.".$ext"; //เช่น bird-1234.jpg
$target = "$type/$newname";
} while(file_exists($target));
}
move_uploaded_file($_FILES['file']['tmp_name'], $target);
$sql = "INSERT INTO fileshare VALUES(
'', '$newname', '$detail', '$mime_type', '$size', 0)";
mysqli_query($link, $sql);
echo "<h3>จัดเก็บไฟล์เรียบร้อยแล้ว</h3>";
}
}
mysqli_close($link);
?>
<form method="post" enctype="multipart/form-data">
<div id="top">อัปโหลดไฟล์</div>
<label>ต้องเป็นไฟล์ภาพ, เสียง หรือวิดีโอเท่านั้น และมีขนาดไม่เกิน 2 MB</label><br>
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<input type="file" name="file" accept="image/*|video/*|audio/*|application/*" required><br><br>
<input type="text" name="file_detail" placeholder="ลักษณะและคำสำคัญเกี่ยวกับไฟล์นี้ *" maxlength="250" required><br>
<div id="bottom">
<button id="back" type="button" onClick="location='index.php'">หน้าหลัก</button>
<button id="submit">ส่งข้อมูล</button><br class="clear">
</div>
</form>
หลังจาก upload ขึ้นไป ลง ในฐานข้อมูล และ file ที่สร้างขึ้น ใน folder ใน local server
Folder ที่ Local Server จะเห็นรหัสภาษาไทย ของfile ที่ upload ขึ้นไปไม่ถูกต้องแต่มีขนาดของfile ถูกต้องและเปิดใช้ังานได้
หลังจาก upload เสร็จ มี CodePHP เพื่อ view และเพื่อ download
Code (PHP)
<?php
$link = @mysqli_connect("localhost", "root", "", "pmj")
or die(mysqli_connect_error()."</body></html>");
$id = $_GET['id'];
$sql = "SELECT * FROM fileshare WHERE file_id = '$id'";
$rs = mysqli_query($link, $sql);
$data = mysqli_fetch_array($rs);
$type = $data['file_type'];
$t = explode("/", $type);
$src = "{$t[0]}/{$data['file_name']}";
echo "<h3>ไฟล์: {$data['file_name']}</h3>";
if($t[0]=="image") {
echo "<img src=\"$src\">";
}
else if($t[0]=="video") {
echo '<video src="'.$src.'" width="320" height="240" preload="auto" controls></video>';
}
else if($t[0]=="audio") {
echo '<audio src="'.$src.'" preload="auto" controls></audio>';
}
else {
echo "<h3>ไม่สามารถเปิดไฟล์นี้ได้ กรุณาดาวน์โหลดมาเปิดบนเครื่องของท่านเอง</h3>";
}
mysqli_close($link);
?>
2. ปัญหาใหญ่คือ หลังจาก download ลงมาตาม Code PHP แล้ว ไม่สามารถเปิด file ที่ download ลงมาได้ เกิด error ได้แนบ Code PHP ช่วง download และ view ในส่วนที่น่าจะเกี่ยวข้องมาในที่นี้ด้วย และภาพของการ error หลังจากเปิด file ที่download
file Word ซึ่ง Code PHP upload ทำการmove_uploaded_file ไว้ใน Sub folder ในLocal Server
Code PHP เพื่อการ Download
Code (PHP)
<?php
$link = @mysqli_connect("localhost", "root", "", "pmj")
or die(mysqli_connect_error()."</body></html>");
$id = $_GET['id'];
$sql = "UPDATE fileshare SET file_download = file_download + 1 WHERE file_id = '$id'";
mysqli_query($link, $sql);
$sql = "SELECT * FROM fileshare WHERE file_id = '$id'";
$rs = mysqli_query($link, $sql);
$data = mysqli_fetch_array($rs);
$type = $data['file_type'];
$t = explode("/", $type);
$src = "{$t[0]}/{$data['file_name']}";
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=$src");
header("Content-Transfer-Encoding:binary");
readfile("$src");
mysqli_close($link);
?>
ภาพ ช่วงที่ Download ลงมา และ เมื่อเปิด file ที่ download
Tag : PHP, MySQL, HTML, Word (Word.Application), Apache, XAMPP
|
|
|
|
|
|
Date :
2018-11-19 21:16:48 |
By :
494384544414604 |
View :
1537 |
Reply :
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าอยากเห็น ไฟล์ใน folder เป็นภาษาไทย ต้องเปลี่ยน locale (region / administrator / locale) ของเครื่อง ที่เก็บไฟล์ เป็นไทย ด้วย
การกำหนด locale เป็นไทย เป็นการบอกให้ window แสดง อักษร ascii ส่วนเกินจาก 127 ให้แสดงในรูปแบบ ของภาษาไทย
ตามรหัส locale นั้นๆ ซึ่ง ภาษาไทย เท่ากับ win-874 หรือ tis-620
และถ้าข้อมูลชื่อไฟล์นั้น เป็น utf8 จำเป็นต้องแปลงให้เป็น tis-620 ก่อน
ปล.
ส่วนการเออเร่อร์ ของการ download ให้แก้ไข php.ini upload_max_filesize
|
ประวัติการแก้ไข 2018-11-20 06:55:30
|
|
|
|
Date :
2018-11-19 22:07:35 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาจริงๆมันไม่ควรเก็บภาษาอื่นเลยนะ นอกจากอังกฤษกับตัวเลข
อันนี้เป็นปัญหาสุดคลาสสิกมานานโข
|
|
|
|
|
Date :
2018-11-19 23:04:38 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|