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

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

PDOでロールバックして帳消し

phpでロールバックをして帳消しします。

“`php
try{
$pdo = new PDO($dns,$user,$pass,[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);}catch(PDOException $e){
echo ‘接続失敗’ . $e->getMessage();
exit();
}

$pdo->beginTransaction(); //トランザクションの開始
$pdo->query(
“UPDATE user SET age = age + 1 WHERE id = 1”
);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result[0][“age”]);
“`
“`
26
“`
間違えたことに気づきます。処理前まで巻き戻しましょう。

“`php
$pdo->rollback();
print_r($result[0][“age”]);
“`
“`
25
“`
rollbackメソ

元記事を表示

一時的にしか使われないコードに有効期限を設定し、GithubActionsでチェック・通知する

本日 [レガシーソフトウェア改善ガイド](https://www.amazon.co.jp/dp/B01MSLAFPT/) の第4章で紹介されていた「期限切れのコード」を読み、心当たりしかなかったので早速実践として動くコードを書いてみる

# 期限切れのコードとは

広告キャンペーンで決まった期間だけバナーを表示するとか、A/Bテストを実施してみるとか。

そういう、役目が終わりもう使われないコードがリポジトリ内に残ったままだとコードリーディング時の認知負荷を上げてしまうため、使い終わったら即削除すべき。

なのですが**弊社は削除のためのタスクが発行されることもなくそのまま残してしまう傾向しかない**ため、消し忘れている場合はビルドが失敗するようにして、削除を促すようにする。

# やり方とサンプルコード

一時的にしか使われないコードには、決まったテンプレートを使って有効期限を付与する。サンプルコードでは [Expire] YYYY-mm-dd をテンプレートとする。

## PHP

2024年01月22日以降は使わないコード

“`php
// [Expire] 2024-0

元記事を表示

Web系のプログラマーでもわかるP2Pアプリケーション

# はじめに

先月、映画『[Winny](https://www.telasa.jp/videos/217441)』を見ました
Winnyというのは[Peer to Peer](https://ja.wikipedia.org/wiki/Peer_to_Peer)(P2P)型のファイル共有アプリケーションとなっています

P2Pとは何か──
Wikipediaからの引用では以下のようになっています

> P2Pに対置される用語としてクライアント・サーバー方式がある。クライアント・サーバー方式ではネットワークに接続されたコンピューターに対しクライアントとサーバーに立場・機能を分離しており、一般的には多数のクライアントに対してサーバーが一つである。クライアントはサーバーとだけ通信でき、あるクライアントが他のクライアントと通信するにはサーバーを介する必要がある。
>
> P2Pではネットワークに接続されたコンピューター同士が対等の立場、機能で直接通信するものである。クライアント・サーバー方式ではクライアント数が非常に多くなると、サーバーおよびその回線に負荷が集中するのに対

元記事を表示

【PHP】リフレクションを使えばクラスやメソッドの構造を取得することができる

# 初めに
リフレクションという機能をご存じでしょうか?
私は名前は聞いたことあるけどよくわかっていませんでした。
改めて調べてみてすごい便利だなと感じたので、今回はリフレクションについてアウトプットします。

# リフレクションとは
リフレクションとは、クラスやメソッドなどの構造をデータとして扱うことができる機能です。
この機能を使うと以下のような情報を取得することができます。
* クラスの属してる名前空間
* クラスに定義されているメソッドの一覧
* クラスが利用しているtraitの一覧
* クラスの継承元やインターフェース

などなど。

## 使い方

PHPには“`ReflectionClass“`というクラスがあり、以下のようにReflectionClassのインスタンスを作成することでクラスの情報を扱うことができるようになります。

“`php
// ReflectionClass型のインスタンスを作成
// 引数にはクラス名を指定
$reflectionClass = new \ReflectionClass(‘TargetClassName’);
“`

元記事を表示

PHPxさくらサーバー デプロイ攻略_サーバー側環境編

**↓前回**

https://qiita.com/dnote/items/5f22f43a9b4158caff97

## あらすじ
– [x] 開発環境側で.envファイルを使用した情報の読み取り
– [x] サーバーへのファイル移動(各自`www`直下へフォルダごとファイルを送信されたし)
– [ ] サーバー側で開発環境同等の実行環境を作る **(本稿)**

:::note warn
CHK:アップロード忘れずに!
composer.json
:::

https://qiita.com/dnote/items/5f22f43a9b4158caff97

ここではさくらのレンタルサーバー側の環境構築を行っていきます。
具体的には下記↓
– composer & phpdotenvのインストール
– .envファイルの作成が必要です。
(FTPで直接送信 or サーバーコントロールパネル上で作成する方法もあります。)

を行います。やりたいことは一緒。でも方法は違います。
ここからはSSH接続を利用した、コマンドベースの作業となります。

## S

元記事を表示

ElasticsearchのMUST(AND),SHOULD(OR),MUST_NOTについて

「must_not [A,B,]」はSQLでいう「NOT (A AND B)」なのか「NOT (A OR B)」なのか…動作確認した。
(2023/10/19㈭にbid:5815のハンドボール掲示板の所属先カテゴリidを129→118に移動した際、発生したのを機に…。)

tid=21,22,24,24,25の集合があるとき
must_not=>[tid=>22,tid=>24,]

tid=21,23,25が抽出される。
つまり
「NOT (tid=22 OR tid=24)」
と書くのと同じ動作。
「NOT (tid=22 AND tid=24)」
ではない!

must_not=>[tid=>22,!tid=>22,]

NOT(tid=22 OR ! tid=22)

何も抽出されない。◯

NOT(tid=22 AND ! tid=22) ⇔ (NOT tid=22 OR tid=22)

このように全抽出になるわけではない。

注意するのは
must_not 「「性別=男性」、NOT「身長が170cm以上」(身長が170cm未満)、」

「男性かつ170cm未

元記事を表示

phpでのvar_dump()表示形式変更

注意:「 xdebug.so 」を読み込むと処理に時間がかかるようになるので、読み込むのは開発用/ステージングサーバーのみに絞った方が無難です。
時間的に約倍。下手すると倍超えまで時間がかかるようになります。

2023/07/04 AWS->OCIへのサーバー移行
※OCIサーバーでvar_dumpするとどのファイルの何行目かが分からないので。

今回のケースでは
“`
[root@0206oci_webstaging php.d]# pwd
/etc/opt/remi/php56/php.d
[root@0206oci_webstaging php.d]# cat 20230704.ini
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
[root@0206oci_webstaging php.d]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
[root@

元記事を表示

ループメニュー1を解いていく5

https://paiza.jp/works/mondai/loop_problems/loop_problems__kuku_step2

### Python

“`py
N = int(input())
for i in range(1,10):
if i < 9: print(i * N, end=" ") else: print(i * N) ``` ### PHP ```PHP
“`
https://paiza.jp/works/mondai/loop_problems/loop_problems__pow2

### Python

“`py
N

元記事を表示

ChatGpt Apiを用いてクイズWEBアプリを作った際のプロンプトの知見

# 初めに

ChatGPT APIを使った何か作ってみようと思い、AIに質問をして正解を当てるクイズWEBアプリを作ってみました。

![20200622.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713225/4abc99ce-d278-33c7-ef5d-6c55efc22a9f.gif)

↓WEBアプリPubliQはコチラ。
https://publiq.cloud/

こちらのページではphp(laravel)で解説しますが、どの言語を使っている方にも分かるように、「プロンプトの使い方」に焦点を当てて書こうと思います。

アドバイス、ご助言頂けますと幸いです。

# クイズの概要

例えば:お題が「野菜」で正解が「ニンジン」の場合は「色はオレンジ?」「根菜?」等の質問をAIしながら答えを探すクイズにしてみました。
ちなみに某ラーメンyoutuberのクイズショート動画から着想を得ています。

# ざ

元記事を表示

PHPxさくらサーバー デプロイ攻略_開発環境編~.env情報の取得~※Windowsベース

## 本稿の目的
PHPで作成したアプリをノーヒントでデプロイするのはわからないことだらけですごく大変でした…
自分の行ったデプロイまでの手順を示し、みんなのPHPアプリを世に解き放つお手伝いがしたい!

ということで、ここでは開発環境側の準備に関して解説します。
全体の流れはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562770/edcbfc4a-e30f-3558-d316-685c329e7d78.png)

## .envファイルの準備
このようなデータベースへのアクセス設定がphpファイルに記載されているとする。
“`php:初期状態php
$db_name = “sample_db”; //データベース名
$db_id = “root”; //アカウント名
$db_pw = “”; //パスワード:MAMPは’root’
$db_host = “localhost”; //DB

元記事を表示

ループメニュー1を解いていく4

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_reverse

### Python

“`py
N = int(input())
A = list(map(int,input().split()))
# reversed関数を使うなら
print((*reversed(A)),sep=”\n”)
# for文を使うなら
for i in range(N-1,-1,-1):
print(A[i])
“`

### PHP
$Aはtrimしないと後ろに改行がくっついたままexplodeしてしまうので注意。

“`PHP
=0; $i–){
print($A[$i] . “\n”);
}
//reverse関数を使うならこれでも。でもぶっちゃけ上の方が早い
$A =

元記事を表示

【PHP】取り込んだHTMLのaタグにDOMDocumentで任意の属性を追加する

DOMDocumentを使い、取り込んだHTMLのaタグに`rel=”nofollow”`や`target=”_blank”`を付けたかったのですが、文字化けなどに苦戦したので残します。

## 想定対象者
PHPでHTMLのaタグにrel属性やtarget属性を付けたい人、またそれに似た操作をしたい人。

今回の実装コードは以下のように``や``を含まないHTMLを取得し、中にあるaタグを処理するコードになっています。
``タグで囲まれているような**完全なHTMLを想定していない**ので、注意してください。
“`HTML

“`
## 環境
– PHP8.2.8
## 実装
“`PHP
/**
* @param $html
* @return false|string
*/
function add

元記事を表示

blueSkyのプロフィールURLからRSSを抽出するコードを書きました。

### blueSkyのプロフィールURLからRSSを抽出するコードです。
blueSkyがRSS対応という記事を見たので対応してみました。
php7系とphp8系なら恐らく動作すると思います。
動作環境はPHP8.2になります。

“`php

元記事を表示

【Laravel, InterventionImage】アップロードする画像の解像度(dpi)を設定する方法

あまり情報がないのでメモ。

画像を高画質印刷するようなアプリケーションを作成したい場合には、アップロード時に画質を高めておきたい。
phpでは画像のアップロード時にデフォルトで解像度(dpi)が96に設定されるため、仮に元画像のdpiが350でも96までダウンしてしまう。

### imageresolutionが便利

imageresolution()
(PHP 7 >= 7.2.0, PHP 8)
https://www.php.net/manual/en/function.imageresolution.php

↓dpiを350に設定したい場合

“`php

$image_data = request()->file(‘image’);
$image = Image::make($image_data->getRealPath());

//GDオブジェクトを引数に指定、第二引数には設定したいDPI値
imageresolution($image->getCore(), 350);

$image->save($image

元記事を表示

ループメニュー1を解いていく3

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_multi

### Python
“`py
N = int(input())
A = [int(i) for i in input().split()]
for i in A:
print(i * 2)
“`
### PHP
for文で、要素数−1しているのは
0から数えるので、
0,1,2,3,4で要素5個だけど、−1して4までにする必要があるからですね
Pythonと違うので注意したいところです
まあこの部分は$N-1 でもよいのですが

“`php

“`

https://paiza.jp/works/mondai/loop_problem

元記事を表示

laravel クライアントのIPアドレスを取得するヘルパ関数を書いてみる

## 概要

`$request->ip()`でIPを取得すると、ダイレクトにクライアントからサーバーにアクセスされている場合は問題ないが、リバプロやロードバランサーなどがあると「サーバー到達直線のリソースのIP」が取れてしまう。クライアントのIPを取得したい場合の処理を考えてみた。

## 注意

本内容は完璧ではない可能性があります。何なりとご指摘いただければと思っております。

## 処理

下記のような処理を考えてみた。今回は独自ヘルパ関数として登録している。

“`helpers.php
if (!function_exists(‘getClientIp’)) {
function getClientIp(): array
{
$forwardedFor = request()->headers->get(‘X-Forwarded-For’);
$realIp = request()->headers->get(‘X-Real-IP’);
$clientIp = null;
$isClientI

元記事を表示

ループメニュー1をやっていく3

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_sum

Python

“`py
N = int(input())
A = list(map(int, input().split()))
# 下記でもOK
# A = [int(i) for i in input().split()]
sum = 0
for i in A:
sum += i

print(sum)
“`
PHP
“`php

“`

https://paiza.jp/works/mondai/loop_problems/loop_problems__seq_partsum

各言語の挙動

元記事を表示

【PHP】setcookieでPartitionedを発行したい場合はどうすればいいか

# サードパーティCookieについて

サードパーティCookieは2024年以降、[基本的に禁止されます](https://qiita.com/rana_kualu/items/16383af7f6f56f6e982e)。

この理由の大きなひとつが、サイトAとサイトBの情報を紐付けされてしまうことです。

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/62e51047-c5a7-4e0f-7ada-4ac41b971c37.jpeg)

※画像出典:[Chrome 114 の新機能](https://developer.chrome.com/blog/new-in-chrome-114?hl=ja)

`tracking.com`は`a.com`上でのあなたの動きを監視することができますし、`tracking.com`は`b.com`上でのあなたの動きを監視することができます。
そして`tracking.com`は、`a.com`と`b.com`の情報を紐付けることが可能です

元記事を表示

良いコード悪いコードで学ぶ設計入門を読んで(その②)

# 前置き
今年の目標に小規模~中規模のリファクタリングができるようになることを設定しました。前回は1章で悪い構造の弊害を纏めました。2章の内容を纏めます。

## 2章 設計の初歩
– 省略せず意図が伝わる名前を設計する

“`unknown_logic.php
int $d=0;
$d=$p1+$p2;
$d=$d-(($d1+$d2))/2);
if($d<0){ $d=0; } ``` まったく意味が分からない。私も実務時foreach文内でほぼ同じものを見たことがあるので親近感感じる。 このコードの変数名を適切に記述すると・・・ ```rename_value.php int $damageAmount=0; $damageAmount=$playerArmPower+$playerWeaponPower; $damageAmount=$damageAmount-(($enemyBodyDefence+$enemyArmorDefence))/2); if($damageAmount<0){ $damageAmount=0; } ``` 実はゲームのダメージ

元記事を表示

JS (php smarty内 .tpl 記述) セレクトボックス、テキストボックス制御

## ■完成イメージ
・セレクトボックス入力可 、テキストボックス入力不可
![スクリーンショット (909).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/5d936710-fe1a-5cf6-0019-d8581b8a2b8c.png)

・セレクトボックス入力不可 、テキストボックス入力可
![スクリーンショット (910).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/39f14355-5018-9b6d-9a43-8ecf9a796baa.png)

## ■機能説明
・セレクトボックスに値が入っている場合は、テキストボックスは入力不可。

・セレクトボックスが「未選択(値がない)」の場合、テキストボックス入力可、かつテキストボックスへ文字が入っている場合は、セレクトボックス選択不可。

## ■ソースコード
“`JS main.js
document.addEventListen

元記事を表示

OTHERカテゴリの最新記事