PHP

Ubuntu で最小の Apache、PHP、MySQL 構成を作る

概要

小規模なWebアプリ用の基本構成は、OS標準パッケージ、最小権限のDBユーザー、HTTPS、バックアップ、更新管理を前提にします。

実施例

sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
sudo systemctl enable --now apache2 mysql
sudo apachectl configtest

注意点

公開前にファイアウォール、DBの外部公開可否、管理画面のアクセス制限、復元テストまで確認します。

参考: 公式ドキュメント

続きを読む

phpMyAdmin を安全に限定公開する

概要

phpMyAdminは管理用ツールです。インターネットへ無制限に公開せず、VPN、IP制限、多要素認証などで到達経路を限定します。

実施例

sudo apt update
sudo apt install phpmyadmin
sudo a2enconf phpmyadmin
sudo apachectl configtest
sudo systemctl reload apache2

注意点

rootでの直接ログインを避け、用途ごとに最小権限のDBユーザーを発行してください。

参考: 公式ドキュメント

続きを読む

Ubuntu で PHP を Apache と連携して使う

概要

PHPはOSがサポートするパッケージを使い、Web実行環境に必要な拡張だけを追加します。古いPHP固有の設定は引き継ぎません。

実施例

sudo apt update
sudo apt install php libapache2-mod-php php-mysql
php -v
sudo systemctl reload apache2

注意点

本番では表示エラーを無効にし、PHPとOSのセキュリティ更新を継続してください。

参考: 公式ドキュメント

続きを読む

PHP で、LinkedList を実装する

基本構造

  1. Node クラスと LinkedList クラスの 2つを作成
  2. Node クラス→ $data と $next の 2つのメンバー変数、このうち $data は private で宣言、アクセス用のメソッド function data() を用意
  3. LinkedList クラスは $first メンバー変数のみ
    insert
    =====
  4. リストの最後に追加するノード $last を new Node($data) で新規作成
  5. $this->first が NULL の場合を判定、NULL だったら $this->first に $last を代入(この状態ではノードが1つしかなく、最初のノードが最後のノードと同義だから)
  6. $current を一時的なノードを表す変数としてまずは $this->first を代入してノードの先頭から始め、
  7. $current->next != NULL になるまで while をまわす
  8. while が終わったら、最後は $node->next に $last を代入
  9. $last を return する
    delete
    =====
  10. $this->first と一致した場合、$this->first を NULL にする
  11. $current を一時的なノードを表す変数としてまずは $this->first を代入してノードの先頭から始め、
  12. $current->next != NULL になるまで while をまわす
  13. もし $current->next == $current の場合
    5. $current->next = $current->next->next にして現在の $current をとばす。そのまま return して while を抜ける
  14. $current を次のノード $current->next にして while に戻る($current = $current->next`)
    read
    =====
  15. array() を用意(この場合は $list 変数)
  16. $current を一時的なノードを表す変数としてまずは $this->first を代入して
  17. ノードの先頭から始め、$current != NULL になるまで while をまわす
  18. array_push($list, $current->data());
  19. $current に次のノード $current->next を代入
  20. foreach で $list as $value、print $value する
続きを読む

Ubuntu の Apache で、PHP を有効にする方法

Ubuntu の Apache の設定ファイルの場所は /etc/apache2/site-available/default である。従って、 PHP をデフォルトのディレクトリ /var/www で動かすには、PHP と Apache の関連モジュールを apt-get でインストールした後、次のようにする。 # vi /etc/apache2/site-available/default Options Indexes FollowSymLinks MultiViews +ExecCGI # ここと DirectoryIndex index.php index.cgi # ここを追加。index.cgi はおまけ。 AddHandler cgi-script .cgi .pl # もし Perl (拡張子は .cgi か .pl)を有効にしたい場合はこの行を追加、「.php」はこの行に追記してはいけない(Internal Server Error となる) AllowOverride None Order allow,deny allow from all
続きを読む

デバッグの方法

みなさんは、日ごろプログラミングにおいてデバッグはどのようにされているだろうか。Eclipse などの開発環境を使っている場合は、それを利用すればいいと思う。

続きを読む

PHP で、ディレクトリの中のファイル名を取得する方法

こんな感じ。 !ereg('(^\.$)|(^\.\.$)', $file) とある行は、カレントディレクトリ(.)と、親ディレクトリを除いて処理するためのもの。 $filename[] の配列中に、ファイル一覧が入る。 <?php $dir_path = 'your_directory'; $filename = array(); $dir = dir($dir_path); while($file = $dir->read()) { if(!ereg('(^\.$)|(^\.\.$)', $file)) {
$filename[] = $file;
} } $dir->close(); ?>
続きを読む

PHP で、多角形(ポリゴン)の重心(中心)を求める。

多角形、たとえば四角形^^; (x1, y1) ... (x4, y4) の中心を求める。正確には、多角形の重心の座標を求める。

データとしては 4つの座標データがセミコロン(;)で区切られている、

$data = '242.18,525.87;243.16,581.93;294.83,580.61;294.00,525.50;';

みたいな初期データを考える(それぞれの x1, y1 の座標はさらにカンマで区切られている)。

で、多角形の中心点の座標の求め方 (https://okwave.jp/qa2534558.html) で議論されている内容を PHP 化すると、以下のようになると思う(本当にいいのだろうか?)。

続きを読む
PHP を購読