[CodeIgniter] レンタルサーバーにCodeIgniterを30秒でインストールする

PHPでサイトを作る時は、大抵はCodeIgniterで作るのですが、毎回毎回、サーバーにCodeIgniterのファイルをアップロードするのが面倒だったので、インスーラーを作ってみました。

自作CodeIgniterインストーラーのやってること

基本的には、手動でやってることをPHPプログラムにやらせてるだけです。ちなみに、本当に30秒で終わるかはサーバーの回線速度次第です。もっと早く終わることもあります。

流れとしては、

  1. 公式サイトから本体zipをダウンロード
  2. zipを展開
  3. CodeIgniter-{ver}というディレクトリができてしまうので、カレントディレクトリに移動
  4. 不要ファイルを削除

となっています。

前提として、

・system、fopen関数が使える
・カレントディレクトリにはindex.phpがない(上書きされます)

ということにご注意を。

自作CodeIgniterインストーラーでインストール

では、早速インストールしてみます。

CodeIgniterをインストールしたいディレクトリに、任意のファイル名(ci3-installer.phpなど)で下記のプログラムをアップロードします。

プログラム内の「任意のバージョン」のところは最新版を自分で記入してください。

<?php
$ziped_name = "ci3.zip";
$ver = "3.1.5"; //任意のバージョン

#
## 本体をダウンロード
#
if(!file_exists("./" . $ziped_name)){
  echo "ダウンロードします。<br>";
  $fp = fopen("https://github.com/bcit-ci/CodeIgniter/archive/" . $ver . ".zip", "r");
  if ($fp !== FALSE) {
      file_put_contents("./" . $ziped_name, "");
      while(!feof($fp)) {
          $buffer = fread($fp, 4096);
          if ($buffer !== FALSE) {
              file_put_contents("./" . $ziped_name, $buffer, FILE_APPEND);
          }
      }
      fclose($fp);
  }
}else{
    echo "ダウンロード済みです。<br>";
}


#
## zipファイルを展開
#
echo "ファイルを展開します。<br>";

$zip = new ZipArchive;
if ($zip->open("./" . $ziped_name) === TRUE) {
    $zip->extractTo('.');
    $zip->close();
    echo 'ファイルを展開しました。<br>';
} else {
    echo 'ファイルの展開に失敗しました。<br>';
}

#
## move
#
echo '不要ファイルを削除します。<br>';

system('cp -Rp ./CodeIgniter-' . $ver . '/. ./');
system('rm -R ./CodeIgniter-' . $ver);
system('rm -R ./user_guide');
system('rm ./contributing.md');
system('rm ./composer.json'); 
system('rm ./readme.rst'); 
system('rm ./license.txt'); 
system('rm ./.editorconfig'); 
system('rm ./.gitignore'); 
system('rm ./' . $ziped_name); 

echo '削除しました。<br>';

echo 'Codeigniter' . $ver . 'のインストールが完了しました。<br><br><a href="/">確認する</a>';


?>

あとは、example.com/ci3-installer.phpにアクセスすればインストール完了です。

ちなみに、このプログラムでは.htaccessに変更を加えてないためトップページしか動きません。適宜、.htaccessの編集もお忘れなく。


モダンな方法だとcomposerを使うんですが、レンタルサーバーだとcomposerが使えないシーンもあるかと思うので、そういった環境の方は使ってみてください。