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

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

$matches[0] の中身はなんだろな? – 量指定子の仲間たち

# はじめに

おはようございます。今朝、早起きして [Laravel](https://laravel.com/docs/7.x) のルーティング処理を読んでいたら、見慣れない正規表現に出くわしました。

見慣れない正規表現というのは `*?` とか `+?` とかです↓ ソースコードの引用元は [こちら](https://github.com/laravel/framework/blob/7.x/src/Illuminate/Routing/Route.php) です。

“`php:Illuminate\Routing\Routeクラス
/**
* Get the parameter names for the route.
*
* @return array
*/
protected function compileParameterNames()
{
preg_match_all(‘/\{(.*?)\}/’, $this->getDomain().$this->uri, $matches);

return array_map(function ($

元記事を表示

Amazon linux 2でのphpの更新方法

# 症状
WordPressの管理者画面のサイトヘルスにphpのバージョンを7.3以上に上げてよ、という「おすすめの改善」が出てしまった。

# 環境
– AWS
– Amazon linux 2 t2.micro
– php7.2.30
– WordPress

# やりたいこと
phpをバージョンアップする。なんかよく分かんないし、最新にしちゃえ。

# やったこと
## 現在のバージョンを確認する
“`
$ php -v
PHP 7.2.30 (cli) (built: May 5 2020 18:04:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
“`
WordPressで怒られたとおり。古い。

## SSHを使用して、AWS EC2 Linuxインスタンスに接続
いつもの方法で。macのターミナルを使いました。
参考:[Connecting to your Linux instance us

元記事を表示

WEBサーバのTCPコネクション数に上限はあるのか?

#はじめに
アクセス数がすごい環境は大抵高負荷環境でもあるので対策としてApacheの設定やサーバ構成のセオリーをすぐ見つけられて実際試しても目に見えて良くなります。
アクセス数の多さで起こる問題は実際に負荷をかけてみないと表面化しません。
問題が分かったら設定やパラメータを調整して現状がましになるようにするだけです。
ですが限りあるリソースの中でTCPセッションを十分にコントロールしようとするとすぐ手詰まりです。
WEBサーバがしているやりとりの基礎が足りていないそんな気がしていたのでTCPに目を向けてみました。

#行き着いた結果は
待ち受け側とリクエスト側ではボトルネックが違う

リクエスト時はTCPのエフェメラルポートが上限
待ち受け時はTCPよりもファイルディスクリプタが上限
になりやすい

という良く見かける設定を見直すということになりましたが、どうやってそうなっているのかが今回の成果だと思います。

#TCPセッションはどうやって区別されるか?
1つのサーバでのTCPセッションは複数のクライアントと複数のセッションを組むことができてそれぞれを識別しています。
それをどう

元記事を表示

PHPでcsvファイルから商品一覧ページと商品詳細ページを作る

#希望内容
自社商品の情報はデータで管理してる。
ホームページがで自社商品を紹介したい。
でもネットショップを作るほどでもない。
簡単でいいのでホームページ上で自社商品を紹介できないか?
上記希望をPHPを使って実現する方法。
#PHPコード
“`index.php


eof;

}
fclose($handle);
}
?>
`

元記事を表示

PHPでsudoコマンドを実行する方法

#OSコマンドを実行する関数

##shell_exec
>shell_exec ( string $cmd ) : string
###返り値
実行されたコマンドからの出力を返します。 エラーが発生した場合やコマンドが何も出力しなかった場合は NULL を返します。

###例
“`php
$output

“;
?>
“`

##exec
>exec ( string \$command [, array &$output [, int &\$return_var ]] ) : string
###返り値
コマンド結果の最後の行を返します。コマンドを実行し、 一切干渉を受けずに直接コマンドから全てのデータを受けとる必要が あるならば、PassThru() 関数を使ってください。
実行されたコマンドの出力を取得するには、必ず output パラメータを設定・使用してください。

###例
“`php

元記事を表示

PocketMine-MP4.0を構築する

**現在PMMP4.0は安定版ではありません。通常のPMMPを使いたい方は3.xを使用してください。**

# 環境
– Ubuntu 18.04.4

# 作業用ディレクトリを作る
ディレクトリ名はなんでも大丈夫です。ここではpmmp4とします。

“`shell
$ mkdir pmmp4
$ cd pmmp4
“`

# バイナリをコンパイルする
[php-build-scriptsのmasterブランチ](https://github.com/pmmp/php-build-scripts/tree/master)を使います。compile.sh実行後はかなり時間がかかるので気長に待ちましょう。

“`shell
$ git clone –branch=master https://github.com/pmmp/php-build-scripts
$ cd php-build-scripts
$ ./compile.sh
“`

エラーが出た場合はインストールするよう表示されたものをインストール後、再度compile.shを実行してください。

“`shell
$

元記事を表示

PHPの便利Tips備忘録(時々更新)

## エラー表示
「ブラウザでPHPの処理したいんだけど何も表示されない!!」
「でも、レンタルサーバー使ってるから`php.ini`とかの編集の仕方わからないし…」
そんな時は↓

“`php
ini_set(“display_errors”, “on”);
error_reporting(E_ALL);
“`

`ini_set` で`php.ini`を編集しなくてもファイルからエラーを確認できるようになる。
`error_reporting`で出力するエラーのレベルを設定、`E_ALL`でほとんどのエラーが検出される。

元記事を表示

【WordPress】ショートコードでurlを動的に生成

WordPressの投稿画面でAdd Quick Tagを使って画像挿入をする際に
リンク先URLを動的に変えたかったので作ってみました。

## 今回の概要
– 会員限定コンテンツがあり、ログイン者にのみリンク先のコンテンツを見せるようにしたい

– ログインしていなければ会員登録画面へ
– 投稿記事/固定ページ中にはphp記述が書けない
(⇒プラグイン使えば出来るけど使いたくない)
– 登録する画像が多いのでいちいちaタグでフルパスurlなんて書きたくない
そんな理由で作ったのがこちら。

“`php:functions.php

function get_url_shortcode($atts) :string {
// set default value
$baseUrl = “https://hogehoge.com/”;
$pairs = [‘url’ => “”];
$atts = shortcode_atts($pairs, $atts);

// trim string
$url = pr

元記事を表示

wordpress URL判定で分岐→出力するためのちょっとしたお話

初歩的内容ですがおさらいとしてメモ。
別に、wordpressに関して話ではなくPHP全般のお話です。
今回は、マルチサイトのサブディレクトリ型を例に取り上げます。

# こんな時
例えば、マルチサイトで多言語サイトを構築する際に、言語ごとのテーマは同じだが、サイトごとに出力を分岐したいことがあると思います。

ヘッダーH1タグのロゴにサイトホームをリンク設定する際には、`echo home_url();`としたら、自動で各サイトのホームリンクを取得してくれるのですが、
仮に、h1ロゴの横にテキストがあったとして、各言語ごとに出力を変えなければいけないとします。

# 解決策1
各言語サイトにカスタムフィールドを設けて、それぞれ出力させる。
複雑な出力だったらこれでいいのでしょうが、短いテキスト飲み出力の場合、フィールドをつくったり複製したり(修正したり)と管理上面倒ばところがあります。

# 解決策2
本題ははこちらです。
結論から言いますと`explode(”, ”)`を使用します。
文字列を分割して、分割したものを配列にします。
なので、配列から判定に欲しい値を取ってきます。

元記事を表示

php incファイル設置方(備忘)

# 必要な箇所を切り出す

– < header >~< /header >を切り出して別ファイルに保存
– ⇒ /common/include/header.php

# ①パスの読込み
– 読み出し箇所に、以下を記述。

“`

“`
例えば、2階層上のcommon配下に設置。

“`

“`

– **・・・が、このままだと、同じ階層のhtmlにしか設置できない。**
(違う階層から読み出した際に、パス(../../)が変わってしまう)。。。

# ②ファイルパスの関数化
### 設置側のhtmlに、rootからの階層を認識させてやる。

– htmlファイル冒頭に、以下を記述。

“`

“`
 または、

“`


“`
 等々、そのhtmlの、ルートからのパスを設定。

※これをし

元記事を表示

【Laravel】ミューテタを一時的に無効にする。

メモとして残します。

以前[ミューテタについて](https://qiita.com/yucatio/items/e980550814f66b3450dd)の記事を投稿しました。
非常に便利なミューテタですが時には、一時的に無効にして生の値をセットしてほしいということもあります。
いろいろ調べてはみましたが、どうやらEloquentORMで一時的にミューテタを無効にするメソッドは用意されていないようです。

そのため、疑似的にミューテタを無効にする方法を記述します。

#■やり方
[ミューテタについて](https://qiita.com/yucatio/items/e980550814f66b3450dd)の例に付け加えます。

“`php

元記事を表示

AWSで割とモダンな技術使う大学生日記

## 環境構築を雑に設計
現在(2020/06/04)で公開しているサイトではAWS EC2のみを使用した設計となっているため、
それをよりトレンド風に修正していく記事です。
ちなみに作成したサイトは
http://ec2-18-180-131-224.ap-northeast-1.compute.amazonaws.com/
です。なるべくお金を掛けたくなかったのでドメインも取得せず、ロードバランサーも通信の暗号化もしておりません。
Dockerすらも使用していないので、そのあたりからやっていくつもりです。
あと、日記ですのであまり期待しないでください、よわよわなエンジニアの卵ですので。笑

## サービス内容
GitHubのレポジトリはhttps://github.com/maaaaakoto35/UniFood
ですのでよければスターつけてください笑

ReadMeも雑に作成したのでサービス内容を記述していきます。
当初、京都産業大学の口コミサイト等は調べても出てこなかったので
当サイトの目的は、学食に対してレビューができる、ということです。
また、U

元記事を表示

Ubuntu18.04でPHP5.6とPHP7.4を使いたかった時のメモ

# やりたいこと
* Ubuntu18.04にphp5.6とphp7.4が動く環境を用意したい
* phpenvやらphpbrew使えばなんとかなるっしょ!
* Dockerは使わないものとする

# phpenvで試してみる。
anyenvでインストールされたphpenvで試した。

“`
# phpenv install 5.6.40
“`

記録を取っていないが色々コケる。

# 先人達の歴史を調査
お、ちょうど良い記事見つけた。
[ [php][ubuntu]php7とphp5とphpenv – 釣り。IT屋。毎日爆釣。(2019-07-29)](https://peixe.biz/diary/20190729.html)
> 結論:phpenvなんてものはなかった。 ローカルでPHP7を使っててPHP5.xも切り替えて使いたいとかいう場合はdockerでカレントをマウントして使え。

ワロタ。

# phpbrew を使ってみる
参考になる資料
https://gist.github.com/marulitua/f8932064ec5bfe6a5be9fadac7c5a1

元記事を表示

Node.jsをPHPで書き換えてみた

N予備校のプログラミング入門コース3章で作成した「秘密の匿名掲示板」をPHPで書き換えてみたので,その記録です。

#きっかけ
スラスラわかるPHP(志田 仁美 著 翔泳社 刊)をやってみて,
「この間作った匿名掲示板,書き換えられるのでは?」
と思ったので。
スラスラわかるPHPをやってみた所感は[こちら](
https://note.com/ayareily/n/n56391bc9cb41)

#早速書き換える
##仕様を変更したところ
– 認証の方式
おそらくN予備校ではBasic認証(alartみたいに上に出てくるやつ)を使っていたと思いますが,
書き換えの際にはスラスラわかるPHPのように,DBを使用する方式としました。
– TrackingID
N予備校で作成した際はCookieを利用してTrackingIDを実装していたと思いますが,セッションを利用する方式としました。

その他細かい変更点はあると思うのですが,大きく変更したのはこちら2点です。

##書き換えで苦労したところ
###記事とユーザーの情報をどう関連付けるか
Laravelでは
userテーブル

元記事を表示

LaravelさんはどうやってAJAXかどうか区別してバリデーションエラーレスポンスでJSONを返してくるの?

我らがBOOM TECH CAFEの若きエース、 @miriwo さんの最新記事「[Laravel API データポスト時のバリデーションで弾かれた後、http://127.0.0.1:8000/にリダイレクトしてしまう](https://qiita.com/miriwo/items/976a25a31550973e73b8)」を読んで、「おや? ワイのLaravelちゃんはAJAXでアクセスすると普通にバリデーションエラーのJSON返してくるんやが……?」と思って、調べてみました。

# そもそもAJAXかどうかどうやって判定しているの?

Laravelの公式ドキュメント日本語訳にはこんなふうに書かれてるわけですよ。
https://readouble.com/laravel/5.5/ja/validation.html

※一応、Laravel5.5での話をしていますが、後方バージョンでもだいたい同じだと思います。

> 伝統的なHTTPリクエストの場合は、リダイレクトレスポンスが生成され、一方でAJAXリクエストにはJSONレスポンスが返されます。

ほうほう、そうなんすね。

元記事を表示

【エラー解決備忘録】[Laravel6.0]migrate時のエラー解決方法の巻き

# 本記事の目的
 Laravel勉強中の筆者がmigrate時に経験したエラーと解決方法をまとめました。
筆者と同様に勉強中の方やエラーで悩まれている方の参考になればと思い投稿いたしました。
 なお勉強中のため内容が足りなかったり、誤った記載があるかもしれません。
その際は指摘をビシバシしてもらえると嬉しいです!
宜しくお願いいたします。

# 環境
* macOS Catalina(バージョン10.15.4)
* Laravel Framework 6.18.18
* MAMP

# 遭遇したエラー
事前にphpMyAdminで作成したデータベースにファイルを追加するため、
ターミナルで“`%php artisan migrate“`を実行すると
「DBサーバーに接続できないよ!」「そのようなファイルまたはディレクトリはないよ!」
下記エラーメッセージで指摘を受けました。

“`
Illuminate\Database\QueryException:
SQLSTATE[HY000] [2002] No such file or directory
(SQL: sel

元記事を表示

【Laravel】EloquentORMで任意のカラム(要素)にセットした際に自動的に加工&セットする。(ミューテタ)

メモとして残します。

LaravelのEloquentORMを用いてデータの取得、保存をすると思います。
今回は保存する際に任意のカラムをセットしたら、その際に自動的に値の加工してもらうようにプログラムします。(=ミューテタの定義)
#■やり方
任意のカラム(要素)にミューテタを仕込みたいモデルに下記の例のようにメソッドを追記。

“`php
attributes[‘カラム名’] = $value ?? ‘hogehoge’;
}
}
“`
上記の例では要素にセットされた値がNullの場合は、`hogehoge`という文字列をセットしました。

ミューテタを定義する利点としては、

元記事を表示

macにLaravelを導入

# はじめに
現在通っているプログラミングスクールTECH CAMPでは、Ruby on Railsを用いたアプリケーションの開発を行ってきました。スクールも終盤になり、新しいプログラミング言語、フレームワークを使用してみたいと思って今回「laravel」を導入してみました。

# PHPとLaravel
PHPとLaravelについては、現在、書籍やドキュメントで勉強中です。見聞きした範囲で書くとPHPはプログラミング言語の一つで、サーバーサイドで動的なウェブページを作成することが得意なので、Webアプリケーションに特化している、という感じ。
そしてLaravelは、PHPを使用して作成するWebアプリケーション用のフレームワークの一つ。PHPのフレームワークにはコレ!!という定番はまだなく、いくつか選択肢があるようです。Laravelは、他に比べて歴史は浅いものの人気のフレームワークの一つで、コードをスッキリ書けるらしい。Rubyに対してRails、PHPに対してLaravel、そういう認識です。

# 達成したいこと
Laravelで新しいプロジェクトを立ち上げ、ローカルから確認

元記事を表示

[mysql,laravel]あるカラムで重複を持つレコードだけをまとめずに全て呼び出す方法

#何をした?

operationsテーブルから”第三工種”というカラムで重複するレコードに付随しているデータの塊を作りたいと考えました。

具体的には”第三工種”に”土工”というレコードが複数ある場合、それ以降の”第四工種”以降が”埋め戻し”のものや”掘削”のものなどに分岐します。
それを”第三工種に土工を持つもの全て”で一括りの配列にして、呼び出したいと考えました。

(参考)ER図
![v4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555157/f3c9a304-52b7-efaf-e850-410381f7404f.png)

#失敗した方法

ひとことで言うと、クエリによる処理でなく配列処理で対応しようとしたらドツボにはまりました。

######※詳細(分かりにくいので、お急ぎの方は読まなくて大丈夫です)
まずテーブルから全レコードを呼び出し、`distinct()`で重複を絞った後、その”id”を持つ”第三工種”を抜き出します。その”第三工種”のレコードを持つものを`foreac

元記事を表示

Call to undefined method Illuminate\Database\Eloquent\Builder::toArray() の解決例

#エラー文の様子
スクリーンショット 2020-06-04 2.43.24.png

#どんなエラー?

“`php:app/Http/Controllers/RecordTimingController
public function syousai_matome($id)
{
$third_operation_class_id = Operation::query()->where(‘record_timing_id’,$id)->distinct()->select(‘third_operation_class’);
return $third_operation_class_id->toArray();
}
“`

上記のように、コントローラで構文的に

元記事を表示

OTHERカテゴリの最新記事