2011-08-25 40 views
8

Tôi đang tạo danh sách kiểm tra trước khi cài đặt cho một chương trình. Chương trình yêu cầu PHP5, vì vậy tôi cần danh sách kiểm tra-kịch bản để kiểm tra tính khả dụng của PHP5.
Có chức năng là phpversion(), sẽ trả về ở định dạng 5.3.6 hoặc tương tự. Tuy nhiên, tôi muốn danh sách kiểm tra rất thẳng về phía trước và đơn giản chỉ cho bạn biết có hoặc không. Vì vậy, hiển thị phiên bản hiện tại không giúp tôi nhiều. Được rồi, một cách là sử dụng các phpversion() và loại bỏ các comas vv Nhưng không phải là có một cách neater? (Thật kỳ lạ, không có thông tin về điều này ở bất kỳ đâu)Làm cách nào để kiểm tra xem máy chủ PHP phiên bản 5 trở lên?

Vì vậy, Làm thế nào để chỉ cần kiểm tra xem máy chủ phiên bản PHP là 5 trở lên?

if (...) { 
    echo 'Server has PHP5 or above!'; 
} else { 
    echo 'Servers PHP version is lower then PHP5'; 
} 

Trả lời

14

Có một hằng số được xác định trước:

echo PHP_MAJOR_VERSION // displays 5 

http://nl.php.net/manual/en/reserved.constants.php#reserved.constants.core

Vì vậy:

if (defined('PHP_MAJOR_VERSION') && PHP_MAJOR_VERSION >= 5) 
{ 
    echo 'Server has PHP 5 or above!'; 
} 
else 
{ 
    echo 'Servers PHP version is lower then PHP5'; 
} 

Trên chỉ hoạt động cho PHP < 5.2.7, hãy thử này để thay thế cho phiên bản thấp hơn:

if (strnatcmp(phpversion(),'5.0.0') >= 0) 
{ 
    echo '5 or higher'; 
} 
else 
{ 
    echo '4 or lower'; 
} 

Nó được diễn tả bằng một trong những bình luận ở đây: http://www.php.net/manual/en/function.phpversion.php#91816

+1

Điều đó sẽ tuyệt vời ngoại trừ: 'Có sẵn từ PHP 5.2.7.' – timdev

+0

Hoàn hảo! Đó chính xác là những gì tôi đang tìm kiếm! Tôi cảm thấy xấu hổ đến nỗi tôi không thể tự mình hiểu được điều này. Tôi nghĩ rằng phải có một số chức năng cực kỳ kỳ lạ cho việc này. Cảm ơn!! –

+0

@timdev: Bạn vừa giết hạnh phúc của tôi .. Không có chức năng tương tự cho các phiên bản PHP thấp hơn không? –

1
echo 'Current PHP version: ' . phpversion(); 

Bạn có thể có thêm thông tin trong PHP documentation. Điều này có sẵn trong PHP4 trở lên.

+1

điều đó không thực sự trả lời câu hỏi của anh, trong đó có vẻ là một cái gì đó giống như "làm thế nào tôi có thể nói nếu đầu ra của phpversion() là ác cảm lớn hơn hơn hoặc bằng-to-5.0 – timdev

+0

cũng nếu anh ta không thể làm một IF với số phpversion() chúng tôi có một vấn đề ... kinda cơ bản không? –

4

Nếu chức năng phpversion() đang trở lại nó cũng giống như một số thẳng, bạn có thể làm:

if (phpversion() >=5) { 
    echo 'Server has PHP5 or above!'; 
} else { 
    echo 'Servers PHP version is lower then PHP5'; 
} 
+0

Nó không trả về một số mà là một chuỗi, chứa phiên bản đầy đủ. – GolezTrol

+0

Amm, lạ lùng đủ để làm việc này. Wow, câu trả lời có thể thực sự đơn giản không? –

+0

@GolezTrol: Đó là suy nghĩ đầu tiên của tôi, nhưng về mặt kỹ thuật nó chỉ là một số có số thập phân .. –

1
if (substr(phpversion(),0,1) >= 5) { 
    //php >= 5 
}else{ 
    //php < 5 
} 

Đó không phải là thật khó, phải không?

EDIT: Nếu chúng ta đang lo lắng về phiên bản 10 phá vỡ mã trên:

if (strtok(phpversion(),'.') >= 5) { 
    // php >= 5 
}else{ 
    // php < 5 
} 
+0

Vâng, điều đó sẽ hoạt động khi chúng tôi tiếp cận phiên bản 10. :) Tìm kiếm tốt hơn cho dấu chấm. Tôi biết PHP phát triển không phải là rất nhanh, nhưng tôi nghĩ rằng FireFox quá, và bây giờ họ đã phát hành 3 phiên bản trong một năm. – GolezTrol

+0

Điểm tốt. Xem chỉnh sửa. – timdev

9

Xem http://www.php.net/manual/en/function.version-compare.php cho một ví dụ:

if (version_compare(PHP_VERSION, '5.0.0', '>=')) { ... 
+0

Rất tuyệt! Tôi quên mất điều đó! – timdev

+0

Có, tuy nhiên PHP_VERSION không được hỗ trợ trong PHP4, sau đó nó mất điểm ..?! –

+0

Nếu trình cài đặt thực sự cần làm việc trên PHP <4.1, bạn có thể kiểm tra để đảm bảo version_compare tồn tại trước tiên. 'if (function_exists ('version_compare') && version_compare (PHP_VERSION, '5.0.0', '> =')))'. Điều đó sẽ hoạt động trở lại 4.0. – mcrumley

18

Something như thế này bạn có thể thích ứng:

<?php 
if (version_compare(PHP_VERSION, '6.0.0') >= 0) { 
    echo 'I am at least PHP version 6.0.0, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.3.0') >= 0) { 
    echo 'I am at least PHP version 5.3.0, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.0.0', '>=')) { 
    echo 'I am using PHP 5, my version: ' . PHP_VERSION . "\n"; 
} 

if (version_compare(PHP_VERSION, '5.0.0', '<')) { 
    echo 'I am using PHP 4, my version: ' . PHP_VERSION . "\n"; 
} 
?> 

Bạn có thể xem documentation here.

+1

Giải pháp tốt. Đặc biệt là vì PHP_VERSION có sẵn trong khi PHP_MAJOR_VERSION như được đề cập bởi những người khác, chỉ có sẵn từ 5.2. – GolezTrol

+0

Yeah sẽ đề xuất PHP_MAJOR_VERSION nhưng tôi đã thấy một chút băn khoăn trong tài liệu. –

1
$version = explode('.', phpversion()); 
$major = (int)$version[0]; 
$minor = (int)$version[1]; 
$release = (int)$version[2]; 
0

Thực ra, Symfony2 đã bao gồm một tập lệnh như vậy. Đó là trong app/check.php. Nó kiểm tra tối thiểu là 5.3.2 PHP và cũng có rất nhiều thứ khác.

Tôi khuyên bạn nên sử dụng điều đó.

0

echo PHP_VERSION_ID;
//You use version 5.3.7 the output like 50307

or echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION.PHP_RELEASE_VERSION; //You use version 5.3.7 the output like 537

+0

Điểm của việc kiểm tra phiên bản là để loại bỏ các máy chủ, đã lỗi thời. Nếu và 'PHP_VERSION_ID' là từ 5.2.7. phiên bản. Vì vậy, nếu php là phiên bản 4 ... thì sẽ có một lỗi. –

+0

Ngoài ra có vẻ như PHP_VERSION_ID phải được xác định trước trong mã của bạn, nó sẽ không đến từ máy chủ http://ee1.php.net/phpversion –

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