PHP関連のことを調べてみた

PHP関連のことを調べてみた

Symfony6でのルーティングの方法

# 従来のやり方
“`php
/**
*@Route(‘/hello’, name=’hello’)
*/
public function helloControler() {
return $this->render(‘/hello/hello.html.twig’,[
message => ‘Hello!’
]);
}
“`

# Symfony6でのやり方
“`diff_php
-/**
-*@Route(‘/hello’, name=’hello’)
-*/
+#[Route(‘/hello’, name:’hello’)]
public function helloControler() {
return $this->render(‘/hello/hello.html.twig’,[
message => ‘Hello!’
]);
}
“`

元記事を表示

Twitter APIでフォロー対象抽出アプリを作ったら精度が良すぎてアカウントロックされた話

昨日URLのドメインが完全にx.comになったX(旧Twitter)について、APIの有料化&厳しい制限になってしまっているので時効ということでフォロー対象を抽出するアプリを作った時のことを書こうと思います。

※まだまだ「Twitter」という名称が頭から抜けない人が多いと思いますので、この記事ではXのことをTwitterと書いています。

## フォロー対象をリストアップするアプリを作った

TwitterのAPIがまだ無料で使えた頃、フォロワーを増やすためにフォロー対象をリストアップするアプリを作りました。

やってることは単純で、ツイートについているいいねや特定のアカウントのフォロワーをうまいこと抜き出してきて画面に表示するというシンプルなアプリです。

自分からフォローするというのはTwitterに限らずSNS全般で有効なやり方で、自分のアカウントと相性がいいアカウントというのもあります。

またフォローとフォロワーの比率やフォロワー数などの特徴から「フォローが高確率で返ってくるアカウント」というのも存在します。

それらを踏まえてアプリを作りました。

### 作った機能

元記事を表示

【AtCoder】備忘録344-B

## 問題

https://atcoder.jp/contests/abc344/tasks/abc344_b

PHPで解いています。

## 解答

“`php
私は**0も含めて逆順にする**構文を書いていました。
しかし要件には**0を最初に出力し、残りを逆順に出力する**と書いてあります。
これらは一見結果が同じように見える場合もあり

元記事を表示

あなたのPHPが変わる!SAPI導入ガイド

# コード分析システム – Zend・Engine

## 概要
– Zend EngineはPHPのインタプリタ(レジスタマシンベースの仮想機械)である。
– PHP Licenseに類似した**Zend Engine License**が適用される自由なソフトウェア。
– **The PHP Group**によって開発・公開されている。

https://spdx.org/licenses/Zend-2.0.html

## 歴史
– PHPは**ラスマス・ラードフ**が開発し、PHP **2(PHP/FI)**までほぼ1人で開発を行っていた。
– PHP 3を作るにあたり、**アンディ・ガトマンズ**と**ゼーブ・スラスキー**が構文解析部の開発に参加。
– PHP 4でパーサが完全に作り直され、**Zend Engine**と名付けられた。
– ゼンド・テクノロジーズを創業し、PHPをベースとしたWebアプリケーションの開発を行っている。

## 機能
– PHP 3以前: 実行のたびにソースコードを翻訳し実行。
– Zend Engine: ファイル単位で中間表現へ翻訳し実行

元記事を表示

Laravel 11がリリースされました

# Laravel 11がリリースされました。

Laravel 11は、Laravel 10.xでの改善を続け、アプリケーション構造を合理化し、秒単位のレートリミット, ヘルスルーティング、暗号化キーのローテーション,キューテストの改善、プロンプトバリデータの統合、新しいArtisanコマンドなどを導入しました。さらに、リアルタイム機能をアプリケーションに提供するために、ファーストパーティーのスケーラブルなwebsocketサーバーであるLaravel Reverbが導入されました。

## PHP 8.2
Laravel 11.xは、最低限PHPバージョン8.2が必要です。

## 合理化したアプリケーション構造
Laravel 11は、既存のアプリケーションに変更を加えることなく、新しいLaravelアプリケーションのためにシンプル化されたアプリケーション構造を導入しました。この新しい構造は、より現代的でスリムな体験を提供することを目的としていますが、Laravel開発者がすでに慣れ親しんでいる多くのコンセプトを維持しています。

## Laravel Reverb

Larav

元記事を表示

【PHPフレームワークFlow】Fluidを用いてHTMLのテンプレートを作成する

# 初めに
Webアプリケーションを作成する際、ヘッダーやフッターなどは共通的な部品にしたいですよね。今回は、FlowのテンプレートエンジンであるFluidを用いた、HTMLのテンプレート作成方法を解説します。

# テンプレート作成してみる

プロジェクト構成は以下です。

“`
Project
└ Packages/
└ Application/
├ Neos.Welcome/
| └ Classes/
| └ Controller/
| └ LayoutTestController.php(★)
|
└ Resources/
├ Private/
| ├ Layouts/
| | └ Default.html
| └ Templates/

元記事を表示

クロスサイトリクエストフォージェリ

## はじめに

クロスサイトリクエストフォージェリについてまとめる。

### クロスサイトリクエストフォージェリとは

サイトに攻撃用のスクリプトを仕込むことでアクセスしてきたユーザーに意図しない操作を強制すること。

具体的な被害例として、「あるサービスに勝手に登録させられてしまう」、「掲示板やブログに勝手に書き込みされてしまう」「ショッピングサイトで自動的に物品を購入されてしまう」のような被害を受ける可能性がある。

### 例

以下のようなコードで書かれたサイトを運営していたとして、

“`php:insert_form.php



データの登録

元記事を表示

StdClassの利用例

# 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;
“`

元記事を表示

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命令が生成/実行されてしまうこと。
結果として、公開されるはずでなかった機密情報が漏洩したり、需要なデータが削除されてしまう可能性がある。

### 例

以下のようなコードがあったとして

“`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; —

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事