lang
1<?php 2 if (isset($_POST["pwm"])) { 3 exec("gpio pwm 18 $_POST["pwm"]"); 4 } else { 5 } 6?>
現在jQuery-ajax(post)から受け取った変数でexecを実行しようとしているのですが
「"」が原因でうまく動きません><
"pwm"の「"」を取ればうまくいくのですが
そうすると変数が取れないのでダメなんです
どうか解決方法を教えて下さいm(_ _)m
動作環境は
raspberry pi b+
gpio18(pwm)
です
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
exec("gpio pwm 18 $_POST["pwm"]");
↓
exec("gpio pwm 18 " . $_POST["pwm"]);
にしてみたらいかがでしょうか?
投稿2015/04/27 09:24
総合スコア106
0
ベストアンサー
回答とは無関係ですがいくつか指摘が。
まず、実行する処理が無いならば、else
は省略してしまったほうが良いでしょう。
また、$_POST
を直接exec
に渡すことは非常に危険です。
(Ajaxからの送信であろうと)$_POST
はいくらでも改変できますので、ホワイトリスト等による検証を行ってください。
PHP - $_GET, $_POSTなどを受け取る際の処理 - Qiita
普通に、結合演算子ではだめでしょうか?
lang
1<?php 2if (isset($_POST['pwm'])) { 3 exec('gpio pwm 18 '.$_POST['pwm']); 4}
どうしても埋め込みたいなら、以下のようにして埋め込めます。
{}
が無いとうまく動きません。
lang
1<?php 2if (isset($_POST['pwm'])) { 3 exec("gpio pwm 18 {$_POST['pwm']}"); 4}
ただし、上記のいずれも、コマンドに直接文字列を指定している点で問題です。
Raspberry Piには詳しくないので、gpio
コマンドがどのようなものなのかは把握できていませんが…
以下のような実装にした方がより良いでしょう。
コマンドに渡している文字列$_POST["pwm"]
を単一の引数と仮定し、文字列をコマンドの引数として安全になるようescapeshellarg関数でエスケープしています。
lang
1<?php 2if (isset($_POST['pwm'])) { 3 exec('gpio pwm 18 '.escapeshellarg($_POST['pwm'])); 4}
ただし、これも「より良い」実装でしかありません。
コマンドに渡す文字列がある程度決まっているならば、その「決まっている文字列」のみを受け付け、他をエラーとする実装が最も適切です。
(これは、ホワイトリストと呼ばれる手法です)
前述したように、gpio
コマンドについて詳しく知らないので、これ以上の回答は出せません。
投稿2015/04/27 09:58
編集2015/04/28 01:46総合スコア697
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/28 01:48
2015/04/28 11:27
2015/04/28 11:52
2015/04/28 12:17
2015/04/28 21:27
2015/04/29 00:19
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/27 12:50