カテゴリー
IT MySQL PHP Web サーバー プログラム

PHPからMySQL8.0に接続できなくなった

MySQL8.0.4から、パスワードの認証方式が変わっているため(caching_sha2_password)、PHPから接続する際に、古いパスワードの認証方式(mysql_native_password)で行っていると以下のようなエラーが表示されます。

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

PHP 7.1.6、7.2.4以降から、caching_sha2_passwordに対応しています。この記事では、古い認証方式のまま接続する方法を解説します。

以下のコマンドでMySQL Serverに接続します。

mysql -u root -p

以下のSQL文で現在の設定を確認します。

SELECT user, host, plugin FROM mysql.user;

以下のように出力されるはずです。

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

以下のSQL文でrootのパスワードを変更します。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

カテゴリー
IT MacPorts MySQL Web サーバー プログラム

MacPortsで全てのバージョンのMySQLを実行する

MacPortsだと全てのバージョンのMySQLを実行できます。

/opt/local/etc/mysql8/macports-default.cnfskip-networking が設定されているからです。

これは、TCP/IPによる通信ではなく、UNIXドメインソケット(ファイルシステムを使ったプロセス間通信)を利用しているからです。

これは、.sockファイルのパスを変えることで、複数バージョンの起動を可能にする手法です。

TCP/IPでは待ち受けポート(リスニングポート)番号は重複できません。(当然!)

逆に言うと、ポート番号を変えれば複数バージョンの起動も可能ですし、同一バージョンを複数起動する事も可能です!

カテゴリー
Eclipse PHP プログラム

Eclipse で tab が space になる

Eclipseのデフォルト設定では、タブを入力すると自動的にスペースに変換されてしまいます。この設定を解除するのは、知らないと中々難しいのです。

検索エリアから「tab」を含む設定を探し、まさしくこれだろうと思いますが、これは違います。

検索エリアに「formatter」と入力して、PHP > Code Style > Formatter を選択し、下図の「show…」ボタンをクリックします。

下図の「Tab policy」を「Space」から「Tab」に変更します。

カテゴリー
NodeJS プログラム

NodeJS でプログラムが修正(更新)されたら自動的にリロードする

NodeJS のプログラム(スクリプト)で修正する度にプログラム(プロセス)を再起動(終了させて、また起動)するのは面倒くさいですよね?そういう場合は、nodemon を使いましょう!

-g はグローバルオプションです。
sudo npm install -g nodemon

使い方は簡単、node の代わりに、nodemon を使うだけです。

nodemon test.js

ファイルの修正を監視して、ファイルが修正されたら自動的にプログラムを終了して再起動します!

カテゴリー
NodeJS

FreeBSD で Puppeteer

FreeBSD で Puppeteer を使うと

UnhandledPromiseRejectionWarning: Error: Unsupported platform: freebsd

というエラーが出ます。なぜ FreeBSD がサポートされていないのか分かりませんが、Chromiumpkg からインストールすることで解決できます。

sudo pkg install chromium

Chrome がインストールされているパスは、Puppeteer に明示的に指定する必要があります。

(async () => {
const browser = await puppeteer.launch({
executablePath: '/usr/local/bin/chrome',
});

詳しくは Puppeteerissue に掲載されています。

https://github.com/puppeteer/puppeteer/issues/1049#issuecomment-381846813

カテゴリー
IT PHP Web プログラム

Cookieのクロスサイト設定

A cookie associated with a cross-site resource at http://example.com/ was set without the SameSite attribute.

http://example.com/のクロスサイトリソースに関連付けられたCookieが、 SameSite属性なしで設定されました。

A future release of Chrome will only deliver cookies with cross-site requests if they are set with SameSite=None and Secure.

Chromeの今後のリリースでは、 SameSite = None および Secure が設定されている場合にのみ、クロスサイトリクエストでCookieを配信します。

You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.

デベロッパーツールのApplication> Storage> CookiesでCookieを確認し、https://www.chromestatus.com/feature/5088147346030592 および https://www.chromestatus.com/feature/5633521622188032 で詳細を確認できます。

カテゴリー
HTML IT プログラム

脱・初心者!ドキュメント・ルート

このページを読む前に、先に脱・初心者!スキーマレスURLを読む事をお勧めします!

ドキュメント・ルートとは?!

ドキュメント・ルートとは、サイトのトップの事です。ドメイン名の直下の事です。具体的には、//phpbeginners.net/の事です。

ドキュメント・ルートが、そのサイトのルート(/)なので、ドキュメント・ルート・パス(ドキュメント・ルートからの絶対パス)を使うと、ドメイン名の省略ができるので、テスト環境のURL(//test.phpbeginners.net/top.html)と本番環境(//phpbeginners.net/top.html)といった、ドメイン名の違いを吸収することができます。

トップページヘのリンクを<a href="/">トップ</a>と記述する事ができます。

また、相対パスで記述する必要がなくなるので、<link type="text/css" href="../../css/index.css" />といった不具合の元となる記述が防げます。

カテゴリー
HTML IT プログラム

脱・初心者!スキーマレスURL

スキーマレスURLとは

スキーマレスURLとは、スキーマ(スキーム)の無い(レス)URLの事です。

そもそもスキームとは?!

スキーム(scheme)とは、http、https、ftp、sshなど、プロトコルをURL内に指定する箇所の事です。

HTMLでは、<a href="http://phpbeginners.net">とURLを記述しますよね?そこのhttpやhttpsの事です。これを省略する(記述しない)記法をスキーマレスURLと言います。

URLのhttpやhttpsって省略できるの?!

できます!

具体的には以下のように書きます。実際に自分で書いてアクセスしてみて下さい。リンクは有効です。

<a href="//phpbeginners.net">phpbeginners.net</a>

スキーマレスURLの記法のポイントは、URLの先頭を//(ダブルスラッシュ・スラッシュ2つ)にする事です。

疑問!スキームを指定しなかった場合はhttpになるの?httpsになるの?

httpになるか、httpsになるかは、現在表示しているページがhttpかhttpsかに寄ります。現在のページのプロトコルを踏襲(引き継ぎ)します。

つまり、httpのページならhttp、httpsのページならhttpsでアクセスします。

疑問!それに何のメリットがあるの?

httpsとhttpのプロトコルが混じるのが防げます!

httpsのページにhttpが混じっていると問題なの?

httpsのページに、httpが混在していると、ブラウザは安全ではないと警告しています。(普段は目立たないので気づきませんが)

SEO上も不利に働くかもしれません。

何が問題かというと、httpsで暗号化していても、httpの通信から情報が漏れることがあるからです。単純なところではCookieが閲覧可能な状態で送受信されます。

カテゴリー
Eclipse IDE プログラム

EclipseでMacのキーバインドが効かない

Macは標準でEmacs互換のキーバインドになっていますが、Eclipseでは効きません。これは、EclipseがJavaで作られているアプリケーションであるためです。

macOSで設定されているキーバインドが有効なのは、OSのテキストライブラリを利用している場合に限られます。EclipseはJavaのテキストライブラリを利用しているため、macOS側のキーバインドが働きません。このような場合はKarabinerを使う必要があります。

カテゴリー
Eclipse IDE プログラム

Eclipseでコンテンツ・アシスト(入力補完)が効かなくなった場合の対処方法

Eclipseで入力補完(コンテンツ・アシスト)が効かなくなった場合の対処方法は、環境設定から、PHP → Editor → Content Assist → Enable auto Activation を有効化する。

環境設定→PHP→Editor→Content Assist→Enable auto Activation