Hi, Phòng khách!
Trang chủ
Đăng nhập
Công Cụ Tìm Kiếm

Lần hoạt động

| |
Tìm kiếm

  Share code upload ảnh an toàn cho JohnCMS

Bài viết được duyệt bởi PuaruVN
Đăng ngày :14.08.2016 / 22:55[TOP]
TOMDZ
TOMDZ
Sáng Lập Viên
♥♥
[Web Designer & Developer]
Upload hình ảnh là chức năng hiển nhiên mà bất cứ forum hay blog nào cũng cần tới !
nhưng để có 1 trang upload an toàn thì lại khác ! hiện nay các bạn share mình thấy nhiều cái ko ổn !
nói thế ko có nghĩ là code mình hoàn hảo ! chỉ là có 1 chút cũng gọi là tiện hơn thôi ! ahihi

vào vấn đề : code Này mình post cho johncms nhé !

PHP Code:
<?php
defined
('_IN_JOHNCMS') or die('Error: restricted access');
require(
'../incfiles/head.php');
if (!
$id || !$user_id) {
    echo 
functions::display_error($lng['error_wrong_data']);
    require(
'../incfiles/end.php');
    exit;
}
$id $_GET['id];
$req = mysql_query("SELECT * FROM `forum` WHERE `id` = '
$id'");
$res = mysql_fetch_assoc($req);
$req2 = mysql_query("SELECT * FROM `forum` WHERE `id` = '" . 
$res['refid'] . "'");
            $res2 = mysql_fetch_array($req2);
            $req3 = mysql_query("SELECT * FROM `forum` WHERE `id` = '" . 
$res2['refid'] . "'");
            $res3 = mysql_fetch_array($req3);
/// tu đây trở lên là cua johncms hết nhé !

if($_SERVER['
REQUEST_METHOD'] == 'POST') {
if(isset($_FILES['
image'])) {
// Tao mot array trong cho bien errors
$errors = array();

// Tao mot array, de kiem tra xem file upload co thuoc dang cho phep
$allowed = array('
image/jpeg', 'image/jpg', 'image/png', 'images/x-png');

// Kiem tra xem file upload co nam trong dinh dang cho phep
if(in_array(strtolower($_FILES['
image']['type']), $allowed)) {
// Neu co trong dinh dang cho phep, tach lay phan mo rong
$ext = end(explode('
.', $_FILES['image']['name']));
$renamed = uniqid(rand(), true).'
.'."$ext";

if(!move_uploaded_file($_FILES['
image']['tmp_name'], "/upload/forum/".$renamed)) {
$errors[] = "<p class='
error'>Server problem</p>";
} else {
echo "UPLOAD thanh cong !";
}
} else {
// FIle upload khong thuoc dinh dang cho phep
$errors[] = "<p class='
error'>dinh dang file khong hop le - your file is not a valid type</p>";

} // END isset $_FILES

 // Check for an error
    if($_FILES['
image']['error'] > 0) {
        $errors[] = "<p class='
error'>The file could not be uploaded because: <strong>";

        // Print the message based on the error
        switch ($_FILES['
image']['error']) {
            case 1:
                $errors[] .= "loi tu he thong file php.ini";
                break;
                
            case 2:
                $errors[] .= "file size qua gioi han form";
                break;
             
            case 3:
                $errors[] .= "upload ko đủ";
                break;
            
            case 4:
                $errors[] .= "ko co file";
                break;

            case 6:
                $errors[] .= "file ko tồn tai";
                break;

            case 7:
                $errors[] .= "CHMOD ko hop le";
                break;

            case 8:
                $errors[] .= "su co upload";
                break;
            
            default:
                $errors[] .= "loi he thong !.";
                break;
        } // END of switch

        $errors[] .= "</strong></p>";
    } // END of error IF

    // Xoa file da duoc upload va ton tai trong thu muc tam
    if(isset($_FILES['
image']['tmp_name']) && is_file($_FILES['image']['tmp_name']) && file_exists($_FILES['image']['tmp_name'])) {
    unlink($_FILES['
image']['tmp_name']);
    }

} // END main if

if(empty($errors)) {
// Update cSDL /// an uoload nay la cua johncms
mysql_query("INSERT INTO `cms_forum_files` SET
                        `cat` = '" . 
$res3['refid'] . "',
                        `subcat` = '" . 
$res2['refid'] . "',
                        `topic` = '" . 
$res['refid'] . "',
                        `post` = '
$id',
                        `time` = '" . 
$time . "',
                        `filename` = '" . mysql_real_escape_string(
$renamed) . "',
                        `filetype` = '".
$_FILES['type']."'
                    ");
//// tao csdl thanh cong thì nen directo ng dung 




}


?>

<form enctype="multipart/form-data" action="" method="post"> 
    <fieldset>
<legend>Avatar</legend>
<div>
            <img class="avatar" src="uploads/images/<?php echo (is_null($user['
avatar']) ? "no_avatar.jpg" : $user['avatar']); ?>" alt="avatar" />
            <p>Please select a JPEG or PNG image of 512Kb or smaller to use as avatar<p>
            </label> 
            <input type="hidden" name="MAX_FILE_SIZE" value="524288" />
            <input type="file" name="image" />
            <p><input class="change" type="submit" name="upload" value="Save changes" /></p>
        </div>
  </fieldset> 
</form>


à nhớ là ctrl + f tìm /upload/forum/ để đổi tên thu mục upload nhé !

Hướng Dẫn :

những thử cơ bản mình sẽ không nói nhé :

1. dòng này là những định dạng cho phép upload ! các bạn có thể thêm vào !
PHP Code:
<?php
$allowed 
= array('image/jpeg''image/jpg''image/png''images/x-png');
?>


2. kiểm tra định dạng file ! hàm strtolower có nghĩa là ko phân biệt hoa hay thường để tránh nhầm lẫn giữa .PNG và .png
PHP Code:
<?php
in_array
(strtolower($_FILES['image']['type']), $allowed)
?>


3.hàm này có nghĩa là tìm đến dấu chấm ( . ) để tách phần đuôi file
VD : file tên aaa.ass.ccc.png vậy thì nó sẽ có thể hiểu phần phần mở rộng à ass ! vì thế ta dùng hàm end vấn đề này johncms vướng phải
$ext = end(explode('.', $_FILES['image']['name']));

4.phần này nghĩa là đổi tên file ! mục đích là dữ an toàn khi đưa vào CSDL
uniqid là hàm tạo ra 1 chỗi đặc biệt !
PHP Code:
<?php
$renamed 
uniqid(rand(), true).'.'."$ext";
?>


5. move_uploaded_file có nghĩa là upload tập tin của mình lên sever ! trong này nó sẽ dùng 2 tham số : move_uploaded_file(filename , destination)
trong đó filename là file mình muốn đưa lên sever và destination chính là nơi lưu trữ file !
dòng code này nếu thỏa mãn thì sẽ thực hiện việc upload
PHP Code:
<?php
if(!move_uploaded_file($_FILES['image']['tmp_name'], "/upload/forum/".$renamed)) {
?>


6. đi đôi với upload thành công thì cũng là thất bại việc upload thật bại sẽ trả về các giá trị
errors =1,2,3,4,6,7,8 ko có 5 nhé !

7.Xóa FIle trong bộ nhớ tạm thời
đầu tiên thì bạn phải kiểm tra xem file có giá trị ko !
is_file : kiểm tra có phải định dạng file ko ?
file_exists : kiểm tra file đó có nằm trên sever của mình ko
nếu thỏa mãn điều kiện thì thự hiện xóa file ở bộ nhớ đệm bằng hàm unlink

việc này sẽ làm sever bạn nhẹ hơn ! đỡ tốn băng thông hơn !

PHP Code:
<?php
if(isset($_FILES['image']['tmp_name']) && is_file($_FILES['image']['tmp_name']) && file_exists($_FILES['image']['tmp_name'])) {
    
unlink($_FILES['image']['tmp_name']);
    }
?>


8.Cuối Cùng Là Uploaf thành công rồi thì update nó vào CSDL thôi
mỗi code có table khác nhau nên mình ko hướng dẫn nhé !
code trên là dùng cho johncms nhé !

Nếu Bạn Dùng HDK_CMS của mình thì thay đoạn sql như sau :

PHP Code:
<?php
// Update cSDL
$q "UPDATE users SET avatar = '{$renamed}' WHERE user_id = {$_SESSION['uid']} LIMIT 1";
$r mysqli_query($dbc$q); confirm_query($r$q);

if(
mysqli_affected_rows($dbc) > 0) {
// Update thanh cong, chuyen huong nguoi dung ve trang edit_profile
redirect_to('edit_profile.php');
}
?>


Bài Viết với mục đích chia sẻ
được chia sẻ tại Daksong.Top
Vui Lòng Ghi Nguồn Khi Coppy
Đăng ngày :15.08.2016 / 00:37 #1
47Quang
47Quang
Active Member
♥♥♥
[Mời bạn tham gia VietAll.Net]
Không biết về john. Xin hỏi ai hiểu clg k ? Post code vào chỗ nào vậy ? Hướng dẫn thế cũng hướng dẫn
Đăng ngày :15.08.2016 / 06:14 #2
TOMDZ
TOMDZ
Sáng Lập Viên
♥♥
[Web Designer & Developer]
Vui lòng đăng nhập để thấy Links!
47Quang (14.08.2016 / 17)
Không biết về john. Xin hỏi ai hiểu clg k ? Post code vào chỗ nào vậy ? Hướng dẫn thế cũng hướng dẫn
Leech mà híc
Đăng ngày :19.08.2016 / 08:37 #3
sackaboy
sackaboy
Active Member
Vui lòng đăng nhập để thấy Links!
47Quang (14.08.2016 / 17)
Không biết về john. Xin hỏi ai hiểu clg k ? Post code vào chỗ nào vậy ? Hướng dẫn thế cũng hướng dẫn
bạn tạo 1 file tên upload rồi up code lên ! đôi tên thư mục lưu trữ file !
thường thì john bạn thấy ở file /forum/includes/addfile.php nhé !
Đăng ngày :25.08.2016 / 19:47 #4
supertroll
supertroll
Active Member
$id=$_get['id']; nhé, của top thiếu một dấu '
Đăng ngày :19.11.2016 / 14:59 #5
IBOMaster
IBOMaster
Active Member
Vui lòng đăng nhập để thấy Links!
TOMDZ (14.08.2016 / 15)
Upload hình ảnh là chức năng hiển nhiên mà bất cứ forum hay blog nào cũng cần tới !
nhưng để có 1 trang upload an toàn thì lại khác ! hiện nay các bạn share mình thấy nhiều cái ko ổn !
nói thế ko có
sao dùng k được vậy bạn
Đăng ngày :19.11.2016 / 20:20 #6
ply23
ply23
Active Member
Siêu lắm mới hiểu :]
Bình luận bài viết
Đăng Nhập để Bình luận và sử dụng đầy đủ tính năng Diễn Đàn
  Tổng số: 7 Bình luận

Chia sẻ bài viết
Đám Mây Từ Khóa
Bài Viết Cùng chuyên mục
Lọc theo tác giả
Xem chủ để ngoại tuyến (Offline)

Trong diễn đàn

Sắp xếp theo thứ tự từ trên xuống
BigTruyen.info - Kho Truyện Tranh Online Khổng lồ
Trang chủ