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

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

最大値を探すアルゴリズム

## はじめに

最大値を探すアルゴリズムについてまとめる

### 対象データ

5つの整数が格納された配列を処理対象とする。

“`php:data.php
$array = [12, 13, 11, 14, 11];
“`

### フローチャート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733055/c1485c9f-0902-e7be-a60a-dfbadec50269.png)

### 解説

①変数`max`を用意する。
②`array[0]`のデータを変数`max`に代入し、暫定の最大値とする。
③変数`max`と`array[1]`を比較する
④`array[1]`の方が大きければこちらが新最大値となる。
⑤`array[1]`が変数`max`より大きくない場合は変数`max`に格納された`array[0]`が最大値の座をキープする。
⑥以降は同じ手順で繰り返す。
⑦変数`max`を出力する。

元記事を表示

初心者向け!PHPを用いたWebアプリケーション作成(環境構築編)

# はじめに
こんにちは!社会人一年目の石川です。
記事をご覧いただきありがとうございます。
私は現在、PHPを用いた研修でWebアプリケーションの作成へと進もうとしています。
そこでPHPで最も人気のあるフレームワークの一つであるLaravelを使ってみたい!と思ったので記事にしました。

:::note warn
注意
この記事はWindowsユーザー向けです。
:::

## 目次
1. XAMPP
* [XAMPPとは?](#xamppとは)
* [XAMPPのインストール手順](#xamppのインストール手順)
* [XAMPPの動作確認](#xamppの動作確認)
2. Composer
* [Composerとは?](#composerとは)
* [Composerのインストール手順](#composerのインストール手順)
* [Composerの動作確認](#composerの動作確認)
3. Laravel
* [Laravelとは?](#laravelとは)
* [Laravelのインス

元記事を表示

Nextcloud に 私の顔認証モデルがテスト採用された

Nextcloud の顔認証アプリケーションで使用するモデルに私の Taguchi model がテスト採用されたようです。

![nextcloud-facerecognition.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785306/8a6e239e-8cfd-6b73-5114-7adcdd80f24d.jpeg)

## Nextcloud の概略
>Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアである。機能的にはDropboxに似ているが、オフプレミスのオンラインストレージサービスは提供しない。Nextcloudはフリーかつオープンソースなので、誰でも自分のプライベートサーバ(英語版)にインストールして利用することができる。
>Dropboxのようなプロプライエタリなサービスとは異なり、Nextcloudのようなオープンアーキテクチャではアプリケーションの形でサーバに機能を追加することができ、ユーザーがデータを完全に自身の制御下に置く

元記事を表示

ChatGPTのAPIを使用して会話をする(React、PHP)

# はじめに
今回オリジナルプロダクトの機能の一つとして、ChatGPTから五つの質問をしてもらい、その回答をChatGPTが解析することで、現在の感情を数値化してもらう。
といった機能を作成したので、そのコードを見ながら、どのように実装したかを振り返ろうと思います。

**注意**:
自分の復習と、これからAPIを使用したい人にわかりやすく伝えようとコードを載せましたが、このコードは実際に使用できてはいますが、まだデプロイもしていない段階なので、セキュリティの考慮などのリファクタリングがされていません。

そのことを念頭に置いていただければ幸いです。

# 開発環境
– LaravelにViteを使用してフロントエンドはReact
– バックエンドはPHP
– Visual Studio Code使用

# 準備
– [公式サイト](https://platform.openai.com/api-keys)を参考にしてアカウントとAPIキーを取得
– Laravelを作成して、.envファイルにAPIキーを環境変数として記述

# コード
まず最初はReactのフロントエンドから説明

元記事を表示

WordPressで検索結果から固定ページを除外する方法

WordPressで検索結果から固定ページを除外する方法について解説します。

## **functions.phpに記述するコード**

“`php
function my_posts_search($search, $wp_query) {

if ($wp_query->is_search() && $wp_query->is_main_query() && !is_admin()) {

$search .= ” AND post_type = ‘post’ “;

}

return $search;
}
add_filter(‘posts_search’, ‘my_posts_search’, 10, 2);
“`

## posts_searchフィルターフックについて

`posts_search`はWordPressの検索クエリのSQL WHERE句をカスタマイズするためのフィルターフックです。このフィルターを利用することで、デフォルトの検索機能を拡張し、特定の条件に基づいて検索結果を絞り込むことが可能になります。

`posts_search`フィルタ

元記事を表示

メールヘッダーインジェクション

## はじめに

メールヘッダーインジェクションについてまとめる。

### メールヘッダーインジェクションとは

メールヘッダーに不正なヘッダー情報を混入させることで、スパムメールなどを送信させる攻撃のこと。

### 例

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

“`php:mail_send.php
mb_send_mail(‘test@example.com’, $_POST[‘subject’], $_POST[‘body’],
“From: {$_POST[‘from’]}”);
“`

`”From: {$_POST[‘from’]}”)`の箇所に以下のような値を渡した時、

“`
test@example.com
Bcc: injection@example.com
“`

新たなBccヘッダーが認識されてしまう。
(入力値を介して、ユーザーが勝手に送付先を忍び込ませることができてしまう。)

メールヘッダーインジェクションのあるサイトは、スパムメールの踏み台にされる。

### 対策

メールアドレスの妥当性を検証する。
「`/\A\w+([-+.]\w+)*

元記事を表示

PHP 8.4の新機能の見通し

## PHP 8.4の新機能

PHP 8.4は2024年11月21日にリリースされる予定です。プロパティフック、JITの改善、追加の括弧なしでのメソッドチェーンが含まれます。これは大きな変更です!

### プロパティフックRFC

現代のPHPの歴史の中で最大の変更の一つ:プロパティフックを定義する機能。

“`php
class BookViewModel
{
public function __construct(
private array $authors,
) {}

public string $credits {
get {
return implode(‘, ‘, array_map(
fn (Author $author) => $author->name,
$this->authors,
));
}
}

public Author $mainAuthor {

元記事を表示

ディレクトリトラバーサル

## はじめに

ディレクトリバーサルについてまとめる

### ディレクトリトラバーサルとは

本来想定していたパスを遡って自由にファイルを読み書きされてしまう脆弱性のこと。

### 例

クエリ情報経由でパスを受け取る以下のコードがあったとき、

“`php:download.php
$fl = $_GET[‘path’] ?? “default.jpg”;
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename= “‘ . $fl . ‘”‘);
print file_get_contents(“./doc/{$fl}”);
“`
ユーザーが
`http://localhost/download.php?path=../../../../apache2/conf/httpd.conf`
のようなアドレスを指定するとhttpd.confを入手できてしまう。
(`file_get_contents()`が相対パスも受け入れ可能なため)

元記事を表示

【Phalcon】期待したクエリが生成されないことがある【v4,v5】

# はじめに
普段自社のtoCサービスを開発をしているのですが、担当プロジェクトではちょっとマイナーなPhalconというフレームワークを使用しています。
癖があるのと、日本語の技術記事があまりないので実装に苦労することもしばしば。
ただ、公式ドキュメントは充実している…気はします。
最近サービスの諸々をアップデートする案件に携わっており、Phalconもアップデートすることになりました。
3系→5系へのアップデートで、破壊的な変更もあったりと大変ですが、リリースできるよう頑張り中です。

# 概要
Phalconにはphqlという独自のsqlのようなものがあり、ベタ書きしたのをPhalconで用意されているparserで変換してクエリ実行している箇所で、そんなカラムないよ!と怒られるエラーが発生していました。
parserにカラム名先頭で「not」が来ると削除されてしまうバグがあり、そのためエラーが発生していたようです。

例えば元のSQLが以下だったとします。(Modelにnoteがある前提)
“`
Select m.note From Model m.
“`
これをcre

元記事を表示

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 とか

元記事を表示

OTHERカテゴリの最新記事