- 0.1. 二次元配列をforeachで参照渡ししたい
- 0.2. PHP学習メモ
- 0.3. executeでfatal errorが発生。原因はbindValueの引数だった(PHP)
- 0.4. クッキー、セッション、キャッシュを簡単にまとめ
- 0.5. xdebugによってvar_dumpはどのように変わるか
- 0.6. CentOS7 Laravel環境構築のためにPHP7.4をインストールする
- 0.7. xdebugを設定したDockerでvar_dumpを省略させないための設定
- 0.8. Laravel ログインしていない状態でもURLを直接入れると見れてしまう現象を一行で解決させる方法(Middleware)
- 0.9. GoogleDriveAPI を使用するための設定(認証情報の作成)手順
- 0.10. PHP Quickstartを使用したGoogleDriveAPIの導入手順
- 0.11. プロパティの値の代入はアクセサメソッドを使う
- 0.12. Laravelでroute一行のみでCRUDを定義する方法
- 0.13. PhpSpreadsheetでメモリ爆喰い または、変更してないセルの書き込みで落ちる場合の対処法
- 0.14. PMMPでチームデスマッチプラグインをサクッと作る
- 0.15. LaravelのEloquentModelクラスを自動生成する
- 0.16. Docker内でcomposer require したらkilledになったときの対応
- 0.17. PHP掲示板に検索機能の実装
- 1. 検索
二次元配列をforeachで参照渡ししたい
# やりたいこと
以下のような二次元配列の一部を更新したい。“`
$tests = [[‘values’=>[1,2]],[‘values’=>[3,4]]];
“`# 環境(今回の作業に関連ないものも記載)
* MacBookPro(macOSCatalina10.15.5)
* PHP7.4
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2
* xdebug2.9.6# 実装
## まずは基本の参照渡しforeachで利用する変数に`&`を付与する。
“`test1.php
$tests = [1,2,3,4];
foreach ($tests as &$test) {
if($test === 3) {
$test = 5;
}
}
$test = 6;
var_dump($tests);/*
array (size=4)
0 => int 1
1 => int 2
2 => int 5
3 => int 6←おかしい
*/
“`上記だ
PHP学習メモ
.blade.php
テンプレートエンジン
{{ 変数名 }}画面への出力@if
@ifelse
@ifend### route
return view(‘archives.index’);
# 「/」ではなく「.」でアーカイブを区切る
executeでfatal errorが発生。原因はbindValueの引数だった(PHP)
#executeでfatal errorが発生。原因はbindValueだった
【エラーが出たコード】
“`php
$name = John;
$id = 1;$sql = SELECT * FROM bbs WHERE name? OR id=?
$statement = prepare($sql);
$statement->bindValue(1, $name);
$statement->bindValue(2, $id);
$statement->execute();
“`“`
fatal error:C in…
“`
みたいなエラーが出て原因がさっぱりわからない!
少し勉強をしたことのある方でしたらパッと見てここが原因だなとお分かりになるかもしれませんが、
私は気付くのに何時間もかかってしまいました。**答えはbindValueの第三引数!**
bindValueはの第三引数は入力しないと**初期値でSTR型が設定される**ことになっています。
そこに数値型を入力していたためエラーが出ていました。bindValueを使用するときは面倒でも
クッキー、セッション、キャッシュを簡単にまとめ
## クッキー
・「誰が?」の情報を取得し、保存してる。
・passwordやuser_idなどがあるためセキュリティ上危険。そのためセッションにより安全に情報を保持する。
・保存場所は、自分のPC(主にブラウザ)
・クッキーは無効にできる。
## セッション
・「何をしたか?」という情報を取得し、保存してる。
・クッキーと連動して生成されてることが多い。
・保存場所はブラウザだけでなく、サーバーにも情報が保存されてるから、追える。
・セッションは無効にできない。
## キャッシュ
・よく使うデータへのアクセスを速くするために、より高速な記憶装置に一時的に保存する仕組み。
・高速化のための情報を保存してる。
## 3つの違い
キャッシュとクッキーおよびセッションとの大きな違いは、
キャッシュが表示の高速化のために情報を保存しているのに対して、
クッキーやセッションはユーザーの情報を保存していること。
xdebugによってvar_dumpはどのように変わるか
# やりたいこと
xdebugをインストールしてからvar_dumpの表示が変わった。
具体的にどのように変わるのか確認してみた。# 環境(今回の作業に関連ないものも記載)
* MacBookPro(macOSCatalina10.15.5)
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2
* xdebug2.9.6# 実装
“`test.php
$test = [‘a’ => ‘apple’, ‘b’ => ‘bed’, ‘c’ => [‘cat’, ‘cookie’]];
var_dump($test);
“`## xdebugが設定されていない場合のブラウザ表示
全て1行で表示される。見辛い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691945/fe73c09f-a48f-a0d1-1ae7-1b7fd41a17e1.png)## xdebugが設定されている場合のブラウザ表示
* var_
CentOS7 Laravel環境構築のためにPHP7.4をインストールする
# 目的
– PHPをCentOS7のマシンにインストールする方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | CentOS 7 (7.8.2003) |a
| ハードウェア | Dell Studio 1537 |
| プロセッサ | Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz |
| メモリ | 4 GB DDR3 |
| グラフィックス | 不明 |# 前提条件
– 下記、または下記に準ずる方法でCentOS7のマシンが構築されていること。
– [Cent0S7をPCにインストールする](https://miriwo.hatenablog.com/entry/2020/08/09/144030)# 前提情報
– 説明で紹介するコマンドはクライアントPC(Mac)からSSHを用いて接続を行い実行する。
# 読後感
– CentOS7のPCにLaravelの環境構築を前提としたPHPをインストールすることができる。
# 概要
1.
xdebugを設定したDockerでvar_dumpを省略させないための設定
# やりたいこと
var_dumpでデバッグをしていたところ見たい値部分が「…」に省略されてしまい見れなかった。
省略させずに見る設定。# 環境(今回の作業に関連ないものも記載)
* MacBookPro(macOSCatalina10.15.5)
* PHPStorm2020.2
* docker desktop2.2.0.3
* cakephp4.1.2
* xdebug2.9.6# 実装
## 前提
以下構成で構築していることを前提とする。
https://qiita.com/learn_tech1/items/836d2ea84b518b8a2766## 実装
下3行を追加。
“`Docker/php/php.ini
[xdebug]
xdebug.idekey=”PHPSTORM”
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
; var_dumpが省略されない設定
xde
Laravel ログインしていない状態でもURLを直接入れると見れてしまう現象を一行で解決させる方法(Middleware)
未ログインユーザーに記事投稿画面を表示しないようにするためには、
“`php:web.php
Route::resource(‘/articles’, ‘ArticleController’)->except([‘index’])->middleware(‘auth’);
“`上記にmiddlewareを入れるだけでログインしていない状態であれば、
ログイン画面に遷移されます。
“`
.
└──laravel
└── app
└── Http
└── Middleware
└── Authenticate.php
“`“`php:Authenticate
GoogleDriveAPI を使用するための設定(認証情報の作成)手順
設定した手順の備忘録
## プロジェクト作成
https://console.developers.google.com/apis/dashboard
– Googleにログインし、上記URLにアクセス
– 左上のメニューから、「IAMと管理 > リソースの管理」を押下
– 「プロジェクトを作成」リンクを押下
– プロジェクト名を入力し、(デフォルトで入力されている)「作成」押下## プロジェクトで使用するAPIを指定する
– Google Cloudプラットフォームの画面上部からプロジェクトが選択されている状態で
「APIとサービス > ライブラリ」または「APIとサービス > API とサービスの有効化」を押下
– Google Drive API を選択し、「有効する」を押下## 認証情報の作成
– リダイレクト後の画面(APIの概要画面)で「認証情報の作成」を押下 または
Google Cloudプラットフォームの画面上部からプロジェクトを選択した状態で、「認証情報 > 認証情報の作成」を押下
– 「OAuthクライアントID」を選択 または 「クライアントID」
PHP Quickstartを使用したGoogleDriveAPIの導入手順
GoogleDriveAPIを使用することがあったので備忘録
# Quickstartを使用して接続の設定
## Google Client Libraryのインストール
– 下記をコマンドラインで入力“`
composer require google/apiclient:^2.0
“`## 認証情報をダウンロード
※すでにOAuth 2.0 クライアントの設定を済ませている場合
(未設定の場合は先にOAuth 2.0 クライアントの設定を行う)– Google Cloudプラットフォームから「認証情報」を押下し、認証情報画面を開く
– OAuth 2.0 クライアント ID 一覧の中から、作成したIDの右端のダウンロードボタンを押下し、ファイルをダウンロードする## サンプルプログラムの作成
PHP Quickstart | Google Drive API | Google Developers
https://developers.google.com/drive/api/v3/quickstart/php– Google Drive
プロパティの値の代入はアクセサメソッドを使う
# クラスのプロパティに値を入れる
クラスでインスタンスを作り、プロパティに値を入れる場合は
***インスタンス->プロパティ名 = 値;***で実装可能。“`php:CalBMI.php
class CalBMI {public $_weight; // 体重(kg)
public $_height; // 身長(m)public function __construct($weight,$height){
$this->_weight = $weight;
$this->_height = $height;
}public function getBMI(){
return $this->_weight / ($this->_height * $this->_height);
}}
“`
“`php:accessor1.php
require_once ‘CalBMI.php’;$calBMI = new CalBMI(60,1.6);
echo $calBMI->getBMI(); //2
Laravelでroute一行のみでCRUDを定義する方法
記事投稿画面や記事登録処理などの記事関連機能のルーティングについて、ひとつひとつ自分で考えて設計することもできますが、
– 一覧表示
– 個別表示
– 新規登録
– 更新
– 削除といった、よく使われる機能のルーティングをひとまとめにしたメソッドがLaravelでは用意されています。
“`
Route::resource(‘/articles’, ‘ArticleController’);
“`と定義してあげるだけで一気にCRUDのuri等を設定してくれます。
“`
+——–+———–+————————-+——————+————————————————————————+————+
| Domain | Method | URI | Name | Action
PhpSpreadsheetでメモリ爆喰い または、変更してないセルの書き込みで落ちる場合の対処法
# writeCellFormula, Cell , Coordinate 関係でエラー落ちする場合
どうやら、PhpSpreadsheetさんは式を解決してからファイルを保存してくれるらしい。
しかし、複雑な式を書いていると無限ループになったり、うまく計算できず落ちてしまうっぽい
Excel上でならうまく処理してくれる場合でも、だ。そういう時(XlsxWriterに対して)は
“`
$writer->setPreCalculateFormulas(false);
“`を加えて事前計算処理をスキップさせる事ができるようだ。
[https://phpspreadsheet.readthedocs.io/en/latest/topics/reading-and-writing-to-file/](https://phpspreadsheet.readthedocs.io/en/latest/topics/reading-and-writing-to-file/)
ここを読んでいて見つけた。次同じようなハマり方をした同志の為になればと。
PMMPでチームデスマッチプラグインをサクッと作る
# まえがき
ライブラリを使ってサーッとチームデスマッチつくります
作成するプラグインは、他のプラグインに一切干渉しないようにしています[完成品](https://github.com/suinua/TeamDeathMatch) はここに
# 作成するプラグインの内容
`/create`でゲームを作成し、`/join`で参加
1キルごとにスコアが増えていき、設定した上限に達するか制限時間を超えたら、試合終了というもの
BossBarでタイマーを、Scoreboardで試合の状況を表示します# ライブラリのインストール
使用するライブラリは[team_game_system](https://github.com/MineDeepRock/team_game_system)team_game_systemの依存関係で
[form_builder](https://github.com/MineDeepRock/form_builder)
[slot_menu_system](https://github.com/MineDeepRock/slot
LaravelのEloquentModelクラスを自動生成する
始まったばかりのLaravelのプロジェクトでは、移行元のある案件なので既存のデータベースをそのまま使います。
というときに、既存のテーブルから Laravel の Eloquent Model クラスを自動生成したときの作業記録ですこちらのライブラリを追加いました(読み方・呼び方不明です)
https://github.com/reliese/laravel## composer でライブラリを追加
“`sh
composer require –dev reliese/laravel
“`このとき、 `killed` と表示されたらメモリ不足を疑ってみてください。
Dockerで開発環境を作っているならばこちらに書いた方法で対処できました。Docker内でcomposer require したらkilledになったときの対応
https://qiita.com/makies/items/3e1064f17a18df750cad## パッケージを追加
AppServiceProvider に追記します
“`php
Docker内でcomposer require したらkilledになったときの対応
Mac上で Docker (docker-compose) で開発環境を作り、開発中の Laravel のアプリケーションに `composer require` をしたら、中断されてしまいました
“`sh
composer require ****/*****
(中略)
killed
“`composer が途中で終わってしまうといえば、メモリ不足が定石かなと思います。
会社の先輩からこのリンクを送ってもらい、疑惑が確信に変わりました。[PHP] composer install が killed で失敗するときの原因と対処
## PHP memory_limit の引き上げ
メモリ不足とわかったところで、まずDocker内で使っている `php.ini` の memory_limit を増やしました。
どのくらい必要なのかわからなかったけど、とりあえず2GB(2048MB)にしました。“`ini
memory_limit = 2048M
“`設定
PHP掲示板に検索機能の実装
PHPで作成した掲示板に、検索機能を実装したので振り返りつつ。
参考にした記事はこちら。
具体的な機能は、
名前を検索すると、それに紐づいたIDと発言内容を表示する
という形。トップページに検索内容の入力フォーム→別ファイル検索機能(search.php)の作成
で行った。#検索内容の入力フォームの作成
TOPページにこんな感じで作成した。
実際に機能が動くのはsearch.php。
ここでは入力フォームで文字を受け取り、”search_name”という名前で受け取る。“`index.php
検索
Laravel CRUD
## はじめに
LaravelでCRUDを作っていきます。### やらないこと
– 認証関係は扱いません。
– 削除の前の確認などJavaScriptで実現される機能は今回は作りません。### つくるもの
|アクション|画面の有無|内容|
|—|—|—|
|index|画面あり|一覧表示画面|
|create|画面あり|新規入力フォーム|
|store|画面なし|追加処理(createの登録ボタン)|
|show|画面あり|詳細表示|
|edit|画面あり|変更フォーム(既存の値が入っている状態)|
|update|画面なし|変更処理(editの更新ボタン)|
|destroy|画面なし|削除処理(showの削除ボタン)|“`:流れ
index(一覧表示) ┳ create(新規作成画面) ━ store(新規保存)
┗ show(詳細表示) ┳ edit(編集画面) ━ update(上書き保存)
┗ destroy(削除)
“`## 準備
###
【PHP】URLのリストをまとめてDLする
とりあえず備忘録として
URLのリストをまとめてDLできるようなものを作成していく。
例えば以下のようなテキストファイルにURLをつらつらと書いていってそれらをまとめてDLできる。“`:list.txt
https://…..
https://…..
https://…..
https://…..
“`#DL保存先ディレクトリを作成
ディレクトリの名前をURLリストファイルの名前と同じものとした。
コマンドライン引数でURLリストファイルのパスを受け取って、そこから名前を抽出する。以下は保存用ディレクトリがなかったら作成するコード
“`php5
$dirName = basename($argv[1], “.txt”);
$dir = FILE . ‘src/’ . $dirName;
if (!file_exists($dir)) {
mkdir($dir);
}
“`
##basename
を使うことでパスからファイル名の抽出が簡単になる。
第1引数はパスで、第2引数へ拡張子を指定してやるとファイル名のみを抽出できる。#コマンド