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

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

Laravelにおけるクラスとファサードの違い

Laravelにおける、クラスとファサードの違いをまとめた。

# クラス
属性(データ)とメソッド(動作)を持ち、オブジェクトの作成の元となるデータや振る舞いを定義する。オブジェクトは、クラスをインスタンス化することで実体化される。

# ファサード
クラスをインスタンス化しなくても、staticメソッドのように、メソッドを実行できるようにしてくれる機能。クラスにアクセスするためのインターフェース。

“`class.php
// クラス使用
$classA = new ClassA;
$classA -> methodA();
“`
“`facade.php
// ファサード使用
FacadeClassA::methodA();
“`

元記事を表示

【PHP】BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken()の解説

[BlobSharedAccessSignatureHelper::generateBlobServiceSharedAccessSignatureToken()](https://github.com/Azure/azure-storage-blob-php/blob/v1.5.4/src/Blob/BlobSharedAccessSignatureHelper.php#L87)の使い方がわからなくて死にそうだったので調査した結果です。

# そもそも何これ?

[Azure Storage BLOB](https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-overview)にアクセスするための[SAS](https://learn.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview)を発行する関数です。
有効期限などを好きに決められるので、1時間だけ見せたいみたいなことが簡単にできます。

# BlobSharedAccessS

元記事を表示

php**-php-pecl-zip が無くなった場合

AmazonLinux2023等にアップグレードする際に パッケージに `php**-php-pecl-zip` が無い場合
「無くなった!zipモジュール非推奨になった?・・」となった時のメモ

PECLはサポートしているので、利用して導入。(ビルドツール必要となる為、容量増大は要覚悟)
“`
yum install -y php【バージョン】-devel php-pear libzip libzip-devel
pecl install zip
“`
(【バージョン】は各々置き換え。yum は dnf になるかも(エイリアス有る場合はどっちでも)

あと、設定有効にする為、以下コンフィグを足してに設定文を記載

“`:/etc/php.d/20-zip.ini
extension=zip.so
“`

zipは必須レベルなので、パッケージ化してもらいたい所・・

元記事を表示

WordPressで「アップロードされたファイルが php.ini の upload_max_filesize ディレクティブを越えています。」を解決する

# php.iniの場所を特定する
エラーメッセージの通り、php.iniファイルを探して、その中のupload_max_filesizeの上限を上げないといけません。
そのため、まずはphp.iniファイルの場所を探しましょう。

wordpressの現在有効にしているテーマのフォルダ中にあるfunction.phpの最終行へ以下を追加してサイトのTopページを開いてみてください。

“`function.php
phpinfo();
“`
PHPのロゴとと共に、表が表示されているはずです。その中で、Loaded Configuration Fileという行を探してみてください。ここへ、php.iniの所在が書いてあるはずです。

# php.iniを編集
どこにあるのか見つかったら、`vi /usr/local/etc/php/php.ini
`などのコマンドで開いて、**upload_max_filesize** と **post_max_size**などの値を増やします。
デフォルトだと20Mなので、それ以上にしてください。

max_execution_time、ma

元記事を表示

ニートの夢(2)ChatGPTに画像生成させたらやっぱり途中から壊れた

### はじめに
https://qiita.com/HenNayume2023/items/91c1414b135a303dbc7c

以前作成したWebサイトですが、デザインが平成だったので、
令和のWebサイトになれるようデザインを刷新していました。
・[新:令和版](http://henna-yume.tokyo/)
・[旧:平成版](http://old.henna-yume.tokyo/)
### 背景画像作成
自分の方でサイトを[Bootstrapのテンプレート](https://bootstrapmade.com/)ベースのものに作り替え、ChatGPTに[画像生成](https://di-acc2.com/programming/python/25019/)を頼みます。
参考:https://di-acc2.com/programming/python/25019/
まずはヒーロー画像、サイズは妥協するとして、オーダーは「夜空に月と星、雲が浮かぶ画像」です。
1回目の結果がこちら。
CakePHP4(3)で表示件数を変更するUI

limitのコントローラーでの変更やテンプレートの書き方の記述はいくつかあったけど、CakePHPの標準機能を使った方法が無かったの書いておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592669/c88c9c9d-a0a1-af90-9492-f2360ede64ef.png)

~~~Template
Paginator->limitControl(
[
25 => “25件”,
50 => ’50件’,
100 => ‘100件’
],
25,
[‘label’=>’表示件数:’]
);
?>
~~~

第二引数のデフォルトの表示件数は個人的にはcontroller側で指定した方が無難な気がします。

![image.png](https://qiita-image-s

元記事を表示

【PHP】PDOのfetchでハマった話

## 使用バージョン
PHP 7.4

## 前提

| カラム名 | データの型 |
| :—-| :—-|
| id | int |
| type | int |
| name | varchar |

上記のようなテーブルがあります。
PDOでfetchしてきたものをJSに渡し、typeによって処理を分岐させていました。
分岐にはswitch文を使っていました。

### PHP
“`
// ※だいたいこんな感じのコードというだけで、動作は検証してません。
$pdo = new PDO($connection[‘dsn’], $connection[‘username’], $connection[‘password’]);
$sql = ‘SELECT * FROM ‘. $connection[‘table’] .’ ORDER BY id ASC’;
$stmt = $pdo->prepare($sql);
$stmt->execute();
$records = $stmt->fetchAll();
$records_json = json_encode($re

元記事を表示

エンジニア初学者のころの勉強方法について

# はじめに
私がエンジニアとしてキャリアをスタートさせた時に行った演習課題とその解き方を記述します。
エンジニアとなった最初はHTMLとPHPから勉強を始めました。
昨今ではPHP言語が使われることは少なくなってきましたが、保守などに使うことがあること、プログラミングとはどういうものかを理解するのにコストが少ないことから、初めて触る言語としてオススメだと思います。  
私は最初の2ヶ月くらいはPHPを触り、それからGO言語やTypeScriptなどの静的言語の学習を始めました。

本稿では、お馴染みではありますが、繰り返し処理と配列について学んでいきましょう。 
PHPの繰り返し処理だけでは、面白くないので最後にGO言語を使って同じ繰り返し処理と配列を作成します。

# 準備
PHPの実行環境を準備しましょう。
今回の演習では、webページに九九を表示させることをゴールとします。

~~以下の記事を参考に環境を構築してください。~~
実行環境の記事は別途公開予定です。

# 課題
課題は以下の順番で進めていきます。
1. 1の段

元記事を表示

CakePHP4のページネーションで「Argument #1 ($format) must be of type string, array given, called in」

## エラー内容
Cakeのページネーションで件数を表示しようとしたらエラーで動かない!
エラーメッセージには以下が表示されていました。
~~~
Cake\View\Helper\PaginatorHelper::counter(): Argument #1 ($format) must be of type string, array given, called in
~~~

must be of type string, array given, called in
引数の型が違う?でもドキュメント通りのはず。

## CakePHPのドキュメント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592669/46086659-bdfe-73aa-658d-20b095ce87a5.png)
https://book.cakephp.org/4/ja/views/helpers/paginator.html

## 解決

~~~

<

元記事を表示

PHP Docker GD ライブラリのインストール

## 環境

https://github.com/ucan-lab/docker-laravel/blob/main/infra/docker/php/Dockerfile

– PHP: 8.2.8

## Dockerfile(差分だけ)

“`Dockerfile
RUN apt-get update \
&& apt-get -y install –no-install-recommends \
libpng-dev libjpeg-dev \
&& docker-php-ext-configure gd –with-jpeg \
&& docker-php-ext-install \
-j$(nproc) gd
“`

`–with-png` オプションはデフォルトで組み込まれたから廃止されたそうです(詳しくないです)
`–with-jpeg` jpegを使うためにはこのオプションが必要でした。
`-j$(nproc)` nprocコマンドはCPUコア数が返り、-jオプションは指定したCPUコア数で並列ビルドを行うための設定になるよう

元記事を表示

Laravel 10.x FormRequest 検証ルールのテスト

## 概要

LaravelにはHTTPテストの機能があり、このテストを行うとルーティング、フォームリクエスト、コントローラ、レスポンスをまとめてテストできるのでFormRequest単体でテストする機会は少ないかもしれません。

ただ、FormRequestの実装が複雑になるとHTTPテストのコストが高くなるのでFormRequest単体でテストしたいよね。ということがありました。

FormRequstクラスの中で `$this->input()` や `$this->route()` などを使って複雑な検証ルールになってる場合は参考にしてください。

※この記事では認可のテストは行なっていません。

## 環境

PHP: 8.2.8
Laravel: 10.15.0

## 関連記事

https://qiita.com/ucan-lab/items/9a294163b0fd8ba25aca

## 準備

“`shell-session
$ touch tests/Unit/Http/Requests/RequestTestCase.php
“`

“`php:test

元記事を表示

Twitter API:動かなくなったTwitter botを復活させる

# はじめに
Twitter APIを使用してTwitter botを作成していたのですが、APIの仕様変更により、2023年6月頃のツイートを最後に実行されなくなってしまいました。
bot復活までの対処についてまとめます。

botは次のような仕組みで実装していました。
1. GAS(Google Apps Script)をトリガーにPHPのスクリプトをキック
1. PHPからTwitterOAuthというライブラリを使用してTwitter APIを操作
1. ツイートのポストやファボ、ツイートを取得する

サーバー環境は次のとおりです。
* 開発環境:VirtualBoxのCentOS7.5(Vagrant:bento/centos-7.5)
* 本番環境:[さくらのレンタルサーバ – ライトプラン](https://rs.sakura.ad.jp/lite.html)

改修前のアプリのバージョンです。
* PHP:7系
* TwitterOAuth:0.7.2(おそらく)
* Twitter API:v1.1

改修後のアプリのバージョンです。
* PHP:8系
* Twitt

元記事を表示

【Laravel】Seederを使って初期データを設定する

## はじめに
Laravelには、データベースに初期データを追加するための便利な機能である`Seeder`が組み込まれており、データベースの初期状態を簡単に設定することができます。

## Seederとは
`Seeder`は、Laravelのデータベース初期化機能の一部であり、データベースに初期データを追加するためのクラスです。Seederを使用することで、開発環境やテスト環境のデータベースを簡単に初期化し、必要な初期データを追加することができます。

## Seederを作成する
Laravelでは、artisanコマンドを使用してSeederを作成することができます。以下のコマンドを実行すると、新しいSeederクラスが生成されます。

“`
php artisan make:seeder UsersTableSeeder
“`
上記の例では、UsersTableSeederという名前の`Seederクラス`が作成されます。Seederクラスは`database/seeders`ディレクトリに作成されます。

作成されたUsersTableSeeder.phpファイルの初期

元記事を表示

LaravelのwhenLoaded()がすごい

LaravelのAPIResourceで便利な関数を見つけたのでご紹介します。
APIの設計によってはModelごとにResourceを作ってあげるだけで完結しそうです!

## Modelの作成
`m_users`テーブルと`m_roles`テーブルがあるとします。
いつも通りModelにリレーションを定義します。

`MUser.php`
“`php
public function mRole()
{
return $this->belongsTo(MRole::class);
}
“`

## Resourceの作成
今回の主役Resourceです。
この`whenLoaded()`を使用した場合、`with()`で取得してある場合のみ、プロパティがレスポンスに含まれるようになります。
次で実際に使用してみます。

`UserResource.php`
“`php
public function toArray($request)
{
return [
‘id’ => $this

元記事を表示

【Laravel】定数を扱うなら専用のクラスを使おう

## はじめに
laravelで定数を扱う方法は多々ありますが、この記事ではクラスを使用した方法を解説します。

## マジックナンバーについて
まず、開発をする上で注意すべきことに“マジックナンバー“というものがあります。

マジックナンバーというのは、“それが何を示しているかがわからない文字列や数値“のことです。

> プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。まるで魔法の数字だ」という皮肉を含む。

https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_(%E3%83%97%

元記事を表示

Javascriptの非同期処理でjQueryのajax使ってみた

# 辿り着くまでに

今日は仕事でWebアプリの保守してました、疲れた、、
admin画面を作成していたのだが、
検索ボタンを押した時に入力フォームをhideしたいということで、
苦戦しておりました。

Javascriptを書いても、一瞬hideされてすぐ戻るんだ、、、
悲しい、、、

ということで調べまくっていたところ、
ajaxとやらがいいらしい?
非同期処理とやらがいいらしい?

ということでjQueryのajaxを使用してみっか!

# 非同期処理とは

ボタンポチ!=関数起動!
が同期処理。

ボタンポチ!=第1関数起動!     ・・・数年後。第2関数起動!
これが非同期処理なのだ。

というのは冗談で、
・・・詳しく書いてるサイトがありましたのでリンク貼っています。
https://qiita.com/yunity29/items/7ccc84d47e139340ecbc

代表的なのはGoogleMapとか。
リロードしなくても、ボタン押さなくても、地図がガシガシ更新されてます。
非同期処理なかったら1ミリ動かしたらリロードしなあかん。しぬ。

# ajaxについて

元記事を表示

laravel メモ1

configのクリア

laravel_sample> php artisan config:clear

INFO Configuration cache cleared successfully.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478286/fdca86a3-4257-c645-95e7-cda10b3c3beb.png)

マイグレーション

laravel_sample>php artisan migrate

INFO Preparing database.

Creating migration table …………………………………………………………. 87ms DONE
INFO Running migrations.

2014_10_

元記事を表示

PHPの学びをまとめる

PHPを学び始めたので、まずはオンライン講座で学習したことをまとめます。
講座では、Wordpressでブログを作りながらPHPを学ぶという流れでした。

※まだ未完成ですが、中々完成しないのでとりあえず投稿だけしておきます。随時更新予定です。

目次

  • カリキュラムで学んだこと一覧
  • SLスタジオで学習して補充した知識
  • 課題

カリキュラムで学んだこと一覧

あとで参照した時に索引のように使えるように、参考サイトと一緒に一覧にします。

  • Mac:ターミナル、Windows:コマンドプロンプトについて
  • Mac:ターミナル、Windows:コマンドプロンプトの基本的なコマンド
  • Mac:ターミナル、Windows:コマンドプロンプトでPHPファイルを実行する
  • PHPの記述方法<
元記事を表示

【PHP】【javascript】三項演算子の入れ子

# コード
“`PHP

元記事を表示

phpで応用情報のバブルソートをコード化した

# 概要
応用情報の問題を解いている時にバブルソートの問題を見つけたので、それをプログラムで書いてみました。

# バブルソートとは?
隣り合う数字を比較し、昇順の場合は左側の数字が大きければ順番を入れ替えます。降順の場合は右側の数字が大きければ順番を入れ替えます。

応用情報問題 https://www.ap-siken.com/s/kakomon/04_aki/q6.html

# 完成コード

“`php
= $i + 1 ; $j–){

if($a[$j] < $a[$j - 1]){ $w = $a[$j]; $a[$j] = $a[$j - 1]; $a[$j - 1] = $w; } } echo $a[$i]; } ?>

“`

配列はarrayでも上記のような書き方でも可です。

応用情報では大文字のAですが、

元記事を表示

OTHERカテゴリの最新記事