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

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

【laravel】ErrorException file_put_contents(xxxxx): failed to open stream: No such file or directory

#エラーが発生するまでの過程
“`
php artisan serve
“`
↑のローカルのサーバーを立ち上げた状態で開発を進めていた。
1. 開発中にプロジェクトディレクトリの名前を変更したいと思いだす。
2. laravel → tutorial に名前を変更。
3. control+c でサーバーを閉じる。
4. もう一度立ち上げる。
5. タイトルのエラーが発生。

#原因
ディレクトリの名前を変えたことによって、アプリケーション内に設定されていた、パスが通らなくなった。

#解決法
アプリ名/bootstrap/cache/config.php 
にあるパスを再構築することで解決できる。
以下のコマンドで、アプリケーション内のパスが再構築される。

“`
php artisan config:cache
“`

元記事を表示

WSL2+docker+PHPのWindows開発環境構築(2) docker編

本ページに直接来た方は[WSL2+docker+PHPのWindows開発環境構築(1) WSL2編]から読んでね。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪ ---- ------------------- ↓ 余談はここから ↓------------------- [Laradock]:(http://laradock.io) [WSL2+docker+PHPのWindows開発環境構築(1) WSL2編]:(https://qiita.com/dozo/items/9d9e958d4acefffb3fb8) [WSL2+docker+PHPのWindows開発環境構築(2) docker編]:https://qiita.com/dozo/items/17d0ebfb05bb4446caed [WSL2+docker+PHPのWindows開発環境構築(3) PHPStorm編]:() 関連記事: * [Bash on Ubuntu on Windowsを使う(1)](https://qiita.com/dozo/items/07ae85ab3937d2ed67

元記事を表示

php に xdebug を入れて phpstorm でデバッグする

## php に xdebug を入れる

“`
php -i | grep xdebug
php –version | grep xdebug
“`
などにより php に xdebug が入っていないことを確認します。

“`
pecl install xdebug
“`

により xdebug をインストールします。

自分の環境では初めはインストールに失敗し、

PHPのインストール : PHP


を参考にして解決しました。

インストールに成功すると

“`
php -i | grep xdebug
“`
などで xdebug の行が出てくるかと思います。

次に php.ini で xdebug のパラメータを設定します。
以下のコマンドで php.ini の場所がわかります。

“`
php -i | grep php.ini
“`

“`php.ini
xdebug.remote_enable = 1
“`
など、環境に合わせて追記していきます。

サーバーを起動したま

元記事を表示

Laravel Commandの実行ログをパラメータつきで出力させる

# 目的
Laravel Commandの開始時と終了時に実行コマンドのログを自動で出力するようにしたい。
パラメータ指定がある場合は合わせて出力させたい。

# バージョン
Laravel 5.7

# 実装
Laravel EventListnerを使って実装を行います。
## イベント/リスナ登録
`EventServiceProvider`の`$listen`に以下のようにイベントとリスナを登録します。
Commandの開始と終了のイベントは既に定義されているので、それに対応するリスナを自分で定義します。

“`php
[
CommandStartLogger::class
],
CommandFinished::class => [

元記事を表示

Laravel シンボリックリンクで少しハマった話

##はじめに
今回はアップロードした画像をHomesteadで表示する時にハマった話です。
画像アップロード時のディレクトリ指定&リネームの仕方含めて備忘録という形で書いていきます。画像のアップロード方法自体の方法はしません。

参考:https://readouble.com/laravel/6.x/ja/filesystem.html

###環境
“`
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G2022

ホスティングサービス: GitHub
通信プロトコル: SSH通信
“`

***
##1.画像アップロード時のディレクトリ指定&リネーム
storeAsメソッドを使います。
###storeAsメソッドの使い方

“`
storeAs(第一引数,第二引数);
#第一引数はディレクトリを指定します。通常は’public’を指定することで、
/storage/app/public/にファイルが保存されるようになります。
#第二引数はファイル名を指定します。

“`
###実装
`sto

元記事を表示

codeigniter3 YYYY/MM/DD形式で日付を取得する

codeigniter3でcreate_dateとupdate_dateを**YYYY/MM/DD**の形式で取得する

“`ruby:qiita.rb
$this->db->select(
‘*,
DATE_FORMAT(create_date,”%Y/%m/%d”) AS create_date,
DATE_FORMAT(update_date,”%Y/%m/%d”) AS update_date,’
);
“`

元記事を表示

【CakePHP3】【PHPUnit】コントローラーのテストでファイルをPOSTする方法

半日つぶしたので備忘録として。

POSTデータと`$_FILES`にそれぞれ画像の情報を入れれば正常に送れる。
(おそらく実践では`csrf_token`が必要になるはず)

“`php
public function testIndex()
{
$fileKey = ‘image_key’;
$fileInfo = [
‘name’ => ‘image_name.jpg’,
‘tmp_name’ => ‘path/to/tmp_image_name.jpg’,
‘type’ => ‘%拡張子と同じ形式%’,
‘error’ => UPLOAD_ERR_OK,
‘size’ => ‘%ファイルサイズ%’,
]
$_FILES = [
$fileKey => $fileInfo,
];
$this->post(‘index’, [$fileKey => $fileInfo]);
}
“`

元記事を表示

array_key_exists関数で配列のキーの有無を調べる

配列の存在を確認することがあったので、備忘録として残します。

使い方はこんなかんじ

“`
ray_key_exists ( $キー名 , $配列名 )
“`

[参考](https://www.sejuku.net/blog/22538)

元記事を表示

SymfonyとVue RouterでTODOリストをつくる

Laravelで[Vue Router](https://router.vuejs.org/ja/)を使って、SPAを作るというのを見かけてSymfonyでもできないかと思いやってみました。

## Symfony側実装
### Symfonyインストール
Symfonyの空プロジェクトを作成します。今回はWebアプリケーションなので、必要なパッケージも合わせてインストールしていきます。

“`sh
cd /path/to/
composer create-project symfony/skeleton todo
cd todo
composer require maker
composer require api
composer require webpack-encore-bundle
composer require –dev symfony/profiler-pack # デバッグツールバーが必要な場合
“`

makerはSymfony Consoleでのクラス生成ツールです。apiは[API Platform](https://api-platform.com/

元記事を表示

【初心者】PHPでカレンダー出力のプログラミング

どうも、UT([@ut_1029](https://twitter.com/ut_1029))です。ブログ([UTの日常](https://blog.mm-kun.com/category/system/))の紹介です。

PHPでカレンダーをプログラミングしたサンプルコードを紹介します。

## PHPでカレンダーのプログラミング

“`php
‘日’,
1=>’月’,
2=>’火’,
3=>’水’,
4=>’木’,
5=>’金’,
6=>’土’,
];
$today = time();
$start = date(‘Ym01’, $today);
$end = date(‘Ymt’, $today);

$days = [];
$len = 0;
for ($day=$start; $day<=$end; $day++) { $w = date('w', strtotime($day)); if ($w == 0) { $len++; }

元記事を表示

Dockerを使って1コマンドで起動できるLaravel開発環境を構築する

DockerでLaravelの開発環境を構築します。
**プロジェクトをcloneしたらコマンド1つで開発環境が構築されることを目指します。**

## 構築したい開発環境
構築する環境は以下の通りです。

– ホスト
– Docker 19.03.5(インストール済み)
– コンテナ
– PHP 7.3
– Apache 2.4
– MySQL 5.7.29
– PHPMyAdmin(おまけ)

### ディレクトリ構成
最終的なディレクトリ構成は以下の通りです。Laravelアプリケーションはmyappに保存します。

“`
project
├── docker
│   ├── docker-compose.yml
│   └── php-apache
│   ├── apache2.conf
│   └── php.ini
│   └── Dockerfile
└── myapp
   └── startup.sh
“`
> startup.shは.envの作成など、Laravelプロジェクト初期化に必要な

元記事を表示

VSCode用のスニペットを作成するWebサービスをつくってみました

それがこちら
(スマホ表示非対応)

HTMLとかPHPを勉強したので、せっかくなら自分の使いたいWebサービスをつくってみようということでつくってみました。…サービスというほどのものでもありませんでしたね。
恐らくバグはありますが、自分の登録したかったスニペットは一通り問題なく作成できたのでひとまず公開させていただきます。(サーバにアップロードする練習も兼ねて)

ちなみに…同じ目的であれば非常に便利な拡張機能やWebサービスがすでにあります。

VSCodeだけでなくAtomやSublimeText用のスニペットも作成できるサイトsnippet generator

Mac XAMPPを用いてPHPのローカル開発環境を整える

# 目的

– PHP7.4のローカル開発環境の整え方をまとめる
– 環境構築を優先しその他の作業は誰でも理解できるような方法で進める
– ApacheとMySQLを使用して構築する

# 余談

– MacはXAMPPではなくMAMPを使うらしい

# 実施方法概要

1. XAMPPのインストール
1. ApacheとMySQLの起動
1. テスト

# 実施方法詳細

1. XAMPPのインストール
1. 下記サイトにアクセスする。
– [https://www.apachefriends.org/download.html](https://www.apachefriends.org/download.html)
1. XAMPP for OS Xの「7.4.2 / PHP 7.4.2」の「Download(64bit)」をクリックする。
![スクリーンショット 2020-02-28 22.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

Laravelクエリビルダmemo②(サブクエリのJOIN)

laravelのクエリビルダに関してのメモです。

####やりたいこと
サブクエリをJOINしたい。

####joinSub()
公式リファレンス
https://readouble.com/laravel/5.8/ja/queries.html?header=%25E3%2582%25B5%25E3%2583%2596%25E3%2582%25AF%25E3%2582%25A8%25E3%2583%25AA%25E3%2581%25AEJOIN

joinSub()の引数には、サブクエリ、テーブルのエイリアス、クロージャを定義します。
クロージャ内には結びつけるカラムの条件式を定義します。

“`php
//サブクエリ
$rating_avgs = Review::selectRaw(‘movie_id, AVG(rating) as rating_avg’)->groupBy(‘movie_id’)->get();

$movie = Movie::joinSub($rating_avgs, ‘rating_avg’, function($join){

元記事を表示

localStorageの有効期限をなんとか設定して環境毎に変更する

#やりたかったこと
localStorageにはSessionやCookieのように有効期限を定めることができないけど、有効期限を決めて一定時間経過したらデータを削除したい。
具体的には本番環境では1日間データを保持しておく仕様だけど、開発環境では動作確認で1日も待てないので10分に設定したい。

#方法
###JavaScript
データを保存した日時と現在日時の差と、有効期限を比較して差が有効期限を過ぎていたら削除する。

“`js
const jsonData = JSON.parse(localStorage.getItem(“key”));

if (jsonData !== undefined && jsonData.timestamp) {
let dataTime = jsonData.timestamp;
let nowTime = new Date().getTime();
let diffTime = (nowTime-dataTime) / 1000;
let timeLimit = ◯◯◯◯◯◯;

元記事を表示

あの PDO::PARAM_INT の挙動が変わった!

あの何もしないことで有名な PDO::PARAM_INT の仕様がいつのまにか変わっていました。
が、解説記事が見当たらなかったので、検証とともに記事にしときます。
**多分、アップグレードガイドにも載ってない秘密の情報ですw[^1]**

対象バージョン: php7.2 以降

# 何もしない PDO::PARAM_INT とは?
PDO 使用している人には結構有名な話ですが、こいつ、ほとんど働きませんでしたw
参考記事:[PDOでの数値列の扱いにはワナがいっぱい(2)](http://blog.a-way-out.net/blog/2013/12/18/pdo-prepare-statement-numeric-literal-part2/)

> PDO::PARAM_INTはboolをintに変換(他は何もしない)

つまり、int へキャストされることを期待して
`$stmt->bindValue(‘:test’, 1.1, PDO::PARAM_INT);`
なんてぶっこんでも、普通に`1.1`が投入されます:sweat:
サボりすぎだろw

#何が変わったのか?
プリペ

元記事を表示

Laravelクエリビルダmemo➀(集計関数)

laravelのクエリビルダの集計に関するメモです。

####やりたいこと
グループ化してから平均をとりたい。

####問題点
はじめはクエリビルダの集計関数のavg()で試みたのですがgraupBy()と併用できないのです。

####直接クエリを書く
そこで集計のところをサブクエリとして、selectRaw()で直接クエリを書いてから、graupBy()でグループ化します。

公式リファレンス
https://readouble.com/laravel/5.8/ja/queries.html?header=selectRaw

“`php

$rating_avgs = Review::selectRaw(‘movie_id, AVG(rating) as rating_avg’)->groupBy(‘movie_id’)->get();
“`
無事取得できました。

“`
=> Illuminate\Database\Eloquent\Collection {#3141
all: [
App\Models\Review {#3132

元記事を表示

phpMyAdminにPHPのバージョンが古いと怒られた時の対処法

#状況
[AWS公式のチュートリアル](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html#test-lamp-server-alami)に沿ってEC2インスタンス上にLAMPを構築しようとしたらphpMyAdminアクセス時に以下のエラーが出てつまずいた。

`PHP 7.1.3+ is required. Currently using PHP 5.6.`

環境は以下の通りです。
AMI: Amazon Linux AMI (fedora)
Version: 2018.03

チュートリアルの手順に沿って以下のパッケージをインストールしました。

“`
$ sudo yum update -y
$ sudo yum install -y httpd24 php72 mysql57-server php72-mysqlnd
“`
– Apache HTTP サーバー 2.4
– PHP 7.2
– MySQL 5.7
– MySQL Native Driver(拡張モジュールライブラリ) 7

元記事を表示

Apache + PHPでSSLに対応したDockerfileを作ってみた

# はじめに
急遽、Docker及びlinuxを勉強してみようと思い立った僕。
勉強にはアウトプットが大事!ということで何かしらの開発環境をDockerfileで作ってみようと思いました。
そういえば、業務にてPHPのちょっとした案件がアリそうという話があった事を思い出し、じゃあPHPでSSL通信できる環境を勉強がてら作ってみるかなぁとなった次第。

できた物はこちら:[GitHub](https://github.com/h-ueno2/docker-php-ssl)

※環境周りについてあまり詳しくなく勉強目的で作ったため、実運用上よろしくない点が多々あるかと思います。もし参考にされる方がおりましたらご注意を。

# 目指す環境
顧客先のレンタルサーバーの環境に合わせて以下の環境作成を目指しました。

+ OS:CentOS6
+ PHP:5.3

# とりあえずSSLなしのPHP環境を作ってみる

まずはCentOSをベースにPHPが動く環境を作ってみました。

1. `centos:centos6`のイメージをベースにコンテナを作成。
2. コンテナに入り、調べながら環境作成。

元記事を表示

array shapes記法(Object-like arrays)と旧PSR-5記法で型をつける

この数年でPHPでの開発でもCI(継続的インテグレーション)はかなり活発に行われるようになり、PHPUnitなどのテスティングフレームワークのほか、PHPStanやPhanなどのツールによる静的解析も浸透しつつあります。

関数/メソッドの引数と返り値、そしてオブジェクトのプロパティは比較的に型がつけやすいところですが、現状で無法地帯な箇所があります。そうです、配列の内部構造です。実際のところ、PHPDocに `@param array` や `@return array` と書くことは `mixed` と書くのとあまり大きな違いはありません。

ご存じの通り、PHPの配列は、[動的配列(可変長配列)](https://ja.wikipedia.org/wiki/%E9%85%8D%E5%88%97#%E5%8B%95%E7%9A%84%E9%85%8D%E5%88%97)と[連想配列(ハッシュテーブル、マップ)](https://ja.wikipedia.org/wiki/%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97)の特徴を併せ持ったデータ構造であり、配

元記事を表示

OTHERカテゴリの最新記事