20220214のPHPに関する記事は3件です。

Ethna(Ethnam)に入門してみた

PHPのフレームワークEthna(Ethnam)に入門してみたので、覚え書き。 PHPのサポートバージョンの関係で、後継のEthnamを使いました。 どちらかというと、環境構築的なところに重きを置いています。 環境 OS: Amazon Linux 2 前提条件 AWSで、Amazon Linux 2環境を起動し、セキュリティグループのインバウンドルールのSSH、HTTPがクライアントPCから接続できるようになっていること 手順 1. セキュリティグループのルール確認 前提条件に記載の内容ですが、文章だとわかりにくいので、キャプチャを載せておきます。 以下は、HTTPがIPv4, IPv6からの全ての接続、SSHがIPv4からのすべての接続を許可することを意味しています。 実環境でのこの運用はセキュリティ上まずいのですが、今回は軽く動作させるだけなので、気にしないこととします。 どうしても気になる方は、「ソース」下のセレクトボックスから(「カスタム」となっているところ)「マイIP」を選択し、自身のクライアントPCの使用しているIP以外からの接続は許可しない状態にしておくとよいでしょう。 2. PHPのインストールと各種設定 (1) PHPのインストール Remi's RPM repository - Configuration wizard | rpms.remirepo.net にアクセスして、以下の通り設定。 PHPのバージョンは5.4.45にしました(Ethnamの最低要件が5.4) 基本的には、上記の通り選択すると出現するコマンドを上から順に実行していくだけですが、こちらも記載しておきます(必要に応じて、sudoやyオプションを付けています)。 # EPELリポジトリのコンフィギュレーションパッケージをインストール $ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # Remiリポジトリのコンフィギュレーションパッケージをインストール $ sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm # yum-utilパッケージをインストール $ sudo yum -y install yum-utils # PHP5.4のリポジトリのみ有効にする $ sudo yum-config-manager --disable 'remi-php*' $ sudo yum-config-manager --enable remi-php54 # 有効なリポジトリの一覧を確認 $ yum repolist $ sudo yum -y update # PHPのインストール $ sudo yum install -y php PHPのバージョンを確認し、以下の通り出ていればOK 実行コマンドと想定結果 $ php --version PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies (2) php-mbstringのインストール 後述のethna-generatorコマンド実行時のエラー回避のため、インストールしておきます $ sudo yum install -y php-mbstring (3) php.iniでタイムゾーンの設定 php.iniでタイムゾーンの設定をしておきます(この設定が漏れていて、エラーが出るパターンがあるらしい) $ sudo vi /etc/php.ini ファイルを開いたら、「timezone」で検索すると一発。 「"Asia/Tokyo"」に設定しました。 変更前 (省略)・・・ [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = ・・・(省略) 変更後 (省略)・・・ [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Asia/Tokyo" ・・・(省略) (4) [オマケ]サーバのタイムゾーンの設定変更 サーバのタイムゾーンもphp.iniの設定に合わせて、変更しておきます。 $ sudo timedatectl set-timezone "Asia/Tokyo" # 確認 $ timedatectl 3. Apacheのインストールと各種設定 続いてApacheのインストールです。 Ethnam内包の簡易サーバを使う手もあるようですが、せっかくなので (1) Apacheのインストール 以下のコマンドを実行して、Apacheをインストールします。 $ sudo yum install -y httpd (2) 設定ファイルの設定 ブラウザ経由でPHPを動かせるよう、設定ファイルに追記します。 $ sudo vi /etc/httpd/conf/httpd.conf 以下の内容を、ファイルの末尾に追記する形でよいでしょう。 追記内容 # php.iniの格納先 PHPINIDir /etc # PHP 共有モジュール LoadModule php5_module /usr/lib64/httpd/modules/libphp5.so # 拡張子が、「php」のファイルをPHPファイルと認識するための設定 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> (3) 設定の反映とサーバ起動時にApacheが起動する設定 # 起動(設定の反映: 起動済の場合は、startをrestartにすること) $ sudo systemctl start httpd # サーバ起動時にApacheが起動する設定 $ sudo systemctl enable httpd.service (4) ブラウザ経由でPHPのお試し実行 Apacheのデフォルトのドキュメントルートに移動し、お試し実行用のPHPファイルを作成、ブラウザ経由で実行してみます。 $ cd /var/www/html $ sudo vi index.php お試し実行なので、以下のような簡単な内容でよいです index.php <?php phpinfo(); ブラウザにて、 http://[パブリックIPv4アドレス]/index.php を実行し、以下のようにPHPの設定情報が出力されればOK 4. Composerのインストール Ethnamのインストールに必要なため、インストールしておきます。 # ユーザーのホームディレクトリへ移動 $ cd ~ # Composerのセットアップ $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" $ php composer-setup.php $ php -r "unlink('composer-setup.php');" # 移動とリネーム $ sudo mv composer.phar /usr/local/bin/composer # バージョン確認 composer -V 5. Ethnamでプロジェクト作成 (1) ドキュメントルートの変更 これから作成するEthnamプロジェクトに向き先を変えます。 作成するプロジェクト名は、「ethnamtest」とすることにしました。 「/var/www/html」となっている箇所(2ヶ所)を「/var/www/ethnamtest/www」に変更します。 $ sudo vi /etc/httpd/conf/httpd.conf 変更前 DocumentRoot "/var/www/html" # # Relax access to content within /var/www. # <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> # Further relax access to the default document root: <Directory "/var/www/html"> 変更後 DocumentRoot "/var/www/ethnamtest/www" # # Relax access to content within /var/www. # <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> # Further relax access to the default document root: <Directory "/var/www/ethnamtest/www"> 変更内容を保存したら、Apacheを再起動しましょう。 $ sudo systemctl restart httpd (2) Ethnamプロジェクトの作成 続いて、Ethnamプロジェクトの作成です。 プロジェクト用のディレクトリを作成し、その配下で、composer.jsonを作成します。 $ cd /var/www $ sudo mkdir ethnamtest $ sudo chmod 777 ethnamtest $ cd ethnamtest $ sudo vi composer.json 以下の内容を記載して保存した後、インストールコマンドを実行 composer.json { "require": { "ethnam/ethnam": "dev-master", "ethnam/generator": "dev-master", "smarty/smarty": "2.6.*" } } インストールコマンドを実行して、Ethnamをインストール。 $ composer install URLを叩いて、以下のような画面が表示されればOK! 実行URL 備考 http://[パブリック IPv4 アドレス]/ AWSコンソールで、EC2の対象インスタンスの詳細タブにて表示されている内容(※) 表示画面 ※パブリック IPv4 アドレスの確認方法 AWSコンソールでEC2を開き、左側ペインにて「インスタンス」を選択(①)。 対象のEC2インスタンスにチェックを入れ(②)、「詳細」タブにて、「パブリック IPv4 アドレス」を確認。 → 実行URLは、「http://13.231.149.134/」となります ※上記IPアドレスは既に変わっています なお、ethnamtestディレクトリ内は、以下のようになっています。 ethnamtest配下 app bin composer.json composer.lock etc lib locale log schema skel template tmp vendor www (3) チュートリアル - action, view, template - Ethnaで最低限押さえておきたいのが、action, view, templateです。 超ざっくり説明すると以下の通り (1) action ①アクションフォームクラス: フォームの POST 値や、クエリーストリングの値の定義ややり取りをする ②アクションクラス: アクションの実装と、遷移先(ビュークラス)の決定をする の2つからなる (2) view 表示項目やHTTPヘッダ、テンプレートの設定などを行う (3) template ブラウザに表示される内容 なお、処理フローは以下の通り ※出典:2. アクション、ビュー、テンプレートの作成と処理の流れ | Ethna2.6 → より詳細な説明も上記ページに記載されています。 ethnamtestディレクトリ(プロジェクト)直下にて、action, view, templateを作成してみましょう。 $ cd /var/www/ethnamtest # アクションクラスファイルの作成 $ vendor/bin/ethnam-generator add-action hello # ビュークラスファイルの作成 $ vendor/bin/ethnam-generator add-view hello # テンプレートファイルの作成 $ vendor/bin/ethnam-generator add-template hello → Ethnaを使用する場合は、「ethnam-generator」の部分が「ethna」になります。 URLを叩き、表示画面の通り表示されればOK 実行URL 備考 http://[パブリック IPv4 アドレス]/?action_hello=true 「パブリック IPv4 アドレス」の確認方法は、(2)に同じ 表示画面 → (2) と同じパブリック IPv4 アドレスの場合、実行URLは、「http://13.231.149.134/?action_hello=true」となります これで、基本的な動作までできました。 終わりに 後継のEthnamですら、最終コミットが6年前という、いわば古(いにしえ)のフレームワークですが、プロジェクトで使っているんだから仕方ない(笑) サポート切れてると、ドキュメントやサンプルコード探すのすら難しい・・ 現場の生きたコードを見つつ、実装するのがイチバン手っ取り早そうですね 参考 PHP: Apache 2.x (Unixシステム用) | php.net Download Composer | getcomposer.org ethnamphp/ethnam | GitHub Ethna | Ethna 2.6 documentation
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu20.04にphpenvを入れる

はじめに 古いバージョンからUbuntuをアップデートしたりして使っている人はもしかしたら記載している以外にもライブラリやツールが必要になることがあるかもしれないです。 タイトルは「phpenvを入れる」となっていますが、普通のphp単体のビルドにも利用できる。。。かも? 他にも同じような内容でQiitaに記事を方がいらっしゃいますが、「PHPのバージョンが古いのでもしかしたら必要なライブラリが違うのかも」、とか「書いた人の環境ではそうだったのかな?」とか思ったので編集リクエストではなく新規で記事を書きました。 もしお互いに記事を更新して内容が同じになった場合はこちらの記事を消そうと思っています。 環境 OS: Ubuntu 20.04.03(Desktop) PHP: 8.0.15 コマンド Desktop版のまっさらな状態からは以下のコマンドを実行すればたぶん大丈夫なはずです。 $ sudo apt install \ autoconf \ build-essential \ libbz2-dev \ libcurl4-openssl-dev \ libfreetype6-dev \ libjpeg-dev \ libkrb5-dev \ libmcrypt-dev \ libonig-dev \ libpng-dev \ libreadline-dev \ libsqlite3-dev \ libssl-dev \ libtidy-dev \ libxml2-dev \ libxslt1-dev \ libzip-dev 備考 phpenvのreadmeには.bash_profileにパスを記載していますが、Ubuntuの人は.bashrcに書くと綺麗かもです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelで複数のDBを繋ぐ時のTips

結論 ちょっとはサポートしていますが、migrate:freshとRefreshDatabaseが対応してないのが大分痛いです? DockerでMySQLの複数のデータベースの立ち上げ方が分からない Laravel関係ないですけど、まずここからが大変なんですよね。結論からいうとdocker-compose.ymlでもDB1個しか対応していないため、コンテナ作成時に自動実行されるSQLファイルを設定して、地道にDB作成やらユーザー設定のSQLを書くというアプローチがベターのようです。変に分散するとアレなんで。 db: image: mysql:8.0.27 container_name: db volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf # 複数のDBを立ち上げたいがdocker-composeのオプションで対応してないので、 # コンテナ作成時に自動で実行されるSQLファイル内で設定する - ./docker/db/sql:/docker-entrypoint-initdb.d migrate:freshで片方のDBしか消えてない 片方のDBしかマイグレーションされないのですがエラーとかは出ずに成功したかのような表記になります。 なんでや!? 結論から言うと今のところ対応していません。php artisan db:wipe --database 【接続名】で1個ずつ消してからmigrateしましょう。 マイグレーションやEroquentで毎回::connection(【DB名】)を書くのが辛い これについては公式で対処法が用意されています。マイグレーションのクラスに下記のようにconnectionプロパティを設定することで切り替えることができます。 /** * マイグレーションが使用するデータベース接続 * * @var string */ protected $connection = '【DB接続名】'; /** * マイグレーションの実行 * * @return void */ public function up() { // } 自動テストでRefreshDatabaseが効かない RefreshDatabaseは内部でmigrate:freshを使っているので効きません。ここは流石に自分でArtisanコマンド作るして呼び出すしかないですね……。 ?Laravel公式ドキュメント翻訳者への支援のお願い Laravelの公式ドキュメントの日本語版であるReaDouble.comを運営されている川瀬裕久氏が、広告収入の低下と持病の悪化のため、翻訳プロジェクトを継続することが困難になり、GitHub sponsorsを募集しています。 日本のLaravelユーザーでここを見たことない人はいないと思うので、もし恩義を感じているならば是非支援のほどお願いします。私も支援させていただいております 参考 【Docker】MySQLで複数database環境を構築する - Qiita [Laravel]Laravelで別々のDB(MySQL)に接続させる方法 - Qiita 複数の DB コネクションを使ってる場合に RefreshDatabase が失敗する - Qiita Laravel 7.x Multiple Database Connections, Migrations, Relationships & Querying | StackCoder
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む