» » » [Share] Code upload ảnh an toàn cho JohnCMS
Bạn phải để Bình luận
19-08-2016#
admin offline * LeYTi (Sáng Lập!)
Level MAX  Like 0
Xu 0  TN 0
VnMaster

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
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>

Copy code


à 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 !
$allowed = array('image/jpeg', 'image/jpg', 'image/png', 'images/x-png');
Copy code


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
in_array(strtolower($_FILES['image']['type']), $allowed)
Copy code


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 :D
$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 !
$renamed = uniqid(rand(), true).'.'."$ext";
Copy code


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
if(!move_uploaded_file($_FILES['image']['tmp_name'], "/upload/forum/".$renamed)) {
Copy code


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 !

if(isset($_FILES['image']['tmp_name']) && is_file($_FILES['image']['tmp_name']) && file_exists($_FILES['image']['tmp_name'])) {
    unlink($_FILES['image']['tmp_name']);
    }

Copy code


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 :

// 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');
}

Copy code


Nguồn: Daksong.
Tổng số 1 bình luận
Chia sẻ bài viết: Sắp xếp:
Liên kết:
BBcode:
Tìm kiếm
Online
» Có 0 thành viên1 khách đang trực tuyến.
Stats
TOP
Facebook - Thanks to XTgem™ Sitemap - Nội quy
© 2015-2017 VnMaster.Yn.Lt
-->

80s toys - Atari. I still have