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

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

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

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

1054閲覧

ユーザーの追加ができない

sake

総合スコア52

PHP

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

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2019/04/26 16:04

OS…Centos7
Database…Postgresql9.5
PHP…7.5
データベースに登録されているユーザーをメールユーザーとして登録するプログラムを作っていますが、上手くいきません。
以下は、実行しているプログラムです。

PHP

1#!/usr/bin/php 2<?php 3 //タイムゾーンの初期化 4 date_default_timezone_set('Asia/Tokyo'); 5 $FILE_P="/etc/passwd"; 6 //データベースと接続 7 $pg1_conn = new PDO("pgsql:host=XXX.XXX.XXX.XXX;port=5432;dbname=database;user=user;password=pass"); 8 $query = "SELECT table.* "; 9 $query .= "FROM table "; 10 $query .= "WHERE (table.chk = -1)"; 11 echo $query."\n"; 12 //SQLクエリ実行 13 $stmt = $pg1_conn->query($query); 14 $stmt->execute(); 15 while(1){ 16 $result = $stmt->fetch( PDO::FETCH_ASSOC ); 17 if ($result == false) { 18 break; 19 } 20 $user_name = $result['user_name']; 21 $cmd = 'txt=`cat '.$FILE_P.' | grep -e "^'.$user_name.':"`'; 22 exec($cmd); 23 $user_id = $result['user_id']; 24 $group_id = $result['group_id']; 25 $home_dir = $result['home_dir']; 26 $cmd = 'echo "USER_ID:${'.$user_id.'} GROUP:${'.$group_id.'} HOME_DIR:'.$home_dir.'"'; 27 exec($cmd); 28 $cmd = 'cp -rf /etc/skel/* '.$home_dir.'/'; 29 exec($cmd); 30 $cmd = 'chown -R '.$user_name.' '.$home_dir; 31 exec($cmd); 32 $cmd = 'chmod 711 '.$home_dir; 33 exec($cmd); 34 $cmd = 'chgrp -R '.$user_name.' '.$home_dir; 35 exec($cmd); 36 $cmd = 'usermod -s /bin/bash '.$user_name; 37 exec($cmd); 38 } 39 $pg1_conn = null; 40?>

実行結果は、

sh: USER_ID:${} GROUP:${} HOME_DIR:/home/userA: 誤った代入です chown: ユーザ指定が不正: `userA' chgrp: 無効なグループ: `userA' usermod: ユーザ 'userA' は存在しません

テーブルの「user_id」「group_id」はNullです。
以前、テキストファイルをシェルスクリプトで読み込んでユーザー登録していたときは、USER_ID、GROUPは自動で設定されました。
そのときのテキストデータは
userA:passA:::userA:/home/userA:/bin/bash
userB:passB:::userB:/home/userB:/bin/bash
userC:passC:::userC:/home/userC:/bin/bash
このようなものです。
どなたか、助けていただけませんか。よろしくお願いします。

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

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

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

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

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

otn

2019/04/26 16:09

とりあえず、exec せずに全部ファイルに書いてみて、中身を見たらどうでしょうか。
m.ts10806

2019/04/27 00:57

php7.5は記載間違いでは?
sake

2019/04/27 02:56

すみませんでした。 PHP5.4でした。 Centosと勘違いしていました。 ところで、 > exec せずに全部ファイルに書いてみて、中身を見たらどうでしょうか。 とありますが、具体的に中身を見た後、どのようにしたらいいでしょうか。 PHPに関しては、初心者な者ですので、ご指導よろしくお願いします。
m.ts10806

2019/04/27 03:54

質問は編集できますので適宜調整いただければと。 ファイルに書き出せばコマンドが正しいものかわかるので、という意味だと思います。 ※ただ、それ以前にPHP5.4というかなり古い環境なので、そのバージョン前提だとアドバイスは難しそうですが
otn

2019/04/27 05:25

> 具体的に中身を見た後、どのようにしたらいいでしょうか。 見たら間違いが分かると思うので、そこを修正すれば良いと思います。
guest

回答1

0

自己解決

PHPでデータベースに登録されているユーザーをメールユーザーとして登録するのは、諦めました。
時間も迫っていますし、私の技量ではこれ以上手間を掛けても無理なので、安易な方法で処理を完結しました。
その方法は、PHPでデータベースのユーザーを呼び出し、メールユーザー.txtを作成する。
そのメールユーザー.txtを今まで使っていたユーザー登録.shをPHPから起動させました。
あまり、スマートな方法ではありませんが、何とか解決することができました。
アドバイスいただいた皆様、ありがとうございました。

投稿2019/04/30 04:47

sake

総合スコア52

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問