ユーザの一括登録に関して

ユーザの一括登録に関して

- hiroki nanba の投稿
返信数: 11

ユーザーを一括登録をしたいのですが、

ユーザのアップロードで日本語を含めて登録しようとしたところ

以下のメッセージが出て、登録ができませんでした。


CSVファイルの読み込み中にエラーが発生しました: 無効なCSVファイルフォーマット - カラム数が一定ではありません!


CSVファイルの中身はこのようなものです。

username,lastname,firstname,email

sample001,あああ,いいい,sample001@co.jp

sample002,ううう,えええ,sample002@co.jp

sample003,おおお,かかか,sample003@co.jp


日本語を含めないでCSVファイルを作成してインポートをするとインポートが正常にできます。

以下の投稿を見て文字コードをutf8mb4に変更してみましたが、

エラーは変わりませんでした。

「ユーザをアップロードする」でのトラブル

https://moodle.org/mod/forum/discuss.php?d=358420


CSVのファイルの文字コードもutf-8であることなど確認してみたのですが

うまくいきませんでした。


何度やってもうまくいかないのでmdl_userテーブルに直接、phpmyaminのインポート機能

(環境としてxamppを使用しております)でCSVファイルの中身をインポートしてみたところ、

インポートの結果、ユーザが追加されたように見えました。

ユーザの一覧で検索をかけるとそのユーザが検索結果に表示されます。


ですが、それによる弊害がなにかありますでしょうか。

正規のインポートを使用していないので、

何かしらあるかもしれないと思いますが、何かありますでしょうか。


また、mdl_userテーブルに直接インポートを実行してユーザ作成する際、

他に作成されたユーザを参考にpasswordの項目をnot cachedと入力していますが、

(サイト管理/開発/テストコースを作成するで作成したユーザのpassword項目と同じにしてます)

その場合、パスワードを設定していない設定になるのでしょうか。

それともパスワードがnot catchedとなるのでしょうか。

そして上記の場合、そのユーザの初回ログインの際のパスワード入力や

パスワードの変更はどうなりますでしょうか。


もし、ユーザのアップロードで解決できるのならそうしたいのですが

試してもエラーで全然進まなかったもので、なんとか一括でのユーザの登録を行いたいです。

重ねてお尋ねすることが多くなったことと文章が長くなってしまい申し訳ありませんが、

何かありましたら教えていただけると幸いです。よろしくお願いします。

hiroki nanba への返信

Re: ユーザの一括登録に関して

- udagawa mitsuru の投稿

うだがわです。

元のCSVをExcelで作っているなどであれば無理にUTF-8に変換せずにExcelで保存時に「CSV(コンマ区切り)(*.csv)」を指定して保存した後、ユーザアップロードでCP932を選んでみてください。

udagawa mitsuru への返信

Re: ユーザの一括登録に関して

- hiroki nanba の投稿
回答いただきありがとうございます。


元のCSVはExcelで作っていますので、CSV(コンマ区切り)を指定して

保存した後エンコーディングをCP932を選択してアップロードしたのですが、

すみません、同じエラーが出て出来ませんでした。

hiroki nanba への返信

Re: ユーザの一括登録に関して

- udagawa mitsuru の投稿

カラム数がおかしいというエラーなのですが、文字コードを正常に判別できていないため表示されているのだと思われます。PHPの internal_encoding か mbstring.* あたりが怪しいと思いますが、php.iniをアップロードして貰うことは可能でしょうか?

評点平均: お役立ち度: ★★★★★★★ (1)
udagawa mitsuru への返信

Re: ユーザの一括登録に関して

- hiroki nanba の投稿

php.iniのおそらく該当箇所は以下のようになります。

; PHP internal character encoding is set to empty.
; If empty, default_charset is used.
;internal_encoding =

[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
;mbstring.language = Japanese

; Use of this INI entry is deprecated, use global internal_encoding instead.
; internal/script encoding.
; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.
; The precedence is: default_charset < internal_encoding < iconv.internal_encoding
;mbstring.internal_encoding =

; Use of this INI entry is deprecated, use global input_encoding instead.
; http input encoding.
; mbstring.encoding_traslation = On is needed to use this setting.
; If empty, default_charset or input_encoding or mbstring.input is used.
; The precedence is: default_charset < intput_encoding < mbsting.http_input
;mbstring.http_input =

; Use of this INI entry is deprecated, use global output_encoding instead.
; http output encoding.
; mb_output_handler must be registered as output buffer to function.
; If empty, default_charset or output_encoding or mbstring.http_output is used.
; The precedence is: default_charset < output_encoding < mbstring.http_output
; To use an output encoding conversion, mbstring's output handler must be set
; otherwise output encoding conversion cannot be performed.
;mbstring.http_output =

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
;mbstring.encoding_translation = Off

; automatic encoding detection order.
; "auto" detect order is changed according to mbstring.language
;mbstring.detect_order = auto

; substitute_character used when character cannot be converted
; one from another
;mbstring.substitute_character = none

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
;mbstring.func_overload = 0

; enable strict encoding detection.
; Default: Off
;mbstring.strict_detection = On

; This directive specifies the regex pattern of content types for which mb_output_handler()
; is activated.
; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
;mbstring.http_output_conv_mimetype=

全てコメントアウトになっております。

追加として一番下にリンク先の設定を追加するように以下を設定しています。

[client]
default-character-set = utf8mb4

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

[mysql]
default-character-set = utf8mb4

こちらでよろしかったでしょうか。

hiroki nanba への返信

Re: ユーザの一括登録に関して

- udagawa mitsuru の投稿

RedHat Enterprise Linuxであればphp.iniはデフォルトでおおむね問題ないのですが、参考までにOSとPHP、DBおよびMoodleのバージョンをご教示いただけますか?可能であればこちらで同じ環境を作って検証してみたいと思います。

MySQLの設定はphp.iniではなくmy.cnfのようなMySQL用設定ファイルに記述する必要があります。MoodleのバージョンによってはMySQLでutf8mb4の設定が正常にされていないとインストール中先に進めないはずなので、正しい記述先で記入されているのではないでしょうか。

udagawa mitsuru への返信

Re: ユーザの一括登録に関して

- hiroki nanba の投稿
ご返事いただき、誠にありがとうございます。

返信遅くなり申し訳ありません。

OSはWindows10

phpのバージョンは7.2.13

DBはMariaDBの10.1.37

moodleのバージョンは3.6.1です。

環境はwindowsにxamppのバージョン7.1.24を入れて動かしています。


moodleのインストールでいくつか設定をファイルに記述した覚えがあるのですが、

それが何だったかすみません、あまり覚えていません。

ですが、インストールの際のチェック項目のうち

https化以外のものはパスするように設定しました。

こちらですと、MySQLでutf8mb4が設定されておりますでしょうか。

hiroki nanba への返信

Re: ユーザの一括登録に関して

- udagawa mitsuru の投稿

環境を用意するのに時間がかかり遅くなりました。結論から言えばWindows + XMAPP版PHP7.1の組み合わせで起こる不具合が原因でした。

XAMPP 7.1.26で確認したのですが、下記ブログ記事にあるとおり fgetcsv() で日本語などが含まれると正常にカンマなどの区切り文字を認識できないためカラム数がおかしくなりエラーとなっています。
http://iamapen.hatenablog.com/entry/2017/08/10/134224

対策としては lib/csvlib.class.php の load_csv_content() 内に setlocale(LC_CTYPE, 'C'); を追加してやれば解消できるようです。エンコードの選択やphp.ini の設定では回避出来なさそうです。PHP 7.2以降のXAMPPではどうなるかは未確認です。

評点平均: お役立ち度: ★★★★★★★ (1)
hiroki nanba への返信

Re: ユーザの一括登録に関して

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

CSVファイルの中身を以下のように変えても同じ結果でしょうか?

username,lastname,firstname,email
sample001,"あああ","いいい",sample001@co.jp
sample002,"ううう","えええ",sample002@co.jp
sample003,"おおお","かかか",sample003@co.jp
Mitsuhiro Yoshida への返信

Re: ユーザの一括登録に関して

- hiroki nanba の投稿
お答えいただきありがとうございます。

提示してくださった内容で行いましたところ、


CSVファイルの読み込み中にエラーが発生しました: 無効なCSVファイルフォーマット - カラム数が一定ではありません!


というエラーは出てこなくなりましたが、

インポートの際にlastnameの列に


あああ,いいい,sample001@co.jp 


のようにusernameの列以外の値がすべて連結して入ってしまい、

firstname、emailの列に値が入らず、結果エラーで取り込めませんでした。

hiroki nanba への返信

Re: ユーザの一括登録に関して

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ありがとうございます。

すでに確認されたと思いますが、下記に投稿された方は優先言語を英語に切り替えてユーザのアップロードに成功されたようです。

[Japanese Moodle: 「ユーザをアップロードする」でのトラブル]
https://moodle.org/mod/forum/discuss.php?d=358420#p1498747

Mitsuhiro Yoshida への返信

Re: ユーザの一括登録に関して

- hiroki nanba の投稿
ありがとうございます。

返信遅れましたが、すでに試しておりましたがダメでした。

ですが、お答えいただきありがとうございます。