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

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

新規登録して質問してみよう
ただいま回答率
85.35%
OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

9484閲覧

PHP設定 openssl

ryohasegawa

総合スコア437

OpenSSL

OpenSSLはSSL/TLSのプロトコルと一般的な暗号のライブラリを導入するオープンソースのソフトウェアのツールキットです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/03/07 10:26

編集2017/03/08 10:55

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ドライブに解答したファイルをコピーし、パスを通している感じです。

php -iの結果

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

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

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

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

投稿2017/03/08 06:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2017/03/08 10:03

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

0

ベストアンサー

php

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

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

投稿2017/03/07 11:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2017/03/07 11:53

ありがとうございます。無効と表示されました。 ;を外すだけじゃ駄目なんですかね?
ryohasegawa

2017/03/07 11:54

php-7.1.1-nts-Win32-VC14-x86 とうバージョンのPHPなんですが、php.ini-development というファイルを編集して設定したんですが・・・・
退会済みユーザー

退会済みユーザー

2017/03/07 11:55

それじゃないということですね。
ryohasegawa

2017/03/07 12:15

このファイル以外にないと思うんですが・・・
退会済みユーザー

退会済みユーザー

2017/03/07 12:20

自分の想像と、実行結果、どっちが信用できます?
ryohasegawa

2017/03/07 12:46

そもそも読み込まれていないみたいです。(iniファイルが存在しないです)
退会済みユーザー

退会済みユーザー

2017/03/07 14:25

そのようですね。ただの報告ならコメント不要ですよ。
退会済みユーザー

退会済みユーザー

2017/03/07 15:19

> はい。それはわかります。 > Windows環境なので、Windowsで動く設定をすればいいんじゃないですか? > Javaじゃないので > Javaじゃないので 何これ?
退会済みユーザー

退会済みユーザー

2017/03/07 15:21

とりあえず、php.ini を編集したら、そのあとすることあるのは知っているのかい?
ryohasegawa

2017/03/07 15:23

再読込するんですよね?
退会済みユーザー

退会済みユーザー

2017/03/07 15:23

それを正しい方法で行いましたか?
ryohasegawa

2017/03/07 15:29

正しい方法とはなんですか? Control+C で閉じで、コマンドプロンプトを閉じて、再びコマンドプロンプト開くんじゃないんですか? Linux系のOSはservice restart コマンド使うと思いますが・・・・
退会済みユーザー

退会済みユーザー

2017/03/07 15:30

原因はそれだね。 調べてごらん。
ryohasegawa

2017/03/07 16:00

調べてみると再起動、再読込が必要とはあるのですが、Linuxのやり方が多くて、やり方にたどり着けません・・・
退会済みユーザー

退会済みユーザー

2017/03/07 16:02

どのように調べたんですか?
ryohasegawa

2017/03/07 16:03

Apacheを使っていたりすると、Apache側で読み込んだりするといいのですが、自分の場合はphp -S コマンドでサーバーをローカル内で立てるやり方で使っているので少し読み込ませ方が違うのでしょうかね?
退会済みユーザー

退会済みユーザー

2017/03/07 16:06

どのように調べたんですか?
ryohasegawa

2017/03/07 16:08

インターネットで Windows php.ini 設定適応 みたいなワードで検索しました。 それと、今Macでやってみたんですが、Macでやると初期設定のままでも利用可能と表示されました。
退会済みユーザー

退会済みユーザー

2017/03/07 16:10 編集

「みたいなワード」という曖昧な答えじゃなく、どういうキーワードで調べたのかを正確に伝えてください。本当にそのキーワードでヒットしないのかを確かめるので。
ryohasegawa

2017/03/08 09:59 編集

インターネットで Windows php.ini 設定適応 と調べました。
退会済みユーザー

退会済みユーザー

2017/03/08 09:55

それで、どのページを見たの?
ryohasegawa

2017/03/08 09:59

上から見ていったんですが、LinuxやIIS、Apache、と入っているものばかりで当てはまるものが見つからなかったんです。
ryohasegawa

2017/03/08 10:44

Apacheは入ってないですよ・・・
退会済みユーザー

退会済みユーザー

2017/03/08 10:46

こういうことになるから、環境かけって言われてるのにね。
退会済みユーザー

退会済みユーザー

2017/03/08 10:47

# php -i の結果でも書いておいて。
ryohasegawa

2017/03/08 10:55

追記させていただきました。 入り切らなかったので、googleの方のURL貼りました。
退会済みユーザー

退会済みユーザー

2017/03/08 10:58

Configuration File (php.ini) Path => C:\Windows Loaded Configuration File => C:\php-7.1.2-nts-Win32-VC14-x64\php.ini どっちiniを編集した?
ryohasegawa

2017/03/08 11:25

C:\php-7.1.2-nts-Win32-VC14-x64\php.ini を編集しました。
ryohasegawa

2017/03/08 11:32

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

退会済みユーザー

2017/03/08 11:34

そう書いてあるね。
ryohasegawa

2017/03/08 11:45

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

0

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

投稿2017/03/07 10:42

mizuiro_makoto

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2017/03/07 11:34

2箇所に ¥ を付けたらいいですか?
ryohasegawa

2017/03/07 11:39

¥を入力すると バックスラッシュになってしまうのですが問題ないですよね? 問題ないとしたらその方法でも駄目でした。
ryohasegawa

2017/03/07 11:40

でもエラーメッセージが変わりました。 Fatal error: Uncaught Error: Call to undefined function 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
mizuiro_makoto

2017/03/07 12:15

最初のエラーは undefined function MyApp\openssl_random_pseudo_bytes() とある通りMyApp内のopenssl_random_pseudo_bytes()という関数を呼び出そうとしてしまっていたので、先頭に\をつけてグローバルスコープのopenssl_random_pseudo_bytes()を呼び出すように修正する必要がありました。 (bin2hexも同じ) それを直した上で別の問題が発生したようですね。
ryohasegawa

2017/03/07 12:49

iniファイルなんですが、編集項目のあるファイルがphp.ini-development しかなくこれかと思っていたら、iniファイルが呼び出されていないみたいで・・・・
mizuiro_makoto

2017/03/07 12:53

php.ini-developmentというファイル名ですか? 後ろの -development を削って php.iniというファイル名にリネームしてみるとどうなりますか?
ryohasegawa

2017/03/07 13:06

なるほど、関心しました。 php.iniが読み込まれました。
ryohasegawa

2017/03/07 13:07

extension=php_openssl.dll としてあるのに、opensslが有効になりません。
mizuiro_makoto

2017/03/07 13:52

http://php.net/manual/ja/openssl.installation.php http://www.takaiwa.net/2013/03/phpopenssldll.html?m=1 http://qiita.com/MasatoYoshioka@github/items/e542f39a6f1a3bc1f71e 検索してみました。 簡単そうな物から試していくしかないかもしれません。 また、この質問のタイトルが単にエラーとなっているため知識を持ってる人がいても見てもらえない可能性が高くなります。 分かりやすいタイトルに変更すると他の人からいい回答が貰えるかもしれません。
退会済みユーザー

退会済みユーザー

2017/03/07 14:04 編集

.dll は windows の場合です。あなたは過去の質問で、OSはCentOSと言ってます。有効にすべきは php_openssl.ini です。
ryohasegawa

2017/03/07 14:10

過去はCentOSでもやってました。 今はWindowsのローカル環境です
ryohasegawa

2017/03/07 14:11

php_openssl.ini という項目がありません。 すべて拡張子がdllです。
退会済みユーザー

退会済みユーザー

2017/03/07 14:19

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

2017/03/07 15:18

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問