PHP関連のことを調べてみた2023年01月07日

PHP関連のことを調べてみた2023年01月07日
目次

falseからの配列自動生成が非推奨になっていたのでsqliteで困った

お絵描き掲示板[noReita](https://github.com/sakots/noReita)をつくっています、さこつです。

今回表題の件で困ったことが解決したので記事にしようと思います。

## 何が起きたのか

実はPHP8.1で起きてたらしいんですけど、([falseから配列の自動生成が非推奨になりました。](https://qiita.com/rana_kualu/items/e350b8ff80f929626eb9#automatic-conversion-of-false-into-an-empty-array-on-write-operands-is-deprecated))

自分はsqlでこういうことをしていました。

“`index.php
//最新コメント取得
$sqlw = “SELECT * FROM tlog WHERE thread=0 ORDER BY tid DESC LIMIT 1”;
$msgw = $db->prepare($sqlw);
$msgw->execute();
$msgwc = $msgw->fetch();
“`

元記事を表示

Laravel で複数削除 where (whereIn)+ delete vs destroy はどちらが早いのかを検証してみた。

# はじめに

Laravel を使っていて、複数レコードを削除する方法が2つありましたので、
どちらが処理速度早いのかを検証してみました。

携わっていた案件で、ユーザーが選択したものを一括削除する機能があったことがきっかけです。

まあ、該当するidがフロントから送られてきたら、そのidをもとに削除すればいいだけだから、
複雑じゃないし気楽にやるか〜と思っていたところ、
モデルを複数削除する方法って複数あるんやな〜と見つけました。

それでどの処理が良いんだろうかと調査することにしました。



# Laravel のEloquent 削除処理について

まずは、基本的な削除について改めて確認をします。
なお、検証で使用するlaravel のバージョンは8となっております。

以下例などは、公式docs : laravel Eloquent の準備 から抜粋
https://readouble.com/laravel/8.x/ja/eloquent.html

基本的

元記事を表示

条件演算子(PHP)

条件演算子のサンプルプログラムです。
全体プログラムです

“`HTML






関数テスト(引数とデフォルト)



=0ならそのまま、

元記事を表示

wordpressのCSS、JSのキャッシュクリアのオススメ

CSS、JSのキャッシュをクリアする方法は色々あります。CSSを更新したタイミングでのみ、キャッシュクリアする記述方法を見つけたのでメモします。

先にコードから
~~~ php
function theme_enqueue_styles() {
wp_enqueue_style( ‘style’, get_stylesheet_directory_uri() . ‘/style/style.min.css’, array(), date(“ymdHis”, filemtime( get_stylesheet_directory().’/style.css’)) );
}
add_action( ‘wp_enqueue_scripts’, ‘theme_enqueue_styles’ );
~~~
仕組みは`wp_enqueue_style`関数の第4引数でバージョンを変化させます。対象のファイルの更新日を取得しているのでCSSのファイルを変えたタイミングで更新されるようになっています。
なので、そのページを再読み込みをしてもちゃんとキャッシュが残りますし、あとで、変更などもす

元記事を表示

【初心者向け】Wordpressテーマを自作する[singular.php][single.php][page.php]

ここでは、WPのテーマを作る上で必須の`singular.php`のコードを交えた解説を行います。
「あれ?`single.php`じゃないの?」と思った方、なぜ`single.php` ではなく`singular.php`なのかも含めて解説します。
とりあえずこの段階では「同じもの」と思っていただいて良いです。

:::note info
ファイルの構造や解説等、Wordpress(以下、WP)のテーマを自作する際の基本的な部分は、こちらの記事で紹介しています。
+ [【初心者向け】Wordpressテーマを自作する際に分かってると良いかもしれない事](
https://qiita.com/makkie/items/dc764c2845492079c0af)
+ `index.php`のコードを知りたいよって方はこちら
[【初心者向け】Wordpressテーマを自作する[index.php]](https://qiita.com/makkie/items/b5231a9f63b076c70af8)
+ `header.php`のコードを知りたいよって方はこちら
[【初心者向け】Wor

元記事を表示

PHP7.3 Failed opening required ‘srv/vendor/google/cloud-error-reporting/src/prepend.php’

# GCPでエラーレポーティングを設定する際にprepend.phpがうまく読み込めずハマったので記事にしておきます。

php.iniに正しいパスを指定しても`Failed opening required ‘srv/vendor/google/cloud-error-reporting/src/prepend.php’`のようにファイル読み込みエラーが出てしまう場合には、参考になると思います。

App Engineのインスタンスでエラーが発生した場合にGCP Error Reportingにエラー内容を出力することができ、
その手順については[PHP 用 Error Reporting の設定](https://cloud.google.com/error-reporting/docs/setup/php)に以下の説明があります。

>エラーの報告
>次のコマンドを使用して、クラウド ライブラリをインストールします。
>“`
>$ composer require google/cloud-error-reporting
>“`
>次の行を php.ini に追加します。こ

元記事を表示

PHPのバージョンを切り替える

# remi リポジトリを追加する

“`bash:bash
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
“`

# PHP 5.6 7.2 7.3 をインストールしてみる

“`bash:bash
for v in 56 72 73 ; do yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd,opcache,pecl-apcu,common,fpm,embedded,pear} ; done
“`

# 本体の場所の確認

“`bash:bash
$ ls -l /opt/remi/
total 0
dr-xr-xr-x. 3 root root 32 Feb 15 12:17 php56
dr-xr-xr-x. 3 root root 32 Feb 15 12:18 php72
dr-xr-xr-x. 3 root root 32 Feb 15 12:18 php73
“`

:::note
本体のシンボリック

元記事を表示

【Laravel】フォームの日付入力のデフォルト値を今日にする

## フォームの日付入力のデフォルト値を今日にする
ユーザーに入力をしてもらうフォームを作る際、日付を手入力で入れてもらうのですが、
意外と面倒だったりするなと思い、デフォルト値を設定することとしました。

今日のトレーニングメニューだったり今日の体重を入力することが主なので、
ある程度固定で今日をデフォルト値としていいというフォームを作る前提です。

### 考え方
inputタグの中にあるvalueに今日の日付を入れてあげればOK
“`

“`
ただこれだと固定で12月22日になってしまうので、
phpを使って書いていきます。

### 実際のコード
“`
No application encryption key has been specified.

`php artisan key:generate`でキーを作りましょう

“`bash
APP_KEY=$(php artisan key:generate –show) php artisan test
“`

元記事を表示

PHPStormの便利機能

PHPStormでよく使う設定・ショートカットキーをまとめました。

# 目次

[1. Xdebug](#xdebug)
[2. DBクライアント](#dbクライアント)
[3. Git](#git)
[4. ショートカットキー](#ショートカットキー)
[参考](#参考)

# 1.Xdebug

設定することで、ステップ実行ができるようになります。
デバッグ時に役立ちます。

## 準備

今回はDocker環境でXdebugを有効にする手順を記しています。
開発環境によって設定の方法が異なります( [参考1](https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html#integrationWithProduct) )

### ①インストール
まずはXdebugをインストールするために、Dockerfileに以下を記述

“`dockerfile
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
“`

※以下のようなエラーが出

元記事を表示

php-cs-fixerをvscodeに設定する ハマりポイントも添えて

## 目的
php-cs-fixerをvscodeで動作させるのに想定以上に時間がかかったのでその備忘録として

## 取り扱わないこと
1. php-cs-fixerのそれぞれの設定の意味
[PHP-CS-Fixer configuration](https://mlocati.github.io/php-cs-fixer-configurator/#version:3.13)を読んだ方が分かりやすいです
1. php-cs-fixerやphpのインストール方法

## 前提
php-cs-fixerと動かすphpはダウンロード済み

## .php-cs-fixer.phpを設定
“`php
setRiskyAllowed(false)
->setRules([
// configurationを見ながら設定
])
->setFinder(
PhpCsFixer\Finde

元記事を表示

Laravelのエラー「SQLSTATE[42S22]: Column not found: 1054 Unknown column」を全力で解決する

### ことのあらまし
* テーブルarticlesにアクセスしたユーザのログを取りたい、と言うことでarticle_access_logsを新規追加するよ
* Modelも新規追加したよ
* ControllerでSELECTしたら良く分からないエラーが出たよ
* ER図はこんな感じ
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2809857/25f2ffd8-058a-bdb2-0da3-9bbac9775dee.png)

### エラーの内容
なんてことないエラーだと思ったんです。

“`
SQLSTATE[42S22]: Column not found: 1054 Unknown column ・・・
“`
article_access_logテーブルからSELECTする時のカラム名のtypoかしらね、と悠長に構えていたら

“`
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘article_ac

元記事を表示

PHPによるファイルアップロードフォームの作り方

# こんな人向け
PHPを勉強中の初心者の方には
「POSTやGET等のメソッドを使ってフォームのデータを送信したり取得したりする方法は分かったけど、じゃあ画像のアップロードやダウンロードはどうしたらいいわけ?」
と思っている方もいるはず。
今日はそんな迷える子羊のためにPHPフォーム上でのファイルアップロード・ダウンロードを行う方法をご紹介します。

**【2023年1月6日追記】**
**偉そうに「紹介します」とか言ってますが、**
**コメント頂いた通り、セキュリティ面の配慮を完全に失念していました。**
**修正予定ですので、そのままの使用はお控えください。**

# 実装する機能一覧
・index.phpのフォームからファイル選択ボタンを押すとクライアントローカルのファイルを選択できる
・「アップロード」ボタンを押すと、サーバー上のフォルダへファイルをアップロード。result.phpへ遷移し、結果を表示。
・index.phpにはアップロード済みのファイルの一覧が表示される。
・表示済みのファイル名をクリックすると、ファイルがダウンロードされる。**

# 設計
構成を

元記事を表示

最初にやっておきたいfunctions.phpの基本設定

セキュリティの観点や諸々から、Wordpress(以下WP)のカスタム設定ファイルの`functions.php`に標準設定として入れておいた方が良いコード。
基本は、日々利用されるお客様が運用しやすいようにすることが大事なので、標準設定として自作テーマの時は必ず入れるようにしておくと良いかと思います。

以前書いた、`functions.php`にhead情報を入れる記事はこちら

https://qiita.com/makkie/items/34a608ca3dc8a0b8d66b

# 事前準備
テーマを自作する場合、他ファイルと同様に`functions.php`をテーマフォルダ配下に作成します。
既にある場合は、既存のコードの下や上に追記していきますが、コードの競合等がない様に注意してください。
以下は私がテーマを自作する際に用意するファイルとフォルダの構成です。
“`
../themes/original/
├─images/(画像用)
├─inc/(パーツ用)
├─fnc/(functionsのパーツ用)

元記事を表示

MacにPHPをインストールする

# PHPのインストール

“`bash
# 最新のPHPをインストール
brew install php
“`

# PHPのバージョンの切り替え

“`bach
# PHP 8.0を無効にする
brew unlink php@8.0

# PHP 7.0を有効にする
brew link php@7.0
“`

# 参考
https://tech.amefure.com/php-homebrew
https://oopsoop.com/how-to-switch-php-versions-on-mac-brew-link-unlink/

元記事を表示

PHP – mysqli prepare のエラー ( Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables )

# ポイント

prapare の第一引数には bind するパラメータの型を文字列で渡すこと

string 二個なら `ss`
string と integer なら `si`

というように

# コード例

巷の例に出てくる `sss` とか ってなんだよと思いながらてきとうに指定していたらエラーが起こり続けていた

“`php
prepare(“INSERT INTO users(id, name) VALUES (?, ?)”);

// $stmt->bind_param(‘sss’, $id, $name); # エラー
$stmt->bind_param(‘is’, $id, $name); # integer と string なので 第一引数は is

$id = 2;
$name = “ABC”;

$stmt->execute();
“`

# 参考

https://man.plusta

元記事を表示

PHPerが学ぶPython② クラス

うっすっす。豚野郎です。
今回は前章の続きです。

https://qiita.com/pig_buhi555/items/301f7c8eabd1a5fd121f

変数・配列がわかれば、次はクラスかな?と思い書いていきます。

※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。

**バージョン:3.9.1**

# 1. クラス
“`class.py
class Sample:
class_test = ‘クラステスト’
# 第一引数は必須。慣習的にself
def test(self, test):
print(test)

# Sampleクラスのclass_testを使用
test = Sample.class_test

# インスタンス化
sample = Sample()

# テストメソッド呼び出し
sample.test(test)
“`
“`
$ python class.py
クラステスト

元記事を表示

【Laravel】知らずに生じていたN+1問題

初めまして、大学院生のなかじです。

自分の開発物で知らずに生じていたN+1問題について、備忘録として残しておく?

## N+1問題とは
#### N+1問題とは・・・SQL文が大量に発行されてしまう問題
– DBから値の取得する時(SQLのクエリを発行して情報を集めていく時)に、余分にたくさんのクエリを発行してしまい、表示速度等に悪影響を出してしまうことをN+1問題と言います。
#### 例
– 1対多で生じる
ex) 本紐づいている著者リスト(公式ドキュメントより)
ex) ユーザーに紐付いているコメント
ex) ユーザーに紐付いている記事など…

## ①本のデータを全件取得し、②本のデータの数だけ著者の名前を取得する:N+1問題発生
#### DB説明(ダミーデータを用意してみました笑)

booksの例
| id | title |
| –| —————— |
| 1 | 令和04年【春期】【秋期】 応用情報技術者 合格教本 |
| 2 | キタミ式イラストIT塾 応用情報技術者 令和04年

元記事を表示

Laravelの外部キー制約を指定する際に使用するconstrained()に任意の指定したidを付与する方法

公式の書き方を参照すると、外部キー制約を追加する際、マイグレーションファイルに下記を記述する

“`php:マイグレーショファイル
# userテーブルと紐付ける条件で作成した
Schema::create(‘posts’, function (Blueprint $table) {
$table->id(‘post_id’);

$table->foreignId(‘user_id’)->constrained(‘users’)->onDelete(‘cascade’);
# または
$table->foreignId(‘user_id’)->constrained()->onDelete(‘cascade’);

$table->timestamps();
});
“`
:::note warn
– 今回は、CASCADEの設定も行っている
– 著者は、userテーブルを題材として使用し、今回の説明を行う
:::

上記の記述の場合、userテーブルが下記の状態であれば、マイグレーションを正常に行う事ができる

|id|n

元記事を表示

fsockopenとstream_socket_clientの違い【UNIXドメインソケット】

https://www.php.net/manual/ja/function.fsockopen.php

https://www.php.net/manual/ja/function.stream-socket-client.php

stream_socket_client() 関数もこれと似ていますがより豊富なオプションを持っており、 非ブロック接続をしたりストリームコンテキストを提供したりする機能があります。ジェネリックfsockopenのstream_socket_clientは、PHP5から登場しナウいのでオススメ

元記事を表示

OTHERカテゴリの最新記事