質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

PHP設定 openssl

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,343

ryohasegawa

score 119

phpでログイン認証をつける勉強を動画を見ながら勉強しています。

<?php

namespace MyApp;

class Controller {

  private $_errors;
  private $_values;

//  コンストラクタでエラーセット
  public function __construct() {
    //  CSR対策
    //  セッションのトークンに値がセットされていなかったらセットする
    if (!isset($_SESSION['token'])) {
      //  16桁のバイト文字作成 → バイナリのデータを16進表現に変換
      $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16));
    }

    $this->_errors = new \stdClass();
    $this->_values = new \stdClass();
  }

//  メールアドレス保持
  protected function setValues($key, $value) {
    $this->_values->$key = $value;
  }

//  メールアドレス取得処理
  public function getValues() {
    return $this->_values;
  }

//  エラーセット処理
  protected function setErrors($key, $error) {
    $this->_errors->$key = $error;
  }

//  エラー取得処理
  public function getErrors($key) {
    return isset($this->_errors->$key) ?  $this->_errors->$key : '';
  }

  protected function hasError() {
    return !empty(get_object_vars($this->_errors));
  }

  protected function isLoggedIn() {
    // $_SESSION['me']
    //  セッションにmeがセットされていて、空じゃなかったらmeを返す
    return isset($_SESSION['me']) && !empty($_SESSION['me']);
  }

}


上のコードはプログラムの一部なんですが、プログラムを実行すると以下のエラーが出ます。
Fatal error: Uncaught Error: Call to undefined function MyApp\openssl_random_pseudo_bytes() in C:\Users\ryou\Desktop\login\lib\Controller.php:16 Stack trace: #0 C:\Users\ryou\Desktop\login\public_html\index.php(7): MyApp\Controller->__construct() #1 {main} thrown in C:\Users\ryou\Desktop\login\lib\Controller.php on line 16

16行目のエラーだと思うので、$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16));でエラーが出てると思います。

PHP側の設定でiniファイルのopensslの項目の;は外してあります。

追記

PHPはここからダウンロードしました。(Current Stable PHP 7.1.2)
環境としては、Cドライブに解答したファイルをコピーし、パスを通している感じです。

php -iの結果

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

OpenSSLに絡むトラブルということのようですね。

追記・修正依頼に属する内容かもしれませんが、
phpは様々な配布方法があるため、
どの情報を参考にして、
どのサイトで配られているどのバージョン、どのファイルをダウンロードして、
どうやって環境構築したか、という経緯も
関係なさそうに見えて関係あったりします。

あとで似たようなシチューエーションでハマってしまう人の助けになるように、
経緯なども改めて質問文に記載してもらえないでしょうか。

質問する側、回答する側双方の、
思い込みによる誤解をいかに排除して正解に近づけるかの勝負なので、
どうかよろしくお願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/08 19:03

    追記させていただき巻いた。

    キャンセル

+1

\bin2hex(\openssl_random_pseudo_bytes(16));
としたらどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/07 23:11

    php_openssl.ini という項目がありません。
    すべて拡張子がdllです。

    キャンセル

  • 2017/03/07 23:19

    どっちにしても dll は windows 用です

    キャンセル

  • 2017/03/08 00:18

    はい。それはわかります。
    Windows環境なので、Windowsで動く設定をすればいいんじゃないですか?
    Javaじゃないので

    キャンセル

checkベストアンサー

0

<?php
if (in_array('openssl', get_loaded_extensions())) {
    echo "利用可能です。";
} else {
    echo "openssl が無効になっています。";
}

これを実行してちゃんと設定が有効になっているかを確認してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/08 20:32

    パッケージをインストールする必要があるということですか?

    キャンセル

  • 2017/03/08 20:34

    そう書いてあるね。

    キャンセル

  • 2017/03/08 20:45

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる