ISPmanager用のPHPバージョン切り替えモジュール

直ちに免責事項:CLスイッチのみを使用できますが、CLのみです。

この記事では、CLがないサーバーでユーザーがPHPのバージョンを選択できるようにする方法について説明します。

PHPのpiモードのバージョンをfastCGIに切り替えることについてです。



PHPの新しいバージョンの迅速なリリースに関連して、タスクはユーザーがアカウントに適切なバージョンのPHPを選択できるようにすることでした。

いつものように、OSのセットがあります:FreeBSD、Centos。 ただし、わずかな変更を加えたモジュールは、すべてのOSおよびCLでも機能します。



開始するには、サーバーに必要なバージョンのPHPを配置し、必要なすべてのPHP拡張機能をインストールします。



FreeBSDの場合

php5.2がインストールされているサーバーがある場合

ポートの更新

cd /usr/ports/lang/ php53 make PREFIX=/usr/local/php53 PHPBASE =/usr/local/php53 install
      
      







PREFIX-PHPをビルドする場所を明示的に規定します。

PHPBASE-PHPのベースディレクトリを指定します。

PHPをインストールしたら、拡張機能をインストールする必要があります。

 cd /usr/ports/lang/php53-extensions make PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 install
      
      







拡張機能のビルド中に、システムにいくつかの依存関係がない場合、標準ディレクトリにはインストールされませんが、/ usr / local / php53にはすべて同じです。そのようなアプリケーションに気付いた場合は、それらを破棄して通常の方法でインストールする必要があります。

実際、各拡張機能を個別に配置することをお勧めします。確かに長くて不愉快ですが、更新の方が簡単です。

ポートをインストールすると、原則として、すべての準備が整いました! すべてが正常に機能するかどうかを確認するために、以下を行います

 /usr/local/php5.3/bin/php-cgi -v
      
      





PHPバージョンを表示します



 /usr/local/php 5.3/bin/php-cgi -m
      
      





エラーがなければ、インストールされているすべての拡張機能が表示され、すべてが正常になりました。



その後、必要なバージョンのPHPを必要なフォルダーに入れます



perlのモジュール。

モジュール自体は

 cd /usr/local/ispmgr/addon
      
      







test.plと呼びましょう

 touch test.pl chmod +x test.pl chmod 700 test.pl
      
      







モジュールに関して-あなたはより多くのことをより正確に書くことができますが、それは働くためであり、美のためではありませんでした。

モジュールを使用するには、独自の変数を設定する必要があります(サーバーの内容と場所)。

  #   my $defhomedir = "/hosting"; #  php-cgi  5.2 my $v52 = "#!/usr/local/php/52/bin/php-cgi"; #  php-cgi  5.3 (      ) my $v53 = "#!/usr/local/bin/php-cgi"; #  php-cgi  5.4 my $v54 = "#!/usr/local/php/54/bin/php-cgi"; #  php-cgi  5.5 my $v55 = "#!/usr/local/php/55/bin/php-cgi"; #    my $wrapper = "".$defhomedir."/php-bin/"."$user"."/php"; #print "(".$wrapper.")"; open my $wrapperfile, '<', $wrapper; my $usercurrentphpwrapper = <$wrapperfile>; $usercurrentphpwrapper =~ s/\R//g; #print "(".$usercurrentphpwrapper.")"; close $wrapperfile;
      
      







追加することがあります:

 #  php-cgi  5.6 my $v56 = "#!/usr/local/php/56/bin/php-cgi"
      
      





そして、それに応じて、バージョンの処理:

 elsif ($usercurrentphpwrapper eq $v56) { $usercurrentphpver = "5.6"; #print 'OK 56'; }
      
      





そして

 elsif ($newphpver == 5.6) { system ("chflags noschg $defhomedir/php-bin/$user/php"); system ("echo '#!/usr/local/php/56/bin/php-cgi' > $defhomedir/php-bin/$user/php"); system ("chflags schg $defhomedir/php-bin/$user/php"); system ("pkill -9 -u $user"); $newphpver1 = 5600; #$usercurrentphpver = "5.6"; #print 'OK 56'; }
      
      







モジュールコード自体:

 #!/usr/bin/perl use CGI; use LWP::UserAgent; use CGI::Carp qw(fatalsToBrowser); use LWP::UserAgent; use Time::localtime; #take a time sub timestamp { my $t = localtime; return sprintf( "%04d-%02d-%02d_%02d-%02d-%02d", $t->year + 1900, $t->mon + 1, $t->mday, $t->hour, $t->min, $t->sec ); } #end take a time #isp get data my $Q = new CGI; open DATA, "<var/user.phpver"; my @rows = <DATA>; close DATA; my $user = $ENV{"REMOTE_USER"}; if ($Q->param("sok")) { open DATA, ">var/user.phpver"; foreach $row (@rows) { my @elems = split / /, $row, 2; printf DATA "%s", $row if ($elems[0] ne $user); } printf DATA "%s %s\n", $user, $Q->param("phpver"); close DATA; print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n"; } else { print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc>\n"; foreach $row (@rows) { chomp($row); my @elems = split / /, $row, 2; if ($elems[0] eq $user) { $elems[1] =~ s/\R//g; print "<phpver>$elems[1]</phpver>\n"; last; } } #     print "<slist name=\"phpver\">\n"; open WLIST, "<etc/phpver.list"; my @wlist = <WLIST>; close WLIST; foreach $phpver (@wlist) { my @elems = split / /, $phpver, 2; $elems[0] =~ s/\R//g; print "<msg>$elems[0]</msg>\n"; } print "</slist>\n"; print "</doc>\n"; } # END isp get data #   my $defhomedir = "/hosting"; #  php-cgi  5.2 my $v52 = "#!/usr/local/php/52/bin/php-cgi"; #  php-cgi  5.3 (      ) my $v53 = "#!/usr/local/bin/php-cgi"; #  php-cgi  5.4 my $v54 = "#!/usr/local/php/54/bin/php-cgi"; #  php-cgi  5.5 my $v55 = "#!/usr/local/php/55/bin/php-cgi"; #    my $wrapper = "".$defhomedir."/php-bin/"."$user"."/php"; #print "(".$wrapper.")"; open my $wrapperfile, '<', $wrapper; my $usercurrentphpwrapper = <$wrapperfile>; $usercurrentphpwrapper =~ s/\R//g; #print "(".$usercurrentphpwrapper.")"; close $wrapperfile; if ($usercurrentphpwrapper eq $v53) { $usercurrentphpver = "5.3"; #print 'OK 53'; } elsif ($usercurrentphpwrapper eq $v52) { #print 'OK 52'; $usercurrentphpver = "5.2"; } elsif ($usercurrentphpwrapper eq $v54) { $usercurrentphpver = "5.4"; #print 'OK 54'; } elsif ($usercurrentphpwrapper eq $v55) { $usercurrentphpver = "5.5"; #print 'OK 55'; } #   my $newphpver = $Q->param("phpver"); #$newphpver =~ s/\R//g; #      !!!!     pkill -9 -u $user         my $disuser1 = "USER"; my $disuser2 = "root"; if ( $user eq $disuser1 ) { $www111 = "off - USER"; system ("echo 'restricted user USER' >> /usr/local/ispmgr/var/phpver.change"); } elsif ( $user eq $disuser2 ) { $www111 = "off - root"; system ("echo 'restricted user root' >> /usr/local/ispmgr/var/phpver.change"); } #   elsif ($newphpver == 5.3) { $newphpver1 = 5300; #  system ("chflags noschg $defhomedir/php-bin/$user/php"); #         PHP system ("echo '#!/usr/local/bin/php-cgi' > $defhomedir/php-bin/$user/php"); #   system ("chflags schg $defhomedir/php-bin/$user/php"); #    system ("pkill -9 -u $user"); #print 'OK 53'; } elsif ($newphpver == 5.2) { system ("chflags noschg $defhomedir/php-bin/$user/php"); system ("echo '#!/usr/local/php/52/bin/php-cgi' > $defhomedir/php-bin/$user/php"); system ("chflags schg $defhomedir/php-bin/$user/php"); system ("pkill -9 -u $user"); #print 'OK 52'; $newphpver1 = 5200; #$usercurrentphpver = "5.2"; } elsif ($newphpver == 5.4) { system ("chflags noschg $defhomedir/php-bin/$user/php"); system ("echo '#!/usr/local/php/54/bin/php-cgi' > $defhomedir/php-bin/$user/php"); system ("chflags schg $defhomedir/php-bin/$user/php"); system ("pkill -9 -u $user"); $newphpver1 = 5400; #$usercurrentphpver = "5.4"; #print 'OK 54'; } elsif ($newphpver == 5.5) { system ("chflags noschg $defhomedir/php-bin/$user/php"); system ("echo '#!/usr/local/php/55/bin/php-cgi' > $defhomedir/php-bin/$user/php"); system ("chflags schg $defhomedir/php-bin/$user/php"); system ("pkill -9 -u $user"); $newphpver1 = 5500; #$usercurrentphpver = "5.5"; #print 'OK 55'; } #    open (MyFile, ">>" , "var/phpver.change") ; print MyFile '[' . timestamp() . '] '.$user.' php was '.$usercurrentphpver.' become '.$newphpver."\n"; close MyFile;
      
      







次に、ユーザーがバージョンを切り替える機能を追加する必要があります(アカウント設定にアイテムを追加します)。

フォルダーへ

 cd /usr/local/ispmgr/etc
      
      







ispmgr_mod_phpver.xmlファイルを作成します

 touch ispmgr_mod_phpver.xml chmod 700 ispmgr_mod_phpver.xml
      
      







その中で、バージョンスイッチングのドロップダウンメニューをISPmanagerの[設定]メニューにドロップしています。



 <?xml version="1.0" encoding="UTF-8"?> <mgrdata> <handler name="test.pl" type="cgi"> <event after="yes">usrparam</event> </handler> <metadata name="usrparam"> <form> <field name="phpver"> <select name="phpver"/> </field> </form> </metadata> <lang name="en"> <messages name="usrparam"> <msg name="5.3">5.3</msg> <msg name="5.2">5.2</msg> <msg name="5.1">5.1</msg> <msg name="4.4">4.4</msg> </messages> </lang> <lang name="ru"> <messages name="usrparam"> <msg name="phpver"> PHP </msg> <msg name="hint_phpver">  PHP.</msg> </messages> </lang> </mgrdata>
      
      







また、/ usr / local / ispmgr / etcにファイルを作成します

 touch phpver.list
      
      





使用するバージョンのリストが含まれ、サーバーにインストールされます

 5.2 5.3 5.4 5.5
      
      





キャリッジ変換を配置することを忘れないでください(5.5の下の空行に注意してください)。

ファイルを作成します:

 cd /usr/local/ispmgr/var/
      
      





Phpver.changeファイル:

 touch phpver.change chmod 700 phpver.change
      
      







バージョンのユーザーによる変更のログはここにあります。

ISPmanagerのxmlキャッシュを消去します

 rm -rf /usr/local/ispmgr/var/.xmlcache
      
      





ISPmanagerパネルを再起動します。

 killall ispmgr
      
      







テストユーザーの確認

 <? phpinfo(); ?>
      
      







ISPmanagerにアクセスして使用します。 また、新しい「バン」の入手可能性に関するニュースレターをユーザーに送信することを忘れないでください。

画像

何か説明するのを忘れた場合は、追加します。



スクリプト内のFreeBSDフラグについて

system( "chflags noschg $ defhomedir / php-bin / $ user / php");

system( "echo '#!/ usr / local / php / 52 / bin / php-cgi'> $ defhomedir / php-bin / $ user / php");

system( "chflags schg $ defhomedir / php-bin / $ user / php");

古いバージョンでは、ISPmanagerはホームディレクトリのユーザーにラッパーを書き込みました。 その結果、ユーザーがすべてを削除した場合、ラッパーはもうないため、再起動時にapacheがダウンしたため、不変性フラグを設定しました。

Centosの場合chflags noschgchattr -iに置き換え、それに応じてchflags schgchattr + iに置き換えます。



CLの場合、代わりにalt-phpが使用される場合:

 system ("echo '#!/usr/local/php/52/bin/php-cgi' > $defhomedir/php-bin/$user/php");
      
      





以下を指定する必要があります。

 system ("cl-selector -s php -v $newphpver -u $user");
      
      






All Articles