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

PHP関連のことを調べてみた2020年11月26日
目次

シングルアクションコントローラーをLaravelで採用した際にInvalid route actionが出た件

##はじめに
最近、アプリケーションアーキテクチャに興味を持ち、実際にLaravelでADR(Action Domain Responder)を試しています。Laravelは自由度が高いのでアーキテクチャ次第で全く違ったものになるという印象を受けています。
ADRには、1つのアクションとルートを対応させる事で複雑化を防ぐという思想があり、シングルアクションコントローラー(実際は、Action)を採用しました。(他にもメリットがあるかは勉強中です…)

##ルートが認識されない
公式を見つつシングルアクションクラスとルートを作成しました。

“`php:BookRegisterAction.php

元記事を表示

Composerがインストールできない環境でComposerを使用したい時

PHPでシステムを組むときにComposerを使うかと思いますが、
レンタルサーバーだったり、権限がなかったりと、Composerをインストールできないときがあると思います。

その場合、以下手順でComposerのコマンドを叩けます。
※既にローカル環境などで開発していて、composer.jsonがある前提です。
– – –
まずはcomposer.jsonがあるフォルダに移動します。

次にcomposer.pharというComposerを叩くためのファイルを落としてきます。

“`
curl -sS https://getcomposer.org/installer | php
“`
あとは以下で叩けます。

“`
php composer.phar install
“`

update

“`
php composer.phar update
“`

composer

php composer.phar
に置き換わった感じですね。

元記事を表示

Laravel で Target class [Controller] does not exist.が出た時の対応

# 事象
最近のLaravel (多分v8以降とかそのあたり)では、初期状態で以下のようなコードをroutes/web.phpに記述すると、あるはずのController Classを見つけられずエラーが発生する。

“`php
Route::get(‘/hoge’, ‘Controller@index’);
“`

“`
Illuminate\Contracts\Container\BindingResolutionException
Target class [Controller] does not exist.

http://laravel.internal/hoge

Illuminate\Container\Container::build
htdocs\laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php:811
“`

どうやらContollerの初期位置を見失うようになったらしい。

# 対応

App/Providers/RouteServiceProvider.

元記事を表示

MAMPが起動できない時のエラー解除方法

Apache couldn’t be started because port 8888 is in use by some other software.

というエラーが出て、MAMPがスタート出来なかったので調べていたところ、

https://qiita.com/xiaoxiao/items/9e5686a4b02b34929c8b

こちらの方の記事を見たら解決出来ました。

実際に実行したことは、

1、ターミナルのホームディレクトリで、以下コマンドを入力。
“`$ sudo lsof -i -P | grep “LISTEN”
“`

2、ポートの状態が一覧で表示
  ※8888が使われているものを見つける。

3、以下のコマンドで8888を削除
“`$ kill -9 XXXX“`(XXXXは該当する番号を入力)

4、もう一度 1、と同じコマンドで状態を確認すると、
  8888を使っていたものが削除されていました。

5、その後、MAMPを起動してみると無事に起動出来ました。

元記事を表示

Centos7にてcomposer installを行うと「Your requirements could not be resolved to an installable set of packages.」と怒られた

## なにが起こったか
Centos7に運用中のLaravelプロジェクトをクローンしてcomposer installしたらコケた。

“`
$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

Problem 1
– Installation request for php-di/invoker 2.1.0 -> satisfiable by php-di/invoker[2.1.0].
– php-di/invoker 2.1.0 requires php >=7.3 -> your PHP version (7.2.28) does not satisfy that requirement

元記事を表示

Symfonyの認可について

# 初めに

`User`に紐づいた`Post`エンティティがあったとき「自分の所有する`Post`以外は見れない」という用件を達成するにはどのような実装方法があるか、という話です。

# 最も単純な方法

最も単純な方法は、コントローラーでログインしている`User`の`Post`かどうか判断する方法です。特に難しいこともありません。
が、しかし、 アクセス権を確認する際に同じようなコードが至る所に出てきてしまうことが容易に想像できます。

“`php
/**
* @Route(“/{id}/detail”, name=”post_detail”)
*/
public function edit(Post $post)
{
$user = $this->getUser();
if ($post->getUser() !== $user) {
throw $this->createAccessDeniedException();
}

}

元記事を表示

PHP8をWindows10にインストールする

PHP8をWindows10に手動インストールします。64bit版

## Visual C++ 2015-2019 再頒布可能パッケージのインストール

PHP8を動かすには、**Visual C++ 2015-2019 再頒布可能パッケージ** のインストールが必要です。
事前にインストールしてください。

直リンク:https://aka.ms/vs/16/release/vc_redist.x64.exe
公式ヘルプ:https://support.microsoft.com/ja-jp/help/2977003/

## PHP8 のダウンロード

PHP公式サイトから、PHP8 をダウンロードする。

https://windows.php.net/download/

いろいろありますが「**VS16 x64 Thread Safe**」のzipファイルを選択します。
解凍したら、今回は“C:/php“に配置するとします。

## 環境変数の設定

環境変数のPathにPHPのパスを追加する作業です。

スタートボタンを右クリック → **検索**。
検索ボックスに`

元記事を表示

Ubuntu Nginxでwordpressの環境構築

wordpress環境構築の為に、AzureでVM作成してサーバーを立てました。

サーバのOSはUbuntu 18.04.5 LTSです。

レンタルサーバーなどを使用すれば簡単にできるwordpress環境構築ですが、1からwordpressの環境を構築したら結構難しかったので、やり方をまとめました。
#UbuntuにwebサーバーNginxをインストール
ApacheかNginxかで迷いましたが今回はNginxを使用しました。

まずは、インストール可能なパッケージの「一覧」を更新し、nginxをインストールする下記コマンドを実施。

ちなみに、apt-getコマンドは、Debian系のディストリビューション(DebianやUbuntu)のパッケージ管理システムであるAPT(Advanced Package Tool)ライブラリを利用してパッケージを操作・管理するコマンドです。

centOSの場合は、apt-getの代わりにyumコマンドが使えます。

“`
# apt-get update
# apt-get install nginx
“`

Nginxがインストー

元記事を表示

異なるVPNプロトコル間の比較:OpenVPN、L2TP / IPSec、SSTP、IKEv2、PPTP

次のVPNプロトコルが発生する可能性があります。

-**OpenVPN**:常にOpenVPN。オープン仮想プライベートネットワークと呼ばれることはありません。
-**L2TP / IPSec**:レイヤー2トンネリングプロトコルとインターネットプロトコルセキュリティの組み合わせ。
-**SSTP**:セキュアソケットトンネリングプロトコル。
-**IKEv2**:MicrosoftとCiscoによって開発されたネットワークキー交換バージョン2。
-**PPTP**:ポイントツーポイントトンネリングプロトコル。

これが紛らわしい、あるいは気が遠くなるようなように思われる場合でも、悲しんではいけません。これらのことを知っている人はほとんどいませんし、技術に精通した人もたくさんいます。

すでに途方に暮れていて、あなたに最適なVPNを選択するのに助けが必要ですか? VPNを使用して、手順を簡素化し、選択プロセスを簡素化してください。私たちはあなたのためにそれを研究しました。

そうは言っても、VPNプロトコルについて知っておく必要のあるほとんどすべてがここにあります。

## VPN

元記事を表示

セッション時間を延ばす

#PHPセッション時間を延長する
PHP.iniのsession.gc_maxlifetimeを延ばす

~~~ini
session.gc_maxlifetime = 1440
~~~

#参考
[[php]ログインセッションの維持・有効期間について (session,cookie)](http://www.fwoabw.info/entry/2017/05/26/post-8282)

元記事を表示

PHPでの基本的なこと (1)

#最初に
普段Pythonをつかっているため、そこと完全に一致しているものは省略しているかも

###メモ
プログラムの最後には;をつけること

#コメントアウト
### 1行のコメントアウト

“`php
// これでコメントアウトされる
“`

### 複数行のコメントアウト
“`php
/*
echo “/*と* /で挟むと”;
echo “その間の行は”;
echo “実行されない”;
echo “上のやつで空白が入っているのはコメントアウト解除を防ぐため”
*/
“`

#標準出力
###文字列
文字列の場合は””で挟む

“`php
echo “ABC”;
// 出力 ABC
“`

###数字
数字の場合はそのままでおk
特に形式などを指定する必要もなさそう

“`php
echo 15;
// 出力 15
echo 10.5;
// 出力 10.5
“`

###論理型
論理型の場合はechoでtrueを出力すると1、falseは何も出力されない

“`php
echo true;
// 1
echo false;
// 出力されない
“`

##

元記事を表示

PHP で最後の終了タグがあると何が起きるか

PHP はテンプレート言語ですので、コードは PHP タグで囲みますが、ファイル末尾の終了タグは省略することが推奨されています。

“`php
// ←省略を推奨
“`

[PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) には

> The closing ?> tag MUST be omitted from files containing only PHP.

とありますし、PHP マニュアルの [PHP タグ](https://www.php.net/manual/ja/language.basic-syntax.phptags.php) にも

> ファイルが PHP コードのみを含む場合は、ファイルの最後の終了タグは省略するのがおすすめです。 終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。 余分な空白や改行のせいで PHP が出力バッフ

元記事を表示

Ruby on railsとLalavelどっちが良い?

技術選定の仕方

・自分のやりたい事が実現しやすい
・情報量が多い

プログラミングはあくまでも手段でしかなく、プロダクトの価値を最大化させることこそが目的である。またプログラミング言語は、基礎文法は少し変わるぐらいで大した差はない。言語に縛られるよりも、自分が言語に合わせて勉強していくほうが、プロダクトの価値も開発効率も上がる。

Ruby on railsを選びました

①scaffoldが便利
MVCの作成はrouteの設定までいい感じに自動で生成してくれる。

②情報量が多い!
ruby自体が日本発の言語ということもあり、qiitaの記事の数をはじめ日本語の説明の記事がlalavelよりも多い。

③コミュニティー内に参考にできるソースコードがある
身近にコードについて質問でき参考にできるコードがあるのは、めっちゃ楽。

>Rails: ある程度の規模まではレールに乗ってサクサク作れるが、アプリケーションが成熟してきて「規約」にはないことをやりたくなってくると、途端に求められる技術力や難易度が跳ね上がる。
Laravel: アプリケーションの雛形

元記事を表示

【Laravel】url生成(idなど使用)したページで、現在のページをリロードする方法

はじめに

フォロー・フォロー解除の機能を実装するときにはまった。
フォローボタンクリック → 同ページをそのままリロード
という動きを実現させたい。
方法が思いつかなくて手間取ったので記事にします。

通常のリロード方法

通常のページであればそのままurlを指定してリロードすればOK。

“`
return redirect(‘/home’);
“`
ただし、今回リロードしたかったページが以下のようにidを使用したurlだったため、
urlに何をいればば良いかわからなくて困った。
`/users/[id]`

解決方法

以下のようにurl([url])を使用して変数を入れることで解決した
(そんなに難しいことでもなかった。。)

“`
return redirect(url(‘/users’,$request->follow_id));
“`

まとめ

ページを普通にリロードする関数などあると思っていたが、どうやらないっぽい。
なんだか同じurlを打ち込んでリダイレクト、というのは力技感があっ

元記事を表示

簡単! MAMPでgensim、word2vecを使う。

**注意! python、mamp、gensimがインストールされた環境の方にむけたものです。できてない方はインストールしてください。**
**あと、word2vecの学習ではなく、似ている言葉探すだけです。**

まず、phpからpythonに接続します。

phpにこれを入れてください〜!
execというコードは、phpからコマンドラインにアクセスできます。(macのターミナルと同じやつ。)

“`php


“`

これを使って、word2vecが書かれたpythonを実行します。
例えば…、test.pyのようなpythonファイルをphpから実行できます。

“`php


“`

次にword2vecで似ている言葉を探すためにデータを持ってきます。
zipダウンロードしましょう。
http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/
これを後で使います。

次にpython側ですが、新しいpython

元記事を表示

GitHub Actionsにphp-security-auditを組み込んで、プルリク時にレビューコメントとして出力してみた

こんにちは!

GitHubのプルリク時に該当のphpコードに含まれる脆弱性を検知し、コメントとして出力してほしいという要望がありました。

なので、GitHub Actionsにphpcs-security-auditとreviewdogを組み込むことにしました。

phpcs-security-auditを導入している事例や導入方法が日本語のドキュメントで少なかったので、もし、導入してみたい方とかは参考にしてみてください。

#phpcs-security-auditとは?

↓公式ドキュメントになります。
https://github.com/FloeDesignTechnologies/phpcs-security-audit
>phpcs-security-audit is a set of PHP_CodeSniffer rules that finds vulnerabilities and weaknesses related to security in PHP code.

phpのコードに含まれている脆弱性を発見するためのphpcsのルールになります。

#前提条

元記事を表示

【PHP】XSS攻撃への対策

投稿フォームを作成している際、特に対策をしていない場合XSS攻撃を受けてしまう事を学んだ。

PHPではXSS攻撃の対策としてhtmlspecialchars関数が有効であるのでこの関数を使用してフォームを作成。

この関数を使用することによってフォームに入力された物がただの文字列として認識され、javascripなどを記入されても反応しない様になります。

“`PHP

投稿フォーム






“`

htmlspecialcharsは名前が長いので関数に入れてしまう事

元記事を表示

【PHP】九九表

九九表を作成する問題を説いた際、短時間で綺麗にコードを書く事ができなかったので備忘録として完成させたコードを載せます。

“`PHP

“`

このコードによって表示される結果は下記。

“`
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35

元記事を表示

laravelでsitemap.xmlからHTTPテストを作る

## 経緯

「とりあえずHTTPテストやりたいけど、構造はよく変わるしテストの維持がとても大変」
「関係ないけどsitemap.xmlの更新も面倒だなぁ」
「そうだ!sitemap.xmlからテストを作れば1度の修正で済むぞ!」

## 環境
laravel 6.19
PHPUnit 8.2.5

## 備考

前提として、テストを行うルート(sitemap.xmlに載せているルート)にnameが設定されている必要があります。

このテストは「sitemap.xml(このサイトに存在すると世界に示しているページ)にアクセス可能か」ということだけを検証するものです。
テストの管理が難しい環境で、最低限のHTTPテストとしてとりあえず入れてみるのには良いのでは無いかと思います。

## 出来たもの

“`php:sitemap/index.blade.php

‘ . “\n”; ?>
【Laravel】中間テーブルに値を追加・更新する方法

#実現したいこと#
中間テーブルに値を追加・更新する。

タグ機能を作る際に、プロジェクトテーブルとタグーテーブル紐付ける際に
中間テーブルを作り、値を追加・更新することができたので、紹介します。

##テーブル設計##

####タグテーブル

|id | name |
|—|—|
|1 |Javascript |
|2 |PHP |

####プロジェクトテーブル

|id |title |
|—|—|
|1 |フロントエンドを学習しよう |
|2 |バックエンドを学習しよう |

####中間テーブル(プロジェクトタグテーブル)

|id |tag_id|project_id|
|— |— |— |
|1 |1 |1 |
|2 |1 |2 |
|3 |2 |2 |

中間テーブルはこのように、テーブ同士が多対多の関係の時に必要になります。

##中間テーブルに値を追加する方法

###中間テーブルに値を入れるためのステップ

元記事を表示

OTHERカテゴリの最新記事