20201027のPHPに関する記事は24件です。

PHP・GCの話-7話)GC 関連機能紹介 1 (GC Statistics)

前書き

  • すべての記事は、自分の勉強目的と主観の整理を含めています。あくまで参考レベルで活用してください。もし誤った情報などがあればご意見をいただけるととっても嬉しいです。
  • 内容では、省略するか曖昧な説明で、わかりづらいところもあると思います。そこは、連絡いただければ補足などを追加するので、ぜひ負担なくご連絡ください。
  • 本文での「GC」は、「Garbage Collection, Garbage Collector」の意味しており、略語として使われています。
  • この記事は、連載を前提に構成されています。

※ 連載目録

※ 連載で使うサンプルコード

Sample Code Link on Github

● ExampleGc.php : 2話から6話までの内容で使うサンプルコードです。
● ExampleWeakReference : 8話のWeakReferenceの内容で使うサンプルコードです。

本連載記事は、基本的にこのサンプルコードをベースに説明をしています。
サンプルコードは、必ず見る必要も実行してみる必要もありません。
各話ごとに、コードを分解して動作原理と結果を解説しますので、基本記事の内容で足りるように心がけます。
あくまで、全体コードをみたい、手元で回してみたい、修正して回してみたいという方向けです。

今回の話

今回は、以下のものを話そうと思うます。

  • 1. GC Statistics

1. GC Statistics

1) GC Statisticsとは?

https://xdebug.org/docs/garbage_collection

XDEBUG 2.6 から基本提供している GC 分析ツールです。

1話でお話しした内容のように、PHPでは少ないケースだとしても、GCが起きているということ自体が危険信号であり、時々深刻なトラブルになる場合もあります。ですので、どこでGCが起きて、実行されて、どういう影響を与えたのかを分析し理解するのは、メモリとGC関連の問題で必要になってきます。

GC Statisticsは、GCの発動タイミング・実行時間・メモリ確保数値などの情報を分析できるデータを提供します。

PHP の内装エンジンでは GC分析機能を提供していないため、XDEBUGが必須になります。

設定方法としては、「PHP実行オプションでの指定・コード上での呼び出し・xdebug config file でのログ設定」がありますが、今回は「xdebug config file でのログ設定」で、実際に設定と結果分析をしてみます。

2) GC Statistics 設定

xdebug.iniに、以下の設定構文を追加します。
追加すると、指定したディレクトリにログが残るようになります。

xdebug.gc_stats_enable=true
xdebug.gc_stats_output_dir=/var/log/xdebug/
xdebug.gc_stats_output_name=gcstats.%p

3) GC Statistics 結果確認

連載で使っていたサンプルコードを実行した後、GC ログを確認します

artisan example:gc
root@5410ce51b72f:/var/www/html/home_sub/cgi# cat /var/log/xdebug/gcstats.24

Garbage Collection Report
version: 1
creator: xdebug 2.8.1 (PHP 7.4.8)

Collected | Efficiency% | Duration | Memory Before | Memory After | Reduction% | Function
----------+-------------+----------+---------------+--------------+------------+---------
     8986 |     89.86 % |  0.00 ms |      82832744 |     37144896 |    55.16 % | App\Console\Commands\ExampleGc::makeGarbageReferenceTo10000CountWhichPHPDefaultRootBufferMax
     9948 |     99.48 % |  0.00 ms |     167142328 |    121054232 |    27.57 % | App\Console\Commands\ExampleGc::makeGarbageReferenceTo10000CountWhichPHPDefaultRootBufferMax
     1094 |     10.94 % |  0.00 ms |     121502976 |     16173928 |    86.69 % | gc_collect_cycles

各項目に関しての定義は、以下になります。

  • Collected
    • GC により解除されたroot zvalsの数を意味します。解除された root zvals は、root buffer内で、GC による解除対象として監視下にあった、Object、または Array を意味します。
  • Efficiency%
    • root zval 解除効率を表します。計算式はCollected roots count / 10000です。ここで 10000 は、以前紹介したGC_ROOT_BUFFER_MAX_ENTRIESと関係しています。ここの効率が低いということは、GC でも解除できないメモリリック・または欠陥がある可能性が大きいと言えます。
  • Duration
    • GC が実行された時間を意味します。長く実行されているほど、システムの負荷はかかり、処理遅延もまた起きているということになります。
  • Memory Before
    • GC を実行する前のメモリ使用量を意味します。
  • Memory After
    • GC 実行完了後のメモリ使用量を意味します。
  • Reduction%
    • メモリ確保効率を意味します。ここの効率が低いということは、GC によりメモリ確保は期待できないということだと言えます。プログラムのメモリ占有問題を根本的なところからみる必要があると言えます。

ここで大事になるのは、効率と実行時間になると思います。

4) いつ使うべきか?

Javaではよく GC Dumpとかをみて、GC Tuningとかをする場合も多いですが、
PHPでは GC 分析をどこで使えるかと言われると、実に難しいところですね。

自分が考える使い所としては、DB の大容量処理か、ユーザーサービスにおいて、イメージや動画の大容量データを一括変換するような、実行時間が長く、大容量データを扱うサービスでは、メモリや処理に遅延が起きる場合は、調査方法の一つとして考えられるとは思います。

しかし、この内容を言っておく真の意味は、PHP のメモリ管理メカニズムを理解することにあると思うので、どっちかというと、「メモリ管理を意識した設計・実装」において、この知識自体が活用できるんじゃないかなと思います。

後書き

実は、今回を最終話にして、GC Statisticsと、Weak Reference内容を一緒に紹介した上で完結しようと思いましたが、Weak Referenceの分量がやはり多くなって、分けて投稿するようにしました。

実は話したいことが多くなってしまったせいもありますが、Weak Referenceは面白く、これからはPHPでも関心が高くなると思うので、有意義な話になればと思っています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Youtuberヒカキンさんのじゃんけんを統計したWebアプリを開発してみた!

なぜ作ったのか?

国民的アニメのじゃんけんを集めたデータで機械学習でそのじゃんけんに勝てるプログラムを作っていたのが始まりです。
で、プログラムを作って満足はしたんですが、今度は違う題材で機械学習プログラム作ってみようと思いました。
それでじゃんけんって言ったら他に誰が人気かって言うと真っ先に思い浮かんだのは子供達に大人気のYoutuberである「ヒカキンさん」と考えました。
なので、HikakinTVでヒカキンさんがじゃんけんをし始めた2014年11月からの動画を視聴し続けて結果を記録していきました。

現状、機械学習するまでは至ってはいませんが、他にヒカキンさんのじゃんけん記録している人って探した限りいませんでした。
それならば!自分がヒカキンさんのじゃんけんの第一人者になっても良いんじゃないかって思ったので、突発的にフレームワークの勉強しながら統計したWebサイトを作成してみました

またヒカキンさんを選んだ理由として他にはこんな理由があります。

  • テレビとは違ってYoutubeに投稿されているので、投稿者が消去しなければ半永久的に全ての動画が存在するので記録しやすい

  • ヒカキンさんのじゃんけんはゲストと一緒にしたり変装や特殊な環境下が多かったりするので、じゃんけんでも様々なバリエーションがあって面白そう

  • ヒカキンさんは子供にも人気あるので、もしかしたら子供達も大勢みてくれるサイトになるかも!?という甘い願望

環境・ツール

開発PC:MacBook Pro macOS High Sierra 10.13.6
フレームワーク:Laravel
サーバサイドプログラム言語:PHP
フロントエンドプログラム言語:Javascript,scss
データベース:MySQL
ライブラリ:Webpack
運用サーバ:さくらVPS(Webサーバ,DBサーバの2つ) CentOS7.8

サイトマップやワイヤーフレームなどはなく作成しながらデザインを決め、テーブル設計もボロが出てしまっていると思います。
制作時間はわかりませんが、期間は大体3ヶ月近くかかりました。

成果物

URL:https://hikakinjunken.tk/
PC向けとして公開しています。
スマホでもみれますが、やや文字が小さくタップしにくいかと思います。

サイトについて紹介している動画
Youtube:https://www.youtube.com/watch?v=aOOWyjU3kLc
ニコニコ:https://www.nicovideo.jp/watch/sm37629624

GitHub:後日公開予定...

トップページ

トップページにアクセスすると、
左側は累計のじゃんけん数とそのグー・パー・チョキの内訳、
右側は最近投稿した動画でじゃんけんした動画5選表示されます。
- 「結果↓」をクリックするとじゃんけんの結果が表示されます。
- サムネイルまたはタイトルをクリックすると動画視聴ページに移行します。
image.png

キーワード検索

動画のタイトルと参戦したゲストに一致するワードを検索します。

ゲスト検索

じゃんけんに一緒に行ったゲストをプルダウンメニューから検索します。
image.png

じゃんけん一覧

年月ごとにHikakinTV内でアップロードされた動画を検索します。
image.png

検索ページ

キーワード検索とゲスト検索で検索すると、以下のように条件にあった動画が検索されてじゃんけん結果も確認できます。
- 例として、ゲスト検索で「はじめしゃちょー」を選んだときの結果です。
- 動画の投稿順やじゃんけんで出した手を決めて詳細に検索することも可能です。

image.png

動画視聴ページ

動画のサムネイルかタイトルをクリックすると、動画視聴ページに移行できます。
このページでYoutubeに行かなくてもHikakinTVに投稿された動画を視聴できます。(怒られるかもしれない)
- 「タグ一覧」では、最大5つ動画に関連したタグを登録することができ、「キーワード検索」で登録したタグのワードで検索するとその動画が出てきます。(ニコニコ動画のタグ機能に似ている)
image.png

じゃんけん結果管理ページ

これは、私(管理者)しかアクセスできないページですが、ヒカキンさんの投稿動画とじゃんけん結果を登録・管理するページを作成しています。
このページのフォームに動画情報とじゃんけん結果、参戦したゲストを記載して登録することでMySQL側のデータベースに情報がInsertされます。
image.png

 反省点

  • 最初にサイトマップや要件を洗い出して作った方が良かった

Laravelで作ろうとは考えていましたが、環境を整えていたりコーディングしている間にも必要なライブラリが欲しかったり、こういう機能も入れた方が良いみたいな考えが出てきて寄り道することが多かった

  • テーブル設計も考えて作るべきであった

ER図は作成したが第3正規化までのことをしていなかったので、もっとデータベースのテーブルはよく考えて作るべきだった

  • 現状は単にじゃんけん結果を見るだけのサイトになってしまっている

じゃんけんの結果見るだけの需要でしかなく、サイトに満足して?使ってもらえるようにはしていないです。
機械学習でじゃんけんの結果を予測するページを作ったり、動画視聴ページでコメントできる機能を盛り込んで見ようかなとは考えています。

まとめ

フレームワークを使ってオリジナルのアプリ開発するのは初めてに近い感じでしたので、色々と不備はあるかもしれないがある程度形にできたサイトになったのは良かったです。
自分がサボらなければ、ヒカキンさんが動画投稿したらじゃんけん結果を確認して、サイトに記録する...みたいなことを続けていきたいとは思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

"オブジェクト指向"は存在しなし、"オブジェクト"と言う表現は使わない。

前提

  • PHPに関してです(特にJavascriptは異なります)

  • 細かなことはいったん省き、考え方に個人的な線引きをしておきたい

  • 変数、関数、プロパティ、メソッドの表記の使い分けはこの記事の本質から逸れるため、わかり易く日本語の「変数」「関数」で統一しています

  • 人によって異なる部分は多いと思いますので他の記事で補完してください m(_ _)m

対象

  • クラスとインスタンスはなんとなくわかるが(この記事では詳細な説明は省くため)、結局オブジェクトやオブジェクト指向ってなんだっけ?ともやもやしている方

まず"オブジェクト"の定義

定義

よくみかける「変数と関数の集合体」という表現が誤解を生んでいると思う。
これでは以下もオブジェクトということになるが、これはオブジェクトでは無い。
※ ただの変数と関数が1つずつあるだけである。

$name = '田中太郎';

function printName($name)
{
   echo 'こんにちは、' . $name;
}

//実行: printName();
//結果: こんにちは、田中太郎

誤解を生まない表現としては以下3点をクリアしている必要がある。

①変数と関数がグルーピングされており、②必ずグループ名がある
また③グルーピングするための書き方は言語によって決まった書き方がある

ではオブジェクトとは

①②③を適応してオブジェクト化していく。

class グループ名 //←②グループ名
{ //←①(グルーピングの始まり)
  private $name; // ←③(グルーピング内での変数の書き方)
  public function __counstruct($name) // ←③(グルーピング内での関数の書き方)
  {
     $this->name = $name;
  }
  public function printName() // ←③(グルーピング内での関数の書き方)
  {
     echo 'こんにちは、' . $this->name;
  }
} //←①(グルーピングの終わり)

//実行: 
//$インスタンス名 = new グループ名('田中太郎');
//$インスタンス名->printName();

//結果: 
こんにちは田中太郎

これはPHPの場合です。
※Javascriptでは書き方は変わるが大抵の場合は①②③はクリアしている。
要は、プログラミング言語ごとに区切って考えれば何がオブジェクトで何がオブジェクトでは無いかは明確に説明できるため、まずはオブジェクトに関しては曖昧な状態から脱却できる。

オブジェクトとは「変数と関数をひとまとめにしたクラスを作るプログラミングの手法」

オブジェクトという表現は極力避ける

まずPHPを書いていてオブジェクトは出てこない。
①②③の定義を元にグルーピングしたデータが一切出てこないと言うわけではなく、ご存知の通り表現がclass(=オブジェクト)とinstance(=オブジェクト)のどちらかを使う。そのため、曖昧な認識から脱却するためには「オブジェクト」という曖昧な表現は極力避けると混乱しにくい。

結局オブジェクト指向とは

特に初学者向けの記事や質問に多いがこれは人に聞かない方がいいと思う、なぜなら人によって説明の仕方が違い余計混乱するからだ。

ただ、あえていうならたくさんのオブジェクトがあるシステム、そしてclassとinstanceを使えば理解していることと同じだよー。これで十分なのではないかと思った。

メモ

PHP

連想配列 ≠ オブジェクト
https://coinbaby8.com/different-between-object-and-array.html

Javascript

連想配列 = オブジェクト
https://qiita.com/zero_046/items/19488a1a190edb7307b9#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88object

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミングに"オブジェクト"は無い。"オブジェクト指向"はある。

前提

特にオブジェクト指向は人によって捉え方が異なる。これは事実だが個人的な線引きをしたい。そのための記事であることを理解して読んでください。

対象

  • クラスとインスタンスはなんとなくわかるが(この記事では詳細な説明は省くため)、結局オブジェクトやオブジェクト指向ってなんだっけ?ともやもやしている方

  • 多少PHPを書いている方

まず"オブジェクト"の定義

定義

よくみかける「変数と関数の集合体」という表現が誤解を生んでいると思う。これでは以下もオブジェクトということになるがこれはオブジェクトでもなんでも無い。

$name = '田中太郎';
function printName($name)
{
   echo 'こんにちは、' + $name;
}

//結果:こんにちは、田中太郎

誤解を生まない表現としては以下3点をクリアしている必要がある。

①変数と関数がグルーピングされており、②必ずグループ名がある
また③グルーピングするための書き方は言語によって決まった書き方がある

オブジェクトができるまで

①②③を適応してオブジェクト化していく。

class グループ名 //←②
{ //←①(始まり)
  private $name; // ←③(変数)
  public function printName() // ←③(関数)
  {
     //関数の処理
  }
} //←①(終わり)

これはPHPの場合でありJavascriptでは書き方は変わるが①②③はクリアしている。
要は、言語ごとに区切って考えれば、明確に説明できるため、漠然とではなく何がオブジェクトで何がオブジェクトでは無いかを区別でき、まずはオブジェクトに関しては曖昧な状態から脱却できる。

オブジェクトとは「変数と関数をひとまとめにしたクラスを作るプログラミングの手法」

オブジェクトという表現は極力避ける(PHPの場合)

まずPHPを書いていてオブジェクトは出てこない。
①②③のルールの元データをグルーピングしたデータが一切出てこないと言うわけではなく、ご存知の通り言い方がclass(=オブジェクト)とinstance(=オブジェクト)のどちらかを使う方が誤解を生まない。

結局オブジェクト指向とは

特に初学者向けの記事や質問に多いがこれは人に聞かない方がいいと思う、なぜなら人によって説明の仕方が違い余計混乱するからだ。
ただ、あえていうならたくさんのオブジェクトがあるシステムclassとinstanceを使えば理解していることと同じだよー。これで十分なのではないかと思った。

https://note.com/tokitky/n/n6e70d7e7a236

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのEloquentでポリモーフィック関連

ポリモーフィック関連とは

あるエンティティが複数のテーブルを参照しているような状態のこと。
アンチパターンにもあるとおり基本的に使用しない最後の手段的なイメージだが使った方が便利なケースもある。今回は使っても良さそうなケースに当てはまって触ってみたのでその備忘録。

要件

コンテンツ→設定一覧→記録一覧(ポリモーフィック )→記録詳細のよう繋げ方をしたい。
ポリモーフィック関連にしない場合には例えばあんまり好ましくないけれど絶対に上限が決まっている場合には、それぞれのテーブルの外部キー用のカラムを作成してsettingテーブルに持たせるとか、テーブルを増やして対応するとかになると思う。

登場テーブル一覧

  • contents
  • settings
  • setting_measurables
  • measure_a_recordings
  • measure_a_records
  • measure_b_recordings
  • measure_b_records
  • measure_c_recordings
  • measure_c_records

リレーションのイメージ
ポリモーフィック .png

マイグレーション

ポリモーフィック関連に使用するテーブル(setting_measurables)のマイグレーションに関してだけ書く。ポリモーフィック関連を使用する場合マイグレーションの段階でmorphを使うど便利、リレーションに必要なカラムを指定したキーワードから作成してくれる。マイグレーションファイルを見たときにポリモーフィック関連を使用することが明示的にわかるので便利。

create_setting_measurables_table.php
public function up()
    {
        Schema::create('setting_measurables', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('setting_id');
            $table->foreign('setting_id')->references('id')->on('settings')->onDelete('cascade');
            $table->morphs('measurable'); // measurable_id, measurable_typeを作成
            $table->timestamps();
        });
    }

モデル

class Setting extends Model
{
    protected $fillable = ['content_id'];

    public function measureARecordings()
    {
        return $this->morphedByMany(
            'App\Models\MeasureARecording',
            'measurable', //morphsに指定したカラム名
            'setting_measurables' //テーブル名
        );
    }

    public function measureBRecordings()
    {
        return $this->morphedByMany(
            'App\Models\MeasureBRecording',
            'measurable',
            'setting_measurables'
        );
    }

    public function measureCRecordings()
    {
        return $this->morphedByMany(
            'App\Models\MeasureCRecordings',
            'measurable',
            'setting_measurables'
        );
    }
}

呼び出し

withでEagerLoadingももちろんできる。

public function getMeasureArecording($content_id)
{
    return Content::with([
        'settings',
        'settings.measureARecordings',
        'settings.measureBRecordings',
        'settings.measureCRecordings',
    ])->find($content_id);
}

保存

public function storeSettingMeasurable(Request $request)
{
    SettingMeasurable::create([
        'setting_id' => $request->input('setting_id'),
        'measurable_id' => $request->input('recording_id'), //それぞれのレコーディングテーブルの外部キー
        'measurable_type' => 'App\Models\MeasureARecording' //namespace含む対象モデル名
    ]);
}

# まとめ
ORMだと随所でポリモーフィックであることを明示できるのと呼び出しがより簡潔になるので利用してみたが慎重にCURDしないと不整合が起きるので頻繁には使わない方がいいORMを使用しないならより複雑な処理が必要になるはずなのでORMで無い場合にも避けるべきだとは思った
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 管理ツール

原文

管理ツール

以下の管理ツールは、管理 > サイト管理 > プラグイン > 管理ツール > 管理ツール > 管理ツールの管理で管理者が管理することができます。

受入検査:(翻訳準備中)
プラグインインストーラー:(翻訳準備中)
ケイパビリティの概要:(翻訳準備中) - サイト管理 > ユーザー > アクセス権 > 機能レポートで
InnoDBへの変換:(翻訳準備中)
データベース転送:(翻訳準備中)
DB検索と置換:(翻訳準備中)
ヘルスセンター:(翻訳準備中) - URLを参照してください yourmoodlesite.com/admin/tool/health/健康/。
言語カスタマイズ:(翻訳準備中) 管理 > サイト管理 > 言語 > 言語 > 言語のカスタマイズで言語のカスタマイズ
言語パック:(翻訳準備中) 管理 > サイト管理 > 言語 > 言語パックの言語パック
マルチランのアップグレード
PHPUnit テスト:(翻訳準備中)
プロファイリングの実行:(翻訳準備中)
ランダムコースジェネレータ
スパムクリーナー:(翻訳準備中) 管理 > サイト管理 > レポート > スパムクリーナー
タイムゾーンの更新:(翻訳準備中) 管理 > サイト管理 > 位置情報
サポートされていないロールの割り当て:(翻訳準備中) 管理 > サイト管理 > ユーザー > 許可
ユーザーのアップロード 管理 > サイト管理 > ユーザー > アカウント > ユーザーのアップロード
コースのアップロード 管理 > サイト管理 > コース > コースのアップロード > コースのアップロード
XMLDBエディタ:(翻訳準備中) サイト管理 > 開発 > XMLDBエディタ

Moodleアドミニストレーションを行うには、どのような技術的スキルが必要ですか?
読むことと書くことは便利なスキルであり、おそらく最も有用なスキルです。これは難しい質問ですが、答えはあなたが何をしたいのか、あなたがすでに持っているスキルによって異なります。

HTML、CSS、PHPのスキルを持っていますか?SQLデータベースのスキルはありますか?あなたがしている場合は、その後、あなたは良いスタートを持っている、あなたがしない場合は、それを心配しないでください。もし必要であれば、これらのスキルはどんどん身につけていくことになりますし、もしあなたがすでにプログラミングのスキルを持っているのであれば、かなり簡単にできるようになります。もしあなたが以前にプログラミングをしたことがないのであれば、それは少し難しいですが、一度アイデアを持ってしまえば、それは非常に簡単になります。あなたがあなたのMoodleを開発することを意図していない限り、例えば、あなた自身でテーマを作成したり、あなた自身の組織を反映させるためにコードを変更したりしても、これらのスキルがなくても問題ありません。あなたに必要なのは、Moodleがどのように動作するかを素早く理解することです。Moodle v2の導入により、学習曲線は多少急峻になりましたが、まだそれほど難しいものではありません。

新しいMoodleをインストールして設定することは、以前ほど難しくありません。一部のサーバおよびサービスプロバイダは、時々問題を抱えていますが、あなたがISPおよびMoodleコミュニティと協力すれば、あなたのMoodleを起動して動作させることができます。起動したら、それを見始めてください。あなたが何かを削除しない限り、何も壊すことはありません。あなたの最善の策は、ドキュメントを読むことです。あなたが作業しているページを見てください。そのページのどこかに「このページのMoodleドキュメント」へのリンクがあります。これは、あなたがどのように作業を行うかについての、あなたの最良の、最も容易に入手可能な、手がかりとなるものです。一旦環境に精通し、環境を回避する方法、情報を得る方法を理解したら、主要なステップが実行され、残りのステップは継続的な改良です。

ヒント
初心者の管理者として、便利なプラグインや追加ブロックなど、利用可能なすべての異なるものに圧倒されがちですが、これらのものの大部分はサードパーティ製であり、Moodle.orgが起源ではありません。一般的な経験則として、標準的なMoodleから離れれば離れるほど、物事がうまくいかなくなるリスクが高くなることに注意してください。これはプラグインの書き方が悪いということではありませんし、いくつかのプラグインは本当に便利ですが、時々うまくいかないことがあります。あなたがそれらを使用する場合、あなたの選択は慎重に行ってください。
おそらく最良の方法は、あなたのデスクトップまたはラップトップ上にMoodleを作成し、それをテストベッドとして使用することです。これはあなたの本番サイトと同じバージョンであるべきです。最初にそこで試してみて、問題がなければ、あなたの本番サイトで複製することができます。

関連項目

管理ツール開発者向けドキュメント:(翻訳準備中)

カテゴリ | サイト管理

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 登録解除

原文

登録解除

目次

1 登録解除はどのように管理されていますか?
2 登録期間
3 一括登録解除
4 登録解除と成績の履歴
5 一時停止か登録解除か?
6 関連項目

1 登録解除

登録解除はどのように管理されていますか?

登録解除とは、ユーザーをコースから削除することです。これは以下のうちの1つ以上によって制御されます。

登録期間: 指定された時間が経過した後に学生を一時停止します。プラグインによっては、登録期間の終了後にユーザーを登録解除するオプションがあります。
自己登録の場合、コース管理 > ユーザー > 登録方法 > 自己登録の「未登録の後に未登録」設定で、その時間内にコースにアクセスしていない学生が自動的にコースから登録を解除される時間を指定することができます。
例えば、コースのユーザーがLDAPデータベースに存在しない場合や、フラットファイルがCronによって処理された場合など、登録プラグイン:(翻訳準備中)は登録が失効したと判断することがあります。
さらに、適切な権限を持つユーザーはコースからの登録を解除することができます。

2 登録期間

手動登録のデフォルトの登録期間は、管理 > コース管理 > ユーザー > 登録方法 > 手動登録で設定できます。これは、管理 > コース管理 > ユーザー > 登録されたユーザーで手動でユーザーを登録する場合のデフォルト値から変更することができます。

自己登録の登録期間は、管理 > コース管理 > ユーザー > 登録方法 > 自己登録で設定できます。

3 一括登録解除

以前に手動で登録したユーザーは、管理 > コース管理 > ユーザー > 登録方法から、「登録」アイコンをクリックして一括で登録を解除することができます。

4 登録解除と成績の履歴

ユーザーが登録解除された場合、そのユーザーの成績履歴は削除されません。ユーザーが誤って登録を解除された場合、管理 > コース管理 > ユーザー > ユーザー > 登録されているユーザー の順に選択し、「ユーザーの登録」をクリックし、ユーザーを再登録する前に登録オプションで「可能であればユーザーの古い成績を回復する」チェックボックスにチェックを入れてください。

手動以外の方法(自己登録など)で登録したユーザーは、管理 > サイト管理 > 成績 > 一般設定の "recovergradesdefault "の値に応じて成績が復元されます。さらに、ユーザーがコースに再登録すると、すべての評定されたアクティビティの評点を手動で復元する必要がある場合があります (例えば、小テスト:(翻訳準備中)で「選択された受験の再評定」オプションを使用するなど)。

5 一時停止か登録解除か

一時停止されたユーザはMoodle上で自分のコースにアクセスすることはできませんが、データは保存されているため、後日自分のコースに戻ることができます。これは例えば、施設を離れた学生の作品を安全に保管しておくのに役立ちますが、そのデータは将来的に検査が必要になる可能性があります。一時停止中のユーザーは現在も成績表に表示されますが、教師は成績評価レポートの環境設定でアクティブなユーザーのみを表示するか、またはすべてのユーザー (一時停止中のユーザーを含む) を表示するかを選択することができます。詳細については学年設定:(翻訳準備中)を参照してください。

注: 教師は、ユーザー > 登録ユーザー > 登録の編集 でステータスを変更することで、特定のコースから1人のユーザーまたはグループのユーザーを一時停止することができます。また、サイト管理 > ユーザー > アカウント > enrolstatus フィールドを使用してユーザーをアップロードからcsv/テキストファイルを使用してコースからユーザーを一時停止することも可能です。

管理者は、プロファイルを編集して "Suspended account "ボックスをチェックすることで、ユーザーアカウントを一時停止(学生がコースにアクセスできないことを意味します)することができます。

未登録ユーザーは通常、データを保持せず、成績表にも表示されません。ただし、登録解除と成績の履歴を参照してください 登録抹消は通常、一時停止よりも最終的なものです。

6 関連項目

スクリーンキャスト: コースから学生を一括でアンインストールする方法。
誤って登録を解除してしまった学生の成績を回復させた教師の経験

カテゴリ | 登録 | サイト管理

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 自己登録

原文

自己登録

注意: 学習者があなたのサイトでアカウントを作成してコースにアクセスできるようにしたい場合は、まずEメールベースの自己登録を有効にしてアカウントを作成し、次にコース内で自己登録を有効にして登録できるようにする必要があります。これらは2つのステップに分かれています。
自己登録とは、ユーザーがコースに登録することを選択できる方法で、"\enrol me in this course "をクリックしてすぐに登録するか、与えられた登録キーを入力して登録することができます。登録プラグインはサイト管理者がEnrolment pluginsで有効にする必要があり、コース内で有効にする必要があります。手動登録プラグインも同じコース内で有効にする必要があります。

目次

1 コースへの自己登録を可能にする
1.1 コースに登録キーを追加する
1.2 コースにグループ登録キーを追加する
1.3 登録期間の設定
1.4 登録期間
1.5 登録期間が終了した場合のユーザーへの通知
1.5.1 個人の登録時間の編集
1.6 積極的にコースに参加していない学生の登録解除
1.7 コースの最大利用者数を決める
1.8 コホートメンバーだけが自己登録できるようにする
1.9 新規ユーザーへのウェルカムメッセージの送信
2 管理者設定
2.1 全コースの共通設定
2.2 新規コースのデフォルト登録設定
3 自己登録方法のオプション
4 自己登録のケイパビリティ

1 コースへの自己登録を可能にする

IMAGE ALT TEXT HERE

  1. コースで、ナビゲーションドロワーから参加者リンクをクリックします(または、Boost以外のテーマの場合は、コース管理ブロックのユーザーをクリックします)。

  2. cogwheel/gearアイコンをクリックして、登録方法をクリックします(または、非Boostテーマの場合は、Usersリンクを展開して登録方法をクリックします)。
    BoostEnrolmentMethods.png
    BoostEnrolmentMethods.png

  3. 自己登録メソッドの横にある「目」のアイコンを開きます。
    OpenSelfEnrolment.png
    OpenSelfEnrolment.png

1.1 コースに登録キーを追加する

特定のグループのユーザーだけに自己登録させたい場合(誰にも登録させたくない場合)、登録キーを設定して、そのユーザーが自己登録画面にアクセスしたときに使用するように指示することができます。これを行う方法については、登録キー:(翻訳準備中)のセクション1を参照してください。

1.2 コースにグループ登録キーを追加する

ユーザーがコース内のグループに直接登録したい場合、グループ登録キーを設定して、ユーザーが自己登録画面にアクセスする際に使用するように指示することができます。これを行う方法については登録キー:(翻訳準備中)のセクション2を参照してください。

以下の設定は、管理 > コース管理 > ユーザー > 登録方法の自己登録オプションの右側にある編集(手/ペン)アイコンをクリックして変更することができます。

1.3 登録期間の設定

登録期間の右側にある「有効にする」ボックスにチェックを入れ、日付を選択してください。

1.4 登録期間

ユーザー登録が有効な時間を設定します。無効にした場合、登録期間は無制限になります。

1.5 登録期間が終了した場合のユーザーへの通知

また、「通知のしきい値」のドロップダウンから「登録者のみ」または「登録者と登録されているユーザー」を選択し、時間を指定することで、学生や教師に登録が終了したときに通知を行うことも可能です。

教師の役割を持つユーザーが複数いる場合、通知は最初に教師の役割を割り当てられたユーザー(または自己登録を管理する機能を持つ他のユーザー)にのみ送信されます。

450px-selfenrolmenexpirynotification.png

登録期限が切れる前にユーザーに通知するための設定。

1.5.1 個人の登録時間の編集

管理画面>コース管理>ユーザー>登録されたユーザーから、該当するユーザーの登録方法欄にある編集アイコンをクリックすることで、個人の登録日時を編集することができます。これにより、日時を変更できる画面が表示されます。
450px-selfenrolment241.png
ユーザーの登録方法欄にある編集アイコンをクリックしてください。
450px-selfenrolment242.png
日時を変更する

1.6 積極的にコースに参加していない学生の登録解除

"Unenrol inactive after... "の右側のドロップダウンから選択します。

1.7 コースの最大ユーザー数を決める

最大登録ユーザー数」にコースに登録したいユーザーの最大数を入力してください。この上限に達すると誰も自己登録できなくなります。0のままにしておくと最大数は設定されません。

1.8 コホートメンバーだけが自己登録できるようにする

コホートを設定している場合は、ドロップダウンボックスからコホート名を選択することで、特定のコホートに自己登録を制限することができます。コホートのメンバーは通常通り自己登録ができますが、非メンバーには自己登録できませんというメッセージが表示されます。

450px-cohortselfenrol.png
特定のコホートのメンバーに自己登録を制限する
noncohortmember.png
自己登録しようとしているコホートに参加していないユーザーが見たメッセージ

1.9 新規ユーザーへのウェルカムメッセージの送信

この機能を有効にした場合、ユーザーはコースに自己登録すると、以下のメッセージをメールで受け取ることができます。

Welcome to {Course name}
If you have not done so already, you should edit your profile page so that we can learn more about you: {link to profile page}

別のメッセージを送信したい場合は、カスタムウェルカムメッセージのテキストボックスに入力してください。

以下のプレースホルダーをメッセージに含めることができます。

Course name {$a->coursename}
Link to user's profile page {$a->profileurl}
User email {$a->email}
User fullname {$a->fullname}

ウェルカムメッセージは、コースコンタクト、キーホルダー:(翻訳準備中)、またはデフォルトの無応答アドレスから送信することができます。コースコンタクトを選択した場合、そのロールを持つユーザーが複数いる場合は、コースコンタクト:(翻訳準備中)のロールを割り当てられた最初のユーザーからウェルカムメッセージが送信されます。

注意: 管理者はwelcometocoursetext言語文字列を編集することでサイト全体のメッセージをカスタマイズすることができます。詳細は言語のカスタマイズ:(翻訳準備中)を参照してください。ただし、welcometocoursetext言語文字列が使用されている場合、プレースホルダーのcoursenameとprofileurlのみが使用できます。

2 管理者設定

自己登録プラグインは、管理 > サイト管理 > プラグイン > 登録 > 登録プラグインの管理でサイト全体で有効または無効にすることができます。

2.1 全コースの共有設定

管理 > サイト管理 > プラグイン > 登録 > 自己登録のページには、管理者が設定できるデフォルトのオプションが含まれています。

・登録キーを必要とする - このボックスがチェックされている場合、自己登録を有効にしたすべてのコースは登録キーを持っている必要があります。教師がキーを追加するまで設定は保存されません - 混乱を招く可能性があるので注意が必要です。)
・パスワードポリシーを使用する - 教師が設定した登録キーをサイトのパスワードポリシーに従うようにしたい場合は、このボックスにチェックを入れます。
・ヒントを表示する - 鍵の最初の文字を「ヒント」として表示する場合は、このボックスにチェックを入れてください。
・Enrolment expiry action - ユーザーの登録が有効期限に達したときに何をするかを指定します。オプション「コースからユーザーを登録解除」を選択すると、コースから成績、グループメンバーシップ、環境設定、その他のユーザー関連データが削除されますのでご注意ください。
・登録有効期限切れ通知を送信する時間 - 有効期限切れ通知を送信する時間を指定します。

2.2 新規コースのデフォルトの登録設定

これらは管理 > サイト管理 > プラグイン > 登録 > 自己登録で設定することができますが、個々のコースの教師は必要に応じて変更することができます。

・新しいコースにインスタンスを追加する - 管理者がこれを選択した場合、作成された新しいコースには自己登録プラグインが含まれます。
・自己登録を有効にする- これが有効になっている場合、ユーザーはデフォルトでコースに自己登録することができます。
・グループ登録キーを使用する - コースのグループ登録キーの設定はデフォルトで "yes "に設定されています。
・デフォルトのロール割り当て - 通常、ユーザが自己登録するとき、ユーザは学生ロールを持っています。必要に応じて、ここでデフォルトのロールを変更することができます - 例えば、あなたのMoodleにあなたが代わりに使用したい専用のロールがある場合などです。
・登録期間 - 新しいコースのデフォルトの登録期間を設定します (ただし、コース教師によって変更することができます)。
・登録期限切れ前に通知 - 期限切れ前に教師またはオプションで学生に通知するかどうかを指定します。
通知のしきい値 - 登録期限が切れる前に何日前にユーザーに通知するかを指定します。
・Unenrol inactive after - 学生がコースにアクセスしていない場合、登録が取り消されるデフォルトの時間を設定します。(教師はこれを変更することができます)
・最大登録ユーザー数 - ここに数字を追加すると、新しいコースに自己登録できるユーザーの最大数が指定されます。コースの教師はこれを変更することができます。0のままにしておくと、最大数は設定されません。
・コースへのウェルカムメッセージを送信 - このボックスにチェックが入っている場合、新規登録したユーザーはデフォルトでウェルカムメッセージを受け取ります。

3 自己登録方法のオプション

1つのコースには複数の自己登録方法が含まれている場合があります。ユーザーは各インスタンスに一度だけ登録することができます。

・カスタムインスタンス名 - カスタム登録方法名を指定します。
・既存の登録を有効にする - 無効にした場合、このプラグインを介して登録したすべてのユーザーはコースにアクセスできません。
・新規登録を許可する - 将来的に学生の自己登録を許可したくない場合は無効にしてください。
・Enrolment key - 登録に必要なキーを指定します。
・グループ登録キーを使用する - オプションで、登録にもグループキーを使用することができます。
・Default assigned role - 登録時にユーザーに割り当てるロールを指定します。
・登録期間 - 登録期間の長さを指定します。
・Notify before enrolment expires - 有効期限が切れる前に教師またはオプションで学生に通知するかどうかを指定します。
・通知のしきい値 - 登録期限が切れる前に何日前にユーザーに通知するかを指定します。
・Unenrol inactive after - コースにアクセスしていない学生が登録を取り消されるまでの時間を指定します。
・最大登録ユーザー数 - ここに数字を追加すると、このコースに自己登録できるユーザーの最大数を指定することができます。
・コホートメンバーのみ - オプションでこの登録方法を指定したコホートのメンバーに限定することができます。
・コースウェルカムメッセージを送信 - このボックスにチェックが入っている場合、新規登録されたユーザーはデフォルトでウェルカムメッセージを受け取ります。
・カスタムウェルカムメッセージ - 必要に応じてカスタムメッセージを指定します。

4 自己登録のケイパビリティ

自己登録インスタンスの設定:(翻訳準備中)
登録ユーザーの管理:(翻訳準備中)
コースからユーザーの登録を解除する:(翻訳準備中)
自分をコースから外す:(翻訳準備中)

カテゴリ | 登録

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ISUCON10 Online event

こんにちは, This is Santosh.I participated in ISUCON2020 Online event, It was held on September 12,2020.
Rules and regulations are mentioned on the official sites. please go through once(~5 minutes)
http://isucon.net/archives/54704557.html
Around 500~ teams participated on that day, It was fun as my first isucon! let's move to the technical side,
There was an application given「isummo」、It was about finding chair(isu in japanese) by different conditions. The goal was to improve the search time and processing speed of isummo application.
issumo1.png
issumo2.png

lightly just go through the following;
http://sinatrarb.com/
・new relic
ruby version check-install,start mysql(may be it will helpful next time too)
installruby.png
dbSetting.png
If any login issue with mysql just try this or follow stackoverflow↓
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_passw

About coding language, you can choose any language Rust, Python, Go, Php or whatever you are comfortable with,I did with ruby as other team member were very familiar with it.Now the question is how to optimize our isummo app?
① Check all SQL queries -> Add index, as no index key was there
eg. SQL -> select * from isuumo.chair where kind = 'some value'
check kind is indexed or not ,if not -> KEY kind (kind)
adding index is easy as soon as you find the query, and it's fasten our app to some level.(rank was going up & team was enjoying)

② Index based on order BY ASC OR DESC
eg; select * from issumo.desk where some_condition order by popularity DESC;
Please not here, order by have column by DESC, and the default index we add earlier will be ASC .To speedup execution of query make it, DESC INDEX, -> KEY popularity (popularity DESC)
https://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html
After this our app performance increased a bit.

③ Next, find n+1,source code and try to fix that,
this was a bit tough ,I tried but there was no such improvement in speed.
Other things can be done on infrastructure side,as other member was doing that part I don't have much idea about it. Next isucon will try to cover up infra as well.
Good luck everyone for next event!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 登録方法

原文

登録方法

目次

1 登録方法
1.1 手動登録
1.2 自己登録
1.3 ゲストアクセス
1.4 コホート同期
1.5 コースメタリンク
1.6 PayPal
2 登録方法の管理
3 関連項目

1 登録方法

サイト管理 > プラグイン > 登録 > 登録プラグインの管理で管理者がサイトの登録方法を有効にした場合、コース内で以下のいくつかまたはすべての登録方法が利用可能になります。

1.1 手動登録

これにより、コース管理 > ユーザー > 登録ユーザーでユーザーを手動で登録することができます。
これにより、コースの教師はコースへの個人または集団の登録を自分で管理することができます。例えば、サイトへのログインだけで新しい学生が突然クラスに来た場合、教師は管理者からの入力なしでコースに登録することができます。
あなたのコースでどのように機能するかの詳細は手動登録を参照してください。

1.2 自己登録

これにより、ユーザーが直接または登録キー (「コースパスワード」) を介してコースに登録することができます。
例えば、特定のユーザーには学生の役割を割り当て、他のユーザーには非編集教師の役割を割り当てることができます。
自己登録方法では、グループ登録キーを使用してグループに登録することもできます。
この方法の詳細については、自己登録を参照してください。

1.3 ゲストアクセス

これにより、ゲストロールを持つユーザはコースのコンテンツを閲覧することができます。
ゲストロール」を持つユーザは、あなたのMoodleにアカウントを持っていない訪問者、またはアカウントを持っているがあなたのコースを探索したいユーザ(「認証ユーザ」)です。
あなたがアクセスを許可したいゲストユーザのみがコースに入ることができるように、登録キーを追加することができます。
ゲストアクセスでコースに入っても、ユーザーはアクティビティに参加することはできず、情報を閲覧することしかできません。
これがコースでどのように機能するかの詳細はゲストアクセス:(翻訳準備中)を参照してください。

1.4 コホート同期

コホートとは、サイト全体または特定のカテゴリに追加されたユーザーのセットのことで、コホート同期登録プラグインを使ってコースで利用できるようにすることができます。
このプラグインを使用できるのは管理者か管理者のみです。
あなたのコースでどのように機能するかの詳細はコホート同期:(翻訳準備中)を参照してください。

1.5 コースのメタリンク

これにより、他のコースにいるユーザも自動的にあなたのコースに登録されます。例として、Moodleサイトに「スタッフ専用」コースと「Moodleヘルプ」コースがある場合があります。スタッフ専用」コースがコースメタリンクプラグインを使用して「Moodleヘルプ」コースに追加された場合、新しいスタッフが「スタッフ専用」コースに参加するたびに、彼らは自動的に「Moodleヘルプ」コースにも登録されます。
この方法を使用する場合、教師は自分が教師であるコースからのみ選択することができます。
これがあなたのコースでどのように機能するかの詳細については、コースメタリンク:(翻訳準備中)を参照してください。

1.6 PayPal

これにより、ユーザーがコースの支払いを行うことができます。PayPal登録プラグインは管理者によってサイト全体で有効にする必要があり、プラグインは管理者または管理者によってコースに追加する必要があります。
コースの教師は他のコース固有の要件と一緒にコスト(とコースの通貨)を選択することができます。
あなたのコースでどのように機能するかの詳細はPayPal登録を参照してください。

2 登録方法の管理

enrolmentmethods3031.jpg
enrolmentmethods3031.jpg

管理者と教師 (およびmoodle/course:enrolconfigケイパビリティを持つ他のユーザ) は、コース管理 > ユーザ > 登録方法で登録方法を管理することができます。

新しいメソッドを追加するには、ドロップダウンメニューから選択してください。
未使用の登録方法を削除するには、その反対側の削除アイコン (X) をクリックします。
登録方法を一時的に無効にするには、その反対側の表示/非表示アイコン(目)をクリックします。(これにより、後に登録方法を再度有効にした場合でも、設定が記憶されます)。
複数の自己登録方法が有効になっている場合、登録を希望するユーザーのリストの順番は上下の矢印で変更できます。

3 関連項目

登録プラグイン:(翻訳準備中)

カテゴリ | 登録

www.DeepL.com/Translator(無料版)で翻訳しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - メールによる自己登録認証方式

原文

メールによる自己登録認証方式

メールによる自己登録認証方式では、ログインページの「新規アカウント作成」ボタンから自分のアカウントを作成できる。その後、アカウントプロフィールで指定したアドレスにメールが届き、アカウントを確認することができます。
IMAGE ALT TEXT HERE

プロセスの概要

目次

1 メールによる自己登録を有効にする
2 reCAPTCHA要素を有効にする
3 メールによる確認メッセージ
4 確認メールの再送信
5 サポート連絡先
6 ヒント
7 関連項目

1 メールによる自己登録を有効にする

管理」>「サイト管理」>「プラグイン」>「認証」>「認証の管理」と進み、メールベースの自己登録の反対側にある十字の目のアイコンをクリックします。
共通設定の自己登録ドロップダウンメニューからメールベースの自己登録を選択します(同じページのさらに下、認証プラグインの下)。
変更を保存」ボタンをクリックします。
警告。自己登録を有効にすると、フォーラムの投稿やブログのエントリーなどをスパムに使用するために、スパム業者がアカウントを作成する可能性があります。このリスクは、管理 > サイト管理 > プラグイン > 認証 > 認証の管理で許可されているメールドメインの設定で、特定のメールドメインに自己登録を制限することで最小限に抑えることができます。また、ユーザーがアカウントを作成できるようにするために、短期間の間は自己登録を有効にし、その後は無効にすることもできます。

注: 以前に自己登録したユーザーがログインできるようにするには、電子メールベースの自己登録認証プラグインを有効にする必要があります。自己登録方法として電子メールベースの自己登録を選択すると、潜在的なユーザーが自己登録できるようになります。

ここは初めてですか?" の下に表示されるテキストは、次の 2 つの方法で変更することができます。

サイト管理で見つけた指示ボックスにテキストを追加する ... プラグイン ... 認証 ... 認証を管理するか。
moodle.phpにある言語文字列'loginsteps'を編集するには、言語カスタマイズツールを使用してください。この文字列は'loginstepsnone'とは異なります。
newlogin.png
新しいアカウントを作成」ボタンのあるログインページ

2 reCAPTCHA要素を有効にする

450px-New_account_form_with_captcha_element.png
CAPTCHA要素を持つ新しいアカウントフォーム

CAPTCHAとは、ユーザーが人間なのかコンピュータなのかを判別できるプログラムのことです。CAPTCHAは、ボットやスパムを生成するために書かれた自動化されたプログラムからの悪用を防ぐために、多くのウェブサイトで使用されています。コンピュータプログラムは人間ほど歪んだテキストを読み取ることができないため、ボットはCAPTCHAで保護されたサイトを閲覧することができません。

スパム対策として、電子メールベースの自己登録新規アカウントフォームにCAPTCHA要素を追加することができます。

reCAPTCHA要素を有効にすることに加えて、メールベースの自己登録を自己登録認証プラグインとして設定し、認証の共通設定の管理でreCAPTCHAキーを設定する必要があります。

#3 メールによる確認メッセージ

サポート連絡先メールアドレスを使用して、自動化された確認メールがユーザに送信されます。

管理 > サイト管理 > 言語 > 言語のカスタマイズで、適切な言語パックを選択して、このテキストを変更することができます。
emailconfirmationstring25.png
電子メール確認メッセージの編集

#4 確認メールの再送信

新規ユーザーがメールを見つけられない場合や、期限を過ぎてアクセスした場合に確認リンクを再送信するボタンが用意されています。
docsresendconfirmationemail.png
docsresendconfirmationemail.png

5 サポート連絡先

管理者は、サイト管理画面の「サポート連絡先」でサポート名、メール、サポートページを指定して、確認メールに含めることができます。

6 ヒント

ユーザーリストを定期的にチェックして、スパムメールや疑わしい名前やメール、システムに登録されているがコースに登録されていないユーザーがいないかどうかを確認してください。
実際にそれらを使用しない限り、ブログを無効にする;いくつかのスパムボットは、そこに投稿する方法を知っている
管理 > サイト管理 > セキュリティ > 通知でログイン失敗の通知を有効にして、誰がログイン問題を抱えているかを確認できるようにします。
管理画面の確認>サイト管理>レポート>たまにはスパムクリーナーも
アカウント確認メールがスパムフォルダに入ってしまったり、リモートサーバーで拒否されたり、無効なメールアドレスが入力されているなどの理由で、潜在的なユーザーがアカウント確認メールを受信できない場合があります。このようなアカウントは管理者が手動で確認することができます。

7 関連項目

電子メールはありません:(翻訳準備中)
英語版Moodleフォーラムでのディスカッション。

メールベースの自己登録ではメールが送信されません: 知っておくべきこと
確認メールがブロックされている/削除されている

カテゴリ | 認証

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel:v8.xにおけるTarget class ...Controller does not exist.の解消方法

【概要】

1.結論

2.Target class ...Controller does not exist.はどういう意味か

3.どのように変更するか

4.なぜTarget class ...Controller does not exist.になるのか

5.開発環境

1.結論

web.phpのルーティングの書き方を変更する!


2.Target class ... Controller does not exist.はどういう意味か

目的である....コントローラーがないよ!と言っています。つまり、
❶何かしらの原因でコントローラーがいないことになっている
❷何かしらの原因でルーティング➡︎コントローラーへと指示がいっていない

という可能性があります。

3.どのように変更するか

今回は❷でした。

正しい書き方は2種類あります。
i)絶対パスを記載する

routes/web.php
Route::get('/person' , 'App\Http\Controllers\UserController@index' );

ii)useを使用してルートを設定

routes/web.php
#省略
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);





自分が記載した間違った方法は以下のようでした。(Laravel6.xでは使用可能)
iii)パスを省略して記載

routes/web.php
Route::get('User' , 'UserController@index' );


4.なぜTarget class ...Controller does not exist.になるのか

LaravelのVersionが原因でした。Laravel6.xでは3.iii)の方法で記載できましたが、Laravel8.xでは3.i)orii)でないとダメみたいです。下記の参照URLにて詳しく書かれています。

参考にさせていただいたURL:
Laravel8を試したら即効でエラー「Target class [〇〇〇Controller] does not exist.」が表示された

5.開発環境

PHP 7.4.10
Laravel 8.9
Apache 2.4.41
Mysql 5.6.47
Sequl Pro 1.1.2

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 手動登録

原文

手動登録

手動登録プラグインを使用すると、コース管理設定のリンクを介してユーザーを手動で登録することができます。このプラグインはサイト管理者によって有効にする必要があります (登録プラグインを参照してください)。
IMAGE ALT TEXT HERE
コース登録

目次

1 コース設定
1.1 コースに手動で登録されているかどうかの確認
1.2 手動登録設定の編集
2 ユーザーの登録
2.1 表示するユーザーが多すぎます...検索を使用してください
2.2 個々の登録開始日と終了日を編集する
3 管理者の設定
4 手動登録のケイパビリティ
5 関連項目

1 コース設定

1.1 コースに手動で登録されているかどうかの確認

コースでは、ナビの参加者リンクの歯車メニューをクリックして、「登録方法」を選択してください(Boost以外のテーマを使用している場合は、管理ブロックのコース管理 > ユーザー)。
Manual enrolmentsの「目」が開いていることを確認してください。
Manualenrolments.png
Manualenrolments.png

1.2 手動登録の設定の編集

管理者(およびケイパビリティenrol/manual:configを持つ他のユーザー)は、コース内の手動登録方法を編集し、登録方法リンクからデフォルトの登録期間とデフォルトの役割を設定することができます。

300px-enrolmenexpirynotification.png
手動登録画面 (クリックで拡大)

また、「通知のしきい値」で「登録者のみ」または「登録者と登録者」を選択し、時間を指定することで、学生や教師に登録期間が終了したことを通知することができます。

2 ユーザーの登録

方法1
300px-enrolusersoptions.jpg
ユーザー登録方法1
1. 参加者ページに移動します。あなたのテーマに応じて
Boostテーマ - ナビの引き出しにある「参加者」リンクをクリックします。
2. 非Boostテーマの場合 - ナビゲーションメニューの参加者リンクをクリックするか、管理メニューのコース管理 > ユーザーの下にある「Enrolled users」リンクをクリックしてください。
3. ページの右上または右下にある「ユーザーの登録」ボタンをクリックします。
4. ロールを変更したい場合は、「ロールの割り当て」ドロップダウンを使用してください。(「ユーザーの参照」ボタンと「コホートの参照」ボタンは同じページにあるので、ここでは言及する必要はありません)
詳細を表示」をクリックして、登録オプションを展開し、必要に応じて設定します。これらには、登録期間が含まれます。
5. ユーザーの選択」の隣にあるドロップダウンメニューでユーザーを検索します(ユーザーを検索する場合は、完全に一致するユーザーが最初に表示されることに注意してください)。下向きの三角形をクリックしてユーザーを検索するか、ボックスに入力してユーザーを検索します。
6. ユーザーをクリックして選択します。ドロップダウンメニューの上にユーザーが表示され、ユーザーが登録されていることを示します。
7. 完了したら、「Enrol selected users and cohorts」ボタンをクリックします。
登録されたユーザーのリストにユーザーが表示されます。

注意: 登録オプションの「可能であればユーザーの古い成績を回復する」はデフォルトではチェックされておらず、見落としがちです。管理者は、サイト管理画面で「成績をデフォルトの状態に戻す」を有効にすることで、サイト上のすべてのコースでチェックボックスにチェックを入れることができます。
300px-manually_enrolling_users.png
方法2

ユーザー登録方法2
1. ナブの「参加者」リンクのギアメニューから「登録方法」を選択します(Boost以外のテーマを使用している場合は、管理ブロックの「コース管理」の「ユーザー」を選択します)。
2. 手動登録の反対側の編集欄にある「ユーザー登録」アイコンをクリックします。
3. 登録されていないユーザーのリストから、Ctrl + クリックで複数のユーザーを選択します。
4. 追加ボタンをクリックして、登録ユーザーリストにユーザーを追加します。
注意: ユーザーを検索するとき、デフォルトでは名前に加えてユーザーのメールアドレスが表示されます。ご希望であれば、管理者はサイト管理のユーザーポリシーの「ユーザーIDの表示」でID番号などの他のユーザーIDフィールドを表示するように設定することができます。

2.1 表示するユーザーが多すぎます...検索を使用してください

デフォルトでは、Moodleは最大100人の参加者をリストに表示します。100人以上のユーザがいる場合、複数のユーザを迅速に登録することが困難な場合があります。

サイト管理 > ユーザー > アクセス権 > ユーザーポリシーに移動し、「ページあたりの最大ユーザー数」の値を変更してください。

警告! この値を大幅に増やすと、サーバーのパフォーマンスに影響を与える可能性があります。

2.2 個々の登録開始日と終了日を編集する

300px-individualenrolment24.png
登録開始日と終了日の編集

登録開始日と登録終了日は、以下のようにして個々の学生に合わせて編集することができます。
1. ナブの「参加者」リンクのギアメニューから「登録ユーザー」を選択します(Boost以外のテーマを使用している場合は、管理ブロックの「コース管理」の「ユーザー」を選択します)。
2. 特定のユーザーの登録方法欄にある編集アイコンをクリックします。
3. 必要に応じて日付を編集し、「変更を保存」ボタンをクリックします。

3 管理者の設定

手動登録プラグインは、サイト管理の'Manage enrol plugins'でサイト全体で有効または無効にすることができます。

Enrolment expiration action - ユーザーの登録が有効期限に達したときに何をするかを指定します。オプション「コースからユーザーを登録解除」を選択すると、コースから成績、グループメンバーシップ、設定、その他のユーザー関連データが削除されますのでご注意ください。
登録有効期限切れ通知を送信する時間 - 有効期限切れ通知を送信する時間を指定します。
新しいコースにインスタンスを追加する - これが有効になっている場合、新しいコースが作成されるたびに、手動登録が自動的に新しいコースに追加されます。
手動登録を有効にする - 新しいコースでデフォルトでインスタンスの登録が有効になっている場合、この設定を有効にしておくことを強くお勧めします。
デフォルトロール - デフォルトロールを設定します。通常は学生ですが、コース内の教師によって変更することができます。
デフォルトの登録開始日 - この機能は学生がコースに登録される時間を設定します。デフォルトは'Now'ですが、'Today'および'Course start'に設定することもできます。
デフォルトの登録期間 - 新しいコースのデフォルトの登録期間を設定します。
Notify before enrolment expires - 有効期限が切れる前に教師またはオプションで学生に通知するかどうかを指定します。
通知のしきい値 - 登録期限が切れる前に何日前にユーザーに通知するかを指定します。

4 手動登録のケイパビリティ

手動登録インスタンスの設定:(翻訳準備中)
ユーザーの登録:(翻訳準備中)
ユーザー登録の管理:(翻訳準備中)
コースからユーザーを削除する:(翻訳準備中)
自分をコースから外す:(翻訳準備中)

5 関連項目

参加者

カテゴリ | 登録

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPによる画像のアップロード(確認画面経由)

はじめに

 私は某プログラミングスクールを経て、今年10月から未経験エンジニアとしてWEBコンサルティング会社に入社しました。これから時間がある時にアウトプットの場としてQiitaに記事を投稿していくので、気が付いたこと等アドバイスいただけると幸いです。
 本記事では、未経験として入社した会社で情報のやり取りを理解するために行った新人研修の内容のうち、フォームによる画像の送信&保存の内容について少しつまずいたことをまとめています。
 この記事が少しでもプログラミング初学者の方々の一助となれば幸いです。

事前準備

①同じディレクトリ直下にPHPファイルとimgフォルダを作る
②imgフォルダ内にtmpフォルダとmainフォルダを作る
③サーバー上でtmpとmainの権限を第三者の読み書き可能に属性変更しておく

実装内容

・一つのPHPファイルのみで実装
・ページは入力画面→確認画面→送信完了画面の3ページ構成
・それぞれの画面ではform action=""で同ファイルに値をPOSTする
・確認画面に遷移する際に仮のディレクトリに画像ファイルを格納
・送信完了画面に遷移する際にメインのディレクトリにファイルを移す

< 補足 >
 本来であればMVCの概念に沿って、ファイル毎で役割を分担させるべきではあるが、HTMLも書き込めるというPHPの特性を生かし、今回は力試しということで一つのPHPファイルで実装を進めていくこととします。
 本記事内では省略していますが、if文やswitch文を使い都度表示するviewや動かすコントローラ部分を分けて実装する必要があります。

画像の選択

// ①トップのフォーム画面でinput type="file"画像ファイルの選択箇所を作る
<input type="file" name="picture" accept="image/*">

①トップページのview部分の実装です。 form タグの action="" で同じファイルにPOSTするように実装します。ファイルを分けて実装する際は action 属性にPOST先のファイルのパスを指定してください。今回私は name 属性を "picture" としましたが、ここは任意の値で大丈夫です。

コントローラー部分での確認画面の処理

// ①現在時刻を取得
$now = date("YmdHis");

// ②変数errsを空の配列として事前に作る
$errs = array();

// ③$_FILESデータを変数pictureに入れる
foreach($_FILES['picture'] as $key => $var){
    $picture[$key] = $var;
}

// ④画像のバリデーション
$finfo = finfo_open(FILEINFO_MIME_TYPE);
list($mime,$ext) = explode("/",finfo_file($finfo, $picture["tmp_name"]));
if($mime!="image"){
    $errs['picture'] = "画像を選択してください";
    unset($picture);
}

// ⑤$_FILES内のファイルデータを名前を変えて仮のディレクトリ(tmp)に移す
move_uploaded_file($picture['tmp_name'], "img/tmp/".$now."_picture.".$ext);
// ⑥アウトプット用の変数に画像データを格納
$output_file['name'] = $picture['name'];
// ⑦アウトプット用の変数のtmp_nameの値を仮のディレクトリ内のファイル名に設定する
$output_file['tmp_name'] = {imgまでのパス}."/img/tmp/".$now."_picture.".$ext;
// ⑧アウトプット用の変数のurlに確認画面で表示するための画像urlを格納する
$output_file['url'] = "http://".$_SERVER['SERVER_NAME']."/".{imgまでのパス}."/img/tmp/".$now."_picture.".$ext;
finfo_close($finfo);

①トップのフォーム画面からPOSTされた値を受け取るコントローラーにあたる部分です。後半でPOSTデータのファイル名を変更する際に使用する変数 $now をあらかじめ定義しています。

②ここでバリデーションエラーが生じた際に、フォーム画面にリダイレクトしエラー文を表示させたかったので、あらかじめ変数 $errs を配列の形で定義しています。

③グローバル変数 FILES の中には input type="file" に格納されたデータが入れられています。この中身をコントローラー部分で扱うために、foreach を使い変数 $picture に連想配列の形で定義しています。

④POSTされてきたファイルが画像データかどうか判断するバリデーションを設定しています。ここではファイルの拡張子を調べることで画像データどうかの判定をしています。画像データではないと判断された場合は、エラー文が変数 $errs に格納され、変数 $picture が空になるようにしています。

⑤move_uploaded_file関数はグローバル変数 FILES でPOSTされてきたファイルを他のディレクトリに移動させることのできる関数です。これを用いてあらかじめ作っておいたtmpディレクトリに画像データを移すと同時に、現在時刻を交えたファイル名に変更しています。

⑥⑦⑧移動させた仮のディレクトリの情報をもとに、アウトプット用の変数 $output_file を定義しています。

確認画面

<!-- ①画像の表示 -->
<p>写真:<img src="<?php echo $output_file['url']; ?>" width="300px"></p>
<!-- ②POSTするデータをinput type="hidden"で格納する -->
<?php foreach($output_file as $key => $var): ?>
  <input type="hidden" name="picture[<?php echo $key; ?>]" value="<?php echo $var; ?>">
<?php endforeach; ?>d

①仮のディレクトリに保存した画像情報をもとに確認画面に画像を表示させています。そのままのサイズだと画像が大きすぎたので、 width 属性を使ってサイズを調整しています。

②コントローラーで定義した変数 $output_file の内容をそのまま form タグ内の input type="hidden" に格納しPOSTする。このとき foreach を使って連想配列の形にしています。

コントローラー部分での送信画面の処理

// ①保存する画像の設定
foreach($_POST['picture'] as $key => $var){
    $picture[$key] = $var;
}

// ②tmp内のファイルをmainディレクトリに移す
if(rename($picture['tmp_name'], {imgまでのパス}."/img/main/".basename($picture['tmp_name']))){
    // ③後で確認するようにurlを変数に格納
    $output_file['url'] = "http://".{imgまでのパス}."/img/main/".basename($picture['tmp_name']);
    $result = "記録が完了しました。";
}else{
    $result = "記録に失敗しました。";
    // ④保存に失敗した時は仮のディレクトリ内のファイルを削除
    unlink($picture['tmp_name']);
}

①先ほどと同様、POSTデータを foreach を使い変数 $picture に連想配列の形で定義しています。

②仮のディレクトリ(tmp)内に格納されていた画像ファイルをmainディレクトリに移動させる作業をしています。これが成功したときと失敗したときで挙動を変えるように条件分岐しています。

③保存した画像を送信完了画面から確認できるように変数 $output_file['url'] を定義しています。

④もし保存に失敗した場合は、仮のディレクトリ(tmp)内の画像ファイルが削除されるようにしています。

送信完了画面

<!-- ①結果の文字列の出力 -->
<h1><?php echo $result; ?></h1>

<!-- ②保存した画像へのリンクを作成 -->
<p><a href="<?php echo $picture['url']; ?>">画像の確認</a></p>

おわりに

 今回は初歩的な研修であったために簡単なバリデーションしかかけていないため、ご自身で開発される際には画像保存のバリデーションを調べていただく必要があるかと思います。
 また、今回の実装は私が調べた範囲での記述方法になりますので、もっと簡単な実装方法もあると思います。参考程度に目を通していただければ幸いです。
 最後まで読んでいただきありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 登録

原文

登録

登録とは、ユーザーをコースの参加者としてマークするプロセスで、言い換えれば学生や教師などの役割を割り当てることです。

登録プラグイン
Moodleは登録プラグインと呼ばれるコース登録の管理方法:(翻訳準備中)を提供しています。詳細については、以下のリンクをクリックしてください。

手動登録 - 管理者またはコース教師が手動でユーザを追加します。
自己登録:(翻訳準備中) - ユーザーは自分でコースに登録することができます。
コホート同期:(翻訳準備中) - ユーザーはコースに追加されたコホートの一部です。
コースメタリンク:(翻訳準備中) - 他のコースに登録しているユーザーには自動的にアクセスできるようになります。
ゲストアクセス:(翻訳準備中) - ユーザーはコース教材を閲覧することはできますが、参加はできません。
カテゴリ登録:(翻訳準備中) - ユーザーはカテゴリ内のすべてのコースに登録されています。
外部データベース:(翻訳準備中) - Access、MySQLなどのデータベースからユーザーが登録されます。
フラットファイル:(翻訳準備中) - ユーザーはcsvファイルで登録されます。
IMS Enterprise:(翻訳準備中) - ユーザーはこの標準XMLファイル形式で登録されています。
LDAP登録:(翻訳準備中) - ユーザーは認証され、LDAPを介して登録されます。
MNetリモート登録:(翻訳準備中) - ユーザはリンクされたMoodleサイトを介して登録します。
PayPal:(翻訳準備中) - ユーザーはPaypalで登録を購入します。
さらに、Publish as LTI ツール:(翻訳準備中)の登録プラグインと LTI 認証プラグインを併用することで、別のサイトにいるリモートユーザーが選択したコースやアクティビティにアクセスできるようになります。

関連項目

登録FAQ:(翻訳準備中)
Moodleコースへの登録におけるMoodleコースの管理
登録抹消:(翻訳準備中)

カテゴリ | サイト管理 | 登録

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - カテゴリ:バックアップ

カテゴリ:バックアップ

バックアップと復元に関するドキュメントページのインデックス。

カテゴリー「バックアップ」のページ
全47ページのうち、このカテゴリのページは以下の通りです。

バックアップ

A
Activity backup
Activity restore
Automated course backup
B
Backup (日本語訳:バックアップ)
Development:Backup
Development:Backup 2.0 - Converters review 2011-04
Development:Backup 2.0 drop in ideas
Development:Backup 2.0 multiple formats
Development:Backup 2.0 theme data
Backup and restore FAQ
Backup of user data
C
Capabilities/moodle/backup:anonymise
Capabilities/moodle/backup:backupactivity
Capabilities/moodle/backup:backupcourse
Capabilities/moodle/backup:backupsection
Capabilities/moodle/backup:backuptargetimport
Capabilities/moodle/backup:configure
Capabilities/moodle/backup:downloadfile
Capabilities/moodle/backup:userinfo
Capabilities/moodle/course:reset
Capabilities/moodle/course:reviewotherusers
Capabilities/moodle/restore:configure
Capabilities/moodle/restore:createuser
Capabilities/moodle/restore:restoreactivity
Capabilities/moodle/restore:restorecourse
Capabilities/moodle/restore:restoresection
Capabilities/moodle/restore:restoretargetimport
Capabilities/moodle/restore:rolldates
Capabilities/moodle/restore:uploadfile
Capabilities/moodle/restore:userinfo
Capabilities/moodle/restore:viewautomatedfilearea
Capabilities/moodle/site:backup
Context freezing
Course backup
Course copy
Course restore
E
error/moodle/unsupported subplugin
error/moodle/wrong setting level moodle backup xml file
error/moodle/restore user missing capability
I
Import course data
IMS Common Cartridge import and export
R
Reset course
Restoring file aliases
Reusing activities
S
Site backup
Site Backup for Low-tech Users
Y
Year-end procedures

メインページ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose upでpostgresが起動しなかったのでエラーを解決するに至った話

laravelをインストールする前段階docker-compose upでコンテナを起動させたかったが出来なかった

ある学習教材をベースにlaravelの学習を進めていて、PostgreSQLを使ってコンテナを起動させる内容だったのですが、上手く起動しなかったのでエラー解決に至るまでの備忘録です。

実際に行ったコマンド

ターミナル
 docker-compose up -d workspace php-fpm nginx postgres

up以降はオプションになってますが、最後についているpostgresが今回の話になります

無事にコンテナが起動されれば、

ターミナル
Creating laravel-sns_docker-in-docker_1 ... done
Creating laravel-sns_workspace_1        ... done
Creating laravel-sns_php-fpm_1          ... done
Creating laravel-sns_nginx_1            ... done
Creating laravel-sns_porstgres_1        ... done

この様に出るはずなのですが、私の場合は

ターミナル
Recreating laravel-sns_postgres_1 ... error
Creating laravel-sns_docker-in-docker_1 ... done
Creating laravel-sns_workspace_1        ... done
Creating laravel-sns_php-fpm_1          ... done
Creating laravel-sns_nginx_1            ... done

ERROR: for laravel-sns_postgres_1  Cannot start service postgres: Ports are not available: listen tcp 0.0.0.0:5432: bind: address already in use

こんな感じになってしまいました。

原因

数ヶ月前に、今よりもっと何も解っていない時期にインストールしていたpostgresだと言う事がわかりました。

当時、MySQL以外のDBを使いたいと言う気持ちから特に何も考えずにインストールしていたpostgresの存在を思い出し、pgadminから接続状態を見たら、今回のエラー内容に出ているポート番号5432が接続状態になっていました。
※エラー解決する前に画面を残すのを忘れてしまってました。

解決に向けた道筋を考える

今回はとある教材の学習中で起きたエラーでしたので、講師の方に相談した所、
・Ports are not available
・address already in use
辺りをキーワードに検索をしてみれば?と言うアドバイスを頂いたので、

Ports are not available→ポートが利用できない
address already in use→アドレスは既に使われている
と、ほぼ直訳の解釈を元に、検索をかけてこれかと思えるヒントを見付けました。

参考にさせてもらった記事
https://mebee.info/2020/04/20/post-7968/

これを元にポート番号5432を使用しているプロセスをkillすればいけるのかな?と思い早速実行

ターミナル
sudo lsof -i -P | grep 5432

pgAdmin4   2471 ---------   21u  IPv6 ---------      0t0  TCP localhost:64447->localhost:5432 (CLOSE_WAIT)
※アカウント名やトークンはーーで伏せさせてもらってます。

これでプロセス番号が2471だった事が解ったので、

ターミナル
kill 2471

でkillコマンドを実行

再度コンテナを起動

ターミナル
 docker-compose up -d workspace php-fpm nginx postgres

起動済みのコンテナは省略
 Starting 8d38216de390_laravel-sns_postgres_1 ... done

無事にpostgresも起動できました。

思えば当時インストールだけして、全く使っていなかったpostgresがずっとサーバーと接続済みだったんだな〜と言う事を思い知らされました。

無知の状態であれこれインストールする恐ろしさを知った反面、当時はkillコマンドとかも全く解っていなかったので、時間が立つ事で解決できる事もあるんだなと言う学びにもなりました。

めっちゃしょーもない内容ですが、もし1人でも同じ境遇の方がいて、何かのお役に立つかも知れません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - バックアップ

原文

バックアップ

サイトバックアップ:(翻訳準備中) - すべてを保存するために - データベースに保存されたデータ、アップロードされたファイル、Moodleコード
コースのバックアップ - 選択したアクティビティ、リソース、ブロック、フィルター、ユーザーデータなどを保存します。
コースのリストア
コースの自動バックアップ:(翻訳準備中)
年末の手続き
IMS共通カートリッジの輸出入

関連項目

バックアップとリストアFAQ:(翻訳準備中)
Moodleコースの管理でアクティビティを再利用する:(翻訳準備中)

カテゴリ | サイト管理 | バックアップ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPのissetと!is_nullは違うという話

はじめに

こんにちは、普段は業務で求人系サービスの開発や社内向けツールの開発を行なっている@taku-0728です。
今回はPHPの存在チェックによく使われるissetと、その逆として取り上げられるis_nullの違いについて取り上げます。公式ドキュメントの型の比較表などではissetis_nullの結果は正反対で記載されているのでisset = !is_nullだと思う方もいるかもしれませんが、実はこの2つには違いがあります。
知っている人からしたら当たり前かもしれませんが、比較表だけみたら同じように思えるので、詳細を調べたことがない方は参考にしてもらえればと思います。

結論

細かいことはいいから先に結論が知りたい人向けに結論をまとめます。
isset!is_nullで違いがあるのは下記です。

  • 未定義の変数を比較した場合
  • 実行速度

以下で順番に解説していきます。

解説

未定義の変数を比較した場合

test1.php
<?php

$x = 'test';

var_dump(isset($y));
?>

上記のコードの実行結果は下記のようになります。

bool(false)

それに対し、下記のコードはどうなるでしょうか

test2.php
<?php

$x = 'test';

var_dump(!is_null($y));
?>

答えはこうなります。

PHP Notice:  Undefined variable: y in test2.php on line 5

issetでは未定義の変数を比較してもエラーになりませんが、!is_nullだとエラーになります。
なぜこのようになるか解説していきます。

isset

isset — 変数が宣言されていること、そして NULL とは異なることを検査する

公式ドキュメントより
issetは変数が宣言されていることと、NULLではないことを検査するので、実行結果はfalseになります。

is_null

is_null — 変数が NULL かどうか調べる

公式ドキュメントより
is_nullは変数がNULLかどうかを調べるのみであり、issetとは違って変数が宣言されてるかどうかは検査してくれません。そのため結果はissetとは異なります。

公式ドキュメントの解説を読んでいただければもう解説する必要はないと思いますが、issetは変数が宣言されていることを確認してくれますが、is_nullはNULLかどうかしか確認してくれません。そのため未定義の変数を比較すると差が生まれるというわけです。

実行速度

isset!is_nullの実行速度に違いがあるのか1000万回比較して検証してみます。

<?php
$check_data = "";

// isset
$start_time1 = microtime(true);
$sum = 0;
for ($i=0; $i<=100000000;$i++) {
    if (isset($check_data)) {
      $sum += $i;
    }
}
$end_time1 = microtime(true);
var_dump('isset処理時間:'.($end_time1 - $start_time1)."秒\n");


// is_null
$start_time2 = microtime(true);
$sum = 0;
for ($i=0; $i<=100000000;$i++) {
    if (!is_null($check_data)) {
      $sum += $i;
    }
}
$end_time2 = microtime(true);
var_dump('!is_null処理時間:'.($end_time2 - $start_time2)."秒\n");
?>

3回実行してみましたが、実行結果は過去のようになりました。

string(37) "isset処理時間:1.1999080181122秒
"
string(39) "!is_null処理時間:1.6563079357147秒
"
string(37) "isset処理時間:1.2162489891052秒
"
string(39) "!is_null処理時間:1.6646618843079秒
"
string(37) "isset処理時間:1.1731791496277秒
"
string(38) "!is_null処理時間:1.658478975296秒
"

2つの処理時間には大体0.4~0.5秒ほどの差があることがわかります。
今回は条件式の中でカウンタ変数の加算をしているだけなので大した差にはなっていませんが、
条件式の中が複雑になるほど処理時間に差は生まれると思います。
では同じようなことをやっているのになぜ差が生まれるのでしょうか?

言語構造と関数の違い

isset!is_nullの処理速度に違いが生まれる理由はissetがPHPの言語構造であり、is_nullは関数だからです。
言語構造とはその名の通り、言語を構成する要素のことです。関数のように定義して使うものではなく、すでにPHPの中に組み込まれた機能のことです。
PHPの言語構造一覧についてはこちらの公式ドキュメントを参照ください。
言語構造はPHPの中にすでに組み込まれているので、関数より先に確認にいきます。だから関数であるis_nullよりも、言語構造であるissetで比較する方が処理速度が早くなるわけです。
また、issetは言語構造であるが故に未定義の変数から値を取得しようとしてもエラーにはなりませんが、is_nullは関数であるため未定義の変数から値を取得しようとするとエラーになるわけです。

まとめ

PHPのisset!is_nullには

  • 未定義の変数を比較した場合
  • 実行速度

の2つに違いがあります。その理由はissetがPHPに予め組み込まれた言語構造であるのに対し、is_nullは関数だからです。
基本的に変数の存在チェックにはissetを使えば問題ないとは思いますがissetis_nullは必要と用途に応じて使い分けた方がいいと思いますが、issetは空文字''をtrueとしてしまうので値が入っているかどうかを比較する際にはお気をつけください。
また、!is_null!== nullと等価ですのでこちらも好みに合わせて使い分けてください。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 認証

原文

認証

認証とは、ユーザがユーザ名とパスワードでMoodleサイトにログインすることを許可するプロセスです。
認証プラグイン

Moodleは認証プラグインと呼ばれる多くの認証管理方法:(翻訳準備中)を提供します。

標準の認証プラグインは以下の通りです。

手動アカウント:(翻訳準備中) - 管理者によって手動で作成されたアカウント
ログインしない:(翻訳準備中) - 特定のユーザーアカウントを一時停止
電子メールによる自己登録:(翻訳準備中) - ユーザーが自分のアカウントを作成できるようにするためのもの
CASサーバー(SSO):(翻訳準備中) - アカウントの詳細は外部のCASサーバーにあります。
外部データベース:(翻訳準備中) - アカウントの詳細は外部データベースにあります。
LDAPサーバー:(翻訳準備中) - アカウントの詳細は外部のLDAPサーバーにあります。
LTI:(翻訳準備中) - Publish as LTIツールの登録方法:(翻訳準備中)と連携して、コースとアクティビティを接続します。
Moodleネットワーク認証:(翻訳準備中) - 異なるMoodleサイトがどのようにユーザを接続し、認証するか。
認証なし:(翻訳準備中) - テスト目的のため、またはMoodleサイトがインターネット上で利用できない場合。公開サーバでは使用しないでください!
Shibboleth:(翻訳準備中) - アカウントの詳細は外部のShibbolethサーバにあります。
ウェブサービス認証:(翻訳準備中)

Moodleプラグインディレクトリには多くの追加認証プラグインもあります。

関連項目

認証FAQ

カテゴリ | サイト管理 | 認証

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - カテゴリ:認証

原文

カテゴリ:認証

全31ページのうち、以下の31ページがこのカテゴリに属しています。

認証

メールによる自己登録認証方式

A

Active Directory
Authentication (日本語訳:認証)
Development:Authentication API
Authentication FAQ
Development:Authentication plugins

C

CAS server (SSO) authentication

E

Email-based self-registration (日本語訳:メールによる自己登録認証方式)
error/auth/auth ldap noconnect all
error/auth/auth ldapnotinstalled
External database authentication

F

FirstClass authentication

I

IMAP authentication

J

Joomla authentication

L

LDAP authentication

M

Mahoodle
Managing authentication
Manual accounts
MNet
MNet FAQ

N

NNTP authentication
No authentication
No Email
No login
NTLM authentication

O

OAuth 2 authentication

P

PAM (Pluggable Authentication Modules)
POP3 server authentication
ProMoodle Installation

R

RADIUS authentication

S

Shibboleth

U

Uniquelogin authentication

カテゴリ | 管理者

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Moodle 3.9 マニュアル - 管理FAQ

原文

管理FAQ

目次
1 よくある質問
1.1 現在インストールされているMoodleのバージョンを確認するには?
1.2 管理者パスワードを忘れてしまいました
1.3 メンテナンス中にユーザーがログインできないようにするには?
1.4 サイトがメンテナンスモードで動かなくなりました
1.5 Moodleサイトのドメイン名またはURLを変更するには?
1.6 ログテーブルが消えました - ログが見つかりません!
1.7 破損したMoodleデータベースを修復するには?
1.8 'enrol'のようなスペルを'enroll'に変更するにはどうすればいいですか?
2 サイトポリシーと設定
2.1 アップロードファイルの制限はどうなっているの?
2.2 Windowsローカルホストでアップロードファイルのサイズを変更する方法
2.3 ファイルアップロードの最大実行時間を変更する方法
3 ログインして外出する
3.1 私のサイトでは、ユーザーがすぐにログアウトしてしまいます。
3.2 ユーザーがログインできない、クッキーが必要、デバッグはconfig.phpを参照してください。
3.3 'Login as'機能を使用した後、なぜMoodleからログアウトしてしまうのですか?
4 テキストと外観
4.1 [[missing strings]]が表示されるのはなぜですか?
4.2 Moodleでテキストを変更する
4.3 スタイルシートや他のテーマの変更が表示されない
4.4 フロントページの中央をコースカテゴリから別のものに変更するには?
4.5 初期ログイン画面を変更するには?
4.6 初期ログイン画面のヘルプを変更するには?
5 エラーとトラブルシューティング
5.1 デバッグを有効/無効にするには?
5.2 「編集をオンにする」をクリックすると不完全なページが表示される
5.3 ファイルをアップロードする際に「必須パラメータ(id)が不足しています」というエラーメッセージが表示される。
5.4 ユーザーが「無効なセッションキー」エラーを取得する
5.5 ページが空白になっていたり、半分が欠けていたりするのはなぜですか?
5.6 サイト全体をアップグレードせずに、バグを一つだけ修正するにはどうしたらいいですか?
6 関連項目
7 その他の質問はありますか?

1 よくある質問

1.1 現在インストールされているMoodleのバージョンを確認するには?

サイト管理 > 通知ページのMoodleバージョン:(翻訳準備中)情報を参照してください。

1.2 管理者パスワードを忘れてしまいました

最初に、忘れたパスワードリンクを使用してみてください (あなたのサイトにパスワードがある場合) 管理者ユーザ名を知らない場合、多くの場合、単に「admin」となっています。

Moodleに付属のコマンドラインツール:(翻訳準備中)を使用して、管理者ユーザのパスワードをリセットすることができます。

もしあなたが管理ツールを使ってデータベースにアクセスできるのであれば、そこでパスワードを修正することができます。管理者を含むすべてのユーザのパスワードは暗号化されたハッシュとしてmdl_userテーブルに保存されます。古いハッシュを新しいパスワードのmd5の値に手動で置き換えることができ、最初のログイン後に強力なハッシュ値にアップグレードされます。

1.3 メンテナンス中にユーザーがログインできないようにするには?

メンテナンスモードの2つの方法のうちの1つまたは他の方法を使用してください。

1.4 サイトがメンテナンスモードで動かなくなりました

時々、Moodleがメンテナンスモード:(翻訳準備中)で立ち往生し、あなたがメンテナンスモードをオフにしようとしたにもかかわらず、「このサイトはメンテナンス中で現在利用できません」というメッセージが表示されます。

あなたがMoodleをメンテナンスモードにすると、moodledata/maintenance.html (サイトファイルフォルダ)にメンテナンス.htmlというファイルが作成されます。これを修正するには、以下を試してください。

ウェブサーバユーザがmoodledataフォルダへの書き込み権限を持っていることを確認してください。
maintenance.htmlファイルを手動で削除する。

1.5 Moodleサイトのドメイン名またはURLを変更するには?

あなたのサイトのベースURLはconfig.phpファイルの設定wwwrootに設定されています。すべての動的リンク (例えば、コースやアクティビティのURL) は、この設定のプレフィックスを付けて作成されます。これらは「相対リンク」として知られています。

あなたのMoodleサイトは、あなたまたは誰かがリンクをPagesなどのアクティビティやMoodleの他の場所にコピー/ペーストした場合、前のURLを指すリソースへの「絶対リンク」を含むことがあります。これらは、Webサイトへのテキストやリンクと同様のテキスト文字列です。

このような絶対値を一括で変更するために、Moodleにはすべてのリンクを新しいURLに変更するための検索および置換:(翻訳準備中)ユーティリティが含まれています。これを変更するには、管理者としてログインし、ブラウザのアドレスバーに http://yoursite.com/admin/tool/replace/index.php を入力してください。あなたの古いベースURLと新しいベースURLをボックスに入力し、ユーティリティを実行してください。

サイトのドメイン名を変更した場合、新しいドメインを理解するように設定するために、ウェブサーバーやDNS設定を変更する必要があるかもしれません。詳細は移設を参照してください。
searchandreplacecommandlinetool_interface_m30.png
検索と置換インターフェースのスクリーンショット

1.6 ログテーブルが消えました - ログが見つかりません!

最も可能性の高い原因は、mdl_logテーブルが破損していることです。あなたのデータベースが破損していないかどうかをチェックする方法:(翻訳準備中)を参照してください。注意: Moodle 2.7以降、新しいログシステムがオプションとして追加されました。あなたが古いスタイルのロギング、レガシーログ、または標準ログを使用しているかどうかを、サイト管理 > プラグイン > ロギング > ログストアの管理で確認してください。

1.7 破損したMoodleデータベースを修復するには?

通常、'./moodle/mdl_quiz_grades'がクラッシュしているため、修復する必要があります。解決策については、データベースの破損をチェックする方法:(翻訳準備中)を参照してください。

1.8 enrol' のようなスペルを 'enroll' に変更するにはどうすればいいですか?

これはあなたの言語パックとデフォルト言語によって制御されます。この場合、あなたはおそらくデフォルトのMoodle言語パック'en'を使用していると思いますが、これは一般的な(ときには特にオーストラリアの)綴りです。アメリカ英語が必要な場合、en_us言語パックを追加し、デフォルトとして設定してください。

2 サイトポリシーと設定

2.1 アップロードファイルの制限はどうなっているの?

詳細については、ファイルのアップロードサイズを参照してください。

ファイルのアップロードサイズ:(翻訳準備中)はいくつかの方法で制限されています。

  1. 1. 最近ではあまりないかもしれませんが (つまり、他の設定がうまくいかない場合は確認してください)、Apache 2 には変更する必要があるかもしれない設定があります。Apache の /usr/local/apache2/conf/httpd.conf にアップロードサイズをバイト単位で指定した行を追加したり、編集したりすることで制限を変更することができます (正しい場所についてはオペレーティングシステムのドキュメントを確認してください - 例えば /etc/apache2 以下が一般的な代替方法です)。
LimitRequestBody 10485760
  1. PHPにも制限があります。あなたがそれにアクセスできる場合、それらはあなたのサイト全体のphp.iniファイルに設定されています。共有ホスティングでは、.htaccessファイルまたはphp.iniでこれらを設定することができるかもしれません。あなたは、これは彼らのシステム上でどのように動作するか、ホスティング会社に確認することをお勧めします。

php.iniファイルの行は次のようになります。

upload_max_filesize 64M
post_max_size 64M

...htaccess のエントリは次のようになります。

php_value upload_max_filesize 64M
php_value post_max_size 64M
.htaccessファイルは通常、あなたのMoodleインストールのルートに置くことができ、Moodle全体に影響を与えます。(サイト全体ではない) php.iniファイルは、影響を与える必要があるすべてのディレクトリにコピーする必要があるかもしれません。以下は良いスタート地点です。

以下は良いスタート地点です:

   * public_html
   * moodle/admin
   * moodle/course
   * moodle/files
   * moodle/repository
   * root of your moodledata directory

上記の変更を有効にするには、サーバーの再起動が必要な場合がありますので、ご注意ください。

  1. 3. Moodleにはサイト管理 > セキュリティ > サイトセキュリティ設定 > アップロードされたファイルの最大サイズで設定できるmaxbytesというサイト全体の制限があります。ここでのデフォルトは(サイト制限)で、php.iniファイルから読み込まれます。あなたがMoodle自身にこれを低く設定することができますが、あなたがアップロードする可能性のある最大ファイルより低く設定しないでください。

php.iniのサーバ制限設定を確認するには、(サーバにアクセスせずに、Moodle管理インターフェイスを使用して) サイト管理 > サーバ > PHP情報 (ヒント: ファイルサイズを検索)を参照してください。

  1. 通常、新しく作成されたすべてのコースのデフォルト設定は、サイトの制限値よりも低い値に設定する必要があります。これはサイト管理 > コース > コースのデフォルト設定 > 最大アップロードサイズで設定します。各コース内では、コース設定の通常の教師の役割によって必要に応じて個別に設定または変更することができます。

  2. フォーラム:(翻訳準備中)課題:(翻訳準備中)など、学生がファイルをアップロードできるように設定できるアクティビティモジュールには独自の制限があり、アクティビティを追加または編集する際に設定することができます。

また、以下も参照してください

Moodleの使用法 アップロードされたファイルの最大許容サイズを拡大するための詳細な指示 フォーラムディスカッション
ホストされたサーバ上で最大許容サイズを増加させるためのMoodleの使用方法 フォーラムディスカッション
ファイルアップロードサイズ:(翻訳準備中)のページ
最大実行時間の変更方法:(翻訳準備中)は以下の通りです。

2.1 Windowsのローカルホストでアップロードファイルのサイズを変更する方法

ローカルホスト(コンピュータ上でWindows用の完全インストールパッケージを使用)では、アップロードされたファイルサイズをデフォルトの16Mよりも大きいものに変更するのは簡単です。

ここでは、アップロードファイルのサイズを100Mに変更する方法の例を示します。

./php/php.iniを見つけ、WordPadで右クリック→開く→WordPadを選択して開きます。
このファイルをスクロールするか、"max"というテキストで検索すると、upload_max_filesize = 16Mと出てきます。
その行を

upload_max_filesize = 100M

同じように、post_max_size = 16Mを見つける
その行を

post_max_size = 100M

ファイルを保存してください。
php.iniファイルを変更したら、Apacheを再起動する必要があります。xamppを再起動してlocalhostを参照してください。設定のアップロードファイルのサイズが100Mになっていることに気づくはずです。

以下も参照してください。

最大実行時間の変更方法は以下の通りです。

2.3 ファイルアップロードの最大実行時間を変更する方法

ファイルアップロードの制限を増やすことの副作用として、phpスクリプトがデフォルトで設定されている制限(300秒/5分)を超えて実行される可能性があります。これを変更するには、php.ini の max_execution_time を見て、次のように変更します。

max_execution_time = 600

Apache を使用していて、php の設定を変更する .htaccess ファイルがある場合は、次の行を .htaccess ファイルに追加してください。

php_value max_execution_time 600

これらの変更が有効になるようにウェブサーバを再起動し、moodle admin -> 環境ページのphpinfo出力を見て、値が変更されていることを確認してください。

3 ログインして外出する

3.1 私のサイトでは、ユーザーがすぐにログアウトしてしまいます。

ユーザーのログインセッションは、ユーザーがまだアクティブであるかどうかをチェックし、特定のアイドル期間が経過した後にログアウトします。これは、サイト管理 > サーバー > セッション処理 > タイムアウトで設定します。デフォルトは2時間です。必要に応じて増やしてください。

3.2 ユーザーがログインできない、クッキーが必要、デバッグはconfig.phpを参照してください。

あなたのサイトのconfig.phpファイルには、おそらく「>」の後に余分な行があります。解決策は、最後の?>を削除することです。

3.3 'Login as'機能を使用した後、なぜMoodleからログアウトしてしまうのですか?

これは設計上の問題です。としてログイン」機能を使用した後、セキュリティ上の理由から、あなたが通常のロールに戻ると自動的にMoodleからログアウトされます。再度ログインすると、以前にログインしていたページにリダイレクトされます。

4 テキストと外観

4.1 [[missing strings]]が表示されるのはなぜですか?

テキストの周りの二重の角括弧は、その言語の文字列がその言語のためにその関数のために不足していることを示しています。これは、サードパーティ製のプラグインや、まだすべての文字列が翻訳されていない言語の場合によく見られます。

まず、サイト管理 > 言語 > 言語パック > インストールされているすべての言語パック:(翻訳準備中)を更新で言語パックを最新バージョンに更新してください。

不足している文字列が非標準のプラグインのものである場合は、そのプラグインをアップデートしてみてください。サーバーコードにアクセスできる場合は、このプラグインのコードをチェックすることができます; 言語文字列はモジュールまたはプラグインフォルダ内のlangフォルダに含まれているはずです。

注意: 言語文字列を変更した後、これらが表示されるまでにキャッシュにラグが生じることがあります。これはサイト管理 > 開発 > すべてのキャッシュをパージで強制的に行うことができます。

4.2 Moodleでテキストを変更する

管理 > 言語 > 言語のカスタマイズ:(翻訳準備中)の言語編集インターフェイスでは、サイトで使用されている任意の文字列、任意の単語やフレーズを簡単に変更することができます。

文字列は言語パックごとに保存されます。そのため、'en' (一般的な英語) に変更しても、'en_us' (米国英語) やその他の言語には変更されません。

あなたが探している単語やフレーズを見つけるために、いくつかのファイルを検索する必要があるかもしれません。moodle.phpファイルにはサイト全体に共通のフレーズが含まれており、admin.phpには多くの管理者用のフレーズが含まれています。ヒント: 文字列が含まれているファイルがわからない場合、すべてのファイルオプションを選択して検索してください。

また、これらのカスタマイズはデフォルトの言語文字列を上書きしますが、削除はしません。

4.3 スタイルシートや他のテーマの変更が表示されません。

ブラウザは通常スタイルシートをキャッシュするため、変更が表示される前にブラウザを強制的に更新する必要があります。

Moodleサーバはすべてのスタイルをキャッシュします。サイト管理>外観>テーマ>テーマセレクタで「テーマキャッシュのクリア」をクリックして、ディスクからキャッシュを強制的に更新することができます。

4.4 フロントページの中央をコースカテゴリから別のものに変更するには?

フロントページ>設定で「フロントページ」を「下にすべてなし」に変更してください。ログイン時のフロントページの項目」をすべて下の「なし」に変更します。トピックセクションを含める」にチェックが入っていることを確認します。変更を保存して、フロントページに戻ります。編集をオンにすると、「リソースの追加」と「アクティビティの追加」のドロップダウン コンボボックスが表示されます。Add a resource "を選択し、"Insert a label "を選択します。あとはWYSYWYGエディタで好きなようにラベルを編集することができます。

4.5 初期ログイン画面を変更するには?

言語ファイルを編集してください。サイト管理 > 言語 > 言語のカスタマイズ、moodle.phpファイルを見てください。loginusingまたはloginstepsまたはloginstepsnone文字列変数を探してください。

4.6 初期ログイン画面のヘルプを変更するには?

ログイン画面のヘルプメッセージを変更または追加するには、サイト管理 > プラグイン > 認証 > 認証の管理にアクセスしてください。Instructionsテキストボックスにヘルプメッセージを入力してください。

5 エラーとトラブルシューティング

5.1 デバッグを有効/無効にするには?

何も表示されないページや部分的に完全なページが表示されたり、短いエラーメッセージが表示されても十分な情報が得られない場合は、デバッグをオンにして詳細を確認することができます。

デバッグをオンにすると、エラーメッセージの内容を確認できるので、問題の診断に役立つかもしれません。サイト管理 > 開発 > デバッグ:(翻訳準備中) - 詳細はデバッグを参照してください。

5.2 「編集をオンにする」をクリックすると不完全なページが表示される

不完全なページが表示された場合、通常はエラーが発生したことを示しています。詳細を知るには、デバッグ:(翻訳準備中)をオンにすると、問題を診断するのに役立つエラーメッセージが表示されるはずです。

これは通常、あなたがインストールしたモジュールやブロックに互換性がないことが原因です。以下の手順に従ってください。

  1. 寄贈されたモジュールまたはプラグインのインストール:(翻訳準備中)にあるモジュール削除の指示に従ってください。
  2. コースページに再度アクセスして、「編集をオンにする」ボタンを再度クリックしてみてください。 互換性のないモジュールやブロックを見つけた場合は、モジュールとプラグインのデータベース:(翻訳準備中)でメンテナとして指定された人に問題を報告してください。

5.3 ファイルをアップロードする際に「必須パラメータ(id)が不足しています」というエラーメッセージが表示される。

このメッセージは、アップロード制限を超えるファイルをアップロードしようとしたときに発生することがあります。これは、ユーザーが同じサイトに複数回ログインして、同じブラウザで異なるウィンドウやタブで開いている場合にも発生することがあります。

5.4 ユーザーが「無効なセッションキー」エラーを取得する

無効なセッションキーエラーの原因はいくつかあります。最も一般的なのは、同じブラウザで複数のタブまたはウィンドウで同じMoodleサイトにログインしようとした場合です。これはうまくいきません。この問題を解決するには、これらのタブやウィンドウをすべて閉じて、ブラウザを閉じて再起動してください。これはほとんどの場合、過渡的な問題です。この問題を解決するには、ブラウザを閉じて再起動し、Moodleにログインし直してください。

コースアクティビティや特定のページなど、Moodle内の何かにURLを送信する場合、セッションIDキーがURLの末尾に追加されている可能性があります。単純にURLからそのパラメータを削除してください。

5.5 ページが空白になっていたり、半分が欠けていたりするのはなぜですか?

空白のページや、半分が欠けているように見えるページは通常、エラーが発生したことを示しています。(プロダクションシステムで推奨されているように) エラーメッセージの表示をオフにしている場合、何が起こっているのかを理解するのが非常に困難になることがあります。

解決策は、一時的にデバッグオプションをオンにする:(翻訳準備中)ことです。その後、問題のページに戻ると、エラーメッセージが表示されるはずです。問題の解決が終わったら、もう一度デバッグをオフにすることを忘れないようにしましょう。

5.6 サイト全体をアップグレードせずに、バグを一つだけ修正するにはどうしたらいいですか?

以下のような場合を考えてみましょう。

あなたは特定のバグを経験しています。
あなたはトラッカーで検索して、あなたの問題が MDL-abc であり、最新バージョンで修正されていることを見つけました。
最新版にはおそらくセキュリティの修正がされているはずなのに、なぜかサイト全体をアップグレードすることができません。
では、サイト全体をアップグレードせずに、このバグを修正するにはどうすればいいのでしょうか?手動でコードにパッチを当てる準備ができていれば、おそらくトラッカーからこの情報を得ることができるでしょう。アップグレードせずにたった一つのバグを修正する方法:(翻訳準備中)ガイドをご覧ください。

6 関連項目

エラーFAQ:(翻訳準備中)
インストールFAQ

7 その他の質問はありますか?

moodle.orgの一般ヘルプフォーラムに投稿してください。

カテゴリ | サイト管理 | FAQ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel Redisのライブラリをインストールしたらエラーが発生した

目的

  • LaravelのセッションをAWSのElastiCatcheで管理しようと思いpredis/predisをインストール後にローカルサーバを起動したときのエラーの解決方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 6.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提情報

問題までの経緯

  1. アプリ名ディレクトリで下記コマンドを実行してライブラリを取得した。

    $ composer require predis/predis
    
  2. アプリ名ディレクトリで下記コマンドを実行してローカルサーバを起動した。

    $ php artisan serve
    
  3. 当該アプリの.envファイルのSESSION_DRIVER=fileの記載をSESSION_DRIVER=redisに変更した。

  4. 下記にアクセスした。

問題

  • ブラウザで下記のエラーが表示された。

    • Please make sure the PHP Redis extension is installed and enabled.
    • 訳: PHPRedis拡張機能がインストールされ有効になっていることを確認してください。

    ?_Please_make_sure_the_PHP_Redis_extension_is_installed_and_enabled__と_ElastiCatche.png

問題解決までの経緯

  1. おそらく.envファイルのSESSION_DRIVER=SESSION_DRIVER=redisとなっているときにPhpRedis PHP拡張が導入されていないと本エラーが出るようである。公式ドキュメントでRedisを使用する際はPhpRedis PHP拡張を入れて使うことが推奨されている。
  2. とはいえpredis/predisのライブラリが入っていれば動くはずであるが、推奨されている通りにPhpRedis PHP拡張を入れたら解決しそうである。
  3. 下記方法でMacのローカルにPhpRedis PHP拡張をインストールした。
  4. ローカルサーバを起動して下記にアクセスしてみた。
  5. 一向にページが表示されず挙げ句には下記のエラーを返してきた。
    • Operation timed out
  6. 下記の公式ドキュメントを見ていったらpredis/predisのライブラリを使用する際はconfig/database.phpのredis配列のclientキーの第二引数を'predis'に書き換えろと書いてあったPhpRedis PHP拡張をインストールしてしまったが本方法を試してみる。
  7. 下記コマンドを実行してPhpRedis PHP拡張をアンインストールする。

    $ pecl uninstall redis
    
  8. 下記コマンドを実行してphp.iniファイルの場所を出力する。

    $ php -r "echo phpinfo();" | grep "php.ini"
    
  9. 下記コマンドを実行してphp.iniファイルのバックアップを作成する。(下記コマンドは筆者の環境でのphp.iniファイルの場所を指しており、皆さんは先のコマンドで出力されたphp.iniのパスを指定してバックアップを作成していただきたい。)

    cp /usr/local/etc/php/7.4/php.ini /usr/local/etc/php/7.4/php.ini_org
    
  10. 下記コマンドを実行してphp.iniファイルを開く。(下記コマンドは筆者の環境でのphp.iniファイルの場所を指しており、皆さんは先のコマンドで出力されたphp.iniのパスを指定してファイルを開いていただきたい。)

    $ vi /usr/local/etc/php/7.4/php.ini
    
  11. ファイルに下記の記載があるはずなのでコメントアウト後に保存する。

    • 修正前

      /usr/local/etc/php/7.4/php.ini
      extension="redis.so"
      
    • 修正後

      /usr/local/etc/php/7.4/php.ini
      ;extension="redis.so"
      
  12. アプリ名ディレクトリで下記コマンドを実行して設定ファイルを開く。

    $ vi config/database.php
    
  13. 下記のように修正した。

    • 修正前

      config/database.php
      /*
      |--------------------------------------------------------------------------
      | Redis Databases
      |--------------------------------------------------------------------------
      |
      | Redis is an open source, fast, and advanced key-value store that also
      | provides a richer body of commands than a typical key-value system
      | such as APC or Memcached. Laravel makes it easy to dig right in.
      |
      */
      
      'redis' => [
      
          'client' => env('REDIS_CLIENT', 'phpredis'),
      
          'options' => [
              'cluster' => env('REDIS_CLUSTER', 'redis'),
              'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
          ],
      
          'default' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_DB', '0'),
          ],
      
          'cache' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_CACHE_DB', '1'),
          ],
      
      ],
      
    • 修正後

      config/database.php
      /*
      |--------------------------------------------------------------------------
      | Redis Databases
      |--------------------------------------------------------------------------
      |
      | Redis is an open source, fast, and advanced key-value store that also
      | provides a richer body of commands than a typical key-value system
      | such as APC or Memcached. Laravel makes it easy to dig right in.
      |
      */
      
      'redis' => [
      
          /* 下記を修正した */
          'client' => env('REDIS_CLIENT', 'predis'),
      
          'options' => [
              'cluster' => env('REDIS_CLUSTER', 'redis'),
              'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
          ],
      
          'default' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_DB', '0'),
          ],
      
          'cache' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_CACHE_DB', '1'),
          ],
      
      ],
      
  14. 別のエラーが発生したが問題になっていたPhpRedis PHP拡張が存在しない旨のエラーは出なくなった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelをバージョン指定(laravel6)でインストールする方法

laravelをバージョン指定してインストールした

個人アプリ開発に向けてPHPの学習を行っている最中にlaravelのバージョンを最新バージョンインストールしていた事で、学習中の教材の内容とハンズオンでの挙動が噛み合わなくなってしまった為、バージョンを6系統でインストールし直したかったので、備忘録として記述します。

早速インストールの方法

ターミナル
composer create-project --prefer-dist laravel/laravel blog "6.*"

これだけです

バージョン6にしたかった理由

・バージョン6はLTS(= Long Term Support)でサポート期間が長かった為
・現在は約半年の周期でバージョン変更が行われているが現時点(2020/10/26)でLTSの最新がバージョン6の為
・その為かLaravelに関する教材もバージョン6の物が多い気がしたので、まずは6でしっかり学習したかった為

と言った感じです。

もし同じ様なイメージで学習を考えられている方の参考になれば幸いです。

ちなみに
--prefer-distオプションでzipでインストールされるので、処理時間が高速で行われるそうです。

インストール後のバージョン確認

ターミナル
php artisan -V

Laravel Framework 6.19.1

無事にバージョン指定できました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む