09/10/2018, 23:40

đổi tên file upload trong PHP

Mình dùng cách sau để upload file :

$varFileName=$_FILES['file_upload']['name'];
$varSize=$_FILES['file_upload']['size'];
$varTemp=$_FILES['file_upload']['tmp_name'];
$varType=$_FILES['file_upload']['type'];
$varExt=$FILES['file_upload']['Extend'];

$varUploadDir="Images/";
$varUploadFile=$varUploadDir.$varFileName;

if(!move_uploaded_file($varTemp,$varUploadFile))
$varStrError="Upload file bi loi!";
else
print "Upload file thanh cong !";

Vấn đề của mình là mình muốn kiểm tra phần mở rộng của file(VD : mình chỉ cho phép upload những file có đuôi là *.jpg, *.gif), và mình muốn đổi lại tên file này khi người dùng upload lên server (do có thể có nhiều người dùng upload khác file nhưng lại trùng tên khi đó file upload sau sẽ thay thế file upload trước).

Mong các bạn giúp mình với, xin cảm ơn rất nhiều !
amida viết 01:52 ngày 10/10/2018
get extension:
PHP Code:
substr($filename,strpos($filename,'.')+1); 
Còn đổi tên thì dùng hàm rename thôi.
dtphu viết 01:56 ngày 10/10/2018
Mình đã làm được rồi, cảm ơn amida nhiều lắm.
mrsinguyenus viết 01:50 ngày 10/10/2018
Thử dùng hàm này để kiểm tra file
Các tham số: $filename, $upload_type

$filename ='abc.jpg';
$upload_type = ',jpg,jpeg,gif,png,';

PHP Code:
function check_file_type($filename,$upload_type){
    
    
$start strrpos($filename,".");
    if (
$start == strlen($filename)) return false;

    
$user_type strtolower(substr($filename,$start+1));

    
$allow_type explode(',',$upload_type);
    
reset ($allow_type);
    while (list(,
$val)=each($allow_type)){
           if (
$val == $user_type) return true;
    }
    return 
false;

NumPad0 viết 01:43 ngày 10/10/2018
Quote Được gửi bởi amida View Post
get extension:
PHP Code:
substr($filename,strpos($filename,'.')+1); 
Còn đổi tên thì dùng hàm rename thôi.
Vậy nếu tên file là this.is.a.5h1t.file.name.ext hoặc only_a_file_name thì sao hả bạn?
NumPad0 viết 01:53 ngày 10/10/2018
Hì... Lấy ext của file thế này
PHP Code:
if (strstr('.'$file_name))
    
$file_ext preg_match('#.*\.(***91;^\.***93;*)$#'"\\1"$file_name);
else
    
$file_ext ''
jiSh@n viết 01:45 ngày 10/10/2018
PHP Code:
<?php
$path_parts 
pathinfo('/www/htdocs/index.html');

echo 
$path_parts***91;'dirname'***93;, "\n";
echo 
$path_parts***91;'basename'***93;, "\n";
echo 
$path_parts***91;'extension'***93;, "\n";
?>
Would produce:
Code:
/www/htdocs
index.html
html
amida viết 01:41 ngày 10/10/2018
Quote Được gửi bởi NumPad0 View Post
Vậy nếu tên file là this.is.a.5h1t.file.name.ext hoặc only_a_file_name thì sao hả bạn?
Quote Được gửi bởi NumPad0 View Post
Hì... Lấy ext của file thế này
PHP Code:
if (strstr('.'$file_name))
    
$file_ext preg_match('#.*\.(***91;^\.***93;*)$#'"\\1"$file_name);
else
    
$file_ext ''


Chi cho nhức đầu vậy bạn Code này đọc sao hiểu vậy, lệnh cơ bản cho người mới học

PHP Code:
for ($i strlen($filename) ; $i >= $i--) {
    if ( (
$filename***91;$i***93; == ".") && ($i >= strlen($filename)-5) ) {
        
$file_ext substr($filename,$i+1);
        break;
    }
    elseif (
$i <= strlen($filename)-5) {
        
$file_ext '';
        break;
    }  

jiSh@n viết 01:56 ngày 10/10/2018
Quote Được gửi bởi amida View Post
Chi cho nhức đầu vậy bạn Code này đọc sao hiểu vậy, lệnh cơ bản cho người mới học

PHP Code:
for ($i strlen($filename) ; $i >= $i--) {
    if ( (
$filename***91;$i***93; == ".") && ($i >= strlen($filename)-5) ) {
        
$file_ext substr($filename,$i+1);
        break;
    }
    elseif (
$i <= strlen($filename)-5) {
        
$file_ext '';
        break;
    }  

Code này ko hoàn toàn đúng về mặt logic (bây giờ ko phải cái thời của DOS mà giới hạn ext chỉ có 3 ký tự), chưa kể nó chậm.
Đây là 1 cách, chú ý strrpos chứ ko phải strpos.
PHP Code:
 substr($filename,strrpos($filename,'.')+1); 
Cách thông thường là dùng pathinfo() như ở trên.
Bài liên quan
0