20210429のPHPに関する記事は7件です。

mysqlのパスワードわからない時の対処法

背景 php学習中ですがphpmyadminにmysqlのパスワードがわからずアクセスできなかった。 解決するまでに苦戦してしまったので忘れないように。 解決方法 my.iniファイルを開き、[mysqld]の欄にskip-grant-tablesを追記 (C:\xampp\mysql\bin\my.ini) Mysqlを再起動 コマンドプロンプトからmysqlにアクセス(mysql -u root -p) flush privileges; エラーが返ってくるが無視 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';でパスワードを再設定 my.iniの[mysqld]欄skip-grant-tablesを削除し、mysqlを再起動 mysql -u root -pで再設定したパスワードでログインできるか確認する。 config.inc.phpのパスワードも今回再設定したものに書き換えた結果、 phpmyadminにアクセスできるようになりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelでウェブアプリを作ろう

Laravelをアプリケーションサーバーとして動かすための設定を記載していきます 参考にさせていただいたサイト 自分の動作環境ではいくつかエラーが出たので、その点も含めて修正したデータを載せていきます 動作環境 MacOS Big Sur MacBookAir(13-inch, Mid2013) もくじ ウェブアプリは以下の手順で作成するものとします 環境設定+プロジェクトの作成 composerによるプロジェクトの作成 データベース Dockerでコンテナの作成とその接続設定 Migrateの作成 モデルとシーダーの作成 リクエスト コントローラーの作成
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MDB2→PDOに移行する

MDB2→PDO移行の覚えがき。 DB接続、トランザクション、ステートメント実行といった基本的な内容が中心。 公式マニュアル 公式マニュアルのTOPページはそれぞれ以下の通り。 MDB2 MDB2 | pear.php.net PDO PHP Data Objects | php.net 1. DB接続 MDB2 PDO 接続 MDB2::factory, MDB2::connent, MDB2::singleton new PDO 接続エラー PEAR::isError PDOExceptionをスロー 切断 MDB2::disconnent nullをセット (1) 接続 いろいろな書き方があるので、とりあえず代表的そうなものを抜粋。 MDB2 /* MySQL */ $dbh = MDB2::connect("mysql://$user:$password@$host:$port/$dbname"); /* PostgreSQL */ $dbh = MDB2::connect("pgsql://$user:$password@$host:$port/$dbname"); /* Oracle */ $dbh = MDB2::connect("oci8://$user:$password@$host:$port/?service=$dbname"); PDO /* MySQL */ $dbh = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $user, $password); /* PostgreSQL */ $dbh = new PDO("pgsql:host=$host;port=$port;dbname=$dbname;user=$user;password=$password"); /* Oracle */ $dbh = new PDO("oci:dbname=".$dbinfo, $user, $password); (2) 接続エラー MDB2 $dbh = MDB2::connect($connection_string); if (PEAR::isError($dbh)) { // 接続に失敗した場合の処理を書く } PDO try { $dbh = new PDO($connection_string); } catch (PDOException $e) { // 接続に失敗した場合の処理を書く } (3) 切断 MDB2 $dbh->disconnect(); PDO $dbh = null; 参考 MDB2 Connecting and disconnecting a database | pear.php.net The Data Source Name | pear.php.net PDO 接続、および接続の管理 | php.net MySQL 関数 (PDO_MYSQL) | php.net PDO_PGSQL DSN | php.net Oracle 関数 (PDO_OCI) | php.net 2. トランザクション 内容的にほとんど同じ。 トランザクションサポートの有無の確認の仕方が違うくらい。 MDB2 PDO 開始 MDB2::beginTransaction PDO::beginTransaction サポートの確認(※) MDB2::support('transactions') 非対応の場合、PDOExceptionをスロー コミット MDB2::commit PDO::commit ロールバック MDB2::rollBack PDO::rollBack ※: サポート確認: 「トランザクションサポートの有無の確認」を指しています。 (1) 開始, (2) サポートの確認 MDB2 $dbh->beginTransaction(); if(!$dbh->supports('transactions')){ // トランザクションサポートがない場合の処理を記述 } PDO try { $dbh->beginTransaction(); } catch (PDOException $e) { // トランザクションサポートがない場合の処理を記述 } (3) コミット MDB2 $dbh->commit(); PDO $dbh->commit(); (4) ロールバック MDB2 $dbh->rollback(); PDO $dbh->rollback(); 参考 MDB2 Performing transactions | pear.php.net PDO トランザクションおよび自動コミット | php.net PDO::beginTransaction | php.net PDO::commit | php.net PDO::rollBack 3. ステートメントの準備と実行 MDB2→PDOの移行で最もエネルギーを使いそうなところ。 ステートメントを実行した後のデータの取り出し方も異なっているので、そこも注意すべきポイントだったり。 MDB2 PDO 値のバインド MDB2::quote PDOStatement::bindParam, PDOStatement::bindValue 値のデータ型(SQL INTEGER) integer PDO::PARAM_INT 値のデータ型(SQL CHAR, VARCHAR, 他文字列データ型) text PDO::PARAM_STR 値のデータ型(ブールデータ型) boolean PDO::PARAM_BOOL 値のデータ型(タイムスタンプ型) timestamp PDO::PARAM_STR(※) 値のデータ型(日付型) date PDO::PARAM_STR(※) ※PDOには、タイムスタンプ型、日付型が存在しないので、代わりに文字列型のPDO::PARAM_STRを使用する (1) 変数や値のバインドを伴うプリペアドステートメントの実行 MDB2 $stmt = 'INSERT INTO tablename (id, itemname, saved_time) VALUES (' . $dbh->quote($id, 'integer') .', ' . $dbh->quote($name, 'text') .', ' . $dbh->quote($time, 'timestamp') .')'; $result = $dbh->exec($stmt); PDO $stmt = 'INSERT INTO tablename (id, itemname, saved_time) VALUES (:id, :name, :saved_time)'; $stmt->bindValue(':id', $id, PDO::PARAM_INT); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindValue(':saved_time', $saved_time, PDO::PARAM_STR); $res = $dbh->exec($stmt); (2) 入力値の配列を伴うプリペアドステートメントの実行(名前つきパラメータ) MDB2 $stmt = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $res = $stmt->execute(array(':calories' => $calories, ':colour' => $colour)); foreach ($row() = $res->fetchRow()) { // 取り出す内容を記述 } PDO $calories = 150; $colour = 'red'; $stmt = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $stmt->execute(array(':calories' => $calories, ':colour' => $colour)); foreach ($stmt as $row) { // 取り出す内容を記述 } (3) 入力値の配列を伴うプリペアドステートメントの実行 (プレースホルダ) MDB2 $calories = 150; $colour = 'red'; $stmt = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $res = $stmt->execute(array($calories, $colour)); foreach ($row() = $res->fetchRow()) { // 取り出す内容を記述 } PDO $calories = 150; $colour = 'red'; $stmt = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $stmt->execute(array($calories, $colour)); foreach ($stmt as $row) { // 取り出す内容を記述 } (4) 多数の値のバインドを伴う&データ型の指定が必要な場合 MDB2 $types = array('integer', 'text', 'text', 'date', 'date'); $stmt = $dbh->prepare('INSERT INTO numbers VALUES (?, ?, ?, ?, ?)', $types, MDB2_PREPARE_MANIP); $params = array(1, 'one', 'en', date("Y-m-d H:i:s"), date("Y-m-d H:i:s")); $res = $stmt->execute($params); foreach ($row() = $res->fetchRow()) { // 取り出す内容を記述 } MDB2だprepareの第2引き数にデータ型を詰めた配列をセットしてあげればいいけれど、PDOだとそうはいかない。bindParamやbindValueを何回も書くのもな、という場合は関数化してしまえばOK。 また、こうすれば、パラメータの数が可変の場合も対応できる。 $stmt = $dbh->prepare('INSERT INTO numbers VALUES (?, ?, ?, ?, ?)'); $params = array(1, 'one', 'en', date("Y-m-d H:i:s"), date("Y-m-d H:i:s")); $types = array('integer', 'text', 'text', 'date', 'date'); $stmt = bindValues($stmt, $params, $types); $stmt->execute(); foreach ($stmt as $row) { // 取り出す内容を記述 } function bindValues($stmt, $params, $datatypes){ $i = 0; while($i < count($params)){ switch($type[$i]){ case 'boolean': $bindType = PDO::PARAM_BOOL; break; case 'integer': $bindType = PDO::PARAM_INT; break; case ('text' || 'timestamp' || 'date') $bindType = PDO::PARAM_STR; break; default: $return false; } $stmt->$bindValue($i+1, $params[$i], $bindType); $i++; } return $stmt; } ※おかしな値が指定された時用にfalseを返してますが、上記コード中ではその際の処理は書いてません。 参考 MDB2 Quote values in a suitable format to compose a query | pear.php.net Prepare and execute SQL statements | pear.php.net PDO PDO::prepare | php.net PDOStatement::execute | php.net PDO::exec | php.net 定義済み定数 | php.net 4. フェッチモード MDB2はデータベースハンドルのみだが、PDOはステートメントごとにフェッチモードの設定が可能。 キーor プロパティ MDB2 PDO 規則配列 キー: カラム番号 MDB2_FETCHMODE_ORDERED PDO::FETCH_NUM 連想配列 キー: カラム名 MDB2_FETCHMODE_ASSOC PDO::FETCH_ASSOC オブジェクト プロパティ:カラム名 MDB2_FETCHMODE_OBJECT PDO::FETCH_OBJ (1) 接続時に指定 MDB2 $dbh = MDB2::connect($connection_string); $dbh->setFetchMode(PDO::FETCH_ASSOC); PDO $dbh = new PDO($connection_string); $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); (2) 実行時に指定 MDB2 $dbh->setFetchMode(PDO::FETCH_ASSOC); $stmt = $dbh->prepare("SELECT aaa, bbb FROM hoge"); $res = $stmt->execute(); foreach ($row() = $res->fetchRow()) { // 取り出す内容を記述 } PDO $stmt = $dbh->prepare("SELECT aaa, bbb FROM hoge"); $stmt->setFetchMode(PDO::FETCH_ASSOC); $stmt->execute(); foreach ($stmt as $row) { // 取り出す内容を記述 } (3) 結果セット ①規則配列 MDB2でMDB2_FETCHMODE_ORDERED, PDOでPDO::FETCH_NUMを指定した場合の結果セット Array ( [0] => Taro [1] => 12 [2] => male ) ②連想配列 MDB2でMDB2_FETCHMODE_ASSOC, PDOでPDO::FETCH_ASSOCを指定した場合の結果セット Array ( [name] => Taro [age] => 12 [sex] => male ) ③オブジェクト MDB2でMDB2_FETCHMODE_OBJECT, PDOでPDO::FETCH_OBJを指定した場合の結果セット stdClass Object ( [name] => Taro [age] => 12 [sex] => male ) 参考 MDB2 Obtaining data from query results | pear.php.net PDO PDO::setAttribute | php.net PDOStatement::setFetchMode | php.net PDO::FETCH_NUM 配列を使用 | dozo PukiWiki 終わりに MDB2は、 最新のリリースが2012年10月とかなり前(詳しくはコチラ) 使用に必要なPEARがPHP7.4からデフォルトでは使えず非推奨になり、将来的に削除される見通し(詳しくはコチラ) ことから、早めにPHPの標準クラスであるPDOに移行していきたいところ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP if文の条件式にnullが来るとfalseとして振る舞われるのを知らなかった

目的 先輩方のソースを見ていて意外と知らなかったif文の条件式にnullを入れたときの振る舞いについて簡単にまとめる 情報 下記サービスを利用して動作確認をした。 https://paiza.io/ja 紹介 下記のような簡単なPHPのソースが合ったとする。 <?php $str = 'aaa'; if ($str) { echo '変数はnullではありません'; } else { echo '変数はnullです'; } 上記を実行すると「変数はnullではありません」と出力される。 $strにnullを格納してみる。 <?php $str = null; if ($str) { echo '変数はnullではありません'; } else { echo '変数はnullです'; } 上記を実行すると「変数はnullです」と出力される。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TCPDF +FPDIでブラウザから表示するPDFファイルに意図した「タイトル」を表示させてサイトのSEO効果を高める

やりたいこと ブログやホームページなどに掲載しているPDFファイルをブラウザで表示しようとした。 すると、ブラウザでのタブに、そのPDFのファイル名やPDFのプロパティで設定されているタイトルが表示されてしまっている。 PDFファイルの数が少ないなら、それらを更新すれば済む。 しかし、その数が多いのであれば、タイトルを他のページで設定しているHTMLの<title>タグと統一した内容にしたり、適切なものにしたりできるプログラムを組む必要が生じる。 そのように、意図したタイトルを設定すればSEO効果も期待できるそうだ。 よって、PDFファイルをブラウザで表示する際に、タブに意図したタイトルタグの内容を表示できるプログラムを作成していく。 ブラウザでPDFを開く時、ファイル名ではなく「タイトル」を表示させたい!<その方法と嬉しい効果> | 株式会社Eプレゼンス【Webマーケティング&ブランドコンサルティング】 失敗した方法 考案内容: PDFファイルを表示するPHPプログラムを作成して、それに<title>タグを設定する ブラウザのタブで表示される値は、一般的にHTMLの<title>タグで設定する。 HTMLは他のページと同じような<title>を記入。 PHPではTCPDFやFPDIといったライブラリは使用せず、header()関数とreadfile()関数を使用する。 view_pdf.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>PDFを表示する方法|PDFを表示したいサイト</title> </head> </html> <?php ob_clean(); header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename=sample.pdf'); header('Content-Length:'.filesize('./sample.pdf')); readfile('./sample.pdf'); ?> 結果: 失敗 失敗要因予想 PHPでob_clean()関数使用しているから<html>の内容が削除されてる? ob_clean()関数をコメントアウトしてもPDFは表示されませんでしたが。 HTML部を削除したらPDFは問題なく表示された。タブではPDFのファイル名かプロパティにおけるタイトルが表示されている状態。 HTMLで<head>を指定してもPHPでContent-Type設定しているから共存できないというか、このやり方じゃダメ。 失敗を踏まえて header関数とreadfile()関数を使用しないPDFファイルの読み込み方法を考える必要がある。 TCPDFとFPDIを使えばできるかも? HTMLの<title>タグを使う必要があるのか? PDFのプロパティにおけるタイトルがブラウザのタブに表示されているのだから、PDFのプロパティを更新すれば良いのでは? 解決した方法 改善点 PDFの読み込みと出力にはTCPDFとFPDIライブラリを使用する。 HTMLの<title>タグは使用しない。 PDFのプロパティにおけるタイトルを更新する。 コード PHPでPDFファイルを編集する – SAT Staff Blogを参考に作成。 TCPDFとFPDIの導入方法もここを参考に。 view_pdf.php <?php // TCPDFとFPDIライブラリ読み込み require_once './TCPDF/tcpdf.php'; require_once './FPDI/src/autoload.php'; // 新規PDFを作成 $pdf = new setasign\Fpdi\Tcpdf\Fpdi(); // 新規PDFのプロパティにおけるタイトルを設定 $title = 'PDFを表示する方法|PDFを表示したいサイト'; $pdf->SetTitle($title); // 新規PDFのページ設定 $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); $pdf->SetMargins(0, 0, 0); $pdf->SetCellPadding(0); // 表示したいPDFの総ページ数取得 $pages = $pdf->setSourceFile('./sample.pdf'); // 表示したいPDFを読み込み $pdf->setSourceFile('./sample.pdf'); // 新規PDFに表示したいPDFを反映 for($i=1; $i<$pages+1; $i++){ $pdf->AddPage(); $tpl = $pdf->importPage($i); $pdf->useTemplate($tpl,['adjustPageSize' => true]); } // ブラウザに出力 ob_clean(); $pdf->Output('sample.pdf', 'I'); ?> コード解説 処理の流れとしては、新規のPDFを作成し、新規PDFのプロパティにおけるタイトルを設定、新規PDFのページを設定、新規作成されたPDFに対して表示させたいPDFの内容をコピーして、ブラウザに出力というもの。 TCPDFとFPDIを使用すれば $pdf->SetTitle('ブラウザに表示させたいタイトル') で簡単にPDFのプロパティにおけるタイトルを更新できる。 タイトルを設定する - TCPDFの部屋 この解決法における一番の問題点は、新規のPDFファイルを作成しているため、既存のPDFで設定されているサイズ設定などを反映する 必要がある事。 この問題を解決しているのが $pdf->useTemplate($tpl,['adjustPageSize' => true]) の['adjustPageSize' => true]。 これを有効化していることで、表示したいPDFのページサイズ設定を新規作成したPDFにそのまま反映して、出力できるようになっている。 PHPでPDFファイルを出力する | IT底辺脱却ブログ EC-CUBE: クラス FPDI 参考資料 ブラウザでPDFを開く時、ファイル名ではなく「タイトル」を表示させたい!<その方法と嬉しい効果> | 株式会社Eプレゼンス【Webマーケティング&ブランドコンサルティング】 PHPでPDFファイルを編集する – SAT Staff Blog PHPでPDFファイルを出力する方法 │ ゆたブログ タイトルを設定する - TCPDFの部屋 PHPでPDFファイルを出力する | IT底辺脱却ブログ EC-CUBE: クラス FPDI
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelでcsvファイルを一時的にアップロードする

LaravelでCSVファイルをサーバーに一時的に保存して、処理後に削除する方法のメモ 前提 バージョン:Laravel6 実装方法 ①csvファイルを一時保存する form.blade.php <body> {!! Form::open(['route' => 'upload', 'method' => 'post', 'files' => true]) !!} {!! Form::label('file', 'ファイル') !!} {!! Form::file('file', ['accept' => '.csv']) !!} {!! Form::submit('送信') !!} {!! Form::close() !!} </body> Laravel/collectiveではForm::openに'files' => trueを追記することでformタグにenctype="multipart/form-data"が適用される。 DataController.php public function upload(Request $request) { // バリデーション $request->validate([ 'file' => 'required|file|mimes:csv,txt|mimetypes:text/plain' ]); // ファイル名生成 $time = date('YmdHis'); $uploadFile = $request->file('file'); $fileName = $time . $uploadFile->getClientOriginalName(); // 一時保存 $uploadFile->storeAs('data', $fileName); } 一時的なファイルではあるが、念のためdate関数でタイムスタンプを作成してファイル名の重複を避けている。 storeAs('data', $fileName)の保存先はstorage/app/dataとなる。 ②csvファイルを変数に格納する DataController.php public function upload(Request $request) { //1部分は省略 // ファイルの内容を取得 $csvFile = new \SplFileObject(storage_path('app/data/' . $fileName)); // splFileObjectをcsv読込用に設定 $csvFile->setFlags( \SplFileObject::READ_CSV | // CSV列として行を読込 \SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出し \SplFileObject::SKIP_EMPTY | // 空行を読み飛ばし。ただしREAD_AHEADが有効になっていることが前提 \SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばし ); } strage_path()はデフォルトでstrageを参照しているため'app/data/'を追記してパスを通す必要がある。 $csvFileへの格納後は好きな処理を記述する。 ③一時保存したファイルを削除する DataController.php public function upload(Request $request) { //1、2部分は省略 //$csvFileの処理内容 // ファイルの削除 \Storage::delete('data/' . $fileName); } \Storageファサードはデフォルトでstorage/appを参照しているため'data/'を追記してパスを通す必要がある。 サンプル全文 form.blade.php <body> {!! Form::open(['route' => 'upload', 'method' => 'post', 'files' => true]) !!} {!! Form::label('file', 'ファイル') !!} {!! Form::file('file', ['accept' => '.csv']) !!} {!! Form::submit('送信') !!} {!! Form::close() !!} </body> web.php Route::post('/upload', 'DataController@upload')->name('upload'); DataController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class DataController extends Controller { public function upload(Request $request) { // バリデーション $request->validate([ 'file' => 'required|file|mimes:csv,txt|mimetypes:text/plain' ]); // ファイル名生成 $time = date('YmdHis'); $uploadFile = $request->file('file'); $fileName = $time . $uploadFile->getClientOriginalName(); // 一時保存 $uploadFile->storeAs('data', $fileName); // ファイルの内容を取得 $csvFile = new \SplFileObject(storage_path('app/data/' . $fileName)); // splFileObjectをcsv読込用に設定 $csvFile->setFlags( \SplFileObject::READ_CSV | // CSV列として行を読込 \SplFileObject::READ_AHEAD | // 先読み/巻き戻しで読み出し \SplFileObject::SKIP_EMPTY | // 空行を読み飛ばし。ただしREAD_AHEADが有効になっていることが前提 \SplFileObject::DROP_NEW_LINE // 行末の改行を読み飛ばし ); // ファイルの削除 \Storage::delete('data/' . $fileName); } }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2でPHPの任意のバージョンをインストールする

概要 EC2に任意のPHPをインストールする 初期状態のEC2にはPHPはインストールされていない [ec2-user@ec2-php ~]$ php -v -bash: php: command not found PHP 5.4 amzn2-coreに入ってるのでyumでインストールするだけ [ec2-user@ec2-php ~]$ yum list | grep php php.x86_64 5.4.16-46.amzn2.0.2 amzn2-core [ec2-user@ec2-php ~]$ sudo yum install -y php php-mbstring [ec2-user@ec2-php ~]$ php -v 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 PHP 7.2 7.3 7.4 8.0 amazon-linux-extrasに入ってるので適宜有効にしてインストール [ec2-user@ec2-php ~]$ amazon-linux-extras | grep php 15 php7.2 available \ 17 lamp-mariadb10.2-php7.2 available \ 31 php7.3 available \ 42 php7.4 available [ =stable ] 51 php8.0 available [ =stable ] [ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2 15 php7.2=latest enabled \ [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ] [ec2-user@ec2-php ~]$ sudo yum clean metadata && sudo yum install -y php php-mbstring [ec2-user@ec2-php ~]$ php -v PHP 7.2.34 (cli) (built: Oct 21 2020 18:03:20) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies PHP 7.2.* 7.3.* 7.4.* 8.0.* amazon-linux-extrasでPHPを有効にする際にバージョンを指定することも可能 [ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2=7.2.16 15 php7.2=7.2.16 enabled \ [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ] [ec2-user@ec2-php ~]$ sudo yum clean metadata && sudo yum install -y php php-mbstring [ec2-user@ec2-php ~]$ php -v PHP 7.2.16 (cli) (built: Apr 3 2019 18:39:35) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies amazon-linux-extrasで有効なPHPを切り替える amazon-linux-extrasで異なるバージョンのPHPを有効にしようとすると怒られる [ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php7.2 [ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php8.0 Refusing because php8.0 could cause an invalid combination. 有効にしているPHPを無効にしてから再度有効にする必要がある [ec2-user@ec2-php ~]$ sudo amazon-linux-extras disable php7.2 [ec2-user@ec2-php ~]$ sudo amazon-linux-extras enable php8.0 51 php8.0=latest enabled [ =stable ] それ以外のバージョンのPHPをインストールする aws関連からは提供されていなさそうなのでremiからインストール [ec2-user@ec2-php ~]$ sudo amazon-linux-extras install -y epel [ec2-user@ec2-php ~]$ sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm [ec2-user@ec2-php ~]$ sudo yum install -y php56 php56-php-mbstring [ec2-user@ec2-php ~]$ sudo . /opt/remi/php56/enable [ec2-user@ec2-php ~]$ php -v PHP 5.6.40 (cli) (built: Apr 28 2021 14:35:32) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies PHPを削除する 新しくPHPをインストールする場合は削除してからインストールする sudo yum remove -y php-* 注意事項 後は必要に応じてPHP拡張をインストール 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む