PHP関連のことを調べてみた2022年02月28日

PHP関連のことを調べてみた2022年02月28日
目次

LaravelでCSVファイルのダウンロード機能を実装する

Laravelでの開発中、DBのデータが記載されたCSVファイルのダウンロード機能を実装する必要があり学習したのでまとめる。
ただし最後の1行だけ理解が及んでおらずのため悪しからず。。。

# そもそもCSVとは?
「Comma Separated Value」の略。
直訳すると、カンマで区切った値となる。

散々CSVファイルを見てきたがカンマなど見たことがない、、、
どこがComma Separated Valueなんだと思ってしまった。

まず大前提として自分の認識が間違っていたのが、CSVとExcelはほぼ同じだと思っていたことだ。
というかむしろ何が違うんだくらいの認識だった。

ただこれこそが最大の勘違いで、正確には普段目にしているCSVファイルはExcelで開かれていたため全く同じに見えていたということだ。
となるとCSVファイルの実体は何なのか。
試しにCSVファイルをエディターに投げてみると以下のように表示される。

“`
id,name\n
1,”taro”\n
2,”mike”\n
3,”john”\n

元記事を表示

Adminer Editorでデータ更新依頼を自動化できないか検討

## 概要
データの修正依頼を受けてDB運用者が依頼に沿ってデータ修正するのではなく、直接依頼者がデータ修正できるようにできないかという想像から始まった。
phpmyadminやAdminerなどは機能豊富で生のSQLを叩けるのでなかなかハードルが高いし、だからといっていちいちツールを開発するのは大変。

そこで、いろいろ調べてみるとAdmin Editorというツールを見つけた。

https://www.adminer.org/en/editor/

Adminer Editorは非開発者でもわかりやすいようなUIを提供するデータ修正ツールで、Adminer同様多数のDBMSに対応している。
Adminerの機能制限版といった感じ?テーブルの作成やスキーマの修正などの機能を提供せずデータの追加、修正、削除のみを実施することができる。
そのため、アプリを立ち上げて依頼者にURLを提供すれば安全に修正できるようにならないか?という発想です。

公式サイトによると以下の制約があるようです。

* SQLは直接実行できない
* データベースは1つしか選べない

このページではAdmine

元記事を表示

【PHP】データ登録処理後、再読み込みしたら同じデータが再び登録される

## 環境
PHP 7

## はじめに
今回は、ユーザー登録機能を実装している時に、起きた問題です。ユーザー登録後リロードをすると同じデータが再び登録されてしまうという現象が起きました。
調べて分かった事などを備忘録として残していきたいと思います。

## リロードや再読み込みで再送信される
ユーザー登録後に、再読み込みをすると同じユーザーが再び登録される、、
URLを直撃ちしてページをみると、この現象は起きないのですが毎回こんなことできないですね、、

リロードをすると下記の画像のアラートが出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697259/ad0ffb28-37a2-e1e3-c4d2-6c3765bf869e.png)

「続行」を押すと同じデータが登録されます。
この現象は何度も繰り返されるため、無限にデータが増えることになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part1

# 概要

今まではスロットや掲示板、ネタ登録サイトなどを作ってみたけれど、自分自身で一つのサービスを作りたいと思い決意
せっかくlaravelを学んだので、laravelで開発したい
ポートフォリオにも使えるしね!

# 何を作るか?
ECサイトや予約サイト、マッチングアプリなど、laravelでできるサービスは多岐にある。
しかし、選択肢が多いってことは、それだけ迷ってしまうということ、自サービスの方向性が定まらないまま、yahooニュースを見て現実逃避をする。
![genjitsu_touhi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/ecfe987c-24bd-6267-40c0-0a8bc1fe75db.png)
そして、たどり着いたのがこの記事

https://news.yahoo.co.jp/articles/43d9b12fe338fd9f7193b48e4590d1caacb0f486

#### 世の中にはこの胡蝶蘭のように、使われてポイ

元記事を表示

【Laravel】Laravel8 (laravel/ui)でのマルチ認証実装方法メモ

# はじめに
Laravel8で一般ログインと管理ログインを分けるために、マルチ認証を実装した方法を記載します。

# 概要
ユーザーは、
* 一般ユーザー側を users
* 管理者側を admin_users

URLは、
* 一般ユーザー側(users)
ログイン画面 /login
ホーム画面 /home

* 管理側(admin_users)
ログイン画面 /admin/login
ホーム画面 /admin/home

として2つの管理画面を作ることを想定して実装します。

# 前提
* composerがインストールされている状態であること
* Laravelプロジェクトがインストール済みであること
* laravel/uiが導入済みである事

※laravel/uiのインストール方法は以下を参照
[Laravel8 (laravel/ui)でのLogin機能の実装方法メモ](https://qiita.com/daisu_yamazaki/items/b946594896179abcd203)
# 手順

### 1 管理者用のモデルとマイグレーションフ

元記事を表示

エンジニアに俺はなる![転職用ポートフォリオ ]


# 初めに

初めまして千葉県在住の転職活動をしている28歳です。

前職は遺品整理や飲食店の店長をしていました。
ポートフォリオはインフラとバックエンドを重点的に力を入れて作りました。

この記事ではポートフォリオの操作手順を分かりやすくしたり、苦労した点や今後の課題についてご紹介していきます。

    /            \
   │  ゆっくり見ていってね .│
   │              │
    \_______  _____ノ
            ノノ
   __   _____   ______
  ,´ _,, ‘-´ ̄ ̄`-ゝ 、_ イ、
  ’r ´          ヽ、ン、
 ,’==─-      -─==’, i
 i イ iゝ、イ人レ/_ルヽイ i |
 レリイi (ヒ_]     ヒ_ン ).| .|、i .||
  !Y!””  ,___,   “” 「 !ノ i |
  L.’,.   ヽ _ン    L」 ノ| .|
   | ||ヽ、       ,イ| ||イ| /

元記事を表示

【WordPress】(個人的に)クライアントワークでほぼ必須級のWordPressプラグイン【おすすめプラグイン】

もはや何番煎じか分かりませんが。
筆者は物忘れが激しいので作業中に「あ、あれ入れ忘れてた…」とか「あれ、あのいつものプラグイン名前なんだっけ…?」が頻発するため、備忘録を兼ねてまとめています。
ちなみに筆者のWordPress制作はクライアントワークがほぼ全てなので、個人ブログ等では必要ないのも多いかもしれません。

※~~思いついた物から書いてるので~~紹介順は順不同です。

## 1. あらゆるカスタマイズで必須『Advanced Custom Fields Pro』

Advanced Custom Fields

もはや説明不要かと思われます。カスタムフィールドを劇的に使いやすくするプラグイン。
クライアント側で更新する何かがある場合は必ず入れていますし、それ以外のカスタマイズ(大抵ACF BlockかOptionPage)でも頻繁に使っています。

Gutenbergが登場して久しいですが、企業ホームページなどでは自由なブロックエディタよりも型の決まった更新方法が好まれやすい(そして大抵それで事足りる)ため、

元記事を表示

リーダブルコード ざっくり解説

へい、豚野郎です。
最近、「Qiitaの更新がないですね」と言われますが、僕にも僕にも事情があるのだ(適当)。

と、いうわけで書いてない間に何をしていたかというと、
「リーダブルコード」という本を読んでいました。

専門学校時代、先生とか「この本は素晴らしい本だ!」って言ってた(気がする)ので
買って読んだのですが、PHPerの僕にはちょっとわからない(言い訳)なところもあり
解読に時間がかかってしまいました。
それがQiitaを放置していた原因です(言い訳)。

ただ、未だにわかっていないところもあるので
それは今後のエンジニアとしての経験で補っていつかわかる日が来る様にします。

そのため、「ざっくり解説」です。
詳しい内容は是非、買って読んでください。

# 1. コードは読みやすく・理解しやすく
【ポイント】
・バグが見つけやすくなる。
・自分のコードが流用される可能性がある。
・他の人がわかるようにするため。
・他の人が理解する時間を短くする。

# 2. 名前の情報はわかりやすく
【ポイント】
・明確な単語を使う。
・汎用的な名前は避ける。
・具体的にわかるようにする

元記事を表示

10: 通常配列と連想配列との混在,

通常配列と連想配列との混在

そもそも通常配列連想配列との区別はないので、これらを混在させることも可能。

“`
‘太郎’, 15 => ‘二郎’, ‘鈴木’ => ‘三郎’, ‘四郎’];

print_r($data);

//結果:

Array
(
[山田] => 太郎
[15] => 次郎
[鈴木] => 三郎
[16] => 次郎
)
“`

この場合も、キーを省略した場合には、「その時点での最大インデックス+1」が次のインデックスとして割り振られる。

キーは整数値/文字列に変換される

ここまではキーとして整数、または文字列を指定してきたが、そのほかにも、任意のデータ型を指定できる。
下記例
ただし、整数/文字列

元記事を表示

【翻訳】php_filter_float()の脆弱性について(CVE-2021-21708)

## 元記事

今回は、こちらの記事を翻訳してみました。
誤訳等ありましたら、コメント欄にて教えていただけますと幸いです。

https://nakedsecurity.sophos.com/2022/02/18/irony-alert-php-fixes-security-flaw-in-input-validation-code/

## 本編

PHPを利用されている方々は、現在自分が利用しているPHPバージョンが最新かどうか確認しましょう。

– PHP7.4 -> **7.4.28**
– PHP8.0 -> **8.0.16**
– PHP8.1 -> **8.1.3**

上記、PHP最新バージョンが**2022-02-17**にリリースされました。
最新バージョンでは、php_filter_float関数が原因のuse-after-free脆弱性[^4]([CVE-2021-21708](https://access.redhat.com/security/cve/cve-2021-21708))を含む、[複数のメモリ管理に関するバグが修正](https://www.p

元記事を表示

【WordPressセキュリティ対策】投稿者アーカイブを無効化してWordPressのユーザ名を隠す方法

WordPressで構築したサイトのアクセスログを見ると、ページには表示させていないのに何故かログインアカウントでアタックされている場合があります。
これはWordPressが自動生成する投稿者アーカイブが有効になっているからです。攻撃者はこの機能を悪用して不正ログインを試みます。

## 投稿者アーカイブとは

投稿者アーカイブとは、WordPress が自動生成する投稿者ごとの投稿をまとめる機能のことです。
ちょっと技術的なことを言うと、テーマの`author.php`に規定されているページのことです。
初期状態のWordPressでは投稿者ごとに投稿者アーカイブが作成されます。そのため、WordPressのユーザー名が閲覧者にバレてしまい、大いなるセキュリティの穴となることがあります。

## 投稿者アーカイブを見る方法

WordPressサイトで、以下のようなURLにアクセスすると、対象ユーザーが作成した投稿の一覧ページが表示されます。

“`
http://example.com/author/ユーザー名/
“`

また、以下のように`?author=1`を付けてアクセ

元記事を表示

WordPress5.5で標準搭載されたXMLサイトマップ機能を無効化する方法

WordPress5.5からXMLサイトマップを出力する機能が標準で追加されました。
Google XML Sitemapsとか別のプラグインを使ってXMLサイトマップを出力している場合が多いと思います。
そういったすでに使っている機能が重複しないよう、標準のXMLサイトマップ機能を無効にする方法をまとめておきます。

## 追加されたXMLサイトマップ機能

はじめに、新たに標準搭載されたXMLサイトマップ機能についての説明です。
XMLサイトマップ機能はWordPress5.5から自動で有効になっていて、`wp-sitemap.xml`というファイル名でアクセスできます。
`$ドメイン/wp-sitemap.xml`というURLにアクセスすると、下記のようなサイトマップが表示されます。

![xmlサイトマップ-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017333/8a25d874-dd67-556a-6ef5-84e9e5872579.png)

> **補足事項**
> `wp-si

元記事を表示

【個人開発】教員向け授業計画作成サービスを作ってみた。

# はじめに
![teaching_plan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185943/ca1828d9-c3fc-75a4-95a4-e25738e5939c.png)

こんにちは、まーです。
【Twitter】

【今回作成したサービス】
https://teachingplan.msy-a.com/

今回は、以前Laravel+Vue.jsで作成した**授業計画(指導案)作成サービス**をご紹介したいと思います。

# 要件概要
### ○導入
日々多忙な教員にとって毎回の授業内容(指導案)を**スピーディー**に作成することはとても重要になります。

特に、教育実習生や教員になったばかりの先生は、授業の経験値がなく、毎時間授業の計画を考えることは大きな負担です。自分自身の教育実習に行った経験、教員の友人からのヒアリングから間違いないと思います。

授業計画を効率的に作成することは、**授業の質**に関わ

元記事を表示

【Laravel】PHPUnitの実行でDBを汚染しないためにできる簡単なこと

# 環境

OS: Windows 10
PHP: 8.1.2
Laravel Framework: 8.81.0
docker-compose: 1.29.2
PHPUnit: 9.5.10
MySQL: 8.0

`Laravel Sail`を使用して、Laravelプロジェクトを立ち上げています。
プロジェクトを立ち上げる部分は、[こちらのドキュメント](https://readouble.com/laravel/8.x/ja/installation.html#your-first-laravel-project)でご確認ください。

# `RefreshDatabase` DBの状態に影響されずテストする

`use RefreshDatabase;`をしてあげると、
__テストを実行する際に前後のDBの状態を考える必要がなくなります__

各テスト毎にDBをリフレッシュするため、まっさらな状態にしてくれるので、
DBの状態を確認するアサーションである

– `$this->assertDatabaseCount(…)

元記事を表示

Laravel8 Localhostリダイレクトエラーの解決方法が意外と簡単だった件について

### エラー内容
![スクリーンショット 2022-02-25 13.24.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525372/9c8a35cf-b861-6482-a8db-00647deb3aad.png)

https://reffect.co.jp/laravel/laravel-multi-authentication-understand#i-9

Laravelでマルチ認証を追加しようと思い、上記の記事を見ながら
作成していたところ
登録ボタンを押すと、リダイレクトエラーになってしまいました。

初めは、ルーティングやコントローラーなどでコーディングミスをしているのかと
色々調べて、試してみたのですが
一向に解決せず、正直絶望していました。

### 解決方法
ある時、エラー画面に出ている「Cookieを消去してみてください」という言葉に
従ってCookieを削除してみました。
(以前、同じようなエラーでCookieを消去しても変化がなかったので、試してませんでした)

元記事を表示

PHPUnitとGitHub ActionsとCoverallsを繋げて自動的に更新されるカバレッジのバッジを生成する

GitHubを見ているとREADMEにコードのカバレッジが書かれたバッジが貼ってあるのをよく見ますが、アレを実際に自分が作っているPHPのライブラリのレポジトリに貼ってみたのでその方法を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41743/ddd0bbb6-6840-6a8a-0a38-974dc621abdb.png)

今回はCoverallsというテストのカバレッジの結果を収集してくれるサービスを利用してバッジを作りました。

また、手作業でカバレッジのレポートを上げるのは効率が悪いので、GitHub Actionsを用いてコードが変更されると自動で上げるようにしました。

## 用意するもの
– GitHub Actionsの設定
– テストを実行してカバレッジレポートを送信するのに必要です
– Coverallsのアカウント
– あらかじめGitHubと連携しておいてください
– テストされるコードとテストコード

## Coverallsと

元記事を表示

CentOS8×PHP7.3「Failed to download metadata for repo ‘AppStream’」で怒られる時

## 現象
~~~
Error: Failed to download metadata for repo ‘AppStream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
~~~

## 原因
2021年末でCentOS8のサポートが切れたので、**ミラーサイトが停止している**ご様子でした。?

## 解決策
リポジトリのダウンロードの向き先を**アーカイブ**に変更します!
“`
$ sed -i ‘s/mirrorlist/#mirrorlist/g’ /etc/yum.repos.d/CentOS-*
$ sed -i ‘s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g’ /etc/yum.repos.d/CentOS-*
“`
## PHPのバージョンを変更する場合
CentOS8のデフォルトのPHPバージョンは**PHP7.2**になります。
**別バージョン**を使用したい場合は、remiリポジトリを使

元記事を表示

Laravelのeloquentでjoinしたときに同じカラム名でバグる可能性

aテーブルのid=1

bテーブルのid=2でa_id=1だとして、
これをjoinすると

“`php
$a = A::join(‘b’, ‘a.id’, ‘=’, ‘b.a_id’)->first();
“`

とする。

このとき

“`php
$a->id; // 2
“`

となる現象が起きました。
同じidというカラム名だからっぽいです。
このままだとidをキーにするのでリレーションで辿るデータなどがうまくとれないなど発生します。
知らないと結構やらかしそうな内容です。

回避は

“`php
$a = A::select(‘*’, ‘a.id as id’)->join(‘b’, ‘a.id’, ‘=’, ‘b.a_id’)->first();
“`

とかですね。
あとはこれを起こさないためのグローバルスコープなんかもissueに書かれてました。

“`php
trait OnlyMyColumnsTrait
{
public static function bootOnlyMyColumnsTrait()
{
stati

元記事を表示

【Laravel】laravel-adminの導入から初期設定まで

# 概要
laravel-adminを利用して、インストールから初期設定までを行います。
実務でLaravelを使う機会があればlaravel-adminを使用する場面があるかもしれないのでこの機会にまずは設定をしていきます。

※Laravelプロジェクトがインストール済みの前提で進めます。

# laravel-adminとは
Laravelで簡単に管理画面が構築できるライブラリです。

ドキュメントやデモサイトなど使用するために必要な資料が充実しており、難しいカスタムを行う必要がなければものすごく簡単に管理画面が構築できます。

[公式ドキュメント](https://www.ritolab.com/entry/208#:~:text=%E7%84%A1%E5%90%8D%E3%82%AF%E3%83%A9%E3%82%B9-,%E6%A6%82%E8%A6%81,%E6%91%A9%E6%93%A6%E3%82%92%E6%B8%9B%E3%82%89%E3%81%99%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82)

[demoサイト

元記事を表示

php xml request with curl

“`



Rahul kumar
10
5th
25

‘;

$url = “https://www.website.com/ws”;

$ch = curl_init();
if (!$ch) {
die(“Couldn’t initialize a cURL handle”);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt

元記事を表示

OTHERカテゴリの最新記事