# StdClassの利用例
$user->idのような、
オブジェクト型で扱いたい場合に使える
“`php
$osaka_count = 1;
$tokyo_count = 2;
$kyoto_count = 3;
$ret = new StdClass();// クラスなのでnewする必要あり
$ret->osaka_count = $osaka_count;
$ret->tokyo_count = $tokyo_count;
$ret->kyoto_count = $kyoto_count;
“`
### 結果
“`php
$ret->osaka_count = 1;
$ret->tokyo_count = 2;
$ret->kyoto_count = 3;
“`
# はじめに
こんにちは、エンジニアの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();
“`
※一次的な解決策に過ぎないので、以下の記事を参考にやってみてください
# おわりに
この記事での質問や、間違っている、もっといい方法があ
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) をテンプレートとして利用させてもらっています。
次から実際の手順を加えていきます。
– [前回](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命令が生成/実行されてしまうこと。
結果として、公開されるはずでなかった機密情報が漏洩したり、需要なデータが削除されてしまう可能性がある。
### 例
以下のようなコードがあったとして
“`php
$stt = $db->prepare(“INSERT INTO book(isbn, title, price, publish, published)
VALUES(‘”.$_POST[‘isbn’].”‘, ‘”.$_POST[‘title’].”‘, ‘”.$_POST[‘price’].”‘, ‘”.$_POST[‘publish’].”‘, ‘”.$_POST[‘published’].”‘)”);
“`
`$_POST[‘isbn’]`に以下の入力がされたとき
“`text
9-999-99999′, ”, ”, ”, ”);DELETE FROM book; —
## 問題
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);
“`
fasffasdsfd
![translated_image_mn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3792699/53760c0a-e967-c2f1-ded3-42efbbc4d20d.png)
fasddddddddddddddddddddddddddddddd
# 初めに
最近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!)が出たので対応メモ。
### 環境
クラウドサービス: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
## ある日の出来事
「複数件のデータが取得できるはずなのに一件分しか取得できてない!」とバグがあがりました。
調べてみると取得クエリの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=
“`
### 対策
~~外部から入力された値を表示に反映する場合はエスケープ処理を施す。~~
[訂正] 動的に生成され
# 初めに
最近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
> それは現在のインターネットの77%を占めているからです。
インターネット上の猫の動画さえも上回る頻繁なPHPへの冗談にもかかわらず、PHPは引き続き主要なサーバーサイドスクリプト言語としての地位を確立しています。実際、驚くべきことに、統計によると、認識されたすべてのウェブサイトの77.4%がPHPで動作しており、その広範な採用を証明しています。これは、ウェブ開発者にとって効率的なPHP開発環境を構築することの重要性を強調しています。
PHPの広範な人気の秘密はそのアクセシビリティにあります。この言語は、「Hello, World!」と宣言するよりも速く、ウェブページやデータベースとの迅速な対話を可能にします。さらに、WordPressのウェブへの影響は否定できません。ウェブサイトの40%以上がこのPHPベースのプラットフォームを利用しています。macOSで作業している開発者にとって、PHPをシームレスに統合する[macOS開発スタック](https://www.servbay.com/)を構成することは、生産性とパフォーマンスを大幅に向上させることができます。
しかし、PHP
## はじめに
最近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,
# やりたいこと
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