phpでログイン認証をつける勉強を動画を見ながら勉強しています。
php
1<?php 2 3namespace MyApp; 4 5class Controller { 6 7 private $_errors; 8 private $_values; 9 10// コンストラクタでエラーセット 11 public function __construct() { 12 // CSR対策 13 // セッションのトークンに値がセットされていなかったらセットする 14 if (!isset($_SESSION['token'])) { 15 // 16桁のバイト文字作成 → バイナリのデータを16進表現に変換 16 $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16)); 17 } 18 19 $this->_errors = new \stdClass(); 20 $this->_values = new \stdClass(); 21 } 22 23// メールアドレス保持 24 protected function setValues($key, $value) { 25 $this->_values->$key = $value; 26 } 27 28// メールアドレス取得処理 29 public function getValues() { 30 return $this->_values; 31 } 32 33// エラーセット処理 34 protected function setErrors($key, $error) { 35 $this->_errors->$key = $error; 36 } 37 38// エラー取得処理 39 public function getErrors($key) { 40 return isset($this->_errors->$key) ? $this->_errors->$key : ''; 41 } 42 43 protected function hasError() { 44 return !empty(get_object_vars($this->_errors)); 45 } 46 47 protected function isLoggedIn() { 48 // $_SESSION['me'] 49 // セッションにmeがセットされていて、空じゃなかったらmeを返す 50 return isset($_SESSION['me']) && !empty($_SESSION['me']); 51 } 52 53}
上のコードはプログラムの一部なんですが、プログラムを実行すると以下のエラーが出ます。
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ドライブに解答したファイルをコピーし、パスを通している感じです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/08 10:03