2011-12-17 13 views
9

Làm thế nào tôi có thể kiểm tra xem cấu hình máy chủ cho phép tôi để thiết lập một tùy chọn như:Làm cách nào để kiểm tra xem ini_set có hoạt động trên máy chủ không?

ini_set('upload_max_filesize', '8M'); 

trong một kịch bản PHP? Đây là danh sách của php.ini directives nhưng tôi không thể thực sự tìm ra cách để kiểm tra trước khi tring để thay đổi giá trị đó.

+0

Chặn? ai sẽ thay đổi cài đặt ini trên máy chủ của bạn? –

+0

Tôi nghĩ bạn không thể chặn chúng. Các cài đặt bạn có thể đặt trong thời gian chạy được phép đặt. – djot

+0

đọc nhận xét này: http://www.php.net/manual/en/function.ini-set.php#30424 – yasar

Trả lời

10

Kiểm tra xem tôi có được phép sử dụng ini_set cho một số option không?

ini_set sẽ trả lại giá trị cũ thành công và false * về lỗi. Với kiến ​​thức này, bạn có thể viết một câu lệnh kiểm tra xem cuộc gọi của bạn có đi qua không, như dưới đây.

$result = ini_set ("some_option", "some_value"); 
$failure = (version_compare(PHP_VERSION, '5.3.0') >= 0) ? false : ''; 
if ($result === $failure) 
    echo "Unable to use ini_set to change 'some_option'!"; 

(*): Lưu ý giá trị trả về thay đổi trong PHP 5.3.0 từ '' (một chuỗi rỗng) để false. Vì vậy, bạn cần phải kiểm tra phiên bản PHP hiện tại của bạn là tốt.


phương pháp khác là sử dụng ini_get_all mà sẽ cung cấp cho bạn với các chi tiết liên quan đến tất cả các tùy chọn có sẵn, và nó access level.

$all_option_details = ini_get_all(); 

/* see the comments in this post regarding PHP_INI_USER vs INI_USER 
* seems like someone writing the relevant PHP documentation fcuked up 
* 
* props to @soulmerge */ 

if ($all_option_details['upload_max_filesize']['access'] & INI_USER) 
    echo "we are allowed to change upload_max_filesize from with ini_set!"; 

Tôi muốn vô hiệu hóa việc sử dụng các ini_set đối với một số tùy chọn (s), làm thế nào?

Có một vài phương pháp tạo tùy chọn thời gian chạy không thể thay đổi (theo cách tắt ini_set), trong số đó là hai phương pháp bạn có thể đọc thêm tại liên kết được cung cấp.

php_admin_valuetên giá trị

Thiết lập giá trị của chỉ thị quy định. Điều này không thể được sử dụng trong các tập tin .htaccess. Bất kỳ loại chỉ thị nào được đặt với php_admin_value không thể bị ghi đè bởi .htaccess hoặc ini_set(). Để xóa giá trị đã đặt trước đó, hãy sử dụng giá trị không được đặt làm giá trị.

php_admin_flagtên on | off

Được sử dụng để thiết lập một chỉ thị cấu hình boolean. Điều này không thể được sử dụng trong các tập tin .htaccess. Bất kỳ loại chỉ thị nào được đặt với php_admin_flag không thể bị ghi đè bởi .htaccess hoặc ini_set().


Ví dụ (lấy từ this tài liệu)

<IfModule mod_php5.c> 
    php_value include_path ".:/usr/local/lib/php" 
    php_admin_flag engine on 
</IfModule> 

<IfModule mod_php4.c> 
    php_value include_path ".:/usr/local/lib/php" 
    php_admin_flag engine on 
</IfModule> 
+0

Tôi đang tìm phương pháp của bạn nhưng trên hệ thống của tôi (phát triển cục bộ) lặp lại 'PHP_INI_USER' _Sử dụng hằng số không xác định PHP_INI_USER _... – Polmonino

+0

Theo tài liệu 'PHP_INI_USER' có giá trị là' 1', chúng ta nên sử dụng giá trị này thay vào đó (ví dụ: không sử dụng hằng số) –

+0

Sử dụng số ma thuật thay vì hằng số một ý tưởng hay, nếu hằng số bị thiếu, phải có lý do cho điều đó. Theo tài liệu của 'ini_get_all()' tham số chi tiết $ được giới thiệu trong PHP 5.3. Có vẻ như Polmonino đang sử dụng phiên bản PHP cũ hơn. – soulmerge

-3
echo ini_get (<BLA>); 
ini_set (<BLA>); 
echo ini_get (<BLA>); 
4

Nó là không thể biết những gì giới hạn thực sự của bạn là trừ khi bạn cố gắng để thiết lập giá trị mong muốn. Ví dụ: có thể cài đặt bản vá suhosin, điều này có thể ngăn bạn thay đổi giá trị.

Vì vậy, lựa chọn duy nhất của bạn để kiểm tra nếu nó có thể là để thử nó và kiểm tra giá trị trả về (mà bạn nên để trong mọi trường hợp):

$oldValue = ini_get('upload_max_filesize'); 
if (ini_set('upload_max_filesize', '8M') === false) { 
    die("Couldn't update upload file size."); 
} 
if (ini_set('upload_max_filesize', $oldValue) === false) { 
    die("Error resetting upload file size."); 
} 
// you can safely assume that it is possible to set 
// upload_max_filesize to 8M from this line onward. 
+0

+1 cho mẹo suhosin. – Polmonino

+0

Kiểm tra bài đăng của tôi cho các phương thức thay thế, bạn KHÔNG phải gọi 'ini_set' để xem liệu có thể thay đổi giá trị hay không. Ngoài ra, bạn nên viết 'ini_set (...) === false', ở trên có khả năng nói dối do quy tắc chuyển đổi ngầm định. –

+0

@refp: thx, đã cố định séc trả lại – soulmerge