PHPプログラムないで別PHPを呼び出し戻り値を受け取ろうと考えています。


test1.php-------------
<?php
print "<html><body>\n";
$return_data= exec(/usr/local/bin/php ./test2.php?param1=1¶m2=2);
print $param1."+".$param2."=".$return_data;
print "</body></html>";

test2.php------------------
<?php
$return_item = $param1 + $param2;
print $return_item;
?>

のように、test1.phpからパラメータを渡し、
test2.phpで計算をして答えをtest1.phpに返す
プログラムを作成しました。

test1.phpからtest2.phpをパラメータをつけて渡すのが
うまくいきません。

execではパラメータをつけることはできないのでしょうか?もしくは他の方法はないでしょうか?

functionやincludeではなく上記の方法で行いたいと思っております。

お手数ですが、アドバイスお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんにちは。



CやJAVAやっていれば、すぐわかるのでしょうが・・・。
コマンドライン上からパラメータを渡す方法を考えてください。

PHPのようなC言語ライクな言語では慣用的に、

argv や argc といった「arg」が付く変数名が特別な扱い方をされます。
JAVAだと args ですね。
で、PHPだと、
$argv と $argc になります。

$argv は、引数で渡されたパラメータの配列です。
$argc は、パラメータの個数が格納されています。

パラメータの渡し方は、

"/usr/local/bin/php ./test2.php aaa bbb"

のように、半角で区切った形になります。

GETのように、スクリプトのあとに aaa=bbb&ccc=ddd と渡すと
「&」以降が特殊な値ととられてしまいます。

具体的にいうと、 test2.php のパラメータを受け取る部分は以下のようになります。

$param1 = $argv[1];
$param2 = $argv[2];

で、$argv[0] には、./test2.php が入っています。(実行させたいスクリプトへのパス)
また、$argc には、3 が入っています。(配列$argv の要素数)

次に、実行結果を受けとる方法ですが、

test2.phpから、実行結果を受け取りたい場合は、exec 関数は、他の言語の exec 関数より便利に出来ています。

test1.php を以下のようにしてください。

exec("/usr/local/bin/php ./test2.php aaa bbb" , $rec , $status);
if ($status != 0){
print "失敗しました";
exit(1);
}

test2.php は、

print $return_item;
exit();
?>

とした場合、
$rec に print で出力した結果が入っていると思います。

※注意

実をいうと $rec には意図した結果以外に色々なデータも入っています。
たとえば、test2.php で、

$aaa = "aaaa";

print $aaa;

とした場合、
$rec には、

$rec[0] : Content-type: text/html; charset=EUC-JP
$rec[1] : X-Powered-By: PHP/5.0.2
$rec[2] :
$rec[3] : aaaa

という値が入っています。
$rec[0] から $rec[2] までは環境によって違います。つまり、test2.php から受け取ったデータが $rec のどの要素に入っているかは、環境によって違ってきますので、まず、


exec("/usr/local/bin/php ./test2.php aaa bbb" , $rec , $status);
if ($status != 0){
print "失敗しました";
exit(1);
}
print_r($rec);


で、確認してみてください。
    • good
    • 0

・単純に、test2.phpに計算だけする関数を定義して、それをtest1.phpで呼び出す。

だったらtest1.phpにその関数を書いた方がいいんだけど。

・test1.phpからtest2.phpへリダイレクトする。リダイレクトする際に、パラメータを付ける。それからまた、test2.phpからtest1.phpへリダイレクトする。あんまり意味はないけど。

この場合、何をしたいのかがわかれば、的確に答えられると思います。
あと、「param1=1」の後が文字化けしてますけど、「param1=1&param2=2」ってなってますよね?それから、test2.phpでGET値を取得していないようですが、大丈夫ですか?GET値=変数名は古い仕様です。$_GET["param1"]で取得してみてください。あー、あと、「print $return_item」ってやっても、test1.phpに値は返らないんじゃないかな。
    • good
    • 0

$return_data= exec("/usr/local/bin/php ./test2.php param1=1 m2=2");



コマンドを呼んでるようなので、、「?,&」でなくて「 (半角スペース)」でどうでしょう?

また、「./test2.php」のような相対パスでなくて、絶対パスで書いたほうが確実かと思います
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q店の呼び出しベルの購入、仕訳は、

個人事業主です、店の呼び出しベルの購入、
仕訳は次の1、2 どちらでしょうか。

 1, 工具器具備品 3,000 / 現 金 3,000
 2,  消 耗 品  3,000 / 現 金 3,000

よろしくお願いします。

Aベストアンサー

『2』ッ!!

Qprint "{$data[$i][$j]}";の $dataと「直接関係」がある

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都のデータを格納します。
$data[3][2] = 19;
$data[4][0] = "福岡";
$data[4][1] = 27;//$data[4][●]に福岡のデータを格納します。
$data[4][2] = 22;

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>都市名</th>
<th>最高気温</th>
<th>最低気温</th>
</tr>

<?php

for($i=0; $i<count($data); $i++){
print "<tr>";
for($j=0; $j<count($data[0]); $j++){
print "<td>{$data[$i][$j]}</td>";//配列の要素を出力する。
}
print "</tr>\n";
}

?>

</table>

</body>
</html>
以上ですが・・・だんだん難しくなってきました!
 さて
  print "<td>{$data[$i][$j]}</td>";の $dataと「直接関係」があるところは
 1) for($j=0; $j<count($data[0]); $j++){  
 2)$data[0][0] = "東京";~$data[4][2] = 22;
  の1)2)のどちらと「直接関係」があるのでしょうか?
 以上よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都の...続きを読む

Aベストアンサー

> の1)2)のどちらと「直接関係」があるのでしょうか?

No.1さんと同じく質問の意味が理解できません。
わかり易く補足いただいた方が良いかと思います。



”の1)2)のどちらと「関係」があるのでしょうか?” というご質問であれば

”どちらとも関係あります” という回答になります。

Q電話の呼び出しが遅くて・・。

携帯から自宅の固定電話に電話すると以前は発信後1秒後くらいに固定電話の呼び出しベルが鳴ったのですが、光回線にしたとたんに呼び出しまでの時間が4秒くらいになってしまいました。  これは仕方ないのかもしくは何か方法があるのかおしえてください。ちなみに電話機は
以前はサンヨー製、光にしてからはパナソニック製です。

Aベストアンサー

通常、固定電話は、マイナス48ボルトが流れています。
ベルが鳴るときは、CR(コンテニュ・リング)で、マイナス75ボルトで鳴らします。

残念ながらVoIP(ボイス・オーバーIP)には、そのようなベルを鳴らすための仕組みはありません。

電話機を変えても一緒です。
IP電話は、別途専用装置から電気を流してベルを鳴らしています。

Qループ forに関して for($i = $num ; $i < $max ; $i++)

phpの初心者です。

以下の記述ですが、上手にループしてくれません。

for($i = $num ; $i < $max ; $i++)

$num の部分に「0」を入れると稼動するのですが、変数を代入したいというのが希望です。

方法があったらご教授下さい。

Aベストアンサー

もう一度全体のコードを見直してみてください。
問題なく動作します。

$num = 1;
$max = 5;

for($i = $num ; $i < $max ; $i++){
echo $i."<br />";
}

Q固定電話のベルが、1回だけ鳴るのはなぜでしょう?

固定電話のベルが、1回だけ鳴るのはなぜでしょう?

時々深夜、家の固定電話に電話が来るはずもない時間帯に、電話の呼び出し音が1回だけ鳴って切れることがあります。

固定電話なのでワン切りとも思えないし、そもそも夜中2~3時です。
いたずらでかけてくる人の心当たりもまったくありません。

なぜでしょう?
電話会社のバグか何かのようなものですか?

Aベストアンサー

いたずら電話で無いのであれば、NTTの保守点検のせいです。

電話局の交換機を作業の途中や最後にリセットする時に電気信号が1度だけ流れて作業してた電話回線の周辺の1ブロック(48機)に同時に鳴動の信号が流れます。それが1回の呼び出し音となります。
昔はチーンと鳴るだけだったんですが、今は電話機のほーが色々鳴くから(^^;

Q$_REQUEST とphpファイルでphp?item=500&xt=100とか言うああいうページと関連があるのでしょうか

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1437399
で$_REQUEST の理解を深めたく質問中ですが
$_REQUEST の[ ]の中の変数は結局、
?item=500&xt=100の部分を作るためのものなんでしょうか
とくにDBとの関連で必要でしょうか

たとえば
stage.phpのコードで
<?php
…$name=$_REQUEST['name']…
if($name='a'){echo'<html>a</html>'}
if($name='b'){echo'<html>b</html>'}
stage.php?name=a
stage.php?name=b
というページができるという理解でしょうか?
(すいません、質問に個所でしてしまって)

Aベストアンサー

質問を読む限り、大きな勘違いをしているように思います。

$_REQUEST変数は、スクリプトの外部から値を得るための変数です。例えばstage.php?a=1 というリクエストがあったら、stage.php内の$_REQUEST["a"]に1が入っています。ただそれだけの変数です。

外部から値を得る変数は他にも$_POST,$_GET,$_COOKIEなどあります。これは例えばPOSTメソッド送られたパラメータ、COOKIEの値など、外部の値の種類によって変数が違います。$_REQUEST変数はこれらが全部含まれているんです。仮に$_POST["a"]に1、$_COOKIE["b"]に2という値が入っていたとすると、#_REQUEST["a"]=1,$_REQUEST["b"]=2という値が同時に現れます。

個人的にはほとんど使わない変数ですね。なぜならその値がどこから来たのかはわからないので、下手をするとセキュリティホールになり得るからです。$_REQUEST変数を研究する前に、$_POST,$_GET,$_COOKIEあたりを先に理解した方がいいと思いますし、スクリプト上の実装もこれらを使った方が良いと思います。

どこまで噛み砕いて書けばいいのかわからないのですが、これでもわからなければ初心者向けの入門本で基本的なところを学んだ方が良いかも知れません。

質問を読む限り、大きな勘違いをしているように思います。

$_REQUEST変数は、スクリプトの外部から値を得るための変数です。例えばstage.php?a=1 というリクエストがあったら、stage.php内の$_REQUEST["a"]に1が入っています。ただそれだけの変数です。

外部から値を得る変数は他にも$_POST,$_GET,$_COOKIEなどあります。これは例えばPOSTメソッド送られたパラメータ、COOKIEの値など、外部の値の種類によって変数が違います。$_REQUEST変数はこれらが全部含まれているんです。仮に$_POST["a"]に1、$_COOKIE...続きを読む

Q再帰呼び出しを使いますか?

趣味でプログラムをかじる程度なのですが、今まで自分はプログラムを作っていて再帰呼び出しを使ったことがありませんが、みなさんは良く使うのでしょうか?

なかなか再帰呼び出しを考えるのが難しく自分のプログラムで適用すると良いところなど思い浮かびません。
再帰呼び出しをすると何か利点とかあるのでしょうか?
再帰呼び出しで無いと作るのが難しいプログラムなど今までありましたか?あればどんな処理だったかなど教えてください。

Aベストアンサー

すでにいっぱい回答がついていますが、わたしもつられてしまいました。
思うに、「1つ処理するごとに処理対象が減っていく」ものはループがとくいで、
- 処理対象全体をつかめない
- 1つ処理すると、残りの処理対象が増えたりする
- しかも増えた分は、元のものと構造が似ている
という場合に再帰呼び出しの方が簡単にかけるんだと思います。
みなさんが挙げている階層フォルダみたいなツリー構造は、まさにこの典型例ですね。

Qベルについて

ベルについて

自転車のベルは危険回避のときのみ鳴らせるそうで、
歩行者などが道を塞ぎ邪魔だからと言って鳴らすことはできないそうです。
私の自転車にはもともとついていませんでしたし、
使う機会もまず無いので装着していません。
皆さんベルは装着しているのでしょうか?
ベルを鳴らすのはどんなときですか?
ベルの必要性不要性やベルを使用した経験などを教えてください。
よろしくお願いいたします。

Aベストアンサー

ベルは、正直申しまして、鳴らす機会はゼロですねぇ・・・

道路交通法第54条第1項では、「警笛鳴らせ」の標識がある場所ではベルを鳴らさないといけないことになっておりますが、しかしそんな所でチーンと鳴らしたところで、他の車に聞こえるとも思えませんし、自転車にとっては全く意味のない規定に感じます。

また、危険を回避するために鳴らすというケースも考えられますが、ベル鳴らすより先に「ウワーッ!」という叫び声が出てくると思います(笑)


自転車は、ベルを鳴らす機会が実質的にゼロのように感じてますので、個人的には、別にベルはいらないなぁと思ってます。
ただ、鳴らす機会がゼロとは言え、条例でベルが付いてない自転車に乗ってはいけないこととなっておりますし、ベルを付けることで不都合が生じるわけでもありませんので、とりあえず付けておいてますが。

(東京都の場合)
東京都道路交通規則第8条 法第71条第6号の規定により、車両(中略)の運転者が遵守しなければならない事項は、次に掲げるとおりとする。
(9) 警音器の整備されていない自転車を運転しないこと。
(罰則は5万円以下の罰金となっております。)


なお、「歩行者などが邪魔だからと言って鳴らすことはできない」ことの根拠が道路交通法第54条第2項にあることは、No.6さんのとおりです。

(警音器の使用等)
第54条
2 車両等の運転者は(中略)警音器を鳴らしてはならない。ただし、危険を防止するためやむを得ないときは、この限りでない。
(罰則は、「2万円以下の罰金又は科料」となっております。)

これについては、先の「警笛鳴らせ」とは異なり、歩道においてこの規定を守ることにより、歩行者の保護が図られることになりますので、自転車にとっても十分意味のある規定と感じております。
なにしろ、あなたや私も含め、誰しもが多かれ少なかれ歩行者として道路を利用しているわけですから。


あと、そもそも自転車は車道をメインに利用した方がはるかに利便性が高いので、歩行者が道を塞ぐような状況でしたら、とっとと車道に移動した方が良いんじゃないかと思います。

ベルは、正直申しまして、鳴らす機会はゼロですねぇ・・・

道路交通法第54条第1項では、「警笛鳴らせ」の標識がある場所ではベルを鳴らさないといけないことになっておりますが、しかしそんな所でチーンと鳴らしたところで、他の車に聞こえるとも思えませんし、自転車にとっては全く意味のない規定に感じます。

また、危険を回避するために鳴らすというケースも考えられますが、ベル鳴らすより先に「ウワーッ!」という叫び声が出てくると思います(笑)


自転車は、ベルを鳴らす機会が実質的にゼロのように...続きを読む

Q$test = array(80,60,22,50,75);を(22,60,80,50,75);変更

https://oshiete.goo.ne.jp/qa/9231613.html から
 $test = array(0=>80,1=>60,2=>22,3=>50,4=>75); のご回答をもとに
$test = array(80,60,22,50,75);を$test = array(22,60,80,50,75);に変更しました。
 結果が”最高得点22です。”と予想しておりました・・しかし、変わらずに
 ”最高得点は80です。”のままでした!?この場合ですが、考え方はとしまして、
 $test = array(2=>22,1=>60,0=>80,3=>50,4=>75);となったので、以上の結果となっ
との考えで間違いないでしょうか?
 よろしくお願いいたします。

Aベストアンサー

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $valueも関係性を示しているだけなので、
foreach文は以下のようにも記述できます(紛らわしいのでこんな書き方しませんが)。

foreach($test as $aaa => $bbb){
if($max < $bbb) $max = $bbb;
}

///////////////////////////////////////////

過去の質問
https://oshiete.goo.ne.jp/qa/9200257.html
でも答えましたが、

例えば配列
array("22","80", "75","60","50")
はキーを何も指定しない場合以下と同じになります。
array('0' =>"22",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"50");

array("50","80", "75","60","22")
と並び変えても
array('0' =>"50",'1' =>"80", '2' =>"75",'3' =>"60",'4' =>"22");
のままです。

表現は未熟ではありませんが、Campus2さんがどのような思考をしているのかという意味で
国語の問題に近いと言っただけですのでご了承を〜

ちなみに今回のはキーに関しては何でもいいのです。
以下のコードでも最高点は80と出力されます。

<?php
//$test = array(80,60,22,50,75);
$test = array("apple"=>80,"tomato"=>60,"banana"=>22,"milk"=>50,"cake"=>75);

$max = 0;

foreach($test as $id => $value){
if($max < $value) $max = $value;
}

print "<p>最高得点{$max}です。</p>";
?>

また$id => $value...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報