2024-03-23 05:31:58 +01:00
|
|
|
package esmith::php;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use esmith::ConfigDB;
|
|
|
|
|
2024-03-27 03:11:49 +01:00
|
|
|
our $PHPDEFAULT = 82;
|
|
|
|
our $BASEPHP = 81;
|
2024-03-23 05:31:58 +01:00
|
|
|
|
|
|
|
our @ISA = qw(Exporter);
|
|
|
|
our @EXPORT = qw( listPHPVersionFPM listPHPVersionShort listPHPVersionHash listPHPVersionHashShort PHPdefault PHPbase VersionToUse PhpFpmVersionToUse $defaultdisabledfunc %defaultPHPproperties);
|
|
|
|
|
|
|
|
our $defaultdisabledfunc='system,show_source,' .
|
|
|
|
'symlink,exec,dl,shell_exec,' .
|
|
|
|
'passthru,phpinfo,' .
|
|
|
|
'escapeshellarg,escapeshellcmd';
|
|
|
|
my $configdb = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
|
|
|
our %defaultPHPproperties = (
|
|
|
|
MemoryLimit => '128M',
|
|
|
|
MaxExecutionTime => '30',
|
|
|
|
MaxInputTime => '60',
|
|
|
|
AllowUrlFopen => 'disabled',
|
|
|
|
PostMaxSize => '20M',
|
|
|
|
UploadMaxFilesize => '10M',
|
|
|
|
FileUpload => 'enabled',
|
|
|
|
PHPBaseDir => '/home/e-smith/files/ibays/$key:/var/lib/php/$key',
|
|
|
|
DisabledFunctions => $defaultdisabledfunc,
|
|
|
|
MailForceSender => "admin@".$configdb->get_value('DomainName'),
|
|
|
|
AllowPHTML => 'disabled',
|
|
|
|
AutoPrependFile => 'enabled',
|
|
|
|
);
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
esmith::php - A few tools to help with php-fpm installed versions
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
use esmith::php;
|
|
|
|
|
|
|
|
my @phps=listPHPVersionFPM('enabled');
|
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
|
|
This is intended to help playing with installed php versions.
|
|
|
|
|
|
|
|
=head1 Methods
|
|
|
|
|
|
|
|
|
|
|
|
=head2 listPHPVersionFPM
|
|
|
|
param = (enabled, disabled, all) , if empty default to all
|
|
|
|
this will return you an array of php-fpm versions available php version
|
|
|
|
print "'$_'\n" for listPHPVersionFPM('all');
|
|
|
|
'php-fpm'
|
|
|
|
'php72-php-fpm'
|
|
|
|
'php73-php-fpm'
|
|
|
|
'php74-php-fpm'
|
|
|
|
'php80-php-fpm'
|
|
|
|
'php81-php-fpm'
|
|
|
|
'php82-php-fpm'
|
|
|
|
'php83-php-fpm'
|
|
|
|
|
|
|
|
this will return only available and enabled
|
|
|
|
print "'$_'\n" for listPHPVersionFPM('enabled');
|
|
|
|
=cut
|
|
|
|
sub listPHPVersionFPM {
|
|
|
|
my $status = shift || 'all';
|
|
|
|
my $conf = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
|
|
|
my @list = $conf->get_all_by_prop( type => 'service' );
|
|
|
|
my @keys = map {$_->key; } @list;
|
|
|
|
my @FPM;
|
|
|
|
foreach my $service ( grep(/^(php[0-9]{2}-)?php-fpm$/,@keys) ) {
|
|
|
|
my $s = $conf->get($service);
|
|
|
|
next unless ($s) ;
|
|
|
|
next unless (-f "/usr/lib/systemd/system/$service.service") ;
|
|
|
|
next unless ( $status eq "all" || ($s->prop('status') || "disabled") eq $status );
|
|
|
|
push @FPM, $service;
|
|
|
|
}
|
|
|
|
return @FPM
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 listPHPVersionShort
|
|
|
|
param1 = (enabled, disabled, all) , if empty default to all
|
|
|
|
param2 = will use "" as output for base php
|
|
|
|
|
|
|
|
this will return you an array of numerical available php version
|
|
|
|
print "'$_'\n" for listPHPVersionShort('all');
|
|
|
|
'72'
|
|
|
|
'73'
|
|
|
|
'74'
|
|
|
|
'80'
|
|
|
|
'81'
|
|
|
|
'82'
|
|
|
|
'83'
|
|
|
|
|
|
|
|
this will returnonly available and enabled
|
|
|
|
print "'$_'\n" for listPHPVersionShort('enabled');
|
|
|
|
=cut
|
|
|
|
sub listPHPVersionShort {
|
|
|
|
my $status = shift || 'all';
|
|
|
|
my $emptyforbase = shift;
|
|
|
|
my @FPM = listPHPVersionFPM($status);
|
|
|
|
s/^php([0-9]{2})-php-fpm$/$1/ for @FPM ;
|
|
|
|
my $base= (defined $emptyforbase) ? "" : $BASEPHP;
|
|
|
|
s/^php-fpm$/$base/ for @FPM ;
|
|
|
|
return @FPM;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 listPHPVersionHash
|
|
|
|
param1 = (enabled, disabled, all) , if empty default to all
|
|
|
|
param2 = if defined will use "" as key for php-fpm
|
|
|
|
this will return you a hash order by version
|
|
|
|
my %list= listPHPVersionHash();
|
|
|
|
print "$_ => $list{$_}\n" for (sort keys %list);
|
|
|
|
72 => php72-php-fpm
|
|
|
|
73 => php73-php-fpm
|
|
|
|
74 => php74-php-fpm
|
|
|
|
80 => php80-php-fpm
|
|
|
|
81 => php81-php-fpm
|
|
|
|
82 => php82-php-fpm
|
|
|
|
83 => php83-php-fpm
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub listPHPVersionHash {
|
|
|
|
my $status = shift || 'all';
|
|
|
|
my $emptyforbase = shift;
|
|
|
|
my @FPM = listPHPVersionFPM($status);
|
|
|
|
my %myfpm;
|
|
|
|
my $base= (defined $emptyforbase) ? "" : $BASEPHP;
|
|
|
|
for my $php ( @FPM) {
|
|
|
|
$myfpm{$base}="$php" for ( $php=~/^php-fpm$/);
|
|
|
|
$myfpm{$_}="$php" for ( $php=~/^php([0-9]{2})-php-fpm$/);
|
|
|
|
}
|
|
|
|
return %myfpm;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 listPHPVersionHashShort
|
|
|
|
param1 = (enabled, disabled, all) , if empty default to all
|
|
|
|
param2 = if defined will use "" as key for php-fpm
|
|
|
|
|
|
|
|
this will return you a hash order by version
|
|
|
|
my %list= listPHPVersionHashShort();
|
|
|
|
print "$_ => $list{$_}\n" for (sort keys %list);
|
|
|
|
72 => php72
|
|
|
|
73 => php73
|
|
|
|
74 => php74
|
|
|
|
80 => php80
|
|
|
|
81 => php81
|
|
|
|
82 => php82
|
|
|
|
83 => php83
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub listPHPVersionHashShort {
|
|
|
|
my $status = shift || 'all';
|
|
|
|
my $emptyforbase = shift;
|
|
|
|
my %myfpm = listPHPVersionHash($status, $emptyforbase);
|
|
|
|
my %rfpm;
|
|
|
|
foreach my $key (keys %myfpm) {
|
|
|
|
my $php = $myfpm{$key};
|
|
|
|
($rfpm{$key}= $php)=~s/(^php[0-9]{0,2}).*/$1/;
|
|
|
|
}
|
|
|
|
return %rfpm;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 PHPdefault
|
|
|
|
return the php default version for the system, i.e. default chosen by rpm or the one overrided by the admin in php PHPVersion property.
|
|
|
|
one optional argument is to display 54 as empty string (i.e. base php-fpm)
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub PHPdefault {
|
|
|
|
my $emptyforbase = shift;
|
|
|
|
my $conf = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
|
|
|
my $php = $conf->get('php') ;
|
|
|
|
my $PHPVersion = ( defined $php->prop('PHPVersion') ) ? $php->prop('PHPVersion') : $PHPDEFAULT;
|
|
|
|
$PHPVersion = ($PHPVersion eq "") ? $BASEPHP : $PHPVersion;
|
|
|
|
$PHPVersion = ($PHPVersion =~ /([0-9]{2})/) ? $1 : $PHPDEFAULT;
|
|
|
|
return $PHPVersion unless defined $emptyforbase;
|
|
|
|
$PHPVersion = ( $PHPVersion eq $BASEPHP ) ? "" : $PHPVersion;
|
|
|
|
return $PHPVersion;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 PHPbase
|
|
|
|
return the php base, i.e. 54 for php-fpm provided by CentOS 7.
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub PHPbase {
|
|
|
|
return $BASEPHP;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 VersionToUse
|
|
|
|
argument 1 : output from $account->get('ibayname') or similar (shares,custom)
|
|
|
|
it is expected to find in this entry a property PHPVersion
|
|
|
|
artgument 2 : optional, a locally forced PHP version, if you do not want to trust globally prefered one.
|
|
|
|
|
|
|
|
output : a two digit php version : 74 for php 7.4 . 54 will be for php-fpm 5.4 as default php on CentOS 7 /SME 9
|
|
|
|
|
|
|
|
my $ibay=$account->get('ibayname');
|
|
|
|
my $version = VersionToUse($ibay,'80');
|
|
|
|
|
|
|
|
logic:
|
|
|
|
# if not defined => $PHPDEFAULT
|
|
|
|
# if defined and empty strin => $BASEPHP
|
|
|
|
# if defined and not empty => its value
|
|
|
|
|
|
|
|
# defined entry (e.g. ibay) PHPVersion property override
|
|
|
|
- defined forced PHPVersion provided (2nd argument, if provided) which override
|
|
|
|
- php PHPVersion property which override
|
|
|
|
- default $PHPDEFAULT
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub VersionToUse {
|
|
|
|
my $entry = shift or return "need a db entry";
|
|
|
|
my $conf = esmith::ConfigDB->open_ro or die "Could not open accounts db";
|
|
|
|
|
|
|
|
my $PHPVersion = PHPdefault();
|
|
|
|
|
|
|
|
my $forcedefault = shift ;
|
|
|
|
$forcedefault = ( defined $forcedefault ) ? $forcedefault : $PHPVersion;
|
|
|
|
$forcedefault = ($forcedefault eq "") ? $BASEPHP : $forcedefault;
|
|
|
|
$forcedefault = ($forcedefault =~ /([0-9]{2})/) ? $1 : $PHPVersion;
|
|
|
|
|
|
|
|
my $entryPHPVersion = (defined $entry->prop('PHPVersion') ) ? $entry->prop('PHPVersion') : $forcedefault;
|
|
|
|
$entryPHPVersion = ($entryPHPVersion eq "") ? $BASEPHP : $entryPHPVersion;
|
|
|
|
$entryPHPVersion = ($entryPHPVersion =~ /([0-9]{2})/) ? $1 : $forcedefault;
|
|
|
|
|
|
|
|
# we currently assume that it is installed and enabled, but could test it here
|
|
|
|
|
|
|
|
my $version= $entryPHPVersion ;
|
|
|
|
#$version = " $PHPDEFAULT - $PHPVersion - $forcedefault - $entryPHPVersion";
|
|
|
|
|
|
|
|
return $version;
|
|
|
|
}
|
|
|
|
|
|
|
|
=head2 PhpFpmVersionToUse
|
|
|
|
same as VersionToUse except it will return null string in place of $BASEPHP (i.e. "" in place of 54)
|
|
|
|
|
|
|
|
argument 1 : output from $account->get('ibayname') or similar (shares,custom)
|
|
|
|
it is expected to find in this entry a property PHPVersion
|
|
|
|
artgument 2 : optional, a locally forced PHP version, if you do not want to trust globally prefered one.
|
|
|
|
|
|
|
|
output : a two digit php version : 74 for php 7.4 or empty string, as '' will take place of 54 for php-fpm 5.4 as default php on CentOS 7 /SME 9
|
|
|
|
|
|
|
|
=cut
|
|
|
|
sub PhpFpmVersionToUse {
|
|
|
|
#my $entry = shift or return "need a db entry";
|
|
|
|
#my $forcedefault = shift ;
|
|
|
|
my $version ;
|
|
|
|
$version = VersionToUse(@_) ;#$entry,$forcedefault);# if defined $forcedefault;
|
|
|
|
#$version = VersionToUse($entry) unless defined $forcedefault;
|
|
|
|
# here we convert $BASEPHP to empty string
|
|
|
|
$version = ( $version eq $BASEPHP ) ? "" : $version;
|
|
|
|
return $version;
|
|
|
|
}
|