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

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

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:/

元記事を表示

【PHP】アクセス権について

## アクセス修飾子とは
プログラム上で変数やメソッドが同名として重複しないように、
変数や関数の有効範囲をするもの。とのことです。

## アクセス修飾子の使い分け・種類

### public
クラス内、外関係どこからでもアクセス可能

“`public.php
public;
}
}

$obj = new Myclass;
echo $obj->public; //プロパティの呼び出し
echo $obj->printhello(); //メソッドの呼び出し

//=> public public

“`
### protected
そのクラスと継承先クラスからアクセスが可能
“`protected.php

元記事を表示

Laravel 上で CSV を作成して保存する

# はじめに

仕事で Laravel 内でcsv を生成するコードを作成したのでその上で知ったことに関して備忘録代わりにこちらで記載しておきます。

# 保存場所の検討

Laravel のコードは当然ながら PHP で動いているので、ファイルを生成するのであれば、“`fopen((パス), (オプション))“` を用いることになります。
(fopen から fclose までの一般的なファイル生成手法に関してはこの記事では割愛しますので、気になる方は各自お調べください)

この時、
“`response()->streamDownload($callback, $filename, $header)“`
のようなファイルを生成したそばからレスポンスとして返すような場合は、$callback に渡すクロージャ内で“`fopen(‘php://output’, ‘w’)“`と
ファイルのパスを設定すれば問題ありません。

しかし、生成を行って一度保存する場合、その保存先を用意するにあたって気を付けるべき項目が存在します。

例えば、 **/storage/app/csv/{

元記事を表示

LaravelでAuth0のIDトークン(JWT)を検証・デコードする

# 環境
– [Laravel Framework 9.13.0](https://laravel.com/ “Laravel”)
– [PHP 8.1.6](https://www.php.net/ “PHP”)
– [auth0/auth0-php 8.2](https://github.com/auth0/auth0-PHP “auth0-php GitHub”)

## 前提
Auth0で`Single Page Appliation`を作成し、`ID Token`を**発行できる状態**を前提とします。
詳細な説明・方法は[【Auth0】LaravelでAuth0を使って認証する:IDトークン編【Laravel】](https://qiita.com/akkino_D-En/items/9c2a8c0d13ac802b04e7 “”)@akkino_D-Enがわかりやすかったので参照してください。

## 注意
`auth0-php`の**7系**では今回の方法で**実装できません**。
また、`auth0/login`という似たライブラリもあるので注意してください。

#

元記事を表示

PG見聞録 ~PHP編 インターフェース~

気分転換をして気を取り直してがんばるぞーと思った日はいろんなことが重なるもので
以前バックバンドやレコーディングでベースを担当させてもらってたシンガーの方から
2年ぶりくらいにライブでサポートの依頼を頂きまして。
コロナ禍でかなり厳しい状況にあってバンドでのライブは長いことお休みしてたんですが
かなりの時間が空いても真っ先に連絡をくれて「ベース弾いてくれると心強い」って言ってもらえるというのはミュージシャン冥利に尽きますね涙
そんなわけでインターフェースについて書いていきます涙

インターフェース

前回書きましたポリモーフィズムですが、同名のメソッドで別々の挙動を取れるというのは非常に便利な仕組みなのですが問題もございまして。
例えば子クラス1と子クラス2があって抽象化した親クラスがいて、メソッドを定義したとします。
子クラス1でメソッドA,B,Cが必要なので定義して、継承元の親クラスにオーバーライドします。
しかし子クラス2はメソッドA,Bだけがあれば良いんだよなあとなった時、その二つだけ都合よくオーバーライドしようと思ってもそうはいきません.

元記事を表示

PG見聞録 ~PHP編 ポリモーフィズム~

何だか日中は集中できず、休み休みやってたんですがやはり集中できず。
そんなときの気分転換、ワンコの散歩ついでにカフェラテ買ってきました。
多分ワンコ飼ってる人って自分ちの犬が世界一かわいいって思ってますよね。
そのうちの一人です。先日のトリミング後の写真みてください。
![ran.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2669556/877c3c6c-eadc-e7ad-e1fa-16ac907a4eba.jpeg)
ほらかわいい。

ということでポリモーフィズム(多態性)についておさらいしていきます。

ポリモーフィズム

とは、多態性を意味する言葉です。態が多い性質です。
なんのこっちゃと思いますが要は「同じ名前を持つメソッドが違う動きをとる」ことです。
カプセル化、継承と並んでオブジェクト指向構文において大事な要素の一つですね。
学習がかなり溜まってしまったのでこれらもまとめていきたいと思います。

“`php

元記事を表示

PHP・Rubyのスタックトレースの出し方

## スタックトレース
スタックトレースとは、実行中のコンピュータプログラムにエラーが発生した際に、直前に実行していた関数やメソッドなどの履歴を表示すること。
ログよりも詳しいエラー箇所を特定することができる。

https://e-words.jp/w/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9.html

## Ruby
ドキュメントには載ってないが、“`join(“\n”)“`しないとかなり見づらいのでした方がいい。
“`ruby
def methd
raise
end

begin
methd
rescue => e
logger.error e.backtrace.join(“\n”)
end
“`

https://docs.ruby-lang.org/ja/latest/method/Exception/i/backtrace.html

## PHP
“`php
debug_print_backtrace();
“`

https://www.p

元記事を表示

Laravel9にバージョンアップしたらGoogle App Engineへデプロイするときにエラーが発生

## エラー内容

“`
$ gcloud app deploy


– Installing laravel/tinker (v2.7.2): Extracting archive
– Installing league/flysystem-google-cloud-storage (3.0.15): Extracting archive
– Installing spatie/laravel-google-cloud-storage (2.0.3): Extracting archive
Deprecation Notice: Return type of Symfony\Component\Finder\Iterator\FilenameFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily su

元記事を表示

gitの「pre-commit」を使って静的テストをする

## 概要
`git`に用意されている**フック機能**を使ってコミット直前に**静的テスト**を行えるようにしてみる。

キーワードは、
– **pre-commit** : gitのhook機能でコミット直前の処理を定義できる
– **PHP Lint** : PHP標準のシンタックスチェック機能
– **phpmd** : PHPの静的コード解析ツール

の3つになります。

## 実行環境
– CentOS 7.6
– PHP 7.2.24

## ディレクトリ構成
検証用に作成したディレクトリ構成になります。
“`
app:
├─.gitignore
├─composer.json
├─composer.lock
├─test_success.php
├─test_error.php

├─vendor

└─git_template
└─hooks
└─pre-commit
“`
主なのだけ説明
`test_success.php`、`test_error.php`
検証用のテス

元記事を表示

OTHERカテゴリの最新記事