- 1. PHPのライブラリでQRコード®を作成する。(chillerlan/php-qrcode)
- 2. 複数のPHPバージョンをインストールし、ディレクトリごとに自動でバージョンを切り替える
- 3. 文字列の連結、if文、比較演算子、真偽値、else文、elseif文
- 4. PHPのデバッグ導入手順(XAMPP + Laravel + Eclipse + Xdebug)
- 5. 【Laravel】クエリビルダでサブクエリを CROSS JOIN する方法
- 6. Laravel とある予約システムの 共通関数部分のメモ 02
- 7. 【PHP】ざっくりオブジェクト指向 – アクセス権とカプセル化
- 8. 【PHP】ざっくりオブジェクト指向 – staticと遅延静的束縛
- 9. 【PHP】ざっくりオブジェクト指向 – インスタンスを生成
- 10. 【PHP】ざっくりオブジェクト指向 – クラスとインスタンスと継承
- 11. 【PHP】ざっくりオブジェクト指向 – オブジェクト指向の必要性
- 12. 文字列の出力(echo)、変数について
- 13. [PHP]mysqlで日本語を保存する時に文字化けしてしまう
- 14. PHPの概要及び書き方
- 15. Laravel: Controllerのstoreメソッドの引数にはRequestをつけよう
- 16. PythonとPHPの基本構文まとめ
- 17. 【PHP】処理速度測定方法 ところでin_arrayってほんとに遅いの?
- 18. 【Laravel】日付をparseできなかったとき500で落ちるのを回避したい
- 19. わかったふりをしていたphp-fpmってなんなのかを図解してみた
- 20. PHP+JavaScriptでSPA開発(WSL2/Docker)
PHPのライブラリでQRコード®を作成する。(chillerlan/php-qrcode)
PHPのライブラリ(chillerlan/php-qrcode)を使ってQRコード®を作成しました。
# 本記事の環境
ホストOS:Windows10 Pro 64bit 8GB
ゲストOS:Red Hat Enterprise Linux release 8.3 (Ootpa)
Oracle VM VirtualBox:6.0.4a
vagrant:Vagrant 2.2.14
Apache:2.4.37
PHP:PHP 7.4.15
Tera Term:4.105
Composer:Composer version 2.0.8 2020-12-03 17:20:38
chillerlan/php-qrcode:4.3.4
Google Chrome:96.0.4664.110
コマンドプロンプト
ホストOS側に実ソース# 手順1(ライブラリ導入)
* Tera TermでゲストOSに接続する。
* 作業用ディレクトリを作成する。
* 作業用ディレクトリ配下でディレクトリ作成コマンドを実施する。
“`
mkdir -p php-qr-code-generator \
複数のPHPバージョンをインストールし、ディレクトリごとに自動でバージョンを切り替える
# 概要
– 複数バージョンのPHPを使いたい
– ディレクトリごとに別バージョンのPHPを自動で切り替えたい
– phpビルドは難しいのでやりたくない
– MacとUbuntuに対応したい# Install brew
– [Brew](https://brew.sh/)をインストールします
– brewはmac専用だと思っていましたが、ubuntuにもインストールできるんですね# Install php
– phpをインストールします
– imagemagickなど必要に合わせて追加のパッケージもインストールできます
– 本記事では**PHPのインストールはbrewで行います。**
“`bash
brew update
brew tap shivammathur/php
brew install php@8.1
brew install php@8.0
brew install php@7.4
brew install pkg-config
brew install imagemagick
“`# Install phpenv
– phpenvをインストールします
–
文字列の連結、if文、比較演算子、真偽値、else文、elseif文
### ドット「.」を用いた文字の連結
文字列、変数の間に.を入力することで
文字列同士、変数同士、文字列と変数を連結することが出来る。\$name “=“ \’東方’;
echo \$name.\’仗助’;→東方仗助と表示
「.=」を用いると省略した書き方が可能
\$name “=“ \’東方’;
\$name .“=“ \’仗助’;
echo \$name;→東方仗助と出力
### 変数展開
ダブルクォーテーションで文字列を囲んだ場合に中の変数を
\{}で囲むとその部分が変数に入っている値に置き換えられる(変数展開)。
シングルクォーテーションで文字列を囲んだ場合は変数展開されず
\{}も含めそのまま文字列としてみなされる。\$name \= \’東方仗助’;
echo \”こんにちは、“{$name}“さん”;→ダブルクォーテーションで囲んでいるため\$nameの値(東方仗助)が出力される。
\
PHPのデバッグ導入手順(XAMPP + Laravel + Eclipse + Xdebug)
# はじめに
最近EclipseにXdebugの導入を行ったため、導入手順を備忘録として残します。開発環境
・windows10 pro
・XAMPP(php 7.4, Xdebug 3.1.6)
・Eclipse予めXAMPP,Eclipseの導入が済んでいる前提で話を進めていきます。
# Xdebugの導入
## ①Xdebugのインストール
まずはXdebugのインストールが必要になります。
公式サイトからXdebugをインストールします。ただしバージョンが複数あり、それぞれの環境によって選ぶバージョンが異なるため、下記のURLのサイトを使用します。
URL: https://xdebug.org/wizardこのサイトでは現在の自分の環境にあったバージョンを自動で選定してくれます。
それではまずXAMPPのダッシュボードに移動し、右上の「PHPinfo」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1291184/a9d3f1d9-9a11
【Laravel】クエリビルダでサブクエリを CROSS JOIN する方法
# crossJoinSub メソッドを使う
第一引数にサブクエリを定義したビルダー、第二引数にはエイリアス名(任意の識別子)を記述します。
“`php
// サブクエリ
$highPriceFruits = DB::table(‘fruits’)
->select(‘id AS fruits_id’, ‘name AS fruits_name’))
->where(‘price’, ‘>’, ‘500’);// サブクエリを CROSS JOIN する
$users = DB::table(‘users’)
->crossJoinSub($highPriceFruits, ‘hign_price_fruits’)
->get();
“`## 余談
サブクエリとの結合については、joinSub、leftJoinSub、rightJoinSubメソッドが用意されている旨の内容がドキュメントですぐに見つかりました。https://laravel.com/docs/
Laravel とある予約システムの 共通関数部分のメモ 02
### Laravelで使った、共通関数や、個別関数のメモです。(2記事目)
・記事01(Laravel とある予約システムの 共通関数部分のメモ 01)
https://qiita.com/tokotoko33ok/items/7263c77e88a2f72f6a2a“`php:Common_func.php
get();
}
【PHP】ざっくりオブジェクト指向 – アクセス権とカプセル化
# アクセス権を設定
アクセス権とは、クラス外からプロパティやメソッドへのアクセス可否の設定です。アクセス修飾子でプロパティとメソッドにアクセス権を設定します。アクセス修飾子は`public` `private` `protected`の3種類です。# `public`と`private`
`public`プロパティと`public`メソッドは、どこからでもアクセスできます。`private`プロパティと`private`メソッドは、クラス外からアクセスできません。同じインスタンス内であっても、`private`はクラスが違うとアクセスできません。![](https://storage.googleapis.com/zenn-user-upload/365a7b09a800-20221113.png)
この例では、すべてのプロパティを`private`、すべてのメソッドを`public`に設定しました。このようにすると、メソッドにはアクセスできますがプロパティにはアクセスできません。プロパティ`$sex`を`public`にすれば、メソッド`getSex()`は必要ないのでは
【PHP】ざっくりオブジェクト指向 – staticと遅延静的束縛
# staticプロパティとstaticメソッド
前回までは、インスタンスを生成してプロパティとメソッドを使いました。インスタンスのプロパティとメソッドとは別に、クラスのプロパティとメソッドにアクセスすることもできます。これらを`static`プロパティ(静的プロパティ)と`static`メソッド(静的メソッド、クラスメソッド)とよびます。`static`プロパティと`static`メソッドはクラスごとにあり、プロパティやメソッドのようにインスタンスごとにはありません。例えば、生成したインスタンス数`$number`をもちたい時に`static`プロパティを使います。生成したインスタンス数はクラスごとの値ですので、`static`プロパティに値をセットするのがよいです。また、`static`プロパティにアクセスするだけのメソッド`getNumber()`は、インスタンスにある必要がないので`static`メソッドを使うのがよいです。
![](https://storage.googleapis.com/zenn-user-upload/b91948cf4b61-20221113.
【PHP】ざっくりオブジェクト指向 – インスタンスを生成
# インスタンスを生成
`Person`からインスタンスを生成してみましょう。PHPの変数は、数値や文字列などの変数、複数の変数をまとめた配列、オブジェクトの3種類に大別できます。クラスから生成したインスタンスは、オブジェクト型の変数に代入して使います。このインスタンスを変数に代入することが、オブジェクト指向の理解を難しくしているもう一つの要因だと思います。| 変数のタイプ | 使い方 |
| —- | —- |
| 数値、文字列 | `$a=1;` `$a=’suzuki’;` |
| 配列、連想配列 |`$a=[1, 2, 3];` `$a=[‘name’ => ‘suzuki’];` |
| オブジェクト | `$a = new Class();` |`Person`のインスタンス生成と、プロパティ`name` `age`を取得するソースコードです。インスタンスは`new`で生成します。2つのインスタンスを生成して、`$person_a` `$ person_b`に代入しました。
“`php:sample3-1.php
【PHP】ざっくりオブジェクト指向 – クラスとインスタンスと継承
# クラスとインスタンス
オブジェクト指向は、変数と関数をまとめて箱に入れて、ソースコードの再利用性を高める工夫でした。この変数と関数をまとめる箱をクラスとよびます。クラスに入れた変数をプロパティ、関数をメソッドとよびます。よび方は違うだけで、プロパティは変数、メソッドは関数です。クラスに入れることで、変数と関数を一つにまとめることはできました。しかし、`Person`には`suzuki`も`tanaka`もあり、一つの箱だけでは不十分です。そこで、クラスをコピーして増やせるようにしました。クラスをコピーして生成するのがインスタンスです。生成したインスタンスのプロパティを変更して、`suzuki`や`tanaka`などのオブジェクトを作ります。
![](https://storage.googleapis.com/zenn-user-upload/e8e6f5ccd00d-20221113.png)
:::note info
クラスをコピーしてインスタンスを生成する
:::# クラスを定義
`Person`のクラス定義です。“`php:sample2-1.php
【PHP】ざっくりオブジェクト指向 – オブジェクト指向の必要性
# はじめに
オブジェクト指向プログラミング(以降、オブジェクト指向)は、同じコーディングを何度もしない(再利用性を高める)ための工夫です。再利用性を高める工夫で、オブジェクト指向でないとコーディングできない機能がある訳ではありません。ですから、なぜオブジェクト指向が必要なのかを理解することが難しいかもしれません。この記事では、初級プログラマにとって第一の関門であるオブジェクト指向の必要性と仕組みを説明します。:::note info
オブジェクト指向は再利用性を高めるための工夫
:::# なぜオブジェクト指向が必要なのか
なぜオブジェクト指向が必要かを考えるために、まずはオブジェクト指向ではないPHPのソースコードについて考えてみましょう。このソースコードのように、変数や関数を活用すれば一般的な機能はコーディングできそうです。さらに、関数の部分を別ファイルに切り出せば、必要な時にそのファイルを`include`して関数をコールすれば再利用性もありそうです。では、なぜオブジェクト指向が必要なのでしょうか?“`php:sample1-1.php
文字列の出力(echo)、変数について
### 命令(echo)
「**echo**」は文字列を出力するための命令。
出力したい文字列は'(シングルクォーテーション)か
“(ダブルクォーテーション)で囲む。例 コード:\
結果:SPW財団### echoを用いた計算
「echo」の後の文字列を入れる部分に計算を入れることも出来る。
例 コード:\
結果:2### データの種類
PHPに使用するデータには文字出来る列(例 ‘SPW財団’)や
数値(例 1+1)など様々な種類がある。
同じ1+1でもそのまま「echo」の後に入れた場合は数値の計算結果が、
シングルクォーテーションやダブルクォーテーションで囲むと
1+1がそのまま文字列として出力される。### 変数の定義
「echo」で命令を行う前に**変数**(**$name**)を定義することで
同じ値を1つのタグのなかで複数使いまわしたり、
コードを簡潔に記載することが出来る。変数は $変数名=’値’
[PHP]mysqlで日本語を保存する時に文字化けしてしまう
こんにちは[ありんこ](https://twitter.com/4rinc00)です。
最近パーフェクトPHPをやっているのですが、mysqlでデータを保存した時に文字化けしてしまって困ったので書いておきます。# TL;DR
PDOをnewする時に、charsetをちゃんと設定しましょう。
“`php
$dbConnection = new PDO(‘mysql:host=db;dbname=online_bbs;charset=utf8’, ‘docker’, ‘docker’);
“`# どんな感じに困った?
Docker環境で進めているのですが、MySQLの文字コードはちゃんとutf8mb4にしているし、
PHPの文字コードもUTF−8(多分)だし、
HTMLも``ってしているしで詰んだって感じでした。# 原因
パーフェクトPHPがPHP5系で書かれていて、自分がパーフェクトPHPをPHP8系のバージョンで進めているので使用できる関数に差があったのが原因。
というかPHP7系からmysql系のモジュールが、[MySQLi
PHPの概要及び書き方
PHPのコードはHTMLに埋め込んで使うことができる。
HTMLで言うところの「タグ」の書き始めに<?php ~と入力し始めることで
PHPのコード入力をスタートさせることができる。
<?php ~ の~部分に命令を入力してから、最後に?>で閉じることで一文が完成する。例↓↓↓
HTMLのみの場合:<h1>タイトル</h1>
PHPを埋め込んだ場合:<?php echo'<h1>タイトル</h1>` ; ?>
※タグをphpの命令で使用するときは'(シングルクォーテーション)で囲む
(なんでシングルなの?)[文法]
・phpの命令は文末に;(セミコロン)をつける
Laravel: Controllerのstoreメソッドの引数にはRequestをつけよう
# はじめに
Laravel6を用いて、商品のいいね機能を実装していました。
その際、1時間もつまづいたエラーがありました。|Too few arguments to function App\Http\Controllers\User\Product\RateController::store(), 1 passed in /var/www/ec_Laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php on line 54 and exactly 2 expected|
|-|こちらは、「引数が足りていないよ」みたいな感じのエラーでした。
# 修正前コード
“`web.php
// 中略
Route::resource(‘user/product/{product_id}/rate’, ‘User\Product\RateController’, [‘only’ => [‘store’, ‘update’, ‘destroy’]]);
“`“`show.blade.php
PythonとPHPの基本構文まとめ
# Introduction
新しくPHPを学ぶことになった
基本構文を理解するため慣れ親しんだPythonとの比較をまとめる参考サイト
– [Pythonチュートリアル](https://docs.python.org/ja/3/tutorial/index.html)
– [PHP言語リファレンス](https://www.php.net/manual/ja/langref.php)# コメント
– ‘C’, ‘C++’ および Unix シェル型(Perl 型)のコメントをサポート
– <$php ?>タグでコードを囲む必要あり(本記事では以降タグは省略)“`php:php
“`“`py:python
# commnet”’
comment1
comment2
”’
“`# 出力
– `echo`で出力できるが改行する場合は改行コード`”\n”`が必要
– 改行コードはシングルクォーテーション`’`では単なる文字列として認識さ
【PHP】処理速度測定方法 ところでin_arrayってほんとに遅いの?
in_arrayを使うなら、連想配列にしてでもissetを使った方が速いという記事を散見します
可読性のよいin_arrayをできれば使いたいので測定してみました### 目次
処理速度の測り方
issetとin_array 検索に使うならどっちが速いのか?
issetの測定
in_arrayの測定
測定結果
結論## 処理速度の測り方
とてもシンプル“`php
// 実行環境 PHP v7.1.8// 現在時刻をマイクロ秒まで取得
$start = microtime(true);// — ここに測定したい処理 —
$end = microtime(true);
// 指数表記回避にsprintf()で桁数を6に指定
var_dump(‘XXXを検索 : ‘ . sprintf(“%.6f”,($end – $start)) . ‘秒’ );
“`## issetとin_array 検索に使うならどっちが速いのか?
検索用配列をつくる“`php
$arr = [];
for( $i = 0; $i < 100; ++$i ){ $arr
【Laravel】日付をparseできなかったとき500で落ちるのを回避したい
## 環境
Laravel v9.5.1 (PHP v8.1.3)## パラメータに不正な日付のフォーマットで渡ってきたとき
日付が「2022-1-1」「2022/1/1」で渡ってきたら問題なく“`parse“`してくれるけど、「2022.1.1」などのフォーマットは“`parse“`できずに500エラーが返ってしまう。500で返してもフロント側が困るので、Handlerに下記を追加。
ステータスコード400で“`Carbon“`のエラーメッセージをキャッチしてそのまま返すようにした。“`php
use Carbon\Exceptions\Exception;public function register()
{
$this->renderable(function (Exception $e) {
$message = $e->getMessage();
$errorMessage = [
‘message’ => $message,
];return (new ErrorResourc
わかったふりをしていたphp-fpmってなんなのかを図解してみた
# PHPの実行には種類がある
何言ってるんですか?PHPはPHPでしょ?っていう人ほんとは僕だけじゃないですよね?
WEBサーバーがHTTPリクエストを受け取ったあとにPHPのプログラムが実行されるわけですが、その実行方法には種類があるというのです。
その種類についてウルトラ簡単に図解してみました。
# Apache モジュール版
![draw.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2373655/691823dc-1a2a-9ff5-5bcd-bd61fdd925ad.jpeg)
ついこの間までWEBサーバーの代名詞とも言えたApacheですが、この方法ではPHPの処理はApacheに内容されたようなイメージで実行されます。
PHPのサーバーでの処理プロセスが、Apacheと同じプロセス内で実行されています。
この方法は比較的高速にPHPを実行することができます。
そのためかつてはメジャーな実行方法だったなという印象でした、たぶん。
デメリットがあるとすれば
PHP+JavaScriptでSPA開発(WSL2/Docker)
## はじめに
PHPとJavaScriptを使って、非同期で動くToDoアプリを作成します。フレームワーク等を使わずに実装していきます。
#### 作成するアプリの仕様
– タイトル、内容の追加
– 文字数のバリデーション機能
– 削除