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

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

そろそろlockファイルを理解するための最初のページ【composer.lock/package-lock.json】

# .lockファイルって邪魔だよね。って思っている人いたら校舎裏来てください。優しく解説します。

こんにちは! @ykhirao です。最近ジョインさせていただいた案件で `composer.lock` のバージョンが本番が一番新しくて、ローカルが一番古い素敵な状況を発見しました :relaxed:

本番環境でSSHして `composer update` かけたんだなあーー。そっかーーー、バグ起きたらどないすんねん、。。。。。。

というのが私の感想で、実際にnpmパッケージを使ってバグを再現しながら
ゆっくり解説していこうと思います。どうぞ最後までよろしくお願いします。!!!

> このQiitaを呼んで得ること

– あーー、ほんとだ。バグが入る可能性があるんだ!
– lockファイルはちゃんとコミットするね!

というお気持ちになれると思います。

> このQiitaで解説しないこと

– 詳しい依存関係の解消法
– packageの公開の仕方
– むずかしいはなし

です!

## さて時系列を見てみよう!

こんな事故が起こる可能性がありますよって話をします。

時系

元記事を表示

PHPでログイン機能を実装する

#PHPでログイン機能を実装する

やっとこさ機能を実装できたので、概要をまとめてみる。
今回作成したのは、emailとpasswordだけの機能。
emailで検索して、フォームに入力したpasswordとDBにハッシュ化されて保存されたpasswordと比較(password_verify)する。

つまづいて長引いた内容について。

##パスワードのhash化について
そもそもパスワードのhash化ってなんじゃいということについて。

パスワードをそのままDBに保存すると危険である。
ということで、password_hashを使って、暗号化する必要がある。

ここで大事なのは、
1.password_hashは不可逆である(元の形に戻せない)

2.パスワードのハッシュ化の仕方
pasword_hash(暗号化したい文字列, PASSWORD_DEFAULT)

例えばフォームにpasswordというnameで入力したパスワードをハッシュ化したい場合は、
pasword_hash($_POST[‘password’], PASSWORD_DEFAULT)
こんな感じ。

##

元記事を表示

VagrantでSymfony 5 の環境を作成してみた(ubuntu 20.04、nginx、php 7.4、mysql 8)

自分で開発環境を作ってみたいと思ったので、ググりながら勉強しながら作成した内容です。間違いなどありましたら教えていただけるとありがたいです。

また、公式によりますとVagrantでsymfonyの環境を作成するには、laravelのhomesteadの環境で作成するのが簡単なようです
[Using Symfony with Homestead/Vagrant (Symfony Docs)](https://symfony.com/doc/current/setup/homestead.html)

参考

– [Ubuntu 18.04にNginx、PHP 7.4、MySQL 5.7をインストールする – Qiita](https://qiita.com/kshiva1126/items/676d939584e0506bb501)
– [vagrantを使用したlaravelの環境構築](https://taroosg.io/laravel-in-vagrant)
– [How To Install PHP 7.4 on Ubuntu 20.04/18.04/16.04](

元記事を表示

Laravel 最小限の記載でルーティングとコントローラの記載が正しいか確認する

# 目的

– 最小限のコードでルーティングとコントローラの記載が正しいことを確認するコードを紹介する。

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriw

元記事を表示

フォームの書き方いろいろ

#前提条件

– laravelで書いています。
– blade.phpの書き方

#一般的なフォーム
フォームの中に、サーバーに送りたいデータ(inputタグ)があって、それをbuttonタグでサブミットしている。

“`php

@csrf



“`

#ボタンを外出ししたもの。

formタグをblade.phpの下の方にまとめておいて、どのフォームとどのボタンが連携しているのかを

元記事を表示

単一カラム取得

## array_column() 

こちらの関数が便利そうなので使ってみる

[PHPマニュアル(array_column)](https://www.php.net/manual/ja/function.array-column)

多重配列用意

“`php
emperor = [
[
‘id’ => 1,
‘name’ => ‘シャンクス’,
‘nickname’ => ‘赤髪’,
‘wanted’ => 4048900000
],
[
‘id’ => 2,
‘name’ => ‘エドワード・ニューゲート’,
‘nickname’ => ‘白髭’,
‘wanted’ => 5046000000
],
[
‘id’ => 3,
‘name’ => ‘カイドウ’,
‘nickname’ => ‘百獣’,
‘wanted’ => 4

元記事を表示

CakePHP3.8で登録画面→確認画面→完了画面を実装する

# 今回のお題

表題の通りです。

久しぶりにCakePHP3を使ってコーディングをする機会がありました。
既にCakePHP4も出ていますが、CakePHP3.8からはそんなに変化がないとのことなので
Cake4にもすんなり入れると良いなあ、などと勝手に考えており。。

需要があるかはさておき、備忘録として残しておきます。

## 環境
PHP: 5.6.40
CakePHP: 3.8
OS: CentOS7.2
DB: MySQL5.7.21

全体的にレガシーな環境。。
(なのでCakePHP3を採用したという経緯)

## テーブル構成

ありきたりで恐縮ですが、ユーザーテーブルへの登録です。
年齢は実年齢ではなく、10代・20代のようなレンジでの管理となります。

“`sql
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` tinyint(4) NOT NULL,
`gend

元記事を表示

【PHP】フレームワーク「Laravel」での開発環境構築(Mac版)

#はじめに
今回、フレームワーク「Laravel」を用いてのアプリ開発を行うことになりました。

前提として、私は「Laravel」を使用することが初めてのため、今回記載する内容より最適な手順は他にもあるかもしれません。

ただ、「まずは何から始めれば、、」という初学者の方には得るものがあるかもしれないので、参考にしていただければ幸いです。

#開発環境
・MacOS:10.14.6

#目標
PHP7.3、Laravel6をインストール

#概要(簡単な流れとコマンド)
①Homebrewのインストール

“`ターミナル
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`
②PHPのインストール

“`ターミナル
brew install php@7.3
“`
③Composerのインストール

“`ターミナル
$ brew install composer
“`
④Laravelのインストール

“`ターミナル
$ co

元記事を表示

Guzzleでリクエスト、レスポンスを取得する方法

公式のドキュメントより一部抜粋。完全に自分のメモ。
ログを残すときとかに便利。

以下のようなありがちなリクエストを想定。

“`php
$response = $client->request(‘PUT’, ‘/put’, [‘json’ => [‘foo’ => ‘bar’]]);
“`

#リクエスト・レスポンスボディを取得する方法
`getbody() `を使う。ボディがStringでキャストされる。
このとき、リクエストを取得するには`#request->getbody()`してあげる。

“`php
use GuzzleHttp\Middleware;

// Create a middleware that echoes parts of the request.
$tapMiddleware = Middleware::tap(function ($request) {
echo $request->getHeaderLine(‘Content-Type’);
// application/json
echo $request->getB

元記事を表示

PHP+imagickでMetashapeからエクスポートしたマスクを画像に重ねる

Agisoft社のフォトグラメトリソフトMetashapeのマスク処理が重いので、マスクををExportして、元画像に重ねた後、Metashapeに戻すことを考えました。
Metashapeに限らず、普通のマスク(切り抜き)処理にも使えるかも。

##PHP、ImageMagik、imagickのインストール
OSはWindows10 Home(64bit)
インストールというか、ファイルをダウンロードして解凍するだけ。

#####PHP
https://windows.php.net/download/ から
php-7.3.20-nts-Win32-VC15-x64.zip をダウンロードして適当な場所に解凍。

Webサーバーで使うには、VC、ts(Thread Safe)/nts(Non Thread Safe)をサーバーに合わせる必要があり、x64ではなくx86を使わなければいけない場合もあるようですが、今回はコマンドラインでしか使わないので、適当に選択しました。
バージョン(7.3.20)は、後述するimagickに対応しているものの中で最新版を選択しました。

元記事を表示

HerokuでGitHubの外部モジュール使おうとしたらハマったので備忘録(composer,heroku)

これが人生初めてのqiitaです。よろしくお願いします。
#外部モジュールが動かない…
herokuにcomposer.jsonやcomposer.lockも含めたソースファイルをpushしたのですが…
いざ、アクセスして動かしてみると、
Uncaught Error: Class…………

とでて、動きませんでした。どうやら外部モジュールクラスを探せないといった感じです…

###ローカルでは動いてた
windowsにxampを入れて動かしていたのですが、そのローカル環境では動いていました。
もちろん、windowsにcomposerも導入し、composer.lockも作成していました。

#確認
**composer.jsonの記述はどうなってた?**

こうでした

“`json:composer.json
{
“require”: {
“php”: “^7.3.14”,
“<使いたいモジュールのpath>“: “dev-master”,
}
}
“`

#原因
composer updateの際に

元記事を表示

短縮URLサービスがどんどん終了しているので、自分でOSSライブラリ「URL Shorter」開発してみた

# はじめに

昨今、「短縮URL」サービスがどんどん終了しています。
私が一番使っていたサービスはGoogleの短縮URLだったのですが、いつまにか終了してしまっていました。

短縮URLサービスはめちゃくちゃ便利なんですが、いかんせん不正や詐欺に使われてしまうというデメリットがあります。
上記で書いた残り1つについても、いつ終わってしまうか分かりません。

そこで、「**それならば自分用の短縮URLサービスを作ろう!**」と思い立ち、開発し始めました。
かつ、どうせ作るなら、自分だけのものではなく、OSSライブラリとして開発することに決めました。
Laravel製なので、いま開発されているLaravelソリューションがあれば、そのパッケージに組み込むことで、短縮URL生成をかんたんに利用することが可能です。
GitHubにて、MITライセンスで公開済みです。
https://github.com/hirossyi73/url-shorter

せっかくの機会ですし、Qiitaでもご紹介することにしました。

# 短縮URL一例
– Amazon ポケモン剣盾
https://s.h

元記事を表示

Laravelでキューを使う

# キュー
実行したい処理(ジョブ)をjobsテーブル(キュー)に入れて置き、後で実行するものです

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

[Laravelでデータベースを扱う準備をする](https://qiita.com/toontoon/items/740b9575d2a323e93c0d)
[Laravelでテーブル作成](https://qiita.com/toontoon/items/2948a722a0ae7da2fb33)
[Laravelで初期データ投入](https://qiita.com/toontoon/items/f081f7f9f1667233480a)
本記事は上記の内容を理解している前提で書かれています
本記事は上記

元記事を表示

【Laravel】バリデーションの作成

バリデーションを簡単に安全にかけるための方法メモ。

#フォームリクエスト
バリデーション専用のフォルダを作って処理をさせる。
書きコマンドを打ってrequestフォルダとファイルを作成。

“`
php artisan make:request StoreContactForm
“`
ファイル名は任意。

##Controller
controller内にフォルダとファイルが出来てるはずなので確認。

“`Controller/Requests/StoreContactForm.php
public function authorize()
{
return true; //falseからtrueに変更
}
.
.
.

public function rules()
{
return [
//ここにバリデーションのルールを書く
‘name’ => ‘required|string|max:20’,
‘title’ => ‘required|stri

元記事を表示

あるあるなWebアプリの開発環境(PHP、Apache、MySQL)をDockerで構築した話

自社サービスのメンテナをしています。

## 悩み

* PHP、Apache、MySQLのバージョン上げなアカン
* でも、旧バージョンもメンテし続けなアカン
* ローカルPCでの開発環境がゴチャついてきた
* 顧客ごとにカスタマイズされてて、顧客環境ごとにソース自体が微妙に違ってる・・・
* できたらリモートサーバなしで、ローカルPCだけで完結させたい

## Webサーバのディレクトリ構造はこんな感じ

“`
/var/apps/
|– abc # 株式会社abcさま用アプリ
| |– abc.php
| |– abc.png
| `– ・・・
|– def # 株式会社defさま用アプリ
| |– def.php
| |– def.png
| `– ・・・
`– ghi # 株式会社ghiさま用アプリ
|– ghi.php
|– ghi.png
`– ・・・
“`

### Dockerでなんとかしたいのですが・・・
* アプリのバージョンで、PHPやMySQLのバージョンが異なる

元記事を表示

MAMPでDB接続にハマったときの話

最近PHPの学習始めました。
学習言語の雑食感が半端ないですが、必要に駆られてやっていることで、挫折したとかではありません。

動画でPHPを学習していたときのMAMP環境でDB接続するときにMySQLに接続できなかったときの話です。
教材では

“`php
getMessage();
}
?>
“`
とするように説明されていたのですが、MySQL SQLSTATE[HY000] [1049] Unknown database ‘mydb’
とのこと。いや、あるし。

で、色々ググってたらhostにポート番号いれて…というのを見つけたので、
host=127.0.0.1:3306

ん?そもそもMAMP環境でMySQLのポートは3306でいいのか?と思いながら指定するも、案の定変わらず。
とりあえず再起動するか、と思

元記事を表示

PHPのdate()やmktime()をjavascriptでも使いたい

同様の処理を行うライブラリとしてはdayjsやMoment.jsがメジャーかと思いますが、個人的にはあれほど多機能なものは要らなかったので作成してみました。

`toLocaleDateString()`や`toLocaleTimeString()`等でも色々な表現はできますが、個人的にはやっぱり使い慣れたフォーマット文字列での指定が楽です。

基本的にPHPの`date()`、`mktime()`とほぼ同様に扱えるかと思いますが、以下の既知の相違があります。

####mktime()####
第7引数 **is_dst** はありません。
第6引数 **year** にマイナスの値を渡した場合の結果がPHPの`mktime()`とは異なります。

####date()####
フォーマット文字は個人的に必須のもの(YmdHis)といくつかの簡単そうなもののみの実装で、PHPで使えるものすべてには対応していません。
PHPの`date()`ではフォーマット文字を`\`でエスケープすることで置換せずそのまま表示させることができますが、本スクリプトでは未対応です。

###参考###
[

元記事を表示

Mac+DockerでphpStormを使いWordPressテーマを一から作る(1/3)

先日、2009年から愛用していた懐かしの白いMacBook(Early 2009)を卒業して、MacBook Air2020(1,1GHz i5クアッドコア+SSD 512GB+16GB RAM)に乗り換えました。

先代はメモリを8GBまで増設して内臓HDDもSSDに換装してなんとか延命をしており、普段使用するアプリケーション(Photoshop CCの最新版とかphpStormとかableton Liveとか)はほぼストレス無く使えていました。

現在はうつ病の療養中で無職のためこれまでやってきてなかった事をしたいと思い、今更ながらSassなどこれまで業務の中で触れなかった技術を学ぼうと思い、まずはVirtualBox+CentOSで環境を作ってみたのですが、公式リポジトリのCentOSのバージョンが7系でphpも5.4系とかなり古いものでした。

そこでDockerを使ってみようとしたところ、旧マシンではOSのアップデートがSierra(10.12)で止まってしまっており現行バージョンのDocker Desktopが使えなかったので、例の一人10万円給付金を使ったMacBook

元記事を表示

【Laravel】保存済みデータを編集/保存/削除する

ほぼほぼ自分用メモです。

#編集
編集の画面と処理。
##Route

“`web.php
Route::group(
[‘prefix’ => ‘contacts’, ‘middleware’ => ‘auth’],
function () {
Route::get(‘index’, ‘ContactFormController@index’)->name(‘contacts.index’);
Route::get(‘create’, ‘ContactFormController@create’)->name(‘contacts.create’);
Route::post(‘store’, ‘ContactFormController@store’)->name(‘contacts.store’);
Route::get(‘show/{id}’, ‘ContactFormController@show’)->name(‘contacts.show’);
Route::get(‘edit

元記事を表示

特定のvalueを持つkeyだけ出力

引き続きこちらのデータを使う
[PHPの連想配列を使ってポケモン図鑑を作ってみた](https://qiita.com/tabiojisann/items/e4005afddc2536b20af7)

“`php
$pokemon = [
‘フシギダネ’ => ‘くさ’,
‘フシギソウ’ => ‘くさ’,
‘フシギバナ’ => ‘くさ’,
‘ヒトカゲ’ => ‘ほのお’,
‘リザード’ => ‘ほのお’,
‘リザードン’ => ‘ほのお’,
‘ゼニガメ’ => ‘みず’,
‘カメール’ => ‘みず’,
‘カメックス’ => ‘みず’,
‘キャタピー’ => ‘むし’,
‘トランセル’ => ‘むし’,
‘バタフリー’ => ‘むし’,
‘ビードル’ => ‘むし’,
‘コクーン’ => ‘むし’,
‘スピアー’ => ‘むし’,
‘ポッポ’ => ‘とり’,
‘ピジョン’ => ‘とり’,
‘ピジョット’ => ‘とり’,
‘コラッタ’ =>

元記事を表示

OTHERカテゴリの最新記事