Raspberry PiをApache httpサーバとして、ブラウザからPHP内のPythonコードを走らせてGPIOを動かそうとすると実行出来ないことが発生しました。この記事ではその解決方法を紹介しています。
原因
RaspbainなどのDebian系のLinuxでは、ApacheがPHPを実行する際の実行ユーザはwww-dataとなっています。このwww-dataというユーザ権限では、GPIOを動かすことが出来ないことが原因のようです。
対策
Apache2がPHPを実行する際の実行ユーザを、Raspbianのデフォルトユーザであるpiに変更すると、PHP経由でもGPIOをコントロールすることが出来ました。次のように/etc/apache2/envvarsを編集します。
/etc/apache2/envvarsの編集
Apache2がPHPを実行する際の実行ユーザは、/etc/apache2/envvars に設定されています。ここのwww-dataの箇所をpiに変更します。作業前にバックアップをとっておきましょう。
その後、Apache2を再起動します。
この他の対策として、Apacheのデフォルトの実行ユーザwww-dataに、GPIOを動かす権限を与える方法もあるかと思います。
最後までお読み頂きありがとうございます。