2010-05-15 28 views

Trả lời

40

Việc tải bị hạn chế bởi ba lựa chọn: upload_max_filesize, post_max_sizememory_limit. Tải lên của bạn chỉ được thực hiện nếu nó không xuất hiện một trong số chúng.

Chức năng ini_get() cung cấp cho bạn một giới hạn ngắn về giới hạn và phải được chuyển đổi trước tiên. Thx đến AoEmaster cho việc này.

function return_bytes($val) { 
    $val = trim($val); 
    $last = strtolower($val[strlen($val)-1]); 
    switch($last) 
    { 
     case 'g': 
     $val *= 1024; 
     case 'm': 
     $val *= 1024; 
     case 'k': 
     $val *= 1024; 
    } 
    return $val; 
} 

function max_file_upload_in_bytes() { 
    //select maximum upload size 
    $max_upload = return_bytes(ini_get('upload_max_filesize')); 
    //select post limit 
    $max_post = return_bytes(ini_get('post_max_size')); 
    //select memory limit 
    $memory_limit = return_bytes(ini_get('memory_limit')); 
    // return the smallest of them, this defines the real limit 
    return min($max_upload, $max_post, $memory_limit); 
} 

Nguồn: http://www.kavoir.com/2010/02/php-get-the-file-uploading-limit-max-file-size-allowed-to-upload.html

+7

Cần lưu ý rằng điều này không chiếm viết tắt ký hiệu trong các tệp ini, vì vậy nếu bạn có giới hạn là "64M", nó sẽ được phân tích cú pháp là 64. Tốt nhất để chuyển đổi tất cả thành byte trước khi so sánh. –

+0

Tôi đồng ý với Brady, hầu hết các tệp ini mà tôi thấy bây giờ sử dụng ký hiệu viết tắt. –

+0

Xem chuyển đổi này http://stackoverflow.com/questions/13076480/php-get-actual-maximum-upload-size – Shane

12

Sử dụng ini_get để có được những giá trị cấu hình hiện tại:

ini_get('upload_max_filesize') 
3

Bạn cũng có thể thay đổi kích thước mà khi chạy bằng cách sử dụng tập tin .htaccess mà không cần phải thay đổi tập tin php.ini của bạn

php_value upload_max_filesize 1224M 
php_value post_max_size 1224M 
php_value max_execution_time 3000 
php_value max_input_time 3000 

sao chép mã và đặt bạn tệp, sau đó lưu trữ tệp đó bằng tệp chỉ mục, sau đó bạn chạy dự án của mình, bạn cũng có thể tải lên tệp 1GB

để biết thêm chi tiết read this article

+1

Đây không phải là câu trả lời cho câu hỏi ... –

-1

Bạn có thể thiết lập kích thước tập tin tải lên tối đa sử dụng ini_set()

ini_set('post_max_size', '64M'); 
    ini_set('upload_max_filesize', '64M'); 

hoặc sử dụng file .htaccess

php_value upload_max_filesize 
php_value post_max_size 
+0

Một số cài đặt này có thể được thay đổi bên trong tập lệnh .php bằng cách sử dụng ini_set và một số không thể. Xem http://php.net/manual/en/ini.list.php để xem danh sách đầy đủ. Ví dụ: post_max_size nói: "PHP_INI_PERDIR \t PHP_INI_SYSTEM bằng PHP <= 4.2.3. Có sẵn từ PHP 4.0.3." Để giải mã ý nghĩa của "PHP_INI_PERDIR", hãy xem http://php.net/manual/en/configuration.changes.modes.php PHP_INI_PERDIR \t Mục nhập có thể được đặt trong php.ini, .htaccess, httpd. conf hoặc .user.ini (kể từ PHP 5.3) Vì vậy, post_max_size không thể được đặt trong tập lệnh PHP thông qua ini_set(). –

2
function return_bytes($val) 
{ 
    $val = trim($val); 
    $last = strtolower($val[strlen($val)-1]); 

    switch($last) 
    { 
     case 'g': 
     $val *= 1024; 
     case 'm': 
     $val *= 1024; 
     case 'k': 
     $val *= 1024; 
    } 

    return $val; 
} 

function get_upload_max_filesize() 
{ 
    $max_upload = return_bytes(ini_get('upload_max_filesize')); 
    $max_post = return_bytes(ini_get('post_max_size')); 
    return min($max_upload, $max_post, $memory_limit); 
} 
+1

Một chút giải thích ngoài một khối mã sẽ hữu ích hơn rất nhiều. –

+0

Xin lỗi tôi là người Pháp, tôi không thể giải thích nó bằng tiếng Anh tốt. Tôi chỉ muốn giúp đỡ và chia sẻ giải pháp của tôi. – AoEmaster

+0

Thay thế rất giống nhau: http://stackoverflow.com/a/22500394/1227297 –

0

Dưới đây là một chức năng duy nhất, thực hiện ý tưởng ban đầu từ AoEmaster . Hàm trả về số nguyên (số byte).

function _GetMaxAllowedUploadSize(){ 
    $Sizes = array(); 
    $Sizes[] = ini_get('upload_max_filesize'); 
    $Sizes[] = ini_get('post_max_size'); 
    $Sizes[] = ini_get('memory_limit'); 
    for($x=0;$x<count($Sizes);$x++){ 
     $Last = strtolower($Sizes[$x][strlen($Sizes[$x])-1]); 
     if($Last == 'k'){ 
      $Sizes[$x] *= 1024; 
     } elseif($Last == 'm'){ 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
     } elseif($Last == 'g'){ 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
     } elseif($Last == 't'){ 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
      $Sizes[$x] *= 1024; 
     } 
    } 
    return min($Sizes); 
} 

Nếu bạn muốn, bạn có thể kết hợp nó với chức năng sau đây hiển thị đầu ra dưới dạng văn bản có thể đọc được của con người.

function _Byte2Size($bytes,$RoundLength=1) { 
    $kb = 1024;   // Kilobyte 
    $mb = 1024 * $kb; // Megabyte 
    $gb = 1024 * $mb; // Gigabyte 
    $tb = 1024 * $gb; // Terabyte 

    if($bytes < $kb) { 
     if(!$bytes){ 
      $bytes = '0'; 
     } 
     return (($bytes + 1)-1).' B'; 
    } else if($bytes < $mb) { 
     return round($bytes/$kb,$RoundLength).' KB'; 
    } else if($bytes < $gb) { 
     return round($bytes/$mb,$RoundLength).' MB'; 
    } else if($bytes < $tb) { 
     return round($bytes/$gb,$RoundLength).' GB'; 
    } else { 
     return round($bytes/$tb,$RoundLength).' TB'; 
    } 
} 

Sử dụng nó theo cách này:

echo 'Max allowed upload size: '._Byte2Size(_GetMaxAllowedUploadSize()); 

Một kết quả có thể là:

Max kích thước cho phép upload: 500 MB

Các vấn đề liên quan