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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

Q&A

解決済

1回答

1379閲覧

【Linux,php】コマンドラインでは正常に出力されるコマンドがexecでは出力されない

maresuke

総合スコア16

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PHP

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

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

0グッド

2クリップ

投稿2019/09/01 06:45

お世話になります。
独力で解決困難な難題に直面したため、皆様のお知恵をお貸しください。

自宅サーバ上のcentos7で、rootユーザーでbitcoindをインストールしました。
インストールが完了して、以下のコマンドを実行すると正常に出力されます。

linux

1# opt/bitcoind/bin/bitcoin-cli -conf=/opt/bitcoind/etc/bitcoin.conf getinfo 2{ 3 "version": 130000, 4 "protocolversion": 70014, 5 "walletversion": 130000, 6 "balance": 0.00000000, 7 "blocks": 344482, 8 "timeoffset": 0, 9 "connections": 8, 10 "proxy": "", 11 "difficulty": 44455415962.3438, 12 "testnet": false, 13 "keypoololdest": 1567239734, 14 "keypoolsize": 100, 15 "paytxfee": 0.00000000, 16 "relayfee": 0.00001000, 17 "errors": "" 18}

ブラウザから閲覧できるように、nginxを入れて以下のphpを作成しました。

php

1<?php 2$cmd="/opt/bitcoind/bin/bitcoin-cli -conf=/opt/bitcoind/etc/bitcoin.conf getinfo"; 3exec($cmd,$arr,$rtn); 4var_dump($arr);

ブラウザ上の出力は、{null}となります。
phpの設定がまずいのかと思い、コードを以下のように書き換えました。

php

1<?php 2$cmd="php -v"; 3exec($cmd,$arr,$rtn); 4var_dump($arr);

正常にphpのバージョン情報が出力されます。
ブラウザ上からPHPでexecすると、root権限がないのが原因かと思い、以下を実行しました。

php

1<?php 2$cmd="echo 'password' | sudo -S /opt/bitcoind/bin/bitcoin-cli -conf=/opt/bitcoind/etc/bitcoin.conf getinfo /root"; 3//$cmd="php -v"; 4var_dump($arr);

やはり{Null}になります。
原因が思いつかないため、なぜ正常に出力されないのかどなたかご教示いただきたいと思います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

詳細は分からないですが、 気になった点がいくつか浮かびました。

  1. execではなくバッククォートで実行したらどうかという点です。

まあ変わらない気はしますが、 一応ですね。

php

1<?php 2 $output = `/opt/bitcoind/bin/bitcoin-cli -conf=/opt/bitcoind/etc/bitcoin.conf getinfo`; 3 var_dump($output)
  1. 第3引数($rtn)の返り値にエラーコードが入っているか知りたいです。0なら正常に実行されたということですが、 エラーが起きているなら違う数字が入っているはずなので、 手がかりになると思います。

  2. Nginxということなので、 おそらく Nginx + php-fpm という構成だと思います。

bash

1systemctl status nginx 2systemctl status php-fpm

などでログを見てみたら手がかりになることがあるかもしません。
また、 journalctl の方も見ておく必要があると思います。

具体的な解決策を提示できませんが、 上記の方法から手がかりを探っていただきたいです。

投稿2019/09/01 17:34

Newbi

総合スコア163

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

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

maresuke

2019/09/02 11:49

ご回答ありがとうございます。 自己解決したわけではないのですが、Newbi様の >第3引数($rtn)の返り値にエラーコードが入っているか知りたいです。 >0なら正常に実行されたということですが、 エラーが起きているなら違う数字が入っているはずなので、 手がかりになると思います。 という御回答が大変参考になり、本日一日原因の追究に励みました。 結果nginxの動作による問題である可能性が浮上したため、結果を記録したうえで再度考えたいと思います。 【そう判断した理由について】 まずbitcoindのバージョンを変えて、純粋なコマンド"bitcoin-cli" -getinfo"の実行からcurlを使用したコマンドの実行まで試して、bitcoin-serverに問題がないことを確認しました。 次にnginxとapacheで環境を用意して試したところ、同じ症状が発生しました。 最後にexec中でcurlを行うコードを試したところ、linuxのシェル上でphp test.phpと実行した場合、rootユーザー、testユーザー、ともにexecの第3引数は0になり正常に返り値が得られたのに対し、apache経由でブラウザから同じphpにアクセスすると、execの第三引数はint(7)となり返り値は0でした。 ブラウザからの表示とコマンドラインの表示では結果が異なるようです。 この結果を踏まえ、もうがんばって少し調査してみます。
Newbi

2019/09/02 13:13

お疲れさまです。 コメントはmarkdown使えるのか分からないですが、 URLを載せるので、 何かしら手がかりになれば幸いです。 Windowsのエラーコードはいらないとは思いますが、 一応ですね。 [PHP return_var codes?](https://stackoverflow.com/questions/2230523/php-return-var-codes) [Appendix D. Exit Codes With Special Meanings](https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/exitcodes.html) [Windowsのエラーコード](http://www.hiteksoftware.com/knowledge/articles/049.htm) 気になるのは 7 が載っていないことですね。 127ならあるのですが。 NginxとApacheということはたいてい権限かユーザーの問題なので、 そこら辺がまだ少し気になりますね... 健闘を祈っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問