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

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

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

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

Q&A

解決済

1回答

3246閲覧

PHPのスクリプト実行時にパスワードを入力する方法について

tototomoo

総合スコア28

PHP

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

1グッド

0クリップ

投稿2016/02/24 05:27

以下を満たすPHPスクリプトを作成したいのですが何か実装方法などありますでしょうか?

  • パスワード入力が必要
  • php hoge.php &としてバッググラウンド実行させたい

バッググラウンド実行させるとスクリプト実行時にパスが入力できなくて困っています。
php hoge.php -p passでやるにしてもhistoryに残ってしまったりsyslogに書かれてしまいそうで他に良い方法はないでしょうか?

crhg👍を押しています

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

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

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

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

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

maisumakun

2016/02/24 06:17

PHPのようなテキストで書くスクリプトに、シェル実行でもパスワードを要求する必要がある、その背景事情を教えていただけないでしょうか。
退会済みユーザー

退会済みユーザー

2016/02/24 09:56

管理者権限のあるユーザーを複数人で使いまわしたりしなければ、管理者ユーザーだけがアクセスできるよう設定すれば解決しそうな気がします。
tototomoo

2016/02/25 10:27

m6uさん、maisumakunさん コメントありがとうございます。 説明ができないやんごとなき事情がありまして対応する必要があります。 アクセスの見直しも色々難しいです。。
guest

回答1

0

ベストアンサー

パスワード入力後にforkする方法はいかがでしょうか。

PHP

1<?php 2// 認証を行う関数。実装して下さい。 3function auth($password){ 4 return true; 5} 6 7echo 'パスワードを入力してください:'; 8 9system('stty -echo'); // ユーザー入力の表示を消す 10$password = trim(fgets(STDIN)); 11system('stty echo'); // 以降の表示を戻す 12echo "\n"; 13 14if(!auth($password)){ 15 echo "認証エラー:パスワードが違います。\n"; 16 exit(-1); 17} 18 19unset($password); 20 21if(($pid = pcntl_fork()) == -1){ 22 exit(-2); 23}else if($pid > 0){ 24 // 親プロセス 25 echo "処理を開始しました。\n"; 26}else{ 27 // 子プロセス 28 fclose(STDIN); 29 fclose(STDOUT); 30 fclose(STDERR); 31 // 子プロセスで何か出力したいならDBやファイルに書き込むか他の通信手段を使う 32 33 sleep(10); // ここにhoge.php本来の処理を書く 34}

スクリプト起動
認証後、子プロセスが生まれ、親プロセスは終了します。

csh

1$ php hoge.php 2パスワードを入力してください: (パスワード入力) 3処理を開始しました。

子プロセス生存確認
上記のコードの場合10秒後に勝手に終了します。

csh

1$ ps 2 PID TTY TIME CMD 322541 pts/1 00:00:00 bash 423213 pts/1 00:00:00 hoge.php 523214 pts/1 00:00:00 ps

強制終了したい場合

csh

1$ kill 23213

尚、完全にフォアグラウンドで動作するスクリプトとして書き、パスワード入力後にバックグラウンドに送る方法もあります。

PHP

1<?php 2// 認証を行う関数。実装して下さい。 3function auth($password){ 4 return true; 5} 6 7echo 'パスワードを入力してください:'; 8 9system('stty -echo'); // ユーザー入力の表示を消す 10$password = trim(fgets(STDIN)); 11system('stty echo'); // 以降の表示を戻す 12echo "\n"; 13 14unset($password); 15 16if(!auth($password)){ 17 echo "認証エラー:パスワードが違います。\n"; 18 exit(-1); 19} 20 21sleep(10); // ここにhoge.php本来の処理を書く

スクリプト起動
認証後、処理を停止させる。

csh

1$ php hoge.php 2パスワードを入力してください: (パスワード入力) 3^Z (Ctrl+Z入力) 4[1]+ 停止 php hoge.php

バックグラウンドに送る

csh

1$ bg 2[1]+ php hoge.php &

投稿2016/02/24 20:53

ieee1394a

総合スコア26

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

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

tototomoo

2016/02/25 10:33

ご回答ありがとうございます。検討したいと思います。 またすごく無理やりですがhoge.phpをラップするshellを用意してpassをパイプで渡すという方法もあるようでした。 echo $password | php hoge.php -u $username あまり綺麗な方法ではありませんが合わせて検討してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問