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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

PHP

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2129閲覧

ラズベリーパイのGPIOをweb上でしたいのですが

kanan_py

総合スコア7

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

PHP

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/07/18 16:04

Pythonでタクトスイッチの入力がきたら”押されました”と出力するプログラムをかき、
PHPの$execを使いweb上にpythonプログラムを走らせたいのですが
web上で動かそうとするとタクトスイッチを押しても”押されました”と表示されません
Pythonのみで実行したらしっかりと動きますし
ターミナル上でphp プログラム名.phpでやってもしっかりと動いてくれるのですが、
http://IP/プログラム名.php上で実行するとボタンを押しても”押されました”と表示されません
なぜなのか解決策を教えていただきたいです。
以下コードです
Python 2.7
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(14,GPIO.IN,GPIO.PUD_DOWN)
while True:
if GPIO.input(14) == GPIO.HIGH:
print("押されました")
break

PHP(7.3.19)

<?php $command = "python gpio.py"; exec($command,$output); echo '<HTML>'; echo '<head>'; echo '</head>'; echo '<body>'; echo '<PRE>'; foreach($output as $o){ echo "<p>$o</p>"; } echo '<PRE>'; echo '</body>'; echo '</HTML>'; ?>

よろしくお願いします

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

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

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

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

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

guest

回答3

0

まずはエラーを確認しましょう。

エラーを確認出来ない事には、複数の原因が重なっていた場合には永久に正解に辿り着けないことがあります。
php exec エラー辺りで検索してみて
PHP - exec()のエラーハンドリングと標準エラー出力の関係をまとめる
等を参考にして、標準エラーを表示できるように修正します。

以下はよくある原因です(が、まずはエラーを表示できるようになってから試してみてください)

  1. exec()で実行するコマンドと引数はフルパスで書く

web経由で実行する場合、コマンドの実行者はApacheになるので、Apacheユーザーにパスが通っていないコマンドは実行できません。
which pythonでpythonのフルパスを確認して、(/usr/bin/pythonとかだと思います)
$command = "python gpio.py";

$command = "/usr/bin/python {gpio.pyもフルパスで書く}";
としてみてください。

  1. 権限を確認する

gpio.pyをApacheを実行しているユーザーが読み込める権限と場所に置く必要があります。
とりあえず場所はPHPと同じディレクトリにおいてみてそのフルパスを記載するだけでも動く場合が多いと思います。

投稿2020/07/18 17:30

tanat

総合スコア18713

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

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

kanan_py

2020/07/18 17:37

ご回答ありがとうございます $command = "/usr/bin/python {gpio.pyもフルパスで書く}"; とのことですがgpio.pyを/var/www/htmlにおいてある場合は $command = "/usr/bin/python /var/www/html/gpio.py";という感じでよろしいのでしょうか?よろしくおねがいします
tanat

2020/07/18 17:56

まずはエラーを表示してみましたか?
kanan_py

2020/07/18 18:15 編集

はいexec エラーで調べる前に別の方が回答してくれた sudo cat /var/log/auth.logで Mar 25 11:31:33 raspberrypi sudo: pam_unix(sudo:auth): conversation failed Mar 25 11:31:33 raspberrypi sudo: pam_unix(sudo:auth): auth could not identify password for [www-data] というエラーが表示できました
tanat

2020/07/18 18:24

では、そのエラーで検索してみると原因がわかると思います。 sudoに失敗しているのでパスとは関係ない話になります。 sudo経由で実行するのであれば、maaiさんの回答の先のリンクを確認してみてください。
guest

0

ベストアンサー

PHPの権限周りに関する問題であれば、過去に質問が存在しているようです
https://teratail.com/questions/181065

投稿2020/07/18 17:23

maai

総合スコア463

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

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

kanan_py

2020/07/20 03:41

この方法で解決できました! ありがとうございました!
guest

0

権限が足りないのでは?
コマンドをsudoで実行してみてはいかがでしょうか。

投稿2020/07/18 16:10

moto-a

総合スコア17

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

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

kanan_py

2020/07/18 16:15

ご回答ありがとうございます sudoは毎回実行しているのでそれはないかと思われます。。
moto-a

2020/07/18 16:22

$command = "python gpio.py"; ↓ 実際はこうですか $command = "sudo python gpio.py";
kanan_py

2020/07/18 16:30

すいませんそこはsudoしてませんでした 今sudo python gpio.pyに変更しましたが それでもうまくうごきませんでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問