読者です 読者をやめる 読者になる 読者になる

でかるちゃー

毎日の発見に驚き、感じる!感謝する!

-スポンサードリンク-

Kyle Slater からのメール(トニーモリスネタ)

最近、英語でリクルーターからのメールが届きました。

Kyle Slater という人からで、履歴を見ると、最初にメールが来たのは2015年8月頃でした。

その時、紹介された案件について、一度会って話さないか?というのが1週間おきに計5回ほど来ていたらしい。

その件は完全にスルーというか、全文英語のメールだったので振り分けの関係で、来ていたことすら気づいていなかったのだけど、最近別の案件紹介のメールが来るようになった。

何故、今回は気づいたかと言うと、メールの件名の最初に「弊社独占案件」という日本語が含まれていた。w

 

彼の名前は、「Kyle Slater」

J-Tech International という会社で、Recruitment Consultant をされているらしい。

 

彼は、僕の名前や職種、現職の会社、くらいは把握しているようで、どこで調べたのか気になったけど、FacebookTwitterとかで普通に公開しているレベルの情報なので、特別個人情報流出とかではなく、クローリングして情報収集しているのであろう。

 

さて、多分会わないのだけど、彼がどんな人か知りたくてググッてみました。

Kyle Slater」で調べている筈なのに、出てくるのは「Tony Moris」という人の話ばかり。

f:id:watouch:20160530165623j:plain

なんだコレは!と、もう少し調べていたらこんなのが出てきました。

こんな面白い事やっていたんですね。僕も参加してみたかったです。

もう少し英語で流暢に会話ができたら、彼または彼の代理人に会って話してみるのも良いかなと思いましたが、今はゴメンナサイ。

 

PHP7 で Laravel5 を試して出てきたエラー(その1)

少し前に投稿しましたが、Laraver5の勉強を兼ねて、こんなWebサイトの開発を行っています。

少しずつ動くようになってきたのですが、いろいろハマりどころもあったので、それらの原因や解決方法を備忘録代わりに書いていこうと思います。

まず、環境ですが、こんな感じです。

$ php -v
PHP 7.0.6 (cli) (built: Apr 28 2016 21:34:10) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

$ php artisan --version
Laravel Framework version 5.2.31 

Windows上のPHPで軽く検証した後、AWSで開発しています。

 

それでは、ここから本題。

まず最初のエラーです

FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught ReflectionException: Class log does not exist in {MyApp DIRECTORY}/vendor/laravel/framework/src/Illuminate/Container/Container.php:738

 logクラスが無いとか言われています。

Windowsで検証していた時は、こんな事は無かったです。

とりあえず、ぐぐってみました。 

同じエラーで苦しんでいる人がいるようです。

色々書いてあります。

  • Laraver5のアップデートによるバグを踏んでしまった?
     ⇒ composer update で解決?
  • Laraver5のアップデートでディレクトリ構成が色々変わった?
     ⇒ config ディレクトリを resources ディレクトリに移動?
  • laravel-develop から最新のソースを取得すると治る?
  • config/app.php の文字列が問題?
     ⇒ 値をダブルコーテーションで囲えばOK?
  • phpのライブラリが足りない?
     ⇒ yum install を行う?

これらを一つ一つ試してみたのですが、どれもダメでした。 

 

「現場百遍」という言葉があります。

www.weblio.jp

事件の操作で、思い込みで見逃していたりする解決の糸口を探る事ですね。

開発において、バグやトラブルの解決のためには、現場の代わりにログがあります。

php.ini のコメントに下記の記載がありました。

; Common Values:
; E_ALL (Show all errors, warnings and notices including coding standards.)
; E_ALL & ~E_NOTICE (Show all errors, except for notices)
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting

PHP: Runtime Configuration - Manual

デフォルト値では、E_DEPRECATED や E_STRICT レベルのエラーは出力されないようです。

では、これを開発版に変更して

error_reporting = E_ALL

とします。

さて、ログを確認してみましょう。

#0: *28 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "{MyApp DIRECTORY}/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in {MyApp DIRECTORY}/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:97
#0 {MyApp DIRECTORY}/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\StreamHandler->write(Array)
#1 {MyApp DIRECTORY}/vendor/monolog/monolog/src/Monolog/Logger.php(336): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#2 {MyApp DIRECTORY}/vendor/monolog/monolog/src/Monolog/Logger.php(615): Monolog\Logger->addRecord(400, Object(UnexpectedValueException), Array)
#3 {MyApp DIRECTORY}/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\Logger->error(Object(UnexpectedValueException), Array)
#4 {MyApp DIRECTORY}/vendor/laravel/framework/src/Illuminate/Log/Writer.php(113): Illuminate\Log\Writer->writeLog('error', Object(Un...
PHP message: PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "{MyApp DIRECTORY}/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in {MyApp DIRECTORY}/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:97

なんとわかりやすいエラーログでしょう。

(抜粋)

The stream or file "laravel.log" could not be opened: failed to open stream: Permission denied in "StreamHandler.php:97". 

超直訳すると、こんな感じです。 

www.blue-earth.click

(なんとなく伝わわらない・・・、けど気分を取り直して)

 つまりですね、Logクラスが無いんじゃなくって、Log書き込めないんです。

具体的には、WebServerに nginx を使っていて、nginxユーサーで動いているのですが、

$ ls -l {MyAppDIRECTORY}storage/
drwxrwsrw- 3 ec2-user ec2-user 4096 Apr 27 22:01 app
drwxrwsrw- 5 ec2-user ec2-user 4096 Apr 27 22:01 framework
drwxrwsrw- 2 ec2-user ec2-user 4096 May 14 13:15 logs

となっていたんですね。

Laravelのログは、「storage/logs/laravel.log」に書き込まれるので、これじゃダメです。

ということで、

$ touch storage/logs/laravel.log
$ chmod 666 storage/logs/laravel.log

もしくは、

$ sudo chown nginx.nginx storage/logs

でも良いかもしれません。

一応、これで今回の問題は解決したのですが、その後、新たな問題が発生しこのログファイルに一杯エラーが書き込まれる事に。。。

まぁ、それはまた今度という事で。

gmailが乗っ取られそう?

最近、gmailへ頻繁にこんな通知が来るようになりました。

f:id:watouch:20160528221416p:plain

ログイン試行をブロックしました

ほげほげ 様
最新のセキュリティ標準を満たしていないアプリからあなたの Google アカウント(ほげほげ@gmail.com)にログインしようとした人がいます。
詳細:
2016年5月25日水曜日、10:53(アメリカ東部夏時間)
アメリカ合衆国*
アカウントへのアクセスには Gmail のような安全なアプリを使用することを強くおすすめします。Google が提供するアプリはすべてこうしたセキュリティ基準を満たしています。安全性の低いアプリを使用するとアカウントが脆弱なままになるおそれがあります。詳細

Google ではこのログイン試行を停止しましたが、最近使用した端末を確認する必要があります。

 マジ怖いです。複数アカウントもっていますが、このアカウントが一番よく利用するんです。

とりあえず対策しなくっちゃということで、二段階認証です。

ワンタイムパスワードを受け取るには、SMSでメール受け取る方法もあるんだけど、毎回メール受け取るのが面倒そうなのと、使ってる場所で圏外とかだと困るのです。

Googleの認証システムとして、Androidなら「Google 認証システム」アプリ、iOSなら「Google Authenticator」というアプリがあります。実はベッケンバウアー(別件w)で、どちらも入れてたのでこの辺はスムーズだったのですが、一応こちらに詳しく載っていたので

と、言う事で、Gmailの二段階認証を有効にしました。

f:id:watouch:20160528223200p:plain

この後、iOSやらAndroid端末で登録しているGmailアプリ一つ一つで、二段階認証の登録をしなければならないのですが、それは1回やれば終わり。

まぁ、これで乗っ取りを防げるなら、大した手間ではありません。