20211015のPHPに関する記事は7件です。

【初心者向け】 企業で活躍できるエンジニアになるためのロードマップ① Web編

目的 みなさんエンジニアを目指して日々勉強していると思います! 勉強してるけど、これで本当に稼げるエンジニアになれるの??と不安な人がたくさんいるでしょう! 今回は未経験の人、プログラミング初心者 が 「企業で活躍できるエンジニア」 「どこでも成長できるエンジニア」 になるためのロードマップを作成しましたので是非みていってください。 まずは、Webアプリケーションエンジニアを目指しましょう! こちらに移行しました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP,Laravelでメモアプリを作った際の忘却録

Dockerのインストールとdockerコマンドの使用 私が使用しているMacにdockerをインストールしてdockerコマンドを使えるようにするらしい この前のrailsを使ったLINE-botもそうだが 何かの外部からのコマンドを使えるようにするには 外部からインストールするというのが方法のようだ Dockerとは Dockerとは現在使用しているパソコンにnginx(最も高い稼働率を誇るサイトのうち約65%以上で広範囲に支持されている高信頼のWebサーバシステム)やMySQL(オープンソースのリレーショナルデータベース管理システム)などの開発に必要とされるソフトウェアを簡単にインストールして動かせる技術のこと。 確認 そんなDockerをインストールして実際にターミナルでコマンド入力できるか確認 すると > docker-compose -v unknown shorthand flag: 'v' in -v とでた docker-compose --version Docker Compose version v2.0.0-rc.3 このようにコマンド入力したらバージョンが出た。 よかった。 PHPの環境構築の際のエラー さて、今回はPHPを使用するのだが Git Hubから環境構築用のファイルを取得し、 docker-composeコマンドを使って環境の立ち上げを行なった docker-compose -f .docker_memo/docker-compose.yml up -d このコマンドを使用することで環境構築を自動で行なってくれるらしい Recreating php_simple_memo_mysql ... done Recreating php_simple_memo_phpmyadmin ... done Creating php_simple_memo_php ... done Creating php_simple_memo_nginx ... done 無事完了した これで、mysql, phpmyadmin, php, nginxが起動している状態になった。 また docker ps こちらのコマンドで起動状況の確認ができた 実行されているアプリケーションの環境の停止と起動 停止 docker-compose -f .docker_memo/docker-compose.yml down 起動 docker-compose -f .docker_memo/docker-compose.yml up -d Laravel createメソッド→モデルに$fillableまたは$guarded変数を作成して、設定をしないといけません。 $guarded→更新できないカラムを列挙した一覧を設定 $fillable→更新できるカラムを列挙した一覧を設定 dockerコンテナに入ってlaravelのマイグレーションを行なった際に発生したエラー dockerコンテナに入って php artisan migrate を実行したところ Nothing to migrate というエラーが発生した どうやらmigrateするものはないとのこと php artisan migrate:fresh で実行したところ Dropped all tables successfully. Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (78.65ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (51.53ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (61.13ms) Migrating: 2021_10_09_122745_create_memos_table Migrated: 2021_10_09_122745_create_memos_table (30.86ms) となって成功した。 この:freshを行うことで全てのテーブルをドロップしてから再びマイグレーションできるらしい PHPとLaravelのファイルやディレクトリの作成の違い PHP→mkdirやcd,vimを使用してファイルやディレクトリの作成を行う Laravel→dockreコンテナに入ってコマンドを実行して作成
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

pmmpをソースコードから実行する

環境 windows やり方 pocketmine まずpocketmineをclone。cloneするブランチやタグを指定してあげてください --recursiveつけないとあとから怒られるから注意 git clone --recursive https://github.com/pmmp/PocketMine-MP.git -b [ブランチ名(4.0.0-BETA5とか)] そしたらこんな感じ php8のbin ここから持ってきます 展開して中身のbinだけとりだして、PocketMine-MP以下に配置します こんな感じなってると思います composer つぎにここからcomposerダウンロードしてきて、PocketMine-MP/にcomposer.pharを入れます D:\~~\PocketMine-MP\bin\php\php.exe D:\~~\PocketMine-MP\composer.phar installを実行 ↑のやり方だとdevチャンネルのcomposerらしく、問題が発生する場合があるとご指摘いただきました。 インスートーラーを使用するか、https://getcomposer.org/download/やhttps://getcomposer.org/composer-stable.pharから安定版がダウンロードできるようです。 サーバーを起動 D:\~~\PocketMine-MP\bin\php\php.exe D:\~~\PocketMine-MP\src\pocketmine\PocketMine.php
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

pmmp4をソースコードから実行する

環境 windows やり方 pocketmine まずpocketmineをclone --recursiveつけないとあとから怒られるから注意 git clone --recursive https://github.com/pmmp/PocketMine-MP.git そしたらこんな感じ php8のbin ここから持ってきます 展開して中身のbinだけとりだして、PocketMine-MP以下に配置します こんな感じなってると思います composer つぎにここからcomposerダウンロードしてきて、PocketMine-MP/にcomposer.pharを入れます D:\~~\PocketMine-MP\bin\php\php.exe D:\~~\PocketMine-MP\composer.phar installを実行 ↑のやり方だとdevチャンネルのcomposerらしく、問題が発生する場合があるとご指摘いただきました。 インスートーラーを使用するか、https://getcomposer.org/download/やhttps://getcomposer.org/composer-stable.pharから安定版がダウンロードできるようです。 サーバーを起動 D:\~~\PocketMine-MP\bin\php\php.exe D:\~~\PocketMine-MP\src\pocketmine\PocketMine.php
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】RefreshDatabaseでデータがロールバックされない問題を解決する

問題 LaravelでMySQLのDBテストを書いていたら、RefreshDatabaseでロールバックされないデータが発生した。 原因 テストで使っていたシーダー内でtruncate()を実行していたため。 解決方法 truncate()を使用しない。 状況の再現 たとえばhogeシーダーでは、truncate()で最初にテーブルデータの全件削除を行って、つぎにデータを投入している。 HogeTableSeeder.php <?php use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class HogeSeeder extends Seeder { public function run() { DB::table('hoge')->truncate(); DB::table('hoge')->insert(['name'=>'事前投入ほげほげ']); } } 下記のようなDBテストで、RefreshSeederの実行&シーダーでのデータの流し込みをしているとする。 HogeTest.php <?php namespace Tests\Unit; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; use App\Hoge; class HogeTest extends TestCase { use RefreshDatabase; // テストごとにデータをリフレッシュする public function setUp(): void { parent::setUp(); $this->seed(); // テスト開始時にシーダを実行する } public function testHoge1() { // hogeテーブルにデータを追加する $hoge = new Hoge(); $hoge->name = "テストほげほげ"; $hoge->save(); // このテスト内ではデータは存在するはず $this->assertDatabaseHas('hoge', ['name' => "テストほげほげ"]); } public function testHoge2() { // 別のテストではtestHoge1()で追加したデータは存在しないことを期待している $this->assertDatabaseMissing('hoge', ['name' => "テストほげほげ"]); } } シーダーで流し込んだデータは全てのテストで共通して存在しており、各テストで追加したデータはそのテスト内のみで完結するように期待している。 しかしこのテストを実行すると、1つめのテストで追加したデータが残ったままで、2つめのテストは失敗する。 また、テスト終了後のテーブルの中身はシーディングデータ含めすべて残っている(ロールバックされていない)。 id name 1 事前投入ほげほげ 2 テストほげほげ 3 事前投入ほげほげ RefreshDatabaseとtruncate()を同時につかってはいけない DB::table()->truncate()はテーブルの全件削除のメソッドで、sqlのtruncateを実行する。 db:seed時に前回のシーディングデータを削除したいがために使用されていたようだった。 一方、RefreshDatabaseはmirate:refreshを実行し、トランザクションを貼って最後にロールバックするメソッドである。 これら2つが併用されるとどうなるかというと、下記の様になる。 --テスト開始-- 1. migrate:refresh実行 2. トランザクッション開始 3. シーダー実行 4. truncateの実行(暗黙的なコミットがはしる) 5. テストメソッドの処理 6. tearDown()が呼ばれる 7. ロールバックができない --テスト終了-- sqlで書くとこんなかんじ。 BEGIN; TRUNCATE `test`.`hoge`; INSERT INTO `test`.`hoge` (`id`, `name`) VALUES ('1', '事前投入ほげほげ'); INSERT INTO `test`.`hoge` (`id`, `name`) VALUES ('2', 'テストほげほげ'); ROLLBACK; 実行するとわかるが、トランザクション内でtruncateを実行するとcommitが走るので、その後のinsertで追加したデータは残ったままである。 解決方法 truncateを使用しない migrate:fresh --seedすればいいだけなので、そもそもシーダーでtruncate()を呼ぶのはナンセンスである。 これだけのことを探すのにすごい時間がかかった。 参考:https://dev.mysql.com/doc/refman/8.0/ja/implicit-commit.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[PHP]指定月の月末日を取得

パラメーターで受け取った値(年と月)を元に、その年月の月末日を取得する。 #受け取ったパラメーター $p_y=2021; $p_m=9 #後のdate関数で'Y-m-t'フォーマット指定のため $p_m=str_pad($p_m,2,0,STR_PAD_LEFT); $last_date = date("Y-m-t", strtotime("$p_y-$p_m-01")); # $last_date => '2021-09-30'
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP8でJITの設定方法

はじめに PHP8からJITというプログラムを高速に実行させる機能が導入されたようです。 その導入方法を残して起きます。 方法 php.iniファイルに以下を追記 php.ini zend_extension = opcache opcache.enable = 1 opcache.enable_cli = 1 opcache.jit = tracing opcache.jit_buffer_size = 128M ターミナルでphp -i | grepを実行し以下のようになっていたらOK opcache.jit => tracing => tracing opcache.jit_bisect_limit => 0 => 0 opcache.jit_blacklist_root_trace => 16 => 16 opcache.jit_blacklist_side_trace => 8 => 8 opcache.jit_buffer_size => 128M => 128M opcache.jit_debug => 0 => 0 opcache.jit_hot_func => 127 => 127 opcache.jit_hot_loop => 64 => 64 opcache.jit_hot_return => 8 => 8 opcache.jit_hot_side_exit => 8 => 8 opcache.jit_max_exit_counters => 8192 => 8192 opcache.jit_max_loop_unrolls => 8 => 8 opcache.jit_max_polymorphic_calls => 2 => 2 opcache.jit_max_recursive_calls => 2 => 2 opcache.jit_max_recursive_returns => 2 => 2 opcache.jit_max_root_traces => 1024 => 1024 opcache.jit_max_side_traces => 128 => 128 opcache.jit_prof_threshold => 0.005 => 0.005 DBのIOがあまり関係ないけど処理が遅い部分で試してみてください。 その速さに驚愕することでしょう(それほど速くならないこともありますが)。 もしDocker環境などでphp.iniをマウントしているようであれば一度docker downしてからお試しください ちなみに、Xdebugは使えなくなるとどこかの記事に書いてあった気がします。。 最後に ここまで来たかPHP...
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む