Work on page to show PHP versions

This commit is contained in:
Jamie Cameron
2025-04-01 22:24:33 -07:00
parent 4ae5ec1694
commit aa55e33b7e
4 changed files with 115 additions and 0 deletions

View File

@@ -61,6 +61,16 @@ else {
print &ui_form_end();
}
# Show button to install PHP versions
if ($access{'global'} && &foreign_available("software")) {
print &ui_hr();
print &ui_buttons_start();
print &ui_buttons_row("list_pkgs.cgi",
$text{'index_pkgs'},
$text{'index_pkgsdesc'});
print &ui_buttons_end();
}
&ui_print_footer("/", $text{'index'});
}

View File

@@ -9,6 +9,8 @@ index_edit=Manage
index_manual=Edit Manually
index_anyfile=Edit other PHP configuration file
index_return=configuration files
index_pkgs=Manage PHP Packages
index_pkgsdesc=Install and remove PHP versions from your system's software package repository, so that they can be configured here any used in Virtualmin.
file_global=Global PHP configuration
file_eread=Failed to read $1 : $2
@@ -214,4 +216,16 @@ acl_user=Read and write files as user
opt_default=Default Value: <tt>$1</tt>
opt_default_unknown=Unknown
pkgs_title=PHP Packages
pkgs_name=Package name
pkgs_ver=Package version
pkgs_phpver=PHP version
pkgs_users=Used by
pkgs_delete=Delete Selected Packages
pkgs_none=No PHP packages were found on your system!
pkgs_ecannot=You are not allowed to manage PHP packages!
pkgs_ecannot2=Software packages cannot be managed on this system
pkgs_nousers=No domains
pkgs_ucount=$1 domains
__norefs=1

50
phpini/list_pkgs.cgi Normal file
View File

@@ -0,0 +1,50 @@
#!/usr/local/bin/perl
# Show all installed PHP versions
require './phpini-lib.pl';
$access{'global'} || &error($text{'pkgs_ecannot'});
&foreign_available("software") || &error($text{'pkgs_ecannot2'});
&ui_print_header(undef, $text{'pkgs_title'}, "");
my @pkgs = &list_php_base_packages();
if (@pkgs) {
my %vmap;
if (&foreign_check("virtual-server")) {
# Get the domain to PHP version map
&foreign_require("virtual-server");
foreach my $d (&virtual_server::list_domains()) {
my $v = $d->{'php_fpm_version'} ||
$d->{'php_version'};
if ($v) {
$vmap{$v} ||= [ ];
push(@{$vmap{$v}}, $d);
}
}
}
my @tds = ( "width=5" );
print &ui_form_start("delete_pkgs.cgi", "post");
print &ui_columns_start([ "", $text{'pkgs_name'},
$text{'pkgs_ver'},
$text{'pkgs_phpver'},
$text{'pkgs_users'} ], \@tds);
foreach my $pkg (@pkgs) {
my $ulist = $vmap{$pkg->{'shortver'}};
my $users = !$ulist || !@$ulist ? $text{'pkgs_nousers'} :
@$ulist > 5 ? &text('pkgs_ucount',scalar(@$ulist)) :
join(", ", map { "<tt>$_->{'dom'}</tt>" } @$ulist);
print &ui_checked_columns_row([
$pkg->{'name'},
$pkg->{'ver'},
$pkg->{'phpver'},
$users,
], \@tds, "d", $pkg->{'name'});
}
print &ui_columns_end();
print &ui_form_end([ [ undef, $text{'pkgs_delete'} ] ]);
}
else {
print "<b>$text{'pkgs_none'}</b> <p>\n";
}
&ui_print_footer("", $text{'index_return'});

View File

@@ -866,5 +866,46 @@ else {
return @poss;
}
# list_php_base_packages()
# Returns a list of hash refs, one per PHP version installed, with the following keys
# name - Package name
# system - Package system
# ver - Package version
# phpver - PHP version
sub list_php_base_packages
{
&foreign_require("software");
my $n = &software::list_packages();
my @rv;
for(my $i=0; $i<$n; $i++) {
my $name = $software::packages{$i,'name'};
next if ($name !~ /^php(\d*)$/);
my $suffix = $1;
my $phpver = $software::packages{$i,'version'};
$phpver =~ s/\-.*$//;
my $bin;
foreach my $b ($name, $name."-cgi", "php-".$phpver) {
if ($bin = &has_command($b)) {
last;
}
}
if ($bin) {
my $out = &backquote_command("$bin -v 2>&1");
if ($out =~ /(^|\n)PHP\s+([\d\.]+)/) {
$phpver = $2;
}
}
my $shortver = $phpver;
$shortver =~ s/^(\d+\.\d+).*$/$1/;
push(@rv, { 'name' => $software::packages{$i,'name'},
'system' => $software::packages{$i,'system'},
'ver' => $software::packages{$i,'version'},
'shortver' => $shortver,
'phpver' => $phpver,
'binary' => $bin, });
}
return sort { &compare_version_numbers($a->{'ver'}, $b->{'ver'}) } @rv;
}
1;