PHP関連のことを調べてみた2022年06月07日

PHP関連のことを調べてみた2022年06月07日

PHP array_splice 配列の要素を追加・削除・置き換え

## array_splice
– 配列の一部を削除し、他の要素に置き換える
– 削除はせずに、任意の箇所に配列を追加する

## 使い方
“`php:書き方
array_splice(第一引数, 第二引数, 第三引数, 第四引数);
“`
`第一引数`
対象の配列
`第二引数`
要素の抽出開始位置
負の値の場合は、配列の末尾を-1として数えた位置になる
`第三引数`
取り出す要素数
`第四引数`
削除された要素が、この配列の要素で置換される

“`php:例
$color = [‘赤色’, ‘青色’, ‘黄色’, ‘緑色’, ‘紫色’];
var_dump(array_splice($color, 2, 3, [‘白色’, ‘黒色’, ‘ピンク色’]));
//Array ( [0] => 黄色 [1] => 緑色 [2] => 紫色 )
var_dump($color);
//Array ( [0] => 赤色 [1] => 青色 [2] => 白色 [3] => 黒色 [4] => ピンク色 )
“`
`第一引数`
配列の「$color」
`第二引数`
削除の開始位置は

元記事を表示

laravelのクエリでMySQLの関数を使うとundefinedになる場合の解決方法

## 動作環境
Laravel 6.20
php 8.0
MySQL 8.0.29

## 具体的な症状
– laravelでMySQLのクエリを使ってデータを取得したい。
– このとき、クエリ文の中でMySQLの関数(CONCATやIFNULLなどの関数)を利用したいが、これらの関数を利用すると、undefinedになってしまう。
– 具体的には、nullの場合に0に変えたいのだが、ifnull関数をクエリに追加するとundefinedになってしまう。なんとかしたい。(MySQLクライアントのworkbenchから同じクエリ文を実行すると、nullが0になって期待通りの表示がされるので、クエリ文自体は正しい。そのため、laravelのコードの書き方に関して、何か別のルールがあると考えられる。)

## 参考ページ
– 以下のページがヒットして参考にしましたが、結局解決しませんでした。
– https://qiita.com/AAA0125/items/f17d12cc02c407b11bb9
– https://www.prj-alpha.biz/entry/2018/09/

元記事を表示

PG見聞録 ~PHP編 委譲~

今日も今日とてヘトヘトですが少しだけでもおさらいせねば、てことで
前回の継承にて少し触れましたリスコフの置換原則という概念をもとに
委譲という機能についておさらいしていこうと思います。

委譲

継承はis-a関係といって「子クラスは親クラスの一種である」的な関係が常になりたっていなければなりません

子クラスは親クラスの実装に依存する以上はその内部構造を意識しなければなりませんよね。
親クラスの実装をちょこっといじったら子クラスが動作しなくなったなんてこともあり得ます。
継承構造が複雑になればなるほどそのリスクは広がり修正コストもかかります。
このようにコンピュータというのは一貫性や整合性が取れていないとダメなヤツなんです。
その辺の概念についてもそのうちおさらいしてこうと思います。

そして継承には不適切なケースがあり、その一つとしてリスコフの置換原則に反する場合です。
「子クラスは親クラスに常に置き換え可能である」
という制約が継承にはあるよってことです。
例えば複数の機能が備わった関数を

元記事を表示

大量データをpost送信したらエラーが発生した話

# はじめに
画面にデータを一覧表示をさせた後に送信ボタンを押した際、下記エラーが発生しました。
今回はその原因と対php.iniの設定変更についてまとめました。

# エラー内容
下記のエラーが画面に表示されました。
簡単に言うと、php.iniのmax_input_varsで設定された件数よりデータが多いのでエラーでっせということです。
“`
Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0

Fatal error: Uncaught ErrorException: Cannot modify header information – headers already sent by (output started at 以下発生箇所のパス…)
Fatal error: Uncaught ErrorException: Cannot modify header informat

元記事を表示

【PHP】【素数判定】PHPで素数問題を解く

# 素数とは

1・2以上の数
2・1とその数だけでしか割りきれない数

# コード1
“`PHP
$num = 17;
$flg = true;
for($i=2;$i<$num;$i++) { if($num%$i == 0) { $flg = false; break; } } $flg = true; if ($flg) { echo $num."は素数です。"; } else { echo $num."は素数ではありません。"; } ``` # 結果1 ``` 17は素数です。 ``` # コード2 ```PHP $num = 100; foreach (range(1,$num) as $i) { $point = 0; foreach (range(1,$i) as $j) { if ($i % $j === 0) $point++; } if ($point === 2) { echo

元記事を表示

Zabbixスクリプトを公開してみました

gitの練習、PHPスクリプト作成練習も兼ねてGitHubにZabbix APIを使用したスクリプトを公開してみました。
現状以下2つを公開しています。

[・zbx-scripts](https://github.com/gohatomo/zbx-scripts)
“`
Zabbix APIでZabbixを操作するスクリプトを公開してくレポジトリです。
2022/6/6現在はホスト作成スクリプトだけですが少しずつ種類を増やしていく予定です。
“`
[・check_related_ac-tr](https://github.com/gohatomo/check_related_ac-tr)
“`
トリガーがイベントを生成した際にどのアクションが動作するかをチェックするスクリプトです。
CSV形式でトリガーとアクションの一覧を出力します。
※一応個人環境と想定でテストはしていますが100%の精度は保証していませんので、その点はご注意ください。(不備等見つけたら徐々に改善していく予定です)
“`

:::note warn
・個人的な趣味として公開していますので、突然の仕様変更の可

元記事を表示

リソースコントローラーを用いた際に、定義済みのルートを上書きしてしまってLaravel Route [ ] not defined.が発生。

<問題の概要>
StepControllerというControllerを用いて、ビューファイル(create.blade.php)を表示。
その際に、Route [step.store] not defined.のエラーが発生。

step.storeは、create.blade.php内でformに組み込んだルートの名称。
つまり、step.storeのルート定義が「web.php」内でうまくいっておらず、エラーが発生した模様。

“`エラー発生時のweb.php
middleware([‘auth’])->name(‘dashboard’);

Route::resource(‘step’, StepController::class);
Route::post(‘

元記事を表示

メソッドをcallable型の引数で受け渡す方法!

ここでかなり詰まってしまったためメモ!
“`php
do(function ($name) use ($hello): void
{
$hello->say($name);
}); // Hello! ららっく!
“`

useを忘れてて一生悩んでました…
もっと良い方法がございましたらご教示いただければ幸いです!

元記事を表示

LaravelでのWEBスクレイピング

この前から、オリジナルアプリ作成でスクレイピングまで行ったのですが、案外大変でした。

# 何が大変だったか?
## スクレイピング先ページの属性
スクレイピングするのに、属性(クラスやセレクタ)を指定しなければならず、
ページを検証ツール(デベロッパーツール)で見ながらやる必要がありました。
(Laravelでなくても基本は同じかもしれませんが)
## スクレイピング先ページのデータ構成
スクレイピングしようとしているのが、ヤフースポーツの該当プロ野球チームの選手データなのですが、
表(テーブル)になっているので、スクレイピングするときもテーブルの形式で表示させるようにする必要があります。
スクレイピングで使っているのが、Guotteなんですがコードの書き方が複雑です。
## 参考サイトを見ながら、コード記述
サイトにより、web.phpに記述したり、ScrapingControllerに記述したりといろいろです。
今回はweb.phpに記述する方法を取りましたが、書き方に苦労します。

こんな感じです。

元記事を表示

【PHP】オブジェクト指向を使ってブラック・ジャックを作ってみた件

![poker-gfd5c5c832_1280.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697266/fcef329c-7372-cfb9-98e1-024e8684bb44.jpeg)

# 概要
PHPの学習内容のアウトプットとして、オブジェクト指向を使用したコンソールアプリのブラックジャックゲームを作成しました。コーディングの回答例等はなく、要件指示を基に設計・コーディング・テストは自力で行いました。躓いた部分はTeratail等の利用やGitHub等を参考にしながら制作しています。

GitHub : https://github.com/jirou6699/blackjack
Twitter : https://twitter.com/manmaru6699

# 目的

ブラックジャックをオブジェクト指向を使って実装します。機能追加・仕様変更のしやすい構成や読みやすいコードを体感・習得するために、3ステップで制作していきます。各ステップで変更・リファクタリングした内容も記載することに

元記事を表示

PHPでのスクレイピング

# 背景
とあるWebアプリを開発している際に、依頼者が別に管理しているサイトのデータを持ってきて使ってほしいとの要望。
そのデータはDBで管理していなくHTMLファイルに直書きしていたので、それらをPHPを使ったスクレイピングで取得した際の内容を記載。

使ったのは~~Googleが提供している~~[phpQuery](https://code.google.com/archive/p/phpquery/)(※)なるもの。
そやつを使うと想像以上に簡単にスクレイピングができました。
(※)GoogleでなくTobiasz Cudnikという方が作られたもののようです。

# 前提
今回データを取得したいサイトのHTML構造(一部)は以下の通り。

“`データを取得したいサイト.html
・・・

hoge

hoge_text

huge

元記事を表示

phar ファイルを解凍する

## 環境

* Cent OS 7
* PHP 5.4.16 (cli)

## 発生した問題

過去に他人によってビルドされた phar ファイルの挙動を変更する必要があるが、 phar アーカイブ前のソースコードが残っていない。

## 解決方法

`phar` コマンドを用いて、 phar アーカイブファイル (<file_name>.phar) を解凍する。

[[PHP] pharファイルの固め方と解凍の仕方-ぬこのおなかの忘備録 (itneko.blogspot.com)](https://itneko.blogspot.com/2017/08/phar.html)

phar コマンドファイルについては、 php-cli の RPM パッケージにバンドルされていた。

“`
# rpm -qf /usr/bin/phar
php-cli-5.4.16-48.el7.x86_64
“`

元記事を表示

PG見聞録 ~PHP編 継承~

ボーナス月だからか最近飲食業は忙しい日々が続いております。
しかも宅配業界なので梅雨は忙しいんですよね…
ここ数年はコロナの影響もあり宅配は需要が伸びてかなり忙しくなりました。

てことで今回は継承についておさらいしていきます。

継承(inheritance)

継承とは基となるクラスの機能を引き継ぎつつ、新たな機能を追加したりする仕組み。
ダーマ神殿で転職したけど元の職業の魔法使えるみたいな感じですかね。
継承の基となるクラスをスーパークラスや基底クラス、親クラスといいます
んで継承先のクラスをサブクラスや派生クラス、子クラスというわけですね。

“`php

元記事を表示

Laravelのクロスサイトスクリプト(XSS)対策

LaravelのXSS対策で意識することをまとめます。

# 要点
1、htmlのタグ内ではダブルクオテーションで囲う

2、フロントに文字列を渡す時は、htmlspecialcharsでサニタイズする

## htmlのタグ内ではダブルクオテーションで囲う

ダブルクオテーションで囲わないと予期せぬ属性が追加されてしまう。

#### 実行例
“`php:TestController.php
class TestController extends Controller
{
public function index()
{
$text = “test onclick=alert(1);”;
return view(‘tests.test’, compact(‘text’));
}
}
“`
“`php:test.blade.php
{{– 正しい –}}

元記事を表示

Re:ゼロから始めるSNS作り生活(一週間目+α)

# ☆どんな記事?☆
プログラミング初心者が、イチからSNSサイトを構築する過程を記録したもの。
誰かに「勉強の状況はどう?」と訊かれたときに提示できるよう、Qiitaの記事として投稿しています。
# ☆前置きや前提☆
### 完成品のイメージ
– コンセプトは「勉強記録をポストしたり、問題を出しあったりできるSNS」
– 自分の勉強記録をポストし、閲覧できる
– 友人の勉強記録に対し、コメントやミニクイズを投稿できる(本記事では未実装)
– 自分と似た目標を持つユーザーを検索し、フォローできる(本記事では未実装)
– フォローしている人の勉強記録を一覧表示する「タイムライン」もある(本記事では未実装)
– 当然レスポンシブデザイン(本記事では未実装)
### 制作の目的
– プログラミング技術の向上
– あわよくば友人にこのSNSを使ってもらいたい
### これまでの経験や知識
– WordPressで構築されたサイトの調整経験
(2年弱従事していたため、HTML・CSS・PHPとも基礎はわかっていたつもり)
(通信をはじめバックグラウンドの知識はゼロ)
– 大昔にイチからサイトを構

元記事を表示

【PHP】 bool値の文字列変換について

# はじめに
bool値の文字列変換について知らず、学んだことがあったため自分なりにまとめます。

# 公式ドキュメント
公式ドキュメントを確認すると以下の様に記載されていた。

> 文字列への変換
(string) キャストや strval() 関数を使って変数を文字列へ変換することができます。 文字列型を必要とする式のスコープにおいて、文字列への変換は自動的に行われます。 echo や print 関数を使うとき、 あるいは可変変数を文字列を比較するときにこの自動変換が行われます。 マニュアルの型 と 型の相互変換 の項を読むとわかりやすいでしょう。 settype()も参照してください。

> bool の true は文字列の “1” に、 false は “” (空文字列) に変換されます。 これにより boolean と文字列の値を相互に変換することができます。

https://www.php.net/manual/ja/language.types.string.php

らしいです。

今回私のケースとしてはjson形式の文字列にtrueをセットした変数を文字列連結

元記事を表示

phpenv: PHPビルド時エラーの解消

# 経緯
phpenv(https://github.com/phpenv/phpenv) を利用してPHP 8.1.6をインストールしようとしたところ、以下のようなエラーが表示されPHPのビルドに失敗した。
その後、いくつかのパッケージをインストールし、実行時に環境変数を渡すことでビルドが成功したため、その際のメモ。

“`
—————–
| BUILD ERROR |
—————–

Here are the last 10 lines from the log:

—————————————–
grep: invalid option — P
usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [–binary-files=value] [–color=when]
[–context[=num]] [–directo

元記事を表示

Laravel9からEloquentのアクセサでキャッシュが使えるようになった

Laravel9からEloquentのアクセサ/ミューテタでキャッシュが使えるようになったので試してみました。

## 検証バージョン
PHP8.1.6
Laravel9.16.0

## キャッシュの指定方法
アクセサを定義する時に`shouldCache`メソッドを呼んで指定します。
※Laravel9からアクセサ/ミューテタの記法が変わりました
“`php:User.php

*/
protected $fillable = [
‘email’,
‘sei

元記事を表示

未経験者がポートフォリオを作成してみた。【Laravel /Vue.js/ AWS】

# 1.はじめに
* 友人/家族/恋人との休日の行き先、ルートを提案してくれる「デートプラン提案アプリ」という物を作成しましましたので紹介させていただきます。

# 2.自己紹介
* こんにちはishii28と申します。
当記事は実務未経験者がポートフォリオをつく
WEB制作をはじめ、プログラミングに興味を持ち始めた。

* 私は「人の役に立ちたい」また「物作りを通して誰かの課題を解決したい」という思いがあった。
この観点から考え、エンジニアはそれを実現できると確信した。
この先はエンジニアという仕事を通じて人の課題に寄り添ったサービスを提供していけるようなっていきたいと考えエンジニアを目指した。


# 3.簡単に自己紹介
* 現在29歳でwebエンジニアになるために就職活動中です。

* 多くの人々の問題を解決し、人の役に立てる人間になっていきたい、 エンジニアはそれを実現できると確信しエンジニアを目指し始めた。

* 趣味は読書に没頭すること。


# 4.開発背景
* PFのテーマを選定する所から始まり、身近な友人や家族から実際に困っている事や不便に思っている事はないか調査す

元記事を表示

【AWS】LaravelアプリをEC2デプロイ⑥【S3編】

# 0. はじめに
大阪のLaravel初学者サウナーこと、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
Laravelで`S3`へ画像アップロードする方法です。

## 0-1. 前回記事
– 【AWS】LaravelアプリをEC2デプロイ【まとめ編】

https://qiita.com/kazumakishimoto/items/e0e109fca443a4acd2a1

– 【AWS】LaravelアプリをEC2デプロイ①【CloudFormation / EC2 / RDS編】

https://qiita.com/kazumakishimoto/items/0859a5a365b226c1b43a

– 【AWS】LaravelアプリをEC2デプロイ②【Route53編】

https://qiita.com/kazumakishimoto/items/825f8c5f94d0160b2364

– 【AWS】LaravelアプリをEC2デプロイ③【ACM / ELB編】

https:/

元記事を表示

OTHERカテゴリの最新記事