PHP関連のことを調べてみた2019年12月27日

PHP関連のことを調べてみた2019年12月27日

Psyshによる対話型デバッグ時の使い方

一旦個人的にメモ、後ほどちゃんとした記事形式に修正予定

####ブレークポイントの設定
eval(\Psy\sh());

####対話を終了してプログラム続行
exit

####プログラムの実行ごと中止
Ctrl + C

元記事を表示

【PHP】Basic認証の実装

#概要
通常は.htaccessで実装を行うが、ここではPHPのサンプルを記述する。

#コード

“`php5:sample.php

“`

元記事を表示

?【PHP】mkdirでディレクトリ作成に失敗したのは再帰的に作成してないから

## やりたいこと

mkdirでディレクトリを新規作成したいのにできない
その上にあるディレクトリ(/test/)のパーミッションも問題なし

“`hoge.php
// /test/は作成済み

// これは作成できる
$saveDir = /test/hoge/;
// なぜか作成できない!?
$saveDir = /test/hoge/fuga;

// 存在確認しディレクトリ作成
if (!file_exists($saveDir)) {
if (mkdir($saveDir, 0777)) {
chmod($saveDir, 0777);
}
}
“`

## やったこと

第三引数がtrueでディレクトリ再帰的作成であった
単純すぎることにつまってた…

“`hoge.php
mkdir($saveDir, 0777, true)
“`

元記事を表示

LibreOfficeのconvertをスレッドセーフ化する

#駄文
全国の“`libreoffice –nologo –headless –convert-to pdf“`をサーバサイドで自動実行している皆さんこんにちは。sofficeでも良いが。
↑を単一ユーザが複数同時実行すると処理に失敗するのはなかなかの罠だと思う。
#概要
結論から言うと、“`-env:UserInstallation=file://*ユーザプロファイルディレクトリのパス*“`というオプションを追加すれば動くようになる。
例文はこんな感じ。
% libreoffice –nologo –headless –nofirststartwizard -env:UserInstallation=file:///home/myuser/libreoffice/4/user2 –convert-to pdf src.odt

プロファイルの実体も追加しておく。
~/.config
  →libreoffice
   →4
    →user
    →user2
    →user3
    …
デフォルトがuserなので複製してやれば良い。
#実装
これで複

元記事を表示

laravelのセットアップ(Windows)

# はじめに
laravelとは、Webに特化したPHPフレームワーク。セキュリティ対策(CSRF対策など)もこれでできる。MVCアーキテクチャを採用している。

公式ページ:http://laravel.jp/

# セットアップの流れ
1. XAMPPのインストール
2. Composerのインストール
3. Composer経由でLaravelのインストール

# XAMPPのインストール
https://www.apachefriends.org/jp/index.html から、XAMPPをインストールする。

# Composerのインストール
https://getcomposer.org/doc/00-intro.md#installation-windows にアクセスし、Composer-Setup.exeをダウンロードする。Composer-Setup.exeを開き、インストールを始める。

Composerがちゃんとインストールされてるかどうか確認する。powershellを開いて、下のコマンドを打つ。

“`
$ composer -v
“`

こんな感じ

元記事を表示

laravelのセットアップ(Mac)

# はじめに
laravelとは、Webに特化したPHPフレームワーク。セキュリティ対策(CSRF対策など)もこれでできる。MVCアーキテクチャを採用している。

公式ページ:http://laravel.jp/

# セットアップの流れ
1. MAMPのインストール
2. Composerのインストール
3. Composer経由でLaravelのインストール

# MAMPのインストール
https://www.mamp.info/en/downloads/ から、MAMPをインストールする。

# Composerのインストール
https://getcomposer.org/download/ にアクセスして、Manual Downloadから最新版をダウンロードする。

スクリーンショット 2019-12-27 5.53.35.pngherokuにwordpressを入れてPHPと合わせて最新バージョンで環境構築して日本語化

#はじめに
普通に楽してherokuにWordpressを入れると参考記事の通りにインストールしても、

– バージョンが古かったり
– 日本語化できなかったり
– PHPのバージョンが古くて使いたいWordpressテーマをインストールできなかったり
– 画像をAWS S3に保存できなかったり(エラー出まくり)

したので、Localに環境構築してからheroku環境構築する手順の備忘録メモ

#Localに環境構築
基本的に参考記事の通りにやれば良いのだが、実際に単純コピペでは動かないので、実施手順を細かく書いておく。`heroku` アカウントは持ってる前提。アカウント取得手順は割愛。

##1. `PhilippHeuer/wordpress-heroku` Local deployment

###(1) `composer` をインストール
まだインストールしてなければここで入れておく。

“`ruby:ターミナル
$ brew install composer
“`

###(2) `wordpress-heroku` をクローン
`wordpress-heroku`

元記事を表示

【PHP】session_start()について

php初心者の身ですが、Qiitaに記事を書く練習も兼ねて、最近の学習内容を書いてみることにします。

# session_start()について

session_start()と記述することで、セッションを使用できるようになります。
言い換えると、これを記述し忘れるとセッションは使用できません。

“`
session_start();
“`

Chromeの開発者ツールで見てみると、「PHPSESSID」という名前のクッキーとして存在しているのが分かります。

![20191226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552293/6983464b-f78b-f6b2-f2ce-d2e0ef03a526.png)

この通り、「PHPSESSID」というのがデフォルトのセッション名(クッキー名)です。
php.iniを見ると、session.nameというパラメータに「PHPSESSID」が設定されているのが確認できます。
デフォルト名を変更したい場合はここを変えるわけですね。

元記事を表示

DIコンテナのススメ

# 概要

DIやDIコンテナについて、自分が調べたことをまとめます。

# DIとは何か

依存性の注入(Dependency injection)を略してDIと言います。
依存性とは具体的にはクラスのことです。
以下の例を見てみます。

“`php
class ProductController {
public function mainAction() {
$model = new ProductModel();
$product = $model->getById(1);
}
}
class ProductModel {
public function getById($id) {
$db = new MySqlConnect();
$query = $db->query(‘select * from product where id = ?’, $id);
$product = $query->getResult();
// ここに様々な処理があるとする
return $product;
}
}

元記事を表示

php 連続 文字 一つに

# やりたいこと

ABBCCCAAのような文字列をABCAにしたい

# これでおk

PHP

“`php
>>> preg_replace(‘/(.)\1+/’, ‘\1’, ‘ABBCCCAA’)
=> “ABCA”
“`

JS

“`javascript
‘ABBCCCAA’.replace(/(.)\1+/g, ‘$1’)
=> “ABCA”
“`

ruby

“`ruby
“ABBCCCAA”.gsub(/(.)\1+/, ‘\1′)
=> “ABCA”
“`

python

“`python
import re
print(re.sub(r'(.)\1+’, ‘\\1’, ‘ABBCCCAA’))

=> “ABCA”
“`

おわり

類似記事

https://qiita.com/nena3/items/b5fec48c8eecb2353ab1

元記事を表示

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 3780 Referencing column ‘user_id’ and referenced column ‘id’ in foreign key constraint

user.idとhoges.user_idでリレーションをはるmigrationを作るとき。

#### 前提
laravel version 6.9.0

hogesテーブルのエラー

“`
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 3780 Referencing column ‘user_id’ and referenced column ‘id’ in foreign key constraint ‘hoges_user_id_foreign’ are incompatible. (SQL: alter table `hoges` add constraint `hoges_user_id_foreign` foreign key (`user_id`) references `users` (`id`))
“`

古いやり方を見て、そのままやってうまく行かなかったパターン。
公式を見るのが大事ですね。

“`php:失敗時
$table->integer(‘user_id

元記事を表示

【Laravel】ビューコンポーザーの使い方

#ビューコンポーザーとは
ビューをレンダリングする際に自動的に実行される処理を用意するための部品です。
ビューがレンダーされるたびに結合したい情報があるなら、ビューコンポーザがロジックを一箇所にまとめるのに役立ちます。
###サービスプロバイダについて
ビューコンポーザーを利用するためにサービスプロバイダを使う必要があります。
**サービスプロバイダの使い方については[こちら](https://qiita.com/hitochan/items/91ecbd74e6567b07d460)から**
#実装する機能
**今回はビューコンポーザーで設定した文字列をビューファイルで表示します。**

#どうやって実装するのか
登録済みのサービスプロバイダから指定したビューをレンダリングする時にビューコンポーザーを呼び出します。
##サービスプロバイダの作成
ターミナルからサービスプロバイダを作成します。

“`:ターミナル
php artisan make:provider MessageServiceProvider
“`

`MessageServiceProvider`を作成します。

元記事を表示

ポートフォリオサイトを作った話

#はじめに
おはようございます。こんにちは。こんばんは。
おひさしぶりです。ワタタクです。最近投稿する機会が減ってしまいまして申し訳ありません。
今回は番外編ということでポートフォリオサイトを作った動機、
作ってみての感想であったりなどを書いていこうと思います。
またこれからプログラマーを目指したいという方にも読んでいただけたら嬉しいです。

使った技術等についての解説などは今回しませんが、
ほとんどこの記事で書いたことを使っています。

– [Vue.jsについての基礎(インストール〜基本構文)](https://qiita.com/watataku/items/26f2ce546fcd562e4b46)
– [Vue.jsについての基礎(Vue-router)](https://qiita.com/watataku/items/453c1d757c99ad2d5fb2)
– [Vue.jsについての基礎(transitionによるアニメーション)](https://qiita.com/watataku/items/f691a2999c3e2600173b)

#開発環境

– V

元記事を表示

PHP ジェネレータについて

## ジェネレーター

>ジェネレータを使えば、シンプルな イテレータを簡単に実装できます。 Iterator インターフェイスを実装したクラスを用意する オーバーヘッドや複雑さを心配する必要はありません。
[PHP: ジェネレータとは – Manual](https://www.php.net/manual/ja/language.generators.overview.php)

– ジェネレータは前方にしか進めないイテレータである。
– 反復処理が始まれば巻き戻すことはできない。
– 一度だけreturnするのでなく、必要に応じて何度も yield することができる。
– 遅延評価を作る時に使える。

“`php

元記事を表示

プロファイラ(xhprof)を簡単に安全に導入できる手順を用意してみた

# 課題

1. プロファイラ導入ってお金や手順がかかる
2. 今調査したい、、けど、環境構築にある程度時間がかかる

# 前提

– apache2.x 環境で、 php-module として WEB を稼働している
– php5.x 以上、 php7 以上の環境である
– 該当サーバで sudo もしくは他の方法で root 権限のいるコマンドが実行できる

# 準備 (インストール)

まずは yum (apt) で xhprof のパッケージ存在確認

“`
$ yum search xhprof
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
remi-safe/primary_db

元記事を表示

LaravelでMySQLのログを日時で出力する方法

ほぼメモ用。
Providers/AppServiceProvider.phpの中にboot()というメソッドがいるので、その中に以下を記述。

“`Providers/AppServiceProvider.php
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
DB::listen(function ($query) {
$sql = preg_replace_array(‘/\?/’, $query->bindings, $query->sql);
\Log::info(“[Query Time:{$query->time}s] {$sql}”);
});
}
“`

$query->sqlだけだと実際に渡っているパラメータは確認出来ない。
以下のようになっている
S

laravelバージョンアップ後にやること

#はじめに
お久しぶりです。
今回はStripeを実装しようとしたところ、バージョンが古いからアップデートしてくれ的なエラーメッセージが出たので、
Laravel5.6から5.8にバージョンをあげたときにやったことをメモ程度に書き残します。

##以下メモ
composer.jsonを修正
laravel/frameworkを5.7に修正しcompoesr updateを実行。
エラーがなかったら5.8に修正しさらにcomposer updateを実行。

5.8にかえた段階でなんかエラーがたくさん発生

```ターミナル
#0 プロジェクト名/laravel/framework/src/Illuminate/Container/Container.php(785): NunoMaduro\Collision\Adapters\Laravel\CollisionServiceProvider->NunoMaduro\Collision\Adapters\Laravel\{closure}(Object(Illuminate\Foundation\Application), Array

開発環境では大丈夫だったのに本番環境でバグったPHPのお話LEVEL1~3 + 1

本番環境とかいってますが、だいたいテスト環境です。多めに見てください。

# LEVEL1 大文字小文字
windowsで開発してる人からしたらあるあるじゃないでしょうか?
開発環境(windows)では大文字小文字の区別が無く、Linuxでは区別されます。

私が一番ダメージを負ったのはクライアント様がサイト制作で使用する画像を送ってきた際に、
拡張子が大文字のファイルが数ファイルだけ混ぎれ込んでために、ふぁーーーしたことですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249312/054274d2-7f4a-e001-c302-c5cae61ce186.png)

おわかりいただけただろうか・・・

[コード].[拡張子]という取り決めで画像を送っていただいたため中々気づきませんでした。
本番環境にあげる直前に気が付いて事なきを得ましたが、非常に危なかったです。

なお、

```
if (file_exists($imagePath . $fileName '.jpg')

Laravel で使うデータベースの設定

# Laravelでデーターベースを使うための準備

最近Laravelを使ったWebサービスの開発に携わることになりました。
学習を始めたばかりなので、まとめがてらQiitaに書いていこうと思います。

今回は自分がLaravelを学習している過程で学んだデータベースを使うときの設定方法についてまとめました。

## 設定ファイルをいじる

これから扱うファイルは`config/database.php`と`.env`(隠しファイル)の2つである。
`.env`は 開発環境と本番環境で使い分けるのでgitの管理下に置くべきでないファイルである。

Laravelで使用するDBの情報は`config/database.php`で設定されている。
以下はそのファイルの一部である。今回はMySQLについて扱うので、それ以外の部分を省略して表示している。

```php:config/database.php
env('DB_CONNECTION', 'mysql'),

'connections' => [

亀のえさの量を把握して管理するPHPツール[陸ガメ絶好調]?

はじめまして!記事をご覧くださりありがとうございます。
AI・IoTのプロフェッショナルを目指して修行中をしていましたが、
メンタルぶっ壊れて療養中の、のぶたん改め「びりどら」です。
現在はただただ、不健全で未熟なイノシシ&チンパンジー人格を解消して
人様にご迷惑をおかけしないように成長したいと考えています。

※XAMPPとは
クロスプラットフォーム(Windows,MacOS,Linuxなど)で
Apache(WEBサーバ),MySQL(DB),PHP,Perlが動作する環境をパッケージ化したものです。

今回は、先日から飼いはじめた?ミシシッピニオイガメの「マクロ(カメの名前)」の
えさの数がどれくらいが最適かを管理する、PHPで動くツールをXAMPP上で作りました。
![macro.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238907/6dcac9e1-5cc1-403d-5b27-04fd5d70d6ee.jpeg)

#初期画面
フロント側の技術がまだまだなので、フォーム部品を配置した