- 0.1. SakuraサーバーでLaravelを動かしてデータベースと接続する方法
- 0.2. Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較
- 0.3. PHP Seleniumでのエラー対応メモ
- 0.4. 【Laravel】「数字入れたら文字数足りてるのにバリデーションエラーになるんだけど…」
- 0.5. 【SQL】PHPで範囲検索のSQL文をシンプルに書く方法
- 0.6. 【SQL】テーブル結合 JOIN の条件絞り込み
- 0.7. Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
- 0.8. LaravelでURLを取得する方法いろいろ【初心者向け】
- 0.9. Laravel5.7→5.8へのバージョンアップでどハマり。Cache::lock()の仕様が変わっていた
- 0.10. PHP sprintf関数の意味・動作
- 0.11. Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
- 0.12. 【PHP】AtCoder Beginners Selectionを解いてみた
- 0.13. 【PHP】標準入力・標準出力を楽に記述するための工夫【AtCoder】
- 0.14. PHPでコードゴルフ
- 1. はじめに
- 2. 公式
SakuraサーバーでLaravelを動かしてデータベースと接続する方法
# 参考URL
## インストール方法
* https://note.com/koushikagawa/n/nb69ebe8b3e90
## Migrationについて
* https://knowledge.cpi.ad.jp/howto-cpi/laravel-migration/# 手順
## SSHでサーバーにアクセス
“`
$ ssh@ .sakura.ne.jp
“`## composerのインストール
“`
$ cd www
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar
“`## composerでLaravelのインストール
“`
$ php composer.phar create-project laravel/laravel test
“`## データベースと接続
### .envファイルを編集
“`.env
DB_CONNECTION=mysql
DB_HOST=
DB_PORT=3306
DB_DATA
Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較
Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較
# Python
https://qiita.com/nadechin/items/28fc8970d93dbf16e81b
# Ruby
https://qiita.com/kudojp/items/d416d4c97f9d0512c088
# PHP
https://qiita.com/shiba0410/items/3102592350039bc1a7b9
# Java
https://qiita.com/Hyman1993/items/a3aaabbb2e83580d68d2
# JavaScript
https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a
# Perl
https://perlzemi.com/blog/200
PHP Seleniumでのエラー対応メモ
# やりたいこと
### (1)動的コンテンツを含むページへの遷移完了を待つ
### (2)開いたページ上のボタンクリックでのエラーを解消したい# 経緯
仕事で、Selenium+PHPにより、あるページへのログインやフォーム入力、ファイルダウンロードなどを自動化する事になりました。
その中でハマった点を残しておきます。※以下、urlやhtml要素のidなどは、本投稿上の適当な値です
# 環境
* docker for windows
* php(・apache)コンテナと、Seleniumコンテナ※「Seleniumとは」や環境構築については、他の投稿やサイトをご参照ください。
(また後日、この投稿に追記するかも知れませんが)# エラーと対応内容
## (1)動的コンテンツを含むページへの遷移完了を待つ
### 概要
指定したurlを表示したり、ボタンクリックにより次ページへ遷移し、ページ表示完了を待つ場合は、次のような方法がよく紹介されています。
私も最初はそうしていました。
* 遷移後のタイトルやurlを条件として、待機する方法(titleIs、url
【Laravel】「数字入れたら文字数足りてるのにバリデーションエラーになるんだけど…」
# はじまり
人間さん「なになに、このフォームには顧客IDを入れると」
人間さん「1234っと」:::note alert
顧客IDは10文字以内で入力してください
:::人間さん「え、、4文字なのになんで」
人間さん「不具合かな?」いぬ先生「ちょっと見てみようか」
# 原因
いぬ先生「状況分かったよ」
人間さん「どんなかんじ?」
“`php
$rules = [
‘customer_id’ => [‘max:10’, ‘integer’]
];
“`## integerが条件に含まれていたから
いぬ先生「今はこうなっているのだけど」
いぬ先生「Laravelではほかのバリデーションとの組み合わせで」
いぬ先生「確認方法が変化するルールがあって」
いぬ先生「今回のように指定ルールにintegerまたはnumericが含まれる場合、」
いぬ先生「maxは文字列長ではなくて、値として確認することになってる」人間さん「つまりどういうこと?」
いぬ先生「今回だと10文字まで入力可ではなく、」
いぬ先生「1~10の数値が入力できるってこと」人間
【SQL】PHPで範囲検索のSQL文をシンプルに書く方法
# 範囲検索のSQL文をどう書く?
このような日付の範囲検索画面を作る場合のSQL文について学習したので記録しておきます。
### 記述例1
“`ruby:test.php
$SQL= “”;
$SQL .=” select * “;
$SQL .=” from URIAGE_T”;
$SQL .=” where (CD = 1200)”;//条件:売上日
if((!empty($Inq_DATE_F))and(!empty($Inq_DATE_T))){
$SQL .=” and (URIDATE between ‘”.$Inq_DATE_F.”‘and'”.$Inq_DATE_T.”‘)”;
}elseif((!empty($Inq_DATE_F))and(empty($Inq_DATE_T))
【SQL】テーブル結合 JOIN の条件絞り込み
SQLのテーブル結合で考え違いをしていたことが発覚したので、記録しておきます。
###### 前提1:下記のような2つのテーブルA、Bを結合して全ての売り上げデータを表示させたい、とします。
###### 前提2:両テーブルの flgカラム が 0(有効)のデータだけに絞り込みたい、とします。
【テーブル名:A(売上トランザクション)】
|`flg` |`date` |`code`|`suryo`|
|———|———–|———-|——|
|1 |2022/02/01 |A001 |5 |
|0 |2022/02/01 |A001 |6 |
|0 |2022/02/05 |A003 |3 |
|0 |2022/02/10 |A003 |4 ||
【テーブル名:B(商品マスター)】
|`flg` |`code`|`name`|`price`|
|———–|———|—
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
# DATETIME型を追加したらエラーに阻まれた
PHP初学者です。
phpmyadminでDATETIME型を追加した際に3時間ぐらい沼って抜け出せたので共有したいと思います。# エラー文
“`
Incorrect datetime value: ‘0000-00-00 00:00:00’ for column g-rush.customer.datetime at row 1
“`
![スクリーンショット 2022-10-11 22.59.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708236/07a18587-b99a-36bf-dc58-ad07694abad3.png)
# 原因
TIMEDATE型は既にレコードが存在していると既存のレコードに値を補完できずに失敗する仕様みたいです# 追加するには
# 1 レコードの中身を空にする
操作をクリックして下の方にある”テーブルを空にする”を実行すると追加できます
![スクリーンショット 2022-10-11 23.18.0
LaravelでURLを取得する方法いろいろ【初心者向け】
## 背景
最近Laravelで開発をすることが多いのですが、レビューでURLを直書きしないように複数回指摘を受けました。
そしてその修正をする中で学んだURLの取得方法を紹介します。## サイト内のURLを取得したい
Laravelで定義したルートには`nameメソッド`で名前をつけることができます。
“`
// 名前付きルート
Route::get(‘/user/profile’, function () {})->name(‘profile’);
“`
routeメソッドを使えばURLを以下のように生成することができ、とても便利です。“`
プロフィールへ
“`
URL直書きで書いても動作自体は変わりませんが、URLのパスを修正したい時に一つ一つ変更する必要がありとても手間がかかります。名前付きルートであれば変更箇所が1つになって楽ですよね。## 外部サイトのURLを取得したい
外部のページに飛ばしたい時は、基本的にURL直書きで問題無いと思います。
“`
Laravel5.7→5.8へのバージョンアップでどハマり。Cache::lock()の仕様が変わっていたLaravel5.8からCache::lock()に第三引数`$owner`が追加されました。
この引数はデフォルトがnullに設定されているので、5.7までのままだと第三引数には自動的にnullが渡されます。
`vendor/laravel/framework/src/Illuminate/Cache/Lock.php`のコンストラクタに
“`
if (is_null($owner)) {
$owner = Str::random();
}
“`
なんてのが追記されていたため、予期せぬ挙動に…。ソースコードを追っていくと、**5.7までと同じ挙動にするには第三引数に数字の1を渡す必要**がありました。
[公式のアップグレードガイド](https://readouble.com/laravel/5.8/ja/upgrade.html)にも乗っておらず、えらいハマったので怒りの備忘録を残しておきます。
PHP sprintf関数の意味・動作
なかなか使う機会がなく知らなかったのでメモ。
### PHPマニュアル
[sprintf](https://www.php.net/manual/ja/function.sprintf.php)
## 説明:
“`jsx
sprintf(string $format, mixed …$values): string
“`フォーマット文字列 **`format`** に基づき生成された文字列を返します。
## 例
“`php
$example .= sprintf(““, “hoge”, $fuga, $foo, $baz, $boo, $bar);
“`**自分なりの理解**
$fromatの中身の%の数分$valuesを渡す。
n番目の%に置換される文字列が$valuesのn番目のあたる引数。%sみたいなのは指定子でsの場合は引数を文字列で扱う。
%sの場合は引数を文字列として置換する。
Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
Python,Ruby,PHP,Java,JavaScript,Perlの自動試験(ユニットテスト)の比較
# Python
https://qiita.com/_dakc_/items/e663359c81645bc4e65e
# Ruby
https://qiita.com/jnchito/items/ff4f7a23addbd8dbc460
# PHP
https://qiita.com/yamato1491038/items/7aa0168a6145749db78c
# Java
https://qiita.com/ryuutamaehara/items/c8efb304b73cc0542e6f
# JavaScript
https://qiita.com/jintz/items/61af86a12b53b24ef121
# Perl
https://perlzemi.
【PHP】AtCoder Beginners Selectionを解いてみた
## はじめに
[AtCoder Beginners Selection](https://atcoder.jp/contests/abs) をPHPで解いてみました。PHPでAtCoderを始めてみたいという方のご参考になれば幸いです。
標準入力・標準出力とテンプレートについては以下の記事で解説しています。ソースコードはすべてこのテンプレートを使用して作成していますのでご了承ください。
https://qiita.com/noko206/items/800649132ff050635ff0
## [第1問:ABC086A – Product](https://atcoder.jp/contests/abs/tasks/abc086_a)
### 問題
二つの正整数 $a,b$ があります。$a$ と $b$ の積が偶数なら `Even` 、奇数なら `Odd` を出力してください。
* $1 \le a,b \le 10000$
* 入力はすべて整数### 解法
ある整数が「偶数である」とは「 $2$ の倍数である」と言い換えることができます。よって、$a$ と
【PHP】標準入力・標準出力を楽に記述するための工夫【AtCoder】
## はじめに
PHPでAtCoderを解いていると標準入力の受け取りが大変面倒に感じます。しかし、工夫次第で快適に標準入力を受け取れるようになりますので、そのための方法をまとめていきます。(ついでに標準出力も少しだけ工夫します。)
## 問題
### [PracticeA – Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)
整数 $a,b,c$ と、文字列 $s$ が与えられます。
$a+b+c$ の計算結果と、文字列 $s$ を並べて表示してください。* $1 \le a,b,c \le 1000$
* $1 \le |s| \le 100$## 標準入力
標準入力は `fgets` 関数で取得します。
“`PHP
PHPでコードゴルフ
はじめに
コードゴルフって面白いですね。
あれこれ考えていると普段見かけないソースが生まれたりして新鮮な気持ちになれました。
日頃PHPを書かない人もいると思いますので、敷居が下がればと思い使いそうなものをざっくりまとめておきます。
(比較に関することは例によって闇が深い書いていないため、公式ページを参照してください)公式
すべてここに書いてあります
https://www.php.net/manual/ja/langref.php変数宣言
“`php
// 変数名は必ず$をつけます。
$hoge = ‘1’;// 数字から始まる以下のような変数名は無効です。
$1 = ‘1’;
$1_hoge = ’11’;// 大文字小文字違いは別の変数として扱われます。
$hoge = ‘あ’;
$HOGE = ‘い’;
echo $hoge;// あ
echo
Laravel9で作成したアプリをAWSにデプロイする
# 前書き
今回は、作成したポートフォリオをAWS上に作成した本番環境にデプロイしてみました。# 環境
https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
上記記事に準じて環境構築を行っています、
また、VPC・EC2インスタンス・RDSの作成については省略します。
# 実現したいこと
・AWS上にデプロイし、作成したアプリを公開# 対応方法
## ①EC2インスタンスに各種インストール
○各種アップデート
“`
sudo yum update -y
“`○webサーバーインストール→今回はnginx
“`
sudo amazon-linux-extras enable nginx1
sudo yum install nginx -y
“`○phpインストール
→php8.1のインストールにはamazon-linux-extrasコマンドが使用不可
→eoel(Extra Packages for Enterprise Linux)を使用して導入する
“`
# php8.1と関連するモジュ
【PHP8.x】非対称な可視性を導入したい
Swiftでは読み込みと書き込みで[異なる可視性を設定することができます](https://qiita.com/codelynx/items/43e1c4f176730d952d13)。
“`swift
private (set) public var count: Int = 0 // 読み込みはpublic、書き込みはprivate
“`そんなわけで節操のないPHPは、この機能もPHPに取り込もうと企んでいます。
以下は該当のRFC、[Asymmetric Visibility](https://wiki.php.net/rfc/asymmetric-visibility)の紹介です。# Asymmetric Visibility
## Introduction
PHPには、前からプロパティの可視性を制御する機能があります。
しかし、その機能はgetとset両方に対して常に同じです。本RFCでは、プロパティの読み取り操作と書き込み操作に対して異なる可視性を与えることを提案します。
具体的にはほぼSwiftから拝借しています。## Proposal
プロ
cron(クロン)実行先でcron(クロン)一元管理?
# cron(クロン)先でcron(クロン)一元管理
https://github.com/taoka-toshiaki/cron-php
### 制作経緯
– レンタルサーバー等のcronの制約を打破したいなと思った事があり制作に至る。
尚、レンタルサーバーでは負荷がある処理はお断りしている場合があるので規約に沿って使用ください。
# 使用方法
– cron.jsonに処理を行い日時、実行コマンドを明記する。
– class_cron.phpに一分間隔で呼び出すようにcronに登録する。
– class_cron.phpを呼び出す際は参照するjsonファイルのパラメーターを渡す事。
– cron.jsonの週の項目は日曜日から始まり、フラグが1の時に起動する。
– cron.jsonの週以外の項目の設定はcrontabの入力方法と同じ関係にあります。“`php:class_cron.php
Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較
Python,Ruby,PHP,Java,JavaScript,Perlのライブラリ作成方法の比較
# Python
https://qiita.com/mofumoffy223/items/a461efba5c80acafdbf0
# Ruby
https://qiita.com/suketa/items/ab6b88093de4a54b3b06
# PHP
https://qiita.com/nuuuuume/items/fd2e0d69fb5430c26bd0
# Java
https://qiita.com/haruto167/items/162551100449ea5c7e6d
# JavaScript
https://www.sejuku.net/blog/65313
# Perl
https://perlzemi.com/blog/20161130148051.h
Laravel 9 + VITEの開発環境をdockerで実現する方法
Laravel 9でLaravel Mixの代わりに新しく導入されたViteを使えるLaravel開発環境を、docker上に実現する方法を紹介します。
# ゴール
– WindowsやMac上に、dockerを使ったLaravel 9開発環境を作る。
– Laravel MixではなくViteを使う
– サーバーはnginx, php, mysqlを別にする。
– Viteの利点であるページリロード無しでのCSS/JS更新を実現する。## ところでViteの発音は?
Viteは「ヴィート」と発音します。フランス語だそうです。アメリカ人なら「ヴァイト」と読みそうですが、アメリカ人も「ヴィート」と読んでます。
## ところでLaravel Mixではだめなのか?
Laravel 9の途中から、フロントエンド・ビルド・ツールとして長年標準だったLaravel Mixが非標準となりViteが標準となりました。
現時点では[Laravel 9公式でMixもサポート](https://laravel.com/docs/9.x/mix)しています。したがって、現時点でMixを使うこと
Laravel Sailをdevcontainerで動かすときは下準備が必要
サンプルはこちら。
https://github.com/tsubakimoto/1009laravel
—
Laravel Sail とは、Laravel の開発環境をコンテナーでセットアップするためのツールです。
https://readouble.com/laravel/9.x/ja/sail.html
コンテナーで動作するということは、devcontainer で動かしたくなるものです。
Laravel Sail には devcontainer.json や docker-compose.yml を準備するコマンドも用意されています。https://readouble.com/laravel/9.x/ja/sail.html#using-devcontainers
### .devcontainer/devcontainer.json
“`json
// https://aka.ms/devcontainer.json
{
“name”: “Existing Docker Compose (Extend)”,
“dockerComposeFile