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

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

Windows10にPHPをインストールする方法

– 環境
– Windows10 Pro 64bit

# ダウンロードする
## PHP本体
1. [PHP For Windows: Binaries and sources Releases](https://windows.php.net/download#php-7.3)からPHP7.3「VC15 x86 Thread Safe」のzipファイルをダウンロードする
– 今回ダウンロードしたのは、`php-7.3.14-Win32-VC15-x86.zip`
1. zipファイルを解凍して任意のフォルダに配置する
– 今回は、`C:\apps`配下

## XDebug
デバックするのでこちらもダウンロードする

1. [Xdebug: Downloads](https://xdebug.org/download)から「PHP 7.3 VC15 TS (32 bit)」のdllをダウンロードする
– 今回ダウンロードしたのは、`php_xdebug-2.9.1-7.3-vc15.dll`
1. ダウンロードしたdllを `C:\apps\php-

元記事を表示

Laravelで非同期チャットアプリを作ろう(2)

# はじめに
この記事では、片方がコメントを送信したら、もう片方の人はリロードしなくても、コメントが表示されるチャットアプリを作っていきたいと思います。

前回:[Laravelで非同期チャットアプリを作ろう(1)](https://qiita.com/Alesion30/items/8580a85a09822b067ff9)

# 完成物

![chat2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519787/fecc0df8-a5d8-68c0-0afd-a30d6a63a946.gif)

ソースコード:https://github.com/Alesion30/ChatApp

# 非同期通信とは

非同期通信とは、ネットワークなどでつながれているコンピュータ間で、送信者のデータ送信タイミングと受信者のデータ受信タイミングを合わせずに通信を行う通信方式のこと。

参照: [非同期通信 - @IT リッチクライアント用語事典](https://www.atmarkit.co.jp/aig/07

元記事を表示

PHP + mysql を久しぶりにやる前に見ておく

個人的メモ

# ダメぜったい

– xxx.php ファイルの末尾の `?>` の後に空行や空白を不用意に入れない。
– mysql のパスワード書いたファイルを git add しない。

## 他言語との違いなど

– 文末にセミコロンが必要
– 変数名の冒頭に `$` が必要
– 明示的な型変換を必要としない。
* 強制的に型を決めたいときは `$x = (int)$a` など。
– 文字列のクオートは ” または “”。
* 文字列の連結は `.`; たとえば `$a .= ‘hoge’ . ‘huga’;`
– 配列はすべて連想配列扱い。
* `$a[1]` は `$a[“1”]` と同じ。
– コメントアウトは `//`
– グローバル変数はローカルスコープ内では無効
* スコープ内で参照するには `global val;` が必要
– 外部ファイルの読み込みは `require(‘filename.php’);`
* `include` は読み込めない場合でもエラーにならない
– `else if`, `elseif` 両方あり。
– 標準出力への出力は

元記事を表示

CakePHPとAjaxでいいねボタンをつくりました

1週間前のAjax何もわかってない自分に向けて書きます。
CakePHP3.8を使っています。

# つくりたいもの
Twitterのいいねボタンみたいなやつ。
掲示板の投稿メッセージ一覧に、メッセージに付随して表示する。
自分がボタンをすでに押している場合は、ボタンに色がついている。押していない場合、色がついていない。
他ユーザー含めて、いいねボタンが押された数を表示する。

# まず
jQueryを勉強してください。

# テーブルの構成
関係あるところらへんだけ

– Users
– id (int)
– username(関係ない)
– password(関係ない)
– Posts
– id (int)
– message(関係ない)
– Favorites
– id (int)
– user_id (int)
– post_id (int)

# とりあえずメッセージ一覧画面に、いいねボタンといいね数を表示する
関係ありそうなところだけ抜粋して載せています。
色々と省略しています。

“`php:PostsTa

元記事を表示

【初学者向け】セキュリティ対策入門[番外編]①〜OSコマンドインジェクション編〜

# 前提

## 確認環境

以下と同様です。
[【初学者向け】セキュリティ対策入門⓪〜環境構築編〜](https://qiita.com/junkimatsuda/items/b29e496132b7fe596397)

## 本シリーズの目的

以下と同様です。
[【初学者向け】セキュリティ対策入門⓪〜環境構築編〜](https://qiita.com/junkimatsuda/items/b29e496132b7fe596397)

## 本記事の目標

**OSコマンドインジェクションの概要、原因、対策について理解すること**です。

## 本記事を読み進める上での必要事項

以下の内容を終えていることです。
[【初学者向け】セキュリティ対策入門⓪〜環境構築編〜](https://qiita.com/junkimatsuda/items/b29e496132b7fe596397)

## どうでもいいお話

あまり主要ではない脆弱性についてはこちらの番外編で扱っていきます。主要ではないというのは被害ケースをあまり耳にしないという意味で、脆弱性をつかれたときの被害が少ないというわ

元記事を表示

videoタグがipadでうまく再生できない考察

## はじめに
動画ファイルがたくさん溜まってきたのでwebで検索し再生するソフトを作成した。html5からvideoタグが使えるようになり、新しいwebの作り方を勉強しつつ作成したものです。しかし、パソコン・Androidスマホでwebを操作し再生することはできたのだが、ipadで再生することができなかった。はじめてのvideoでもあり、使い方に間違いがあるのかもしれませんが、結局原因がわかりませんでした。

今回、調査した内容をまとめるとともに、当面の運用として対処法を示す。

## 使用したプログラム
原因調査をするため、プログラムをシンプルにした。プログラムはhtmlファイルとビデオを提供するphpファイルです。
対象動画ファイル(003.mp4):サイズは1280×720、長さは2:04:33、ファイルサイズは1.33GiB
大きいファイルサイズの動画が対象のため、一度に全てを送信するにはサーバの負担が大きすぎるため、最大1MBに制限しクライアントから逐次複数回要求により全体を提供する方法とした。

“` html:index.html

元記事を表示

LaravelでUncaught domexception: failed to execute ‘***’ on ‘element’: ‘,’ is not a valid attribute name.を吐き出したときに確認したこと

#Laravelにてアプリを作成していたところコンソールに下記のようなエラーが発生

“`
Uncaught domexception: failed to execute ‘setattribute’ on ‘element’: ‘,’ is not a valid attribute name.
“`

簡単に訳すと「属性名に’,'(カンマ)は使えないから’setattribute’は実行できないよ!」
と怒られてしまってます。

#考えたこと
コンソールのエラーだからJavaScriptのファイルに不備があるのか?
![スクリーンショット 2020-01-23 午後5.36.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483590/d5ad67f2-7801-feb0-f557-6346c6d72aac.png)

右側の**app.js:41954**から該当エラー個所をみてみるが何もおかしいところはなさそう。
そもそも”,”(カンマ)がその行にない…

## 「属性名」に異常?

元記事を表示

【初心者向け】関数について

||意味      |
|:–|–:|
|関数|一つの処理をまとめたもの|
|引数|関数に渡せる値|
|返り値|関数から戻ってくる値|
|初期値|引数がない時の値|

#関数とは

処理をひとまとめにすることで使いまわせる
似たような処理をまとめられる

“`php:
//定義
function sayHello() {

//処理
echo “Hello!”;
}

//呼び出し
sayHello();// Hello!
sayHello();// Hello! 何度も呼び出し可能
“`

#引数とは
関数に渡す値

“`php:
//渡された引数が$nameに入る
function sayHello($name) {

//$nameは関数の中で使用できる
echo “Hello!” . $name;
}

//関数に引数を渡す
sayHello(“Tom”);// Hello!Tom
sayHello(“Bob”);// Hello!Bob

//引数は複数指定できる
function sayHello($name,$ago) {

echo “Hello

元記事を表示

AmazonLinuxでPHP7.1から7.2にアップデート

# 概要

AmazonLinuxでPHP7.1から7.2にあげたときのメモです。
試行錯誤しながらやったので、これ通りに動かないことがあると思います。

– yumからインストール

“`bash
$ sudo yum -y install php72 php72-mbstring php72-pdo php72-php-fpm.x86_64
“`

__実行結果__

“`
: (中略)
Error
Requires: scl-utils
“`

– scl-utilsが必要らしいので、インストール
– yumでは用意されていないので、rpmから

“`bash
$ sudo rpm -Uvh ftp://ftp.scientificlinux.org/linux/scientific/6.9/x86_64/updates/fastbugs/scl-utils-20120927-29.el6_9.x86_64.rpm
“`

– 再度php72をインストール

“`bash
$ sudo yum -y install php72 php72-mbstring php7

元記事を表示

Laravelでブログの本文の続きを「…」にする方法

### {!! nl2br(e(str_limit(変数, 制限文字数))) !!}
で制限文字数から先の文章は「…」になります。
### 解説
#### nl2br
PHPの改行コードになります。(htmlで言う`
`)
https://www.php.net/manual/ja/function.nl2br.php
#### e()
()内をエスケープさせます。
> e関数は、PHPのhtmlspecialchars関数をdouble_encodeオプションにデフォルトでtrueを指定し、実行します。

https://readouble.com/laravel/5.7/ja/helpers.html (「e()」で文字検索してください。)

> htmlspecialchars — 特殊文字を HTML エンティティに変換する

https://www.php.net/manual/ja/function.htmlspecialchars.php

エスケープ処理に関してはこちらを参照
https://qiita.com/n_hirai/items/df0a21d24

元記事を表示

Googleスプレッドシートの内容を読み込む

# はじめに
こちらの記事は、

– PHP
– [Google Sheets API](https://developers.google.com/sheets/api/reference/rest?hl=ja)

を使用してGoogleスプレッドシートの内容を読み込むサンプルです。

参考にした記事は、[PHPでSheetsAPIを使用してGoogleスプレッドシートにデータを追記していくサンプル。](https://qiita.com/niiyz/items/30fab61adc4fcf87b98a)です。

↑こちらの記事は、スプレッドシートの書き込みですが、この記事では読み込み方法を説明します。

ですので、上記の記事の

– プロジェクトを作る。
– スプレッドシート作成・共有設定
– PHPからスプレッドシート追記 > 0. githubからcloneしてライブラリ導入
– PHPからスプレッドシート追記 > 1. プロジェクト直下にダウンロードしたJsonファイルを設置

まで同じです!

# Googleスプレッドシートの値を読み込む

## サンプルソース
動作確

元記事を表示

Laravel で バリデーションエラー時にJSで動的に増やしたinputの値を保持する

#やりたいこと

jsで下記のようなinputをボタンを押したら追加していくというような可変な入力欄のとき
バリデーションエラーが起きたら、行が増えた状態で、それぞれに値が保持されていてほしい

“`html:test.blade.php

“`

#やりかた
Laravel 6.6で確認しています

バリデーションエラーが起こった時 `old(‘hoge.0’)`とやれば、一番初めの入力値がとれます。
つまり、indexを指定してあげればその値が、指定しなければ配列そのものが取れます。

“`php
old(‘hoge.0’);
old(‘hoge.1’);
// hoge
// hoge2
old(‘hoge’);
// [0 => hoge, 1 => hoge2]
“`

なので、blade側でエラー時にループしてあげれば増えた状態で
入力値を保持できます

“`html:test.blade.php
@empty(old(‘hoge’))

元記事を表示

Laravelをデザインパターンで考察する ~ Builder Pattern ~

# デザインパターン
デザインパターンは、いろんな文脈で使われるが、ここでのデザインパターンはGoFのデザインパターン。
その中で今回は、Builder Patternでの実装箇所を取り上げる。
Builder Patternは、デザインパターンの分類、生成・構成・振る舞いのうちの生成に分類される。
生成過程を抽象化したり、コンストラクタの引数が多いとか複雑なときに使うデザインパターン。

基本的な説明は以下のリンクに任せる

[デザインパターン]
https://www.techscore.com/tech/DesignPattern/index.html/

[Builderパターン | PHPデザインパターン]
https://www.ritolab.com/entry/125

# Illuminate\Support\Managerクラス
Illuminate\Support\Managerクラスは、Laravelに用意されているBuilder Patternを簡単に利用するための抽象クラス。
インスタンス生成過程を隠蔽し、シンプルに再利用するために継承して使用することができ

元記事を表示

Dockerで入れたPostgreSQLへのPDO接続でエラーが出て悩んだ。

#出たエラー

こんにちは、Docker初心者です。
なんならMySQLばっかりだったのでPostgreSQLも初です(汗)

タイトルのままです。
docker-compose.ymlで入れたPostgreSQLへのPDO接続をしようとしたら、
下のようなエラーが出てしまったンゴです。

“`error.
SQLSTATE[08006] [7] could not translate host name “postgres” to address: Name or service not known
“`

ちなみに書いていたPDOはこんな感じです。

“`property.php
try {
$pdo_connect = new PDO( ‘pgsql:host=postgres; dbname={name};’, ‘{user}’, ‘{dbname}’ );
} catch(PDOException $e) {
var_dump($e->getMessage());
}
“`

#解決

問題はdocker-compose.ymlとPDOの両方にありました。y

元記事を表示

グラフ描画のためのデータベース操作

#グラフ描画のためのデータベース操作
##どうやってデータを間引くか
###剰余系を使って間引く

データベースに記録したデータをグラフにしたい場合、あまりにもデータが多いので間引く必要がある。
そもそも、データベースはスキップという操作があまり得意ではない。
それでもテーブルのIDを単純に剰余系で間引くSQLは、こんな感じ。

“`
SELECT id,`CreateAt`,`機器ID`,`温度`
FROM data_table
WHERE MOD(id,100)=0
“`

これだと、複数の機器がデータベースに記録されていた時に、データの最初と最後が欠けてしまう機器が出てくる。
そこで機器ごとの連続した番号が必要と思い、データベースに記録する時に連番を振っておくseq列を追加。

“`
SELECT id,`CreateAt`,`機器ID`,`温度`
FROM data_table
WHERE `機器ID`=’XXXX-XXXX’ AND MOD(seq,100)=0
“`

一応もれなく計算出来るが、機器毎にSQLを発

元記事を表示

クラスについて

#用語
| | 説明 |
|:—————–|——————
| プロパティ | クラス内の変数 |
| メソッド | クラス内の関数 |
| クラス | メソッド、クラスの集まり(設計書) |
| アクセス修飾子| どこからアクセスできるか指定 |
| インスタンス | クラスを具現化したもの |
| アロー演算子 | インスタンスしたプロパティやメソッドにアクセスするため|
| スコープ演算子 | クラスのプロパティやメソッドにアクセスするため |

#クラス
設計書のようなもの
クラス = プロパティ + メソッド

| |データの保持 |データの処理 |
|—|—|—|
|変数  |◯ |✖️ |
|関

元記事を表示

[個人開発]大喜利サービスを5日でつくってわかったこと

# サービスイメージ
サービスイメージ
ひとこと大喜利「ザブトン」
**[https://zabuton.co/](https://zabuton.co/)**
誰でも**すぐ**に**簡単**に大喜利が投稿でき、
SNS主体で大喜利を楽しむことができる
そんな**大喜利サービス**を開発しました。
# はじめに
個人開発でサービスはいくつも作ってきましたが
こういった**記事を書くのは初めて**です。

後半の方でコードもGithubにて公開していますが、
文章、コード共に**拙い部分**がありますが、何卒お目溢し頂ければと思います。

# 筆者について
僕は元々は**ゲーム会社出身**ですが、
**メンタルやられて退職**してからフリーランスとなり
サービス乱立したりしながら生計を立てている**20代エンジニア

元記事を表示

⛰【Vue.js】MariaDBのJSON型カラムから取得したデータの指定の値を変数名で取り出す為にパースする

## 環境
Vue.js 6.12.0
PHP 7.3.10
Laravel 6.5.0
MariaDB

## やりたいこと

MariaDBのに下記のようなデータが格納されていてそれをLaravelのAPIで取得する。
その内のcontentカラム(JSON型)のデータからdata_kindの値を判断基準として条件分岐を行い、
valueの内容である「テストの内容です?」や「赤文字で強調する!!」や円周率をVueので表示する為にJSONをパースする

|id|content|del_flg|
|:——————:|:——————:|:——————:|
|1|{“data_kind”: “1”, “value”: “テストの内容です?”}|0|
|2|{“data_kind”: “2”, “value”: “赤文字で強調する!!”}|0|
|3|{“data_kind”: “3”, “value”: “円周率を表示”}|0|
|4|{“data_kind”: “4”, “value”: “削除済

元記事を表示

Moodle 3.8 マニュアル – Nginx

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

# Nginx

Nginx [engine x] は Igor Sysoev 氏によって書かれた HTTP とメールプロキシサーバーのみならずリバースプロキシサーバーでもあります。nginx プロジェクトは高い同時並行性、高パフォーマンスそして低メモリ使用量に焦点をあててスタートしました。The 2-Clause BSD License の元でライセンスされ Linux、*nix フレーバー上でのみならず様々な BSD Mac OS X、Solaris、AIX、HP-UX 上で動作します。Microsoft Windows への移植のための概念実証もあります。

次はコミュニティの貢献による Nginx の設定についての文書です。修正や追加は歓迎です。

内容

[1 Nginx の設定](#1-nginx-の設定)
[1.1 PHP-FPM](#11-php\-fpm)
[1.2 Nginx](#12-nginx)
[1.2.1 X-Accel-Redirect として知られる XSendfile

元記事を表示

よく使いそうなPHPでのデータベースへのアクセス

# 引用
ドットインストール PHPデータベース入門
自分用にメモしてます。

# DBのセットアップ

“`sql:最初のセットアップ
mysql -u root
create database new_db;
grant all on new_db.* to admin@localhost identified by ‘password’;
use dotinstall_db;

create table users (
id int not null auto_increment primary key,
name varchar(255),
score int
);

mysql -u admin -p password
“`

# PDOのセットアップ

DBの基本情報を定数で定義

“`php
define(‘DB_DATABASE’, ‘new_db’);
define(‘DB_USERNAME’, ‘dbuser’);
define(‘DB_PASSWORD’, ‘password’);
define(‘PDO_DSN’, ‘mysql:host=lo

元記事を表示

OTHERカテゴリの最新記事