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

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

PHP7.3以降でAsia/TokyoでUTCとの時差が9:18:59になることがある

下記のようなコードで検証。

“`php
setTimezone(new DateTimeZone(‘Asia/Tokyo’));
var_dump($zero->format(‘Y-m-d H:i:s’)); // string(19) “0000-01-01 09:18:59”

$y1887 = new DateTime(‘1887-01-01’, new DateTimeZone(‘utc’));
$y1887->setTimezone(new DateTimeZone(‘Asia/Tokyo’));
var_dump($y1887->format(‘Y-m-d H:i:s’)); // string(19) “1887-01-01 09:18:59”

$y1888 = new DateTime(‘1888-01-01’, new DateTimeZone(‘utc’));
$y1888->setTimezone(new Dat

元記事を表示

php.ini 内で環境変数を参照した設定ができる

docker-composeで開発環境を構築していて、
.env に各コンテナ名の情報を定義しておき
docker-compose.yaml の env_fileに読み込ませ
各コンテナ間の疎通に環境変数に定義したコンテナ名を利用したりしていた。

“`docker:.env
#docker-composeプロジェクト名定義
COMPOSE_PROJECT_NAME=projecta
#php(web)コンテナ名
WEBCONTAINER=projecta_web_1
#mysqlコンテナ名
DBCONTAINER=projecta_mysql_1
“`

“`docker:docker-compose.yaml
env_file:
.env
“`

こうしておくと、phpのスクリプト内で環境変数を使ってDBコンテナを指定できる

“`php:php
// DB接続先定義
define(‘DB_HOST’, getenv(“DBCONTAINER”));
“`

phpのセッション保存用にmemcachedのコンテナも立ち上げていて
こちらはcompose内で

元記事を表示

AWS Cloud9でPHPのコード整形をしたい

プログラミングは良いロジックを書くのも大切ですが、まずは読みやすいコードを書くことを心掛けましょう。
読みやすいコードとは、コードを書いた自分以外でも読めるようなコードです。
しかし、手作業で空白を調整するのは少し手間だと思います。
そこで、ファイルを保存したときに自動で調整するように設定してみましょう。
以下の手順を試してください。

# 設定の手順

(1) PHP-CS-Fixerをダウンロード
PHP-CS-Fixerとは、PHPの標準のコーディング規約に則り、ソースコードを調整してくれるツールです。
https://github.com/FriendsOfPHP/PHP-CS-Fixer

“`console
$ wget https://cs.symfony.com/download/php-cs-fixer-v2.phar -O php-cs-fixer
“`

(2) PHP-CS-Fixerをインストール

“`
$ sudo chmod a+x php-cs-fixer
$ sudo mv php-cs-fixer /usr/local/bin/php-cs-

元記事を表示

openshift4.3でlaravel+MariaDBする

# はじめに

前回までで基本的なLaravelを動作させることができましたが
やっぱりDB無いと話になりませんよね。

ということで前回の環境にMariaDBを追加します!

前回のお話はこちら
[openshift4.3でlaravelする](https://qiita.com/imp555sti/items/ad530f671015b64b0af0)

前提
 - CODEREADY CONTAINERS 1.6が起動していること
 - PHPプロジェクトでLaravelが正常に動作していること

# MariaDBの追加

ProjectにMariaDBを追加していきます。
+Addから「From Catalog」を選択しフィルタで「MariaDB」と入力します。

![2020-03-08 (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/ee2d80e5-a653-5f6c-bd22-6178b972eef3.png)

![2020-03-08 (1).png](htt

元記事を表示

自動でcomposer updateしてPull Requestを作るGitHub Actionsを作った

composer使ってるプロジェクトなら何でも使えるはず。
https://github.com/kawax/composer-update-action
https://github.com/marketplace/actions/composer-update-action

PHP7.4が下限なので7.4ではインストールもできないプロジェクトではcomposer.jsonでconfig.platformの設定が必要かも。

プライベートリポジトリでも使える。プランごとに月に何分までの制限があるけど。

## 使い方
`.github/workflows/update.yml`を作るだけ。

UTCの0時は日本時間で9時。好きなように変更する。

“`yml
name: composer update

on:
schedule:
– cron: ‘0 0 * * *’ #UTC

jobs:
composer_update_job:
runs-on: ubuntu-latest
name: composer update
steps:

元記事を表示

laradock環境下でexif extensionが使えない罠

数日間嵌ったのでメモ?

laradockで画像のアップロード機能を実装していたが、どうしても画像が横向きに表示されてしまう…
画像の向きに関して、こちらに分かりやすい解説がありました。なるほど…
https://qiita.com/k-holy/items/2ed10bdcf53181bb695d
>
EXIFタグのOrientationは、カメラで撮影した時に画像の向きに関する情報をファイルに埋め込むことで、アプリケーション側で表示する際にその情報を見て向きを補正するための仕様です。
しかし、これが設定された画像ファイルをサーバ側で受け取って縮小する際、GD等による加工の過程でEXIFタグの情報が失われてしまうために、画像の向きが補正できなくなってしまうわけです。
なので、まず exif_read_data() を使ってEXIFのOrientation値を読み込み、それに併せてGD関数で画像を反転/回転させた後、縮小します。

?こちらを参考にintervention imageインストール
https://blog.capilano-fw.com/?p=1574#orientat

元記事を表示

cURLを使ってみた

#はじめに
案件で外部APIのシステムにアクセスするためのcURLのコードを書いたので、合わせて今まで書いたことがなかったのでcURLの使い方をメモしておきます。

#使い方
##基本的な関数は4つ
1. `curl_init($URL)`
– cURLのセッションを初期化する。引数にはリクエスト先のURLを渡してあげるます。
2. `curl_setopt()`
– 転送用の様々なオプションを設定することができる(例: CURLOPT_POST←POSTメソッドで送信する)
3. `curl_exec()`
– curl_exec — cURL セッションを実行する
4. `curl_close()`
– cURL セッションを閉じる

##基本的な関数の使い方
以下が簡単な使い方である

“`php:cUrl.php

元記事を表示

strftimeの日本語対応が少し面倒なので代替関数を作った

曜日とか年号とか、strftimeで結果を日本語で表示したい場合、環境によって結果が異なる。ロケールの設定が必要とか、そもそも該当する設定ファイルがOSに同梱されてないことがあるとか、Cのライブラリが対応してないことがあるとかです。

strftimeとパラメータ互換で使える代替関数を作りました。同じようなものを作っている人がたくさんいるのは知ってますが、これくらいならコピペで済ませず自作したい。

“`php
function datetime_format($format, $timestamp=’0000-00-00 00:00′, $default=”) {
if(!$timestamp || strpos($timestamp, ‘0000-00-00’)===0) {
// 値がない場合は空文字列を返す
return $default;
}
if(!preg_match(‘@^[0-9]+$@’, $timestamp)) {
// 文字列の場合はUNIXタイムスタンプ形式に変換
$

元記事を表示

Laravelでモデルのファクトリーを作成

#はじめに
備忘録になります。
Laravel5.5系で実施。

#仕様
LaravelでUserモデルのファクトリーを作成したい
・name:ランダムな名前
・email:重複しないメールアドレス
・password:複数レコードを作成する際は同じパスワードを使用。
・remember_token:10桁のランダム値

#コマンド
`php artisan make factory UserFactory –model=User`
今回は、Seederでfactoryを呼び出すためSeederも追加。
`php artisan make:seeder UsersTableSeeder`

#factoryソースコード

“`UserFactory.php
define(App\User::class, function (Faker $faker) {
static $password;

return [
‘name’ => $faker->name,

元記事を表示

CakePHP環境で「certbot renew」実行時のエラーが出たときの対処法

## 環境について

– Linux CentOS7
– apache
– PHP(CakePHP2)
– Let’s Encrypt

# SSL証明書の更新でエラー
某WebサイトでLet’s Encryptを使っています。
Let’s Encryptは3か月ごとに更新をしなければならなく、証明書の期限が1か月前から更新することができます。

それを毎回手動でやるのは結構面倒なので、cronでバッチ処理をして自動でSSLの更新をかけていることにして、実行した場合はその結果をメールで返す仕組みにしています。

## 更新失敗のメールが届く

ある時メールに更新失敗の件名が…

**Faild renew letsencript SSL cert**

現状Webサイトは問題なかったのですが、これが更新期間を過ぎると、

**信頼されていないサイトです**

的な表示が出てしまうのですぐに対処します。

## CentOSの中へ

とりあえず手動で実行してみます。

“`
certbot renew –dry-run
“`

以下の結果が…

“`
Cahllenge

元記事を表示

Laravel転ばぬ先の杖

# Laravel転ばぬ先の杖

過去に出会ったトラブル解消法まとめ

## `git clone`からの`php artisan serve`でコケる

`comporser update`すると治る。要はパッケージがないだけ

“`
$ php artisan serve
PHP Warning: require(/vendor/autoload.php): failed to open
stream: No such file or directory in artisan on line 18
“`

## `SQLSTATE[HY000] [1044] Access denied for user`

DBA権限が不足してるので適当につける

## `web.php`の定義はアクセスできるけど`api.php`はできない

URLに`api/`が足りてない

– `https://example.com/foo`を`https://example.com/api/foo`でアクセスすると改善

## File does not exist at path .

元記事を表示

MAMPでApacheサーバが起動しない時

### 何故か今まで普通に起動していたmampでApacheサーバーだけ起動しなくなった

スクリーンショット 2020-03-07 19.13.21.png

Start Serversのボタンを押すとMySQL Serverは起動するがApache Serverだけ起動しなくなってしまった。

スクリーンショット 2020-03-08 12.55.21.png

アプリケーションフォルダーのMAMPを確認してみると、htdocsのフォルダー

元記事を表示

PHP8にstr_contains関数が追加されることになったというお話

`strpos` や `strstr` を使わずに済むようになる・・・かもしれません( **日本語対応にやや懸念あり** )。

以下、 [RFC](https://wiki.php.net/rfc/str_contains) をもとに紹介します。

まだ投票中ですが、3月8日現在、賛成42/反対5という圧倒的多数の支持を得ているため、追加される公算が高いです。

# 既存関数の問題点
ある文字列が別の文字列に含まれているかをチェックする際、これまで [strpos](http://php.net/manual/ja/function.strpos.php) や [strstr](http://php.net/manual/ja/function.strstr.php) といった関数が使われてきました。

しかし、これらの関数は、以下の問題を抱えています。

– 読み手にとってあまり直感的でない
– 間違いやすい
– 新しく PHP に触れる開発者にとって覚えにくい

そのため、多くの PHP フレームワークが、同様の振る舞いをするヘルパー関数を提供しています。それだけ、この機能は、重

元記事を表示

【Laravel】MassAssignmentExceptionへの処方箋

#はじめに
MassAssignmentExceptionは新しくModelクラスを作成して、複数代入してデータをDBに保存しようとすると起こるエラーです。Laravel初心者の時はモデルを作成し時は必ず起きていました。。。

##複数代入時の問題点
複数代入でDBに保存するメソッドは`create`があります。
createメソッドを使う時は下記のようなコードになるかと思います。

“`php:
$user =User::create($request->all());
“`

これではフォームからの入力値を完全に信じて保存処理を行いますので、
入力フォームにない項目でもDBに該当する属性があれば保存されてしまいます。

だからLaravelでは「新しく作成したModelクラスから複数代入で属性(カラム)を保存しようとしていますが、その属性(カラム)を保存していいのかわかりません」というエラーを出るようになっています。

##どうすればいいか
上記のことから、やらなければならないことは「保存していい属性(カラム)のリスト(ホワイトリスト)か保存してはいけない属性(カラム)のリ

元記事を表示

PHPUnitの「phpunit.xml.dist」って何?

PHPUnitの設定ファイルはXML形式で、通常 `phpunit.xml` または `phpunit.xml.dist` という名前が使われる。

**でもこの `.dist` って何?**

調べたら作者のバーグマンさんが質問に答えてた。

https://stackoverflow.com/a/44764078

> If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and –configuration is not used, the configuration will be automatically read from that file.
>
> The idea behind the fallback (to phpunit.xml.dist when phpunit.xml does not exist) is that phpunit.xml.dist can be checked into version control and

元記事を表示

Ubuntu18.04にWordPressのローカル環境をつくる

WordPressを触ってみたかったので、ローカルの環境をつくったときのメモ

## 動作環境
Ubuntu18.04
## 今回すること
ホームページを公開するのではなく、ローカルでの環境を整えます。(ホームページを公開するにはサーバー契約とかドメイン取得とかが必要)
phpとかMariaDBとかもついでにインストールします。
ゴールは下のようなWordPressの管理画面になることです。![Screenshot from 2020-03-07 23-36-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517356/cd0984fa-02d3-3240-b8e6-266dd9c6b6ad.png)

## WordPressとは
ググってみたらたくさん出てくると思います。
>WordPressは、オープンソースのブログソフトウェアである。PHPで開発されており、データベース管理システムとしてMySQLを利用している。単なるブログではなくコンテンツ管理システム としてもしばしば利用されている。-

元記事を表示

【Laravel+React】ページルーティング

#困ったこと
今回サービスを開発する上でLaravelでのルーティングをするのかReactでのルーティングをするのか迷い,元から実装していたReactでの実装にした.
その時単純なreact-router-domの記述ではLaravelとの連携ができない

#解決
web.phpのルーティング記述を以下のように変更して連携させる.

“`php:routes/web.php
Route::get(‘/{path?}’, function(){
return view(‘welcome’);
} )->where(‘path’,’.*’);
“`
welcome.blade.phpには従来のReactと同じようにRenderするためのルートIDを設ける.あとapp.jsを読み込む.(こいつがWebpack的にcssとかjsとか集約するっぽい)

“`html:resources/views/welcome.blade.php