- 1. PHP7.3以降でAsia/TokyoでUTCとの時差が9:18:59になることがある
- 2. php.ini 内で環境変数を参照した設定ができる
- 3. AWS Cloud9でPHPのコード整形をしたい
- 4. openshift4.3でlaravel+MariaDBする
- 5. 自動でcomposer updateしてPull Requestを作るGitHub Actionsを作った
- 6. laradock環境下でexif extensionが使えない罠
- 7. cURLを使ってみた
- 8. strftimeの日本語対応が少し面倒なので代替関数を作った
- 9. Laravelでモデルのファクトリーを作成
- 10. CakePHP環境で「certbot renew」実行時のエラーが出たときの対処法
- 11. Laravel転ばぬ先の杖
- 12. MAMPでApacheサーバが起動しない時
- 13. PHP8にstr_contains関数が追加されることになったというお話
- 14. 【Laravel】MassAssignmentExceptionへの処方箋
- 15. PHPUnitの「phpunit.xml.dist」って何?
- 16. Ubuntu18.04にWordPressのローカル環境をつくる
- 17. 【Laravel+React】ページルーティング
- 18. 【Laravel+React】Herokuプッシュ時のつまずき
- 19. openshift4.3でlaravelする
- 20. concrete5 (version 8)を CentOS8の環境に構築する 番外編(トラブル対応)
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-actionPHP7.4が下限なので7.4ではインストールもできないプロジェクトではcomposer.jsonでconfig.platformの設定が必要かも。
プライベートリポジトリでも使える。プランごとに月に何分までの制限があるけど。
## 使い方
`.github/workflows/update.yml`を作るだけ。UTCの0時は日本時間で9時。好きなように変更する。
“`yml
name: composer updateon:
schedule:
– cron: ‘0 0 * * *’ #UTCjobs:
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サーバーだけ起動しなくなった
Start Serversのボタンを押すとMySQL Serverは起動するがApache Serverだけ起動しなくなってしまった。
アプリケーションフォルダーの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
【Laravel+React】Herokuプッシュ時のつまずき
#初期環境
Laravelアプリの作成```
composer create-project laravel/laravel アプリ名
```
git push```
git push heroku master
```#つまずき①
```
heroku open
```
するとトップページがForbidden.####解決法
```:Procfile
web: vendor/bin/heroku-php-apache2 public
```
を作成.これでサイトアクセスエントリページがpublicフォルダに設定される.#つまずき①
```
heroku open
```
するとトップページが500 server error.####解決法
```:ターミナル
heroku run "php artisan key:generate --show" --app=アプリ名
```
ここに出てくる値をHerokuのSettingタブ内下画像のAPP_KEYに設定.
openshift4.3でlaravelする# はじめに
openshift3.11を利用中でしたが、openshift4.3に触れてみようと始めたminishiftのインストール。
名前も変わってCODEREADY CONTAINERS 1.6。そして、あまりのGUIの変化についていけないところですが、これから頑張りたいと思います(笑)まずは在り来たりのlaravelをopenshift4.3で起動するところまでやってみたいと思います。
# CODEREADY CONTAINERS 1.6のインストール
新規にインストールする際はこちらを参考にどうぞ。
[CentOS7にOpenShift4(Red Hat CodeReady Containers)をインストールする](https://qiita.com/imp555sti/items/b471dc4410ad732c5f1d)アップデートするならこちらからどうぞ。
[CentOS7にOpenShift4を4.2から4.3にUpdateする](https://qiita.com/imp555sti/items/bfc4580e2a9322eca611)# C
concrete5 (version 8)を CentOS8の環境に構築する 番外編(トラブル対応)
# 概要
ここでは、concrete5の実際のインストール作業を行なっていきます。
事前準備として、CentOSやNginx,PHP,MySQLなどの環境が構築済みであることが必要です。ここでの手順は、以下の手順の通り環境構築が完了していることを前提とします。
[concrete5 (version 8)を CentOS8の環境に構築する①](https://qiita.com/You_name_is_YU/items/60042468ae89a750b8b5)また、インストールはComposerを利用しようと思います。
# 環境情報
- Vagrant 2.2.7
- VirtualBox 6.1
- CentOS 8.1
- Nginx 1.17.8
- PHP 7.4.3
- MySQL 8.0.17
- Composer 1.9.3# Composerをインストール
```shell-session
# dnf -y install wget
# cd /usr/local/src
# wget https://getcomposer.org/install