- 1. VSCodeでphpをデバッグする
- 2. 【PHPメモ】in_arrayで重複をチェック
- 3. array_push の返り値
- 4. Laravel 8 の新機能!マイグレーションスカッシングで肥大化したマイグレーションファイルを1つにまとめる
- 5. 【PHP】デバッグ
- 6. Laravelでサブドメイン対応(さくらレンタルサーバ)
- 7. AndroidスマホにApacheとPHPとMySQLをインストールする
- 8. Stoplight Studioで作成したswagger.yamlを並び替えて見やすくするプログラムを作った
- 9. PHPUnitのバージョンアップで使えなくなったgetMock()の置き換え法(草刈り)
- 10. PHPでWindows向けのCSVデータをLinuxサーバにて生成する。
- 11. Web系の定番ソフトウェアのバージョンを確認する。
- 12. Laravel8を試したら即効でエラー「Target class [〇〇〇Controller] does not exist.」が表示された
- 13. Laravelでneo4jを使う④マイグレーション
- 14. PHP・GCの話-5話)GC登場。GC発生条件とROOT BUFFER
- 15. strlen関数とmb_stlen関数について
- 16. PHPで文字化けするCSV処理を文字化けしなくする方法
- 17. 【PHP】リンクの?と&
- 18. ※学習用メモ デザインパターン:Template Method編[PHP]
- 19. Laravel8をインストールしたらやっていること一覧
- 20. 「php artisan ui vue –auth」ができなかった時の解決法【メモ】【超初心者】
VSCodeでphpをデバッグする
環境
初書:2020/09/13
PC:macOS 10.15.6
php 7.4.9
xdebug 2.9.6# 前置き
PHPでもデバッグしたい!という事で、デバッグする方法を探してみた。# 前提
peclが利用可能な環境・vscodeがインストール済み# debugをインストールする
## PHP debug
vscodeの拡張機能から、PHP Debugをインストールする
(publisher:Felix Becker。他の人のでも動くかは未検証)## xdebug
ターミナルから、“`zsh
% pecl install xdebug
“`
を実行し、xdebugをインストール
`% pecl list`を実行し、xdebugが表示されればインストールは完了# php.iniを設定する
“`zsh
% vim /usr/local/etc/php/7.4/php.ini
“`
(※phpのバージョン及びphp.iniの場所によって座標は変更する。)
を実行し、以下のコードを追加する(一番上に書き足しても動く)“`text
zend_ext
【PHPメモ】in_arrayで重複をチェック
###0.目的
自分用のメモ###1.重複文字問題
(1)112233が入力の時
⇒123
(2)233342213が入力の時
⇒2341
のように出力するプログラムを作る。###2.メモ
`in_array(検索対象文字列,配列):配列の中に検索対象文字列が存在するか確認する関数、存在する場合true,存在しない場合false`
###3.コード
※paiza.IOで動作確認
“`php
array_push の返り値
array_push の返り値は処理後の配列そのものではなく、配列の要素数なので、書き方には気を付けなければいけません。
“`example.php
$ex_array = array();
array_push($ex_array, ‘youso’);
//$ex_array = array_push($ex_array, ‘youso1’); ではエラーになる
“`
Laravel 8 の新機能!マイグレーションスカッシングで肥大化したマイグレーションファイルを1つにまとめる
大規模または長期間運用されているアプリケーションでは、
数年以上前に作成されたマイグレーションファイルが膨大な数になってきます。データベーステストを行っているプロジェクトでは、マイグレーションを適用するのに時間がかかりテストの速度が低下する懸念があります。
これの解決策として、Laravel 8ではマイグレーションスカッシング(スキーマダンプ)と呼ばれる新機能が追加されました。`mysqldump` まはた `pgdump` を使用して現在のスキーマの状態からダンプを作成します。
(MySQL、PostgreSQL、SQLiteデータベースのみサポート)## 公式ドキュメント・ソース
– https://readouble.com/laravel/8.x/ja/migrations#squashing-migrations
– https://laravel.com/api/8.x/Illuminate/Database/Console/DumpCommand.html
– https://github.com/laravel/framework/blob/8.x/src
【PHP】デバッグ
PHPについて学習内容を備忘録としてまとめます。
#デバッグについて
開発中にエラーが発生した際に、デバッグをすると思います。
その中でも私がデバッグ方法を記載します。##var_dump
コードの中で値を確認する際に利用することができます。
例えば、下記のような従業員がログインするコードで見ていきます。“`php
#staff_login.php
Laravelでサブドメイン対応(さくらレンタルサーバ)
やりたいこと
main.hoge.hoge → routes/main.phpでルーティング
api.hoge.hoge → routes/api.phpでルーティング
test.hoge.hoge → routes/test.phpでルーティング##①テスト環境と本番環境でドメインを分けるためにconfig設定
configフォルダ内にmyapp.php作成
\Config::get(‘myapp.domain.main’)でアクセスできる“`config/myapp.php
[
‘main’ => ‘main.hoge.hoge’,
‘api’ => ‘api.hoge.hoge’,
‘test’ => ‘test.hoge.hoge’,
]
];
“`
コンフィグファイルのキャッシュクリアをしないと反映されない。“`
$ php artisan config:cache
“`##②ルーティング設定
“`/app/Provider
AndroidスマホにApacheとPHPとMySQLをインストールする
UerLandを使ってAndroidスマホにApacheとPHPとMySQLをインストールします。
UserLandでUbuntuのsshをインストールするとポート2022番号でログインをすることができます。
~~~~
ssh USERNAME@192.168.xxx.xxx -p2022 ;
~~~~ログインをしたらまずは最新にアップデート
~~~~
sudo apt update ;
sudo apt upgrade -y ;
sudo apt install -y nano ;
~~~~Apache2 PHP MySQLをインストール
~~~~
sudo apt install apache2 php php-mysql mariadb-server ;
~~~~Apacheの開放ポートを80から8080へ変更
~~~~
emacs /etc/apache2/ports.conf ;
~~~~下記修正
~~~~
Listen 80
↓
Listen 8080
~~~~サービスとして起動(systemctrlは使用できないため)
~~~~
serv
Stoplight Studioで作成したswagger.yamlを並び替えて見やすくするプログラムを作った
Swagger.yamlを作るのに[stoplightのツール](https://stoplight.io/)はとても便利なのですが、
生成されるファイルは、ツールで登録した順に記述されるので、後でSwagger.yamlそのものを、見た時に並び順がバラバラで見づらくなります。
そこで、APIやComponentを昇順に並び替えて、中の項目も同じ順で並び替えるプログラムを作りました。## 事前準備
yamlファイルの読み込み、書き出しにsymfony/yamlパッケージを使います。
composerを使ってインストールしてください。例:
“`json:composer.json
{
“require”: {
“symfony/yaml”: “*”
}
}
“`` php composer install`
##使い方
以下のプログラムを、整形したいswaggerファイルを指定して実行するだけです。
指定したファイルの拡張子の手前に、_convertedとついたファイルが生成されます。“`php:convert_swagger.php
PHPUnitのバージョンアップで使えなくなったgetMock()の置き換え法(草刈り)
# 環境
– php 5.6.21
– phpUnit 5.7.27
– Xdebug 2.4.0# 前置き
たまたまPHPUnit5.7.27が入っている環境の触れる機会がありました。
この環境でテストを実行すると以下のように大量の警告が出てきて「何事だ!?」となったのが始まりです。
![スクリーンショット 2020-09-02 16.40.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323051/52f06cfd-2210-d943-8c37-69104d008929.png)
↑大量の警告が出て大草原になっています
この警告を消して(草刈りして)いきたいと思います。# 警告の内容
警告の内容は以下の通りです。“`terminal
PHPUnit_Framework_TestCase::getMock() is deprecated, use PHPUnit_Framework_TestCase::createMock() or PHPUnit_Framework_TestCa
PHPでWindows向けのCSVデータをLinuxサーバにて生成する。
手間だった為、関数を用意しておく。
# 生成するCSVデータ
* 文字コード = Shift-JIS
* 改行コード = ¥r¥n
* ¥r = キャリッジ・リターン(carriage return、復帰)
* ¥n = ライン・フィード(line feed、改行)
* 項目を囲む文字 = 「”」(ダブルコーテーション)# 関数
“`php
/**
* 二次元配列からWindows向けのCSVデータを生成する。
*
* @param array $records
* @param string $delimiter
* @param string $enclosure
* @param string $enclosure_escape
* @param string $line_break
* @param string $from_encoding
* @param string $to_encoding
* @param int $maxmemory
* @return string
*/
function createWinCSV(
Web系の定番ソフトウェアのバージョンを確認する。
次のコマンドを発行する。
# CentOS
“`bash
cat /etc/redhat-release
“`# Apache
“`bash
httpd -v
“`# Java
“`bash
java -version
“`# Python
“`bash
python –version
python3 –version
“`# PHP
“`bash
php -v
“`# WordPress
“`bash
cat wordpress/wp-includes/version.php
# $wp_versionの値を確認する。
“`# MySQL
“`bash
— MySQL接続後に次のSQL文を発行する。
select version();
“`# Oracle Database
“`bash
— OracleDB接続後に次のSQL文を発行する。
select * from v$version;
“`# 備考
本記事はブログ「[雑用エンジニアの技術ノート](https://scrapbox.io/nezuq/)」から
Laravel8を試したら即効でエラー「Target class [〇〇〇Controller] does not exist.」が表示された
#はじめに
最近になってLaravel8がリリースされたと聞いて、とりあえず動かしてみようと思ったら開始早々にエラーが発生しました。
![laravel8エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554111/47c2073b-b036-62e3-f8c1-1ecdf1d5e0b4.png)
`web.php`で`PostController`を呼び出す処理を書いたのに上記エラーが発生。Laravel6ではちゃんと呼び出せたのに:joy:
そのときの`web.php`はこちら。“`php:web.php
Laravelでneo4jを使う④マイグレーション
#事前準備
・app/database/labelsフォルダの作成#
$ php artisan neo4j:make:migration create_race_label
$ php artisan neo4j:migrate
| コマンド | 説明 |
|:-:|:-:|
| $label->unique(‘email’) | プロパティに一意の制約を追加する |
| $label->dropUnique(‘email’) | プロパティから一意の制約を削除する |
| $label->index(‘uuid’) | プロパティにインデックスを追加する |
| $label->dropIndex(‘uuid’) | プロパティからインデックスを削除しています |
| | |コマンド 説明
PHP・GCの話-5話)GC登場。GC発生条件とROOT BUFFER
## 前書き
– すべての記事は、自分の勉強目的と主観の整理を含めています。あくまで参考レベルで活用してください。もし誤った情報などがあればご意見をいただけるととっても嬉しいです。
– 内容では、省略するか曖昧な説明で、わかりづらいところもあると思います。そこは、連絡いただければ補足などを追加するので、ぜひ負担なくご連絡ください。
– 本文での「GC」は、「Garbage Collection, Garbage Collector」の意味しており、略語として使われています。
– この記事は、連載を前提に構成されています。**※ 連載目録**
> – [PHP・GCの話-1話)なぜGarbageCollection? メモリとGCを意識する](https://qiita.com/genie-oh/items/e6dfc49fb9899f931271)
> – [PHP・GCの話-2話)変数の管理情報、zval containerとreference count](https://qiita.com/genie-oh/items/3537a91e65c5659c3caa)
> – [
strlen関数とmb_stlen関数について
今日からPHP学び始めたので初歩的な内容ですがまとめたいと思います。
## strlen関数とは
これはrubyでいうところのstring#lengthメソッドと同じです。
構文はこうです。
“`
strlen ( string $string ) : int“`
引数の`( string $string )`には文字列が入り`: int`は返り値となってます。
例えばこうです。
“`
strlen(‘abc’) => 3
“`ただ日本語の場合は違う返り値になります。
例えば、、、“`
$text = ‘あいうえお’strlen($text) => 15
“`なぜ。。。
原因としては日本語のマルチバイトはsjis, utf-8だからです。(現在はほとんどがutf-8みたいです。)
###マルチバイトとは
1バイトで表現できない(2バイト以上で表現する)データのことみたいです。。。
バイトってなんだ。。###バイトとは
調べたところ、バイトとは、情報量の単位で、8ビットと等しい情
PHPで文字化けするCSV処理を文字化けしなくする方法
# 結論
[fw3/streams](https://packagist.org/packages/fw3/streams)を`composer require fw3/streams`して、CSVを扱っている処理を次のように囲ってあげれば文字化けしなくなります。
※ PHP7.2.0未満(下限PHP5.3.3)で解決したい場合は[fw3_for_old/streams](https://packagist.org/packages/fw3_for_old/streams)を利用してください。(`composer require fw3_for_old/streams`)
[fw3/streams](https://packagist.org/packages/fw3/streams)および[fw3_for_old/streams](https://packagist.org/packages/fw3_for_old/streams)共にPHP8.0 beta 2まで動作確認済みのため、PHP7.2.0以上のシステムの場合はどちらを入れても変わりはありません。
※ compos
【PHP】リンクの?と&
PHPについて学習内容を備忘録としてまとめます。
#リンクの?と&
##パスに?を指定
リンク先のパス名を書くときに値を渡したい時があると思います。
例えば、商品番号であるpro_codeをリンク先に値として渡したいときには?の後に指定します。“`php
#pro_list.php
#rec[‘code’]は飛ぶ先の商品コードが入っており、今回は1が入っています。
#商品の詳細情報を確認するボタン↓クリックするとpro_disp.phpに飛ぶ
#pro_disp.php
#実行結果
商品コード:1“`
このようにパスで指定したpro_codeの値をパス先であるpro_disp.phpに渡しています。##パスに&を指定
パス先に複数の値を返したいときには&を使います。
下記の例では先ほどに追加でユーザーIDを値として渡す場合の
※学習用メモ デザインパターン:Template Method編[PHP]
# はじめに
使用している言語はPHPです。(自分が良く使うので)## Template Methodパターンとはどういうものか
スーパークラスと呼ばれるクラスで処理の大きな枠組みを決め、
サブクラスと呼ばれるクラスで具体的な内容を記述するというデザインパターンのこと。**似たような処理を共通化させたい**際に用いられることが多い
## Template Methodパターンを用いるメリット/デメリット
* メリット
* スーパークラスに主なロジックが記述されているため、バグが生じた際にスーパークラス内に記述されているTemplateMethodを修正すればよい
* サブクラスの内容が簡潔になる* デメリット
* サブクラスの数が増加するケースが多い
* 親子関係が密接であるのでスーパークラスのロジックを確認したうえでないと実装することが難しい
* スーパークラスの処理が大きくなると、サブクラスの自由度が小さくなってしまう## サンプルコード
### 仕様
父親とその子どもの一日の行動(平日)を文字列表示する。(いい例が思いつかなかった)以下のクラスを用
Laravel8をインストールしたらやっていること一覧
## まえがき
・ヮ・)あ、おはようございまーす
毎回「この前、最初にどんな設定をしたっけ」と悩んでしまうので**自分がよくやる設定**を備忘録を兼ねてまとめました
Laravel6の設定は[こちら](https://qiita.com/schrosis/items/a41c132ad002a9eebf02)
## `composer create-project` しないでインストールした場合
`composer create-project` してLaravelをインストールすると
`.env.example` をコピーして `.env` を作って、`APP_KEY` の設定もしてくれますしかし、Laravelのプロジェクトをクローンして `composer install` でインストールした場合は、手動でやる必要があります
“`sh
# .env.exampleをコピーして.envを作成
php -r “copy(‘.env.example’, ‘.env’);”
# APP_KEYの生成
php artisan key:generate
“`## AP
「php artisan ui vue –auth」ができなかった時の解決法【メモ】【超初心者】
“`
$ php artisan ui vue –auth
“`
上記を実行しようとしたところ、、、##エラー内容
「Command “ui” is not defined.」
![スクリーンショット 2020-09-12 16.36.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693622/1b8aaa3c-618e-8a56-4790-b9dc2c4e52a9.png)##解決した方法
“`
$ composer require laravel/ui “^1.0” –dev
“`
このコマンドを実行してから
またさっきのをやってみたらできました“`
$ php artisan ui vue –auth
“`参考にしたサイト https://zukkokeblog.com/laravel6-auth