PHP関連のことを調べてみた2020年02月06日

PHP関連のことを調べてみた2020年02月06日

Docker環境にて、PHPのデバッグができるかどうか試しにやってみた

#はじめに
・今の職場にてPHPの開発をしているだが、デバッグができなくて困っている。苦肉の策でログを出しながら確認しているが、なんとかしたいと思い。
最近かじったDocker環境にてPHPのデバッグができる様なので、試しにやってみた。

#使用ツール
|項目 |バージョン |
|—|—|
|PC|Razer Brade Pro 2019|
|OS|Ubuntu 18.04 LTS |
|Docker |19.03.5|
|Docker-Compose |1.17.1 |
|PHP |php:7.2.7-apache (連携されているコンテナ)|
|Xdebug |2.7.0 |
|Visual Studio Code|1.41.1 |

“`dockerfile:Dockerfile
FROM php:7.2.7-apache

RUN apt-get update && \
docker-php-ext-install mysqli && \
pecl install xdebug
“`

“`yml:docker-comp

元記事を表示

while構文

while構文

“`
繰り返す条件を作るための初期化処理
while (繰り返す条件){
  繰り返したい処理
  更新処理
}
“`
↓↓↓↓↓

“`
$i = 1;
while ($i <= 365){ print $i . PHP_EOL; $i = $i + 1; } ``` - 一番重要なところは「繰り返す条件」`($i <= 365)` - ◯◯が△△になったら繰り返してください、◯◯が△△ではなくなったら繰り返しをやめてください、といった条件を記述する - 上記の場合は『$iという変数の内容が365以下の間繰り返す』と言った条件になっている - `$i`は最初どういう状態なのか? - 「初期化処理」`$i = 1;`の部分で行われる - `$i = 1`として数字の1を代入しているので、最初の`$i`の状態は 1 であることがわかる - while構文の条件である『$iが365以下』に該当するので、while構文の中括弧に入って「繰り返したい処理」が行われる - while構文は「繰り返したい処理」が終わると、元の

元記事を表示

備忘録_レンタル共用サーバーでcomposerを使う

1. 以下のリンクを参考に、composerインストール用のPHPファイルを作成
※諸事情により`php -r`が実行できん場合に限る
https://getcomposer.org/download/

“`

元記事を表示

【PHP】配列を文字列(EDI情報)化

#はじめに
EDI情報作成時に使ったロジックなので備忘録として残します。

#サンプルコード

“`php
class TestA
{
public function __construct()
{
$this->test1 = “00”;
$this->test2 = ” “;
$this->test3 = “00”;
$this->test4 = ” “;
$this->test5 = “GG”;
}
public function getTest1()
{
return $this->test1;
}
public function setTest1($test1)
{
$this->test1 = $$test1;

return $this;
}
・・・(省略)
}

class TestB
{
$test;

public function build()
{
$this->setTest(new TestA

元記事を表示

DoctrineCacheBundleが非推奨になったのでSymfonyのCacheを使うようにした

## 概要

Symfonyのアプリケーションで、キャッシュをする際に `DoctrineCacheBundle` を使っていたが、
`doctrine-bundle` が2.0系にバージョンアップしたタイミングで、
`DoctrineCacheBundle` が非推奨になっていたので、
SymfonyのCacheで実装したのと、その際に **クリアキャッシュで少しハマった話。**

## 環境

– Docker
– Symfonyアプリケーションが動作するWebコンテナ(`:443`, `:80`)
– Apache 2.4.41
– PHP 7.3.9
– Symfony 4.4.3
– PHPUnit 8.5.2
– DBコンテナ(`:3306`)
– MySQL 5.6
– Memcachedコンテナ(`:11211`)

## 実装方法

`doctrine-bundle` パッケージが 2.0系にバージョンアップしたタイミングで非推奨になった。

https://github.com/doctrin

元記事を表示

【WebAudioAPI】録音した音声をバイナリデータ化、PHPへ受け渡し

#概要
Node.js上で、IBMのWatsonによって人が話した音声データを自動で文字起こしするスクリプトを作成しました。
その中で、結構苦労した
PCのマイクに直接アクセス→録音した音声データをバイナリデータ化、PHPへ受け渡し
の部分をメモがてら貼り付け。
#環境
“`
$php -v
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
“`
#録音部分
“`hogehoge.js
// 音声データのバッファをクリアする
audioData = [];

//様々なブラウザでマイクへのアクセス権を取得する
navigator.mediaDevices = navigator.mediaDevices || navigator.webkitGetUserMedia;

//audioのみtrue

元記事を表示

fputcsvのダブルクォーテーション問題をスッキリ解決する

# 経緯

文字列をダブルクォーテーションできっちりくくった状態でcsvに吐き出す必要があった。
SQL側で文字列結合とかquote_identとかでダブルクォーテーション付けて結果を取得し、fputcsvで書き出すと下記状態になってしまっていた。

( ゚д゚) ・・・ (つд⊂)ゴシゴシ (;゚д゚)

“`
“””文字列”””,”””文字列”””,….
“`

どうやらfputcsvが残念仕様でPHP的には良くある話のようだ。
割とfputcsvを再発明して関数とかで何とかしてる人が多い気がする。

**ワイはそんなのやりたく無い**

# どうやったか

文字列にして乗り切った

“`
fputcsv($file, 文字列);
“`

“`
file_put_contents($file,implode(“,”,文字列).PHP_EOL,FILE_APPEND);
“`

元記事を表示

【Laravel】24時間以内に作成されたユーザーの数を集計する【指定範囲のデータ取得】

# 1日
“`php
use DB;

DB::table(‘users’)
->orderBy(‘created_at’,’desc’)
->whereRaw(‘created_at > NOW() – INTERVAL 1 DAY’)
->count()
“`

# 30分

“`php
->whereRaw(‘created_at > NOW() – INTERVAL 30 MIN’)
“`

# リファレンス

* [MySQL :: MySQL 5\.6 リファレンスマニュアル :: 12\.7 日付および時間関数](https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html)

この記事が作成されている時点では、以下のリファレンスが用意されていたのですが、バージョンアップで参照できなくなるとおもうので、適宜環境にあったリファレンスを参照してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

LaravelでAWS認証エラーが起きる?恐らくそれはconfig_cacheの影響です

約6年ぶりくらいにPHP(初Laravel)を触ってるのですがプチハマりしました。残存cacheの影響でハマるとか、物凄く良くありそうなシチュエーションなのに具体的な解決策を見つけられなかったので書いておきます。

LaravelでAWSソリューションを使ってるとこんなエラーレスポンスにめぐりあうかもしれません。

“`
{
“code”: “400”,
“message”: “Client error: `GET http://169.254.xxx.xxx/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n\n

元記事を表示

文字列・配列の変換など

###文字列を配列に変換 
“`php:qiita.php
$menu = ‘プリン,ショートケーキ,ガトーショコラ,いちごパフェ,パンケーキ’;
$menu = explode(“,”, $menu);
// , を配列の要素の区切りとする。
print_r($menu);
//Array ( [0] => プリン [1] => ショートケーキ [2] => ガトーショコラ [3] => いちごパフェ [4] => パンケーキ )
“`

###配列を文字列に変換
“`php:qiita.php
$menu = implode($menu);
echo $menu;
//プリンショートケーキガトーショコラいちごパフェパンケーキ

//引数に区切りを指定できる
$menu = implode(“,”, $menu);
echo $menu;
//プリン,ショートケーキ,ガトーショコラ,いちごパフェ,パンケーキ
“`

###文字列に区切り(、 とか)がないとき
“`php:qiita.php
$num = “01234567890”;
$num =

元記事を表示

PHP 変数の誤用

PHPを勉強中です。
サンプルプログラムを作成していて、思ったように動作しないことがあります。
いろいろ、さんざん調べた挙句、変数名が違っていることが往々にしてあります。
たとえば、$_SESSIONを$SESSIONと記述していたりなどです。
PHPのビルトインサーバーやデベロッパーツールにエラーが表示されれば、助かるのですが、そのような方法は無いのでしょうか?

元記事を表示

【SEO】レガシーなサイトの表示速度を16倍早くした話

# 前置き
運営しているサービスがかなりレガシーなので、負の遺産が多いです。

入社した頃からサイトの速度が遅いなと感じていながら、日々の業務を追われているうちに後回しになっていました。

それから半年たったある日、SEOに注力する方針となり上司からサービスのサイトの表示速度が遅いので、本日中に何とかしてほしいとのことでようやく時間を割いて対応することになりました。

# 環境
* PHP 5.2
* Breeze framework
* MariaDB 5.5.62

# 速度改善で要因特定にやったこと

* Chromeのデバックツールで表示速度を確認
* バックエンドかフロントエンドか要因を切り分け
* バックエンドに時間がかかっていることが判明
* PHPのソースコード内に速度を図るコードを埋め込み
* DBの処理に時間がかかっていることが判明

# 速度改善にやったことまとめ

1. **(効果:◎)DB:EXPLAINで実行計画を行い、INDEXを設定**
1. (効果:△)PHP:ロジックを修正(不要な処理を削除)
1. **(効果:◎)DB:EXPLAINで実行

元記事を表示

PHPの終了タグは「?>」を付けるか付けないかは判断しようねという話

◼️理由は終了タグを省略することでファイルの最後にある余空白文字が出力に影響することを防ぐ
◼️htmlでは改行コードを半角スペースとして認識する
◼️htmlテンプレートなどに記述する際は週s量タグは必要

参考:
https://thesaibase.com/php/end-tag

元記事を表示

【PHP】headerでリダイレクトしよう

#はじめに
開発はフレームワーク(Laravel)を使いまくり、その中身(PHP)のことはあんまりわかってなかったので、
その勉強も兼ねて、PHPだけでリダイレクト処理を作ってみたときに学んだことをまとめてみます。

#headerとは
生の HTTP ヘッダを送信する関数。
要するに、リダイレクトさせることができるPHP標準の関数です。笑

#使用例
例えば、フォームから投稿する時を考えます。
まず、投稿ページからフォームで_POSTを飛ばします。

“`PHP:create.php



“`

そして、送った先でDBに接続して、保存の処理を行います。
こちらについては、またいつか詳細をまとめたいと思います!!
そして、headerで一覧ページ(index.php)にリダイレクトします。

“`PHP:save.php

//DB接続して、保

元記事を表示

未経験半年で作成したWebアプリを、実務半年経ったのでリファクタリングしてみた

皆さんは最初に書いたコード覚えていますでしょうか。

#目的

18年の12月にPHPを勉強し始め、19年の3月頃からLaravelを勉強し始めました。
その後、19年の5月20日から6月15日までLaravelを使ったオリジナルアプリを作りました。

当時Twitterで行われている100DaysOfCodeというものを行っており
活動時間とかわかればいいなーと思い作りました。

作った当初は良いと思っていたのですが、エンジニアとして現場に出て半年、久々に見るとひどいなと思い
何がだめだったのか、供養がてらリファクタリングしてみようとやってみました。(※厳密にはリファクタリングではありません->若干挙動に修正が入っているため)

なお、ユーザーが全く居ないのでデータ移行は考慮してないです

もっとこう出来る等ありましたら、ぜひ教えていただけますと幸いです。

#作ったもの

動作リンクは[こちら](https://github.com/natsume0718/Laravel-Uroboros)

##Topページ
– Twitterで登録・ログインを押すと、ソーシャルログインが行わ

元記事を表示

コード書かずに超スピード開発~(DEMO動画あり)~最新版『 Laravel DB.com 』

## Laravel DB.com ってなに?

「LaravelDB.com」は、ER図(テーブルの設計)を作成することで、”Migration” OR ”CRUD(テストデータ)”のコードまで生成できるサービス(ツール)です。

##DEMO動画(操作方法)


en.jpgPHP/MySQLを使った掲示板をherokuでデプロイする流れ

ローカルで作った掲示板をheorkuに移行する際、めちゃくちゃ苦戦したのでまとめておきます。

#手順

##1. herokuに登録する
ここで、登録はクレジットカードの登録もしなければなりません。
クレジットカード登録ができなければMySQLを使うことができませんでした。
デビットカードでもできると思いますが、三井住友銀行のデビットでは無理でした。
楽天のデビットで登録しました。

##2. heroku CLIをインストールする
https://devcenter.heroku.com/articles/heroku-cli
正直これは僕もよくわからなかったので、このサイトの手順通りにやっていったら大丈夫だと思います()
これでherokuのコマンドが使えるようになるはずです?

##3. アプリを作成

“`
$ heroku login
“`

ここでアプリのファイルがまとまっているルートディレクトリに移動してください。git管理するイメージです。

“`
$ heroku create アプリ名
“`

アプリ名の指定がなければ自動で割り当てられます。
また、アプ

元記事を表示

Laravel で Cloud KMS を使って暗号化/復号化をしてみた。

こんにちわ! @ktoshi です!

以前、[Cloud KMSをGoで使う](https://qiita.com/ktoshi/items/1fd4f808c955d33c3d28) 記事を書きましたが、今回は PHP(というよりLaravel)で使ってみようと思います。
実際はGoより先にこっちで使い始めてたのですが、諸々あり後発の記事になりました。
そんなわけではじめましょー。

# Cloud KMS
暗号鍵をセキュアに管理できるGCPのサービスです。
自動ローテーションやIAMでの権限管理でセキュアなアクセスを実現できる上、APIを利用した暗号化/復号化を行えるので非常に柔軟な利用が可能です。
類似したサービスはAWSの「KMS」や Azureの「Key Vault」などがあります。

# Key Ring と Key
Cloud KMS では Key を Key Ring で管理しています。
関係性は字のごとく、鍵と鍵束ですね。
ある程度同じ用途で使用される鍵については同じ Key Ring でまとめておくとよいでしょう。
実際に暗号化などで利用されるのは Key となり

元記事を表示

PHPでフォームを作成する基本

##フォームの基本

– 入力画面
– 確認画面
– 完了画面

index.php → confirm.php → thanks.php
と作る場合が多い

その場合、formのaction属性をそれぞれの飛び先に指定する

##入力フォーム

“`php


Moodle マニュアル 3.8 – アップグレードの警告

[原文](https://docs.moodle.org/38/en/Upgrade_warnings)

# アップグレードの警告

もしあなたが安定板からのアップグレードの最中の警告からこのページにたどり着いたのなら、おそらく我々のブランチのいくつかの変更が影響しています。

もしあなたが最も最近の Moodle の安定版にとどまる事を意図しているのなら、適切な MOODLE_3x_STABLE ブランチ (MOODLE_32_STABLE, MOODLE_33_STABLE その他のように) を使用してチェックアウトを変更する必要があります。

Git を使用しているのなら、リモートブランチを追跡する新しいローカルブランチを作成してそれにスイッチする必要があります。

“`console
git checkout -b MOODLE_38_STABLE origin/MOODLE_38_STABLE
git pull
“`

38 を関係する Moodle のバージョンに置き換えてください。最初の行により、MOODLE_38_STABLE という新しいローカルブランチが作成さ

元記事を表示

OTHERカテゴリの最新記事