- 1. [mac]MAMPでxdebugを使いたいとき
- 2. 【Qiigle】というQiitaの記事を検索するサービスを作りました
- 3. PHPでWebSocket
- 4. 【Laravel】Artisanコマンド基礎
- 5. 【PHP + Google Drive API】アプリケーションから自動で共有ドライブにアクセスしてファイル操作する
- 6. PHPの超雑な開発環境を作る
- 7. 【PHP】Trying to get property ‘methods’ of non-object in 〜 のエラー解決方法
- 8. PHPのBoolean型で利用する、true, falseという単語は「定数」
- 9. PHPの言語仕様 (命令文とセミコロン)
- 10. LaravelでAPI単位で接続先DBを切り替える
- 11. yps並走記録 Task3 SQL:テーブル作成(復習)バッチ作成(復習)~php.ini設定~GitHubにファイルをアップロード~WordPress5.4.2セットアップ
- 12. PHPで書いたレガシーコードをテスト可能にする
- 13. PHPだけで簡単なおみくじを作ってみた
- 14. PHP 7.3からPHP 7.2へのダウングレード
- 15. PHPでAWS CLIを用いてS3に画像をアップする
- 16. LaravelでRedisを操作する
- 17. 【PHP】CSVを作成し、ZIPに圧縮してダウンロード
- 18. [PHP]strtotime(“- 1 month”)はアカン[31日はテストが落ちる日]
- 19. 【PHP Redis】Redisが動かない時
- 20. PHP 「?:」 の正体を知ってすっきりした話
[mac]MAMPでxdebugを使いたいとき
#参考記事
大変わかりやすくまとまっている記事。初心者向けに書いてあると思うので
これ読めばわかるはず。
https://qiita.com/miriwo/items/6edd6e1817def4fc11d5
【Qiigle】というQiitaの記事を検索するサービスを作りました
**[Qiigle](https://qiigle.com/)**という、Qiitaの記事を検索するサービスを作りました。
サイトURL: https://qiigle.com/
GitHub: https://github.com/nyshk97/qiigle
![how_to_use_qiigle (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244893/705f60c4-238e-f10e-f048-0a7f3a443800.gif)## 何ができるか(仕様)
– Qiitaの記事を「ユーザー名」「タイトル」「本文」「タグ」で絞り込んで表示します
– 複数入力した場合、**AND条件**になります
– ユーザー名とタグは**完全一致**、タイトルと本文は**含む**です## なぜ作ったか
開発中に過去自分が書いた記事を参照することがよくあるのですが、数が多くなってきて探すのが大変になってきました。(ブックマークで管理するのツラい)ユーザー名 + 記事の内容で簡単に記事を検索
PHPでWebSocket
PHPでWebSocketやっていきます
# プロジェクト作成
Composerプロジェクトをつくります
Composerをインストールしていない方はインストールしてください
[Composerをインストールする](https://qiita.com/toontoon/items/62a42ca2d05735a8c082)適当なフォルダをつくって
コマンドラインでcdして行きます
`composer init`
これでcomposer.jsonできます
今回はRatchetを使っていきます
[Ratchet (http://socketo.me/)](http://socketo.me/)
`composer require cboden/ratchet`
これでRatchetが使えるようになりますsrcフォルダをつくります
composer.jsonのautoload修正します
composer.jsonは下記にします“`composer.json
{
“autoload” : {
“psr-4” : {
“App\\” : “src”
}
},
【Laravel】Artisanコマンド基礎
# Artisanコマンドとは
– **PHPのフレームワークであるLaravel専用のコマンド**
– **Artisanコマンド使用することでモデルやコントローラを簡単に作成することが出来る**## アプリケーション作成
“`terminal:ターミナル
laravel new アプリケーション名
“`## サーバー立ち上げ
“`terminal:ターミナル
php artisan serve
“`## コントローラ作成
“`terminal:ターミナル
php artisan make:controller コントローラ名
“`## サービスプロバイダー作成
“`terminal:ターミナル
php artisan make:provider サービスプロバイダー名
“`## ミドルアウェア作成
“`terminal:ターミナル
php artisan make:middleware ミドルウェア名
“`## フォームリクエスト作成
“`terminal:ターミナル
php artisan make:request フォ
【PHP + Google Drive API】アプリケーションから自動で共有ドライブにアクセスしてファイル操作する
# 実現すること
アプリケーション側からGoogleDriveの共有ドライブへ自動でファイルアップロードや検索を行いたい:nerd:なお、共有ドライブを外部に公開する必要があるため、所属する組織の運営方針等を確認してから行いましょう。
わたしは外部公開しないで直接共有ドライブへファイル操作を行う方法は見つけられませんでした。# GoogleDriveを操作する準備
やることは3つです。
1. GCPでサービスアカウントを作成
2. GoogleDrive側の設定
3. 共有ドライブにアクセスするためのパラメーター付与(アプリケーション側)## GCPでサービスアカウントを作成
GCPへアクセスします。
共有ドライブを所有する当該組織とプロジェクトを作成または選択します。
ナビゲーションメニューより「APIとサービス」からGoogleDriveAPIの有効化しておきます。
サイドメニューより「IAMと管理」よりサービスアカウントを作成します。
その後、作成したサービスカウントに対して、JSONのcredental keyも作成しておきます。## GoogleDrive側の
PHPの超雑な開発環境を作る
“`zsh
$ cd ~/sample_app
$ php -S localhost:3000
Listening on http://localhost:3000
Document root is /Users/your_name/sample_app
Press Ctrl-C to quit.
“`
“`sample_app/index.php
hello world
“`
http://localhost:3000 にアクセスしてhello worldを確認
【PHP】Trying to get property ‘methods’ of non-object in 〜 のエラー解決方法
##はじめに
エラーログで`Trying to get property ‘methods’ of non-object in 〜`って出てきたことはありませんか?
存在しない変数のプロパティやnullの値を参照した時にこのエラー発生するもので、私たまに出てくるんですが大概の場合はすぐ解決できます。
今回は実務でこのエラーが出てきて(配属されてすぐなので人のコードの修正でした…)その修正でした。##issetを用いてエラーを解決
`Trying to get property ‘methods’ of non-object in 〜`のエラーなのですが、存在しない変数のプロパティやnullの値を参照した時にこのエラー発生するの、issetやisnullなどの関数を使うとチェック出来ます。
今回はissetで解決したのですが、前の部分で実装していた`foreachループ`が効いていて後続の処理でエラーが起きていました。
なので今回の対象の部分に“`php:
isset($hoge)
“`と実装すると解決します。
##おわりに
ちゃんと実装できているかの確認は画面の動
PHPのBoolean型で利用する、true, falseという単語は「定数」
# TRUE, FALSEとはなんなのか
Boolean型の変数において格納する true, false というキーワード。
TRUE, True, true のように様々に書くことができます。私は true, false 派です。
馴染み深いものですが、よくよく考えるとこれは何なんでしょうか。> boolean リテラルを指定するには、定数 TRUE または FALSE を指定してください。 両方とも大文字小文字に依存しません。
https://www.php.net/manual/ja/language.types.boolean.phpというわけで、定数でした。
# 大文字小文字を気にせず使えるのは、定数だから
true, false は大文字小文字を気にせず使えます。
“`php
$flag = TRUE;
$flag = True;
$flag = true;
“`これは、`define()` で定義された定数についてPHPが大文字小文字を区別しないことから、このような挙動になっていると推測されます。
参考:[Q. PHPは大文字小文字を区別するか?#定
PHPの言語仕様 (命令文とセミコロン)
# 環境
“`
$ php7.2 –version
PHP 7.2.24-0ubuntu0.18.04.6 (cli)
“`
記事中のコードについては上記環境で確認を行っています# 命令文の区切り文字としてセミコロン (;) を使用する
動作する
“`
PHP Parse error: syntax error, unexpected end of file in ~/aaa.php on line 3# 閉じ括弧後のセミコロンは省略できる
動作する
“`
“`動作
LaravelでAPI単位で接続先DBを切り替える
## TL; DR
Laravelでは、接続先のDBのホストの[read/write接続](https://readouble.com/laravel/5.5/ja/database.html#read-and-write-connections)が自動的に設定されすが、OracleDatabaseへの接続を[yajra/OCI8](https://github.com/yajra/laravel-oci8)を用いると、このread/write接続が行えません。そのため、[Middleware](https://readouble.com/laravel/5.7/ja/middleware.html)にて、エンドポイント単位で接続先のDBを切り替えます。
## 環境
– Windows 10
– PHP 7.2
– Laravel 5.5
– Oci8 5
– Oracle database## Middleware作成
今回は、read接続先指定用とwrite接続先指定用のMiddlewareを作成します。
作成手順は、以下の要領です。“`
/var/www/html
yps並走記録 Task3 SQL:テーブル作成(復習)バッチ作成(復習)~php.ini設定~GitHubにファイルをアップロード~WordPress5.4.2セットアップ
早くも3週目になりました、yps
今回はなるべくリアルタイムで課題をやりながらログを取っていきたいと思います。##まずはSQL周りの復習
###MySQLのエンコード設定を直します
エンコード設定をutf8mb4に戻す(mysql cliから日本語扱えるようにutf8にしてた)
`sudo vi /etc/my.cnf`最終行に以下を追記
“`
[client]
default-character-set=utf8mb4
“`編集を保存し、mysqlを再起動
`sudo systemctl restart mysql`###練習で使うデータをダウンロード
`cd /tmp`
`sudo yum install wget`
`wget http://tech.pjin.jp/wp-content/uploads/2016/04/worldcup2014.zip`
`unzip http://worldcup2014.zip`データの確認
`ls -la worldcup2014.sql`###データベース作成
MySQLにログインして…
`mysql –
PHPで書いたレガシーコードをテスト可能にする
## はじめに
久々にPHPの酷いコードにテストを足したのでまとめるよ。
## 患者さん事例
PHPって地の文ベタ書きで全然かけてしまう。
なので雑に書いたコードが適当なフォルダに突っ込まれていて、それをApatchが直接参照していたりするわけだ。
拡張されまくったり炎上したりで結果的にとんでもなく酷いコードが出来上がる。
そう、こんな感じに。“`php:index.php
“;
if (/* なんかややこしい判定 */) {
echo “へんなとこでボディを返したり”;
if (/* if文の深淵で */){ exit; } // なんてされてたら目も当てられない
}
else{
header(“クレイジーなと
PHPだけで簡単なおみくじを作ってみた
#概要
非常に簡単な機能です。まず、初期画面に「おみくじを引く」ボタンがあり、
ボタンを押すと、7つあるくじのうちの一つがランダムに引かれ、結果が表示されます。
結果の詳細をクリックすると、くじに応じたコメントが表示されます。
PHP 7.3からPHP 7.2へのダウングレード## はじめに
VPS上に構築しているシステムで以下のようなwarningが出た
“`
“continue” targeting switch is equivalent to “break”. Did you mean to use “continue 2”?
“`sshでバージョン表示させるといつのまにかバージョンが上がっていた
“`
$ php -v
PHP 7.3.19 (cli) (built: Jun 9 2020 08:06:30) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.19, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.19, Copyright (c) 1999-2018, by Zend Technologies
“`PHPドキュメントを見に行くとphp7.3ではcontinue文が非推奨との事
https://www.php.net/manual/ja/migr
PHPでAWS CLIを用いてS3に画像をアップする
EC2環境上でPHPのexec関数とAWS CLIを用いてS3に画像をアップしようと思ったら、嵌ったので備忘録メモです。
まず、事前にEC2上で
“`
$ aws configure
“`
を叩いて、アクセスキー ID、シークレットアクセスキー、AWSリージョン、出力形式を入力した後に、PHPファイルに“`php5
exec(‘aws s3 sync ./upload s3://{バケット名}/img –acl public-read –delete’, $out);
“`
を挿入し、実行してみましたが$outに結果が返らず、S3にもアップされませんでした。
そこで、PHPのファイル上に事前に次の形式でアクセスキー ID、シークレットアクセスキー、AWSリージョンを記述したあとにexec関数を記述すると動作しました。“`php5
$region = ‘ap-northeast-1’;
$key = ‘****’;
$secret = ‘**********************’;
putenv(‘AWS_DEFAULT_REGION=’ . $re
LaravelでRedisを操作する
# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています[LaravelでDIを使う](https://qiita.com/toontoon/items/ebf53e4053be6f663730)
本記事は上記で作成したフォルダとファイルを使用します# PhpRedisのインストール
PhpRedisを介してRedisを操作します
下記リンクで環境構築した人はインストールされているはずです
[LAMP+Redis環境を超短手数で構築する](https://qiita.com/toontoon/items/0ade09a5fb3f70fd0c0d)
インストールしていない人は下記リンクに従ってインストールしてください
[phpredis インストール](https
【PHP】CSVを作成し、ZIPに圧縮してダウンロード
#はじめに
前回の記事[【PHP】Excelで文字化けしないCSVファイル作成](https://qiita.com/Tommy0221/items/83478c0bb2b97b21a913)の続き?というより最終的にやりたかったことを備忘録として記事にします。**非同期通信で、DBからテーブルごとのCSVを作成し、ZIPに圧縮してダウンロードさせる!!!**
ZIPに圧縮まではすんなりできたのですが(前回記事は多少躓きましたが…)、ダウンロードしたZIPファイルが開けない/解凍できない現象に悩まされました。
非同期をjQueryでやっていたんですが上手くいかず、XMLHttpRequestに変えたら成功しました。
何がダメだったんだろう。。。#コード
ルーティングとかは省きます。“`javascript:クライアント側 JS
var request = new XMLHttpRequest();
request.open(‘GET’, ‘/getZip’, true);
request.responseType = “blob”;
request.onload =
[PHP]strtotime(“- 1 month”)はアカン[31日はテストが落ちる日]
# これはなに?
PHPでstrtotime(“- 1 month”)とかstrtotime(“+ 1 month”)とか書いちゃだめだよって話です。
# 今日は何の日でしょう?
今日は、弊社の自動テストが落ちた日です。
昨日は落ちなかったのに、いったいなぜ今日落ちてしまったのでしょう。# なぜ落ちた?
それは今日が`31日`だからです。
テストコードに現在時刻を使ったコードがありました。
ただし、現在時刻から+1ヶ月したり-1ヶ月したりして、相対的な日付でテストをしているので、
普段は時刻が変わることによる問題は起こっていませんでした。しかし、今日初めて問題が発覚しました。
現在時刻から前月の月を取得する計算が31日だけおかしかったのです。## 前月の計算の仕方(NGケース)
“`php
strtotime(“- 1 month”)
“`一見良さそうです。今から マイナス1ヶ月後の日付が取れそうです。
7/1なら6/1
7/20なら6/20
**7/31なら7/1**
“`
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚)
【PHP Redis】Redisが動かない時
Redisの動作を確認しましょう
“`sh
$ sudo chmod +x /etc/init.d/redis
$ sudo service redis status
$ sudo service redis restart
“`
PHP 「?:」 の正体を知ってすっきりした話
# 目的
– 先輩方が開発に携わったLaravelアプリのソースコードをみていたら自分の知らない処理が出てきて驚いた話をまとめる
# 初見のコード
– 自分が初めて見たコードを下記に記載する。
“`php
変数 = 比較対象A === 比較対象B ?文字列1:文字列2;
“`# 簡単な解説
– 処理内容を下記に簡単に記載する。
1. 比較対象Aと比較対象Bを比較する。
1. データ型も含めて比較し、一致しているのかしていないのかを確認する。
1. 一致していた(true)の場合、文字列1が変数に格納される。
1. 一致していない(false)の場合、文字列2が変数に格納される。
– この`?`と`:`を用いた記載(`?:`)は条件演算子と呼ばれる物である。
– 下記に処理を記載する。“`php
条件式 ?式1:式2;
“`
– 上記の様な処理の場合、条件式が真(true)の時に式1を実行し、偽(false)の時に式2を実行する。# 具体例
– 下記の様なコードを実行した時の結