PHP関連のことを調べてみた2021年03月24日

PHP関連のことを調べてみた2021年03月24日

composer updateとcomposer installの違い

Laravelでの開発を進める上で、よく忘れるので備忘録です。
間違い等ありましたらご指摘ください:tea:

## update
“`bash
$ composer update
“`

* composer.jsonにより、各ライブラリを最新版に更新
* composer.lock生成
* composer.lockにはインストールした各ライブラリのバージョン情報が記載される。

## install
“`bash
$ composer install
“`

* composer.lockから記載のバージョンをインストール
* composer.lockが存在しない場合は、composer updateと同じ効果。

## 使い分け
* composer updateはライブラリを最新版に更新
* composer installはcomposer.lockに記載された特定のバージョンをインストールする

## 個人的なベストプラクティス
### 開発

“`bash
$ composer update
“`

元記事を表示

heroku run php artisan migrate した時のエラー

# heroku run php artisan migrateした際のエラー

““
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables
““
上記のエラーが発生しました。

下記コマンドで、環境変数を確認します。

““
$ heroku run php artisan tinker

>>> config(‘database.connections.mysql’)
““
““
=> [
“driver” => “mysql”,
“url” => null,
“Host” => “ホスト名”,
“Port” => “ポート番号”,
“database” => “データベース名”,
“username” => “ユーザ名”,
“password” => “パスワード”,
“unix_socket” => “/Applications/MAMP/tmp

元記事を表示

コピペで使える: PHPでYahooから為替レートを取得する方法

多通貨を扱うサイトで必要な、為替レートをヤフーから取得する方法を紹介します。コピペで簡単に使えるので興味のある方はお試しください。

この方法は、現在私が1人で開発しているカメラの海外価格比較サイト [nukeni.com](https://www.nukeni.com) でも使用しています。

#具体的な方法
ヤフーファイナンスの以下のようなページをスクレイピングして為替レートを取得します。
https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=JPY&t=USD

#テスト環境
CentOS 7
PHP 7.3.9

#事前準備
ヤフーのスクレイピングにはphpQueryという外部ライブラリを使用します。正規表現で取得してもいいのですが、こちらを利用した方がより簡単にスクレイピングできます。

[こちらのページ](https://code.google.com/archive/p/phpquery/downloads)から最新バージョン([phpQuery-0.9.5.386-onefile.zip](https://storage.

元記事を表示

php artisan migrateがうまくいかず、MySQL 8.0を再インストール

#環境
* M1 Mac macOS Big Sur 11.2.2
* MySQL 8.0.23 (Homebrew)
* PHP 7.3.24

#失敗した手順
最初にHomebrewでインストールした後は、

“`
brew install mysql
“`
####1. 権限を回避してMySQLの接続を行う
<エラー> ERROR 1045 (28000): Access denied for user ‘root’@’localhost’
[Qiita – MySQLインストール後、アクセス拒否 (Access denied for user ‘root’@’localhost’)](https://qiita.com/yummy888/items/25621bc1451f218e010a)
####2. 認証方式変更
<エラー> The server requested authentication method unknown to the client [caching_sha2_password]
[Qiita – FuelPHPでのMySQL接続時にThe se

元記事を表示

SymfonyのOptionResolverの紹介

## はじめに
ビルダーパターンなどを使っていると、配列で様々なオプションを渡したくなる時があります。その時に、値の存在確認や、型のチェックなどをスマートにこなせるSymfonyのOptionResolver Componentの紹介です。

## 問題提起

`Car`クラス、`Engine`クラス、`Tire`クラスの三つがあります。`Car`クラスは`Engine`と`Tire`のセッターを持ち、`Engine`と`Tire`はそれぞれ`int`型のパワーとサイズをセッターで受け取ります。

実装は以下の通りです。

“`php
engine = $engine;
}

public function setTire(Tire $tire): void
{

元記事を表示

Route::postにするとなぜか「The GET method is not supported for this route. Supported methods: POST.」が出る。

#目次
[1.何が起きた?](#何が起きた?)
[2.解決策はこれ!](#解決策はこれ!)

#何が起きた?
Laravel8にて、アップロード画面のルート設定で以下の記述を書いたところ、タイトルのように「**The GET method is not supported for this route. Supported methods: POST.**」のエラーが。。。

“`web.php
Route::post(‘ctrl.upload’, [CtrlController::class, ‘uploaded’]);
“`

原因を探るが、どれを試してみても効果なし。

しかもLaravelのエラー画面が教えてくれる場所は「vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php:117」で、そこちゃうねん(多分)。

頭をひねること数時間、最後は
「うわ、こんなしょうもないことで。。。」
と原因に気づきました。

そうは思ってもプロ

元記事を表示

Laravel はじめました [4. 基礎]

※前回の記事は以下です

https://qiita.com/soso555/items/83de4dc95b49a42e85bd

# 概要
– 今回は [基礎](https://readouble.com/laravel/5.7/ja/routing.html) 編

# 基本的なルーティング
– Webページのルーティングは “`routes/web.php“` に以下のように記載しましょう
– 引数は URI とクロージャ

“`php
Route::get(‘foo’, function () {
return ‘Hello World’;
});
“`

– 以下のように URI とコントローラ名称、メソッド名称でも定義できるよ

“`php
Route::get(‘/user’, ‘UserController@index’);
“`

– API のルーティングは “`routes/api.php“` に記載しましょう
– URI に “`/api“` プ

元記事を表示

【Laravel】ルーティングをグループ化する

# Laravelのルーティングをグループ化
“`web.php
group(function(){
Route::get(‘/’, ‘UserController@index’)->name(‘index’);
Route::get(‘/user/{id}’, ‘UserController@show’)->name(‘show’);
});
“`
LaravelにはRoute::nameというメソッド?が用意されているらしい。
Route::nameという記述をすることで、この中のルーティングはどこのコントローラーへのルーティングを定義しているのかをすぐに読み解くことができる。
要するに、可読性を高めることができる。

元記事を表示

【Laravel】Laravelで正しくルート定義ができているか確かめる

# Laravelで正しくルート定義ができているか確かめる
“`
$ docker-compose exec workspace php artisan route:list
“`
これで、ルート定義が正しくされているか確認することができる。

“`
+———+————-+——————+——————+————————————————————–+—————-+
| Domain | Method | URI | Name | Action | Middleware |
+———+————-+——————+—————-

元記事を表示

チェックデジットの計算方法(PHPプログラム)

###チェックデジットの計算方法

チェックデジットの計算方法(プログラム)です、入力の桁数のチェックは
割愛したロジックになります。コマンドラインから実行ください。

尚、参考にサイトより(1)JAN コードのチェックデジットの計算方法を参照して作りました。
http://www.jpo.or.jp/magcode/info/checkdigit.html

“`bash:実行
php CheckDigit.php 491009971074
“`

“`php:CheckDigit.php

元記事を表示

【Laravel】ゲートを使ってみたよ〜

##はじめに
今回は実務で実装していて
ゲートを使って特定のユーザーに対してアクセスを制限させることを
まとめていきます。
ゲートを使わずに実装しようとしたら
10箇所ほどに条件分岐を加えないといけなかったけど
それが一手間で済むのでぜひとも参考にしてみてください!

##認可とは?
そもそも認可ってなんでしょう?
>認可(英: authorization)とは、一般的には情報セキュリティおよびコンピュータセキュリティに関わるリソースへの、とりわけアクセス制御へのアクセス権限を特定する機能である。よりフォーマルにいえば、「認可する (to authorize)」とは、アクセスポリシーを定義することである。例えば、人事部門のスタッフは従業員の記録にアクセスする権限を与えられており、このポリシーはコンピュータシステム内のアクセス制御規則として定式化されているのが普通である。システムはそのアクセス制御規則を使って、(認証された)利用者のアクセス要求を受け入れるか拒否するかを決定する。リソースには、個々のファイルやアイテムのデータ、プログラム、コンピュータハードウェア、コンピュータアプリケーシ

元記事を表示

カスタムフィールドのインストールから出力方法のまとめ

#どうも7noteです。カスタムフィールドのよく使う項目の使い方をまとめました。

Advanced Custom Fields

プラグインの**「Advanced Custom Fields」のインストールから、phpでの出力方法まで**を私が分かりやすく私が使いやすい用に私が良く使うものだけをまとめた記事です。

※すべての機能や変数は紹介しておりません。すべての出力が知りたい方はこちらの記事がわかりやすかったのでこちらへどうぞ。
https://bazubu.com/advanced-custom-fields-36452.html

## ①「Advanced Custom Fields」のインストールから準備

1. WordPressの管理画面から**「プラグイン」→「新規追加」から、検索覧に「ACF」**と打ち**「Advanced Custom Fields」をインストールし有効化**。
2. 同じく管理画面、**サイドメニューの「カスタムフィールド」**をクリック。
3. **「新規追加」を押し、追

元記事を表示

coc.nvimでPHPStanやPHP_CodeSnifferを使う

coc.nvimはVimのLSPクライアント・プラグインの一つです。

https://github.com/neoclide/coc.nvim

cocは自分自身がVimプラグインでありながら、拡張機能(エクステンション)の機構を持っており、LSPサーバをエクステンションをとしてインストールすることで機能を追加することができます。

PHPのLSPサーバのcocエクステンションもいくつかあります。例えばPHPのLSPサーバであるIntelephenseのcocエクステンションとしてcoc-phplsがあります。

https://github.com/marlonfan/coc-phpls

https://github.com/bmewburn/vscode-intelephense

coc-phplsをインストールするとcoc経由でPHPの自動補完・定義ジャンプ・ホバー(ヒント)表示・バグ検出などの機能を使えるようになります。

coc-phplsだけでもある程度のバグ検知は可能ですが、Intelephenseが提供するバグ検出は現時点ではPHPStanに比べると弱く、またPH

元記事を表示

【PHP8.1】その配列、純粋配列?

PHPには配列と連想配列の区別がありません。
むしろPHPの配列は順序付きハッシュであり、その中でも数値のキーは特別に連番で扱える、みたいな扱いです。
他言語で言うところの配列はPHPにはありません。

“`php
$arr = [
‘hoge’ => ‘fuga’,
‘foo’ => ‘bar’,
‘x’, // キーは0になる
3=>’y’,
‘z’ // キーは4になる
];
“`

しかしまあ区別したいよねってことで、[Add array_is_list](https://wiki.php.net/rfc/is_list)というRFCが提出されました。
既に受理されており、PHP8.1にて実装されます。

# Add array_is_list(array $array): bool

## Introduction

PHPの配列は、整数キーと文字列キーの両方をサポートしており、さらに順序が保証されているという珍しい型です。

変数値が配列であるかのチェックは簡単ですが、その配列は連想配列だったり、オフセットの欠けた配列だったり、順序が異なっていたりする場合

元記事を表示

Apache2 の PHP で virtual を使う (ファイル書き込み)

こちらのファイルを改造して、ファイルの書き込みをするようにしました。
[Apache2 の PHP で virtual を使う](https://qiita.com/ekzemplaro/items/8e7fa417cc1e86a0ee38)

次のフォルダーに書き込みます。
>/var/log/apache2/php
>/var/log/apache2/perl

“`php:test_virtual.php

元記事を表示

安易にPHPのバージョンを上げたら色々ハマった(TwitterOAuth編)

#はじめに
自分の忘備録で記事を書いております。技術的に至らない点多々ありますがご容赦下さい。

#今回の記事
前回の記事
安易にPHPのバージョンを上げたら色々ハマった(imagick編)
https://qiita.com/cafe-capitola/items/4c9ba9faad997b299fd9 
の続き。

今回のテーマは「PHPのバージョン上げたら今まで動いてたTwitterOAuthが動かなくなっちゃった」です。

私はTwitterにて細々とbotを運営しています。
仮面ライダーBLACKクレジットbot( https://twitter.com/black_staffrole )

はい、オタクです。しかも色んな意味で炎上してる番組です。

仕様としては番組の1話から最終話、劇場版2作におけるオープニングとエンディングに表示されるキャスト・スタッフのデータをひたすらタイプしたCSV化したファイルを用意。たまに本家の写植が間違ってるとかありますけど、それを突き詰めるとキリがないのでそのままパンチ。
30分毎にファイル内のデータをランダムに1レコード出力するという非常

元記事を表示

配列内のオブジェクトの(プロパティの)取り出し

引用元

PHP オブジェクトやキーの値の取得

dd($attr)

..array:1 [
0 => {#2063
+”is_kawaii”: 1 ←●
}
]

アクセス方法
echo $attr[0]->is_kawaii; // 1

考え方
array直下のものはkey
{key: value}についてはプロパティでアクセスする

元記事を表示

php ログイン機能 セッション

index.php

“`
$username,
// ‘test2’ => $password,
//);
//$_SESSION[‘test’] = “テストです”;
//$_SESSION[‘test’] = $username;はサーバのファイルに一時保存する 保存したものはどこでもechoで表示できるので
//今回はmypageでパスとユーザーネームを表示させている
$_SESSION[‘test’] = $username;
$_SESSION[‘test2’] = $password;

//header(‘Location: /mypage.php’);
//exit;
?>


元記事を表示

AzureBlobストレージのファイルをphpで削除する

本当はディレクトリ指定して下層にあるやつ丸ごと削除したかったが
仮想ディレクトリだから出来ないらしいので
対象のディレクトリ内のファイルリストを取得→1ファイルごとに削除処理するしかないらしい
とてもめんどくさい

“`php
public function deleteBlob(){
$listBlobsOptions = new ListBlobsOptions();
$listBlobsOptions->setPrefix(“対象のディレクトリ名”);
$fileList = $this->blobClient->listBlobs(“コンテナ名”, $listBlobsOptions);
foreach ($fileList->getBlobs() as $val){
$this->blobClient->deleteBlob(“コンテナ名”,$val->getName());
}
return ;
}
“`

## 解説
### ListBlobOptionsでプレフィックスを指定する
コンテナ以下の下層ディレクトリにあたる部分を指定

“`
conta

元記事を表示

アクセサが便利なのでまとめてみる件【Laravel 8系】

##とにかくforeachとif文でやれたけど…
今回は実務で初めて知ったLaravelの便利な使い方をまとめていきます。

どんなことを実務でやったのかというと例えば

“`PHP
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view(‘users.index’, compact(‘users’));
}
}
“`
というコントローラがありviewでUserを一覧で表示するみたいなことは
割と良くやることかなと思います。

“`PHP
@foreach ($users as $user)
{{ $user->name }}さん
{{ $user->email }}
続く…
@endforeach
“`
そんなときに今回のUserのDB情報には権限(role)カラムがあって
管理者(1)と編集者(2)と言った1か2の値を持っていて
それに対して自分

元記事を表示

OTHERカテゴリの最新記事