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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

Q&A

1回答

761閲覧

レンタルサーバー(WebARENA SuiteX)にて php内の exec で別のphpを実行したい

goodSpeedjp

総合スコア6

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

0グッド

1クリップ

投稿2018/04/27 05:56

編集2018/04/27 06:26

EC-CUBEのメルマガ配信で100通/分、1000通/時 の制約を守りたい。

配信数は 約500を考えています。 数日に1回、送信時間も 10分ぐらいなら問題なし。
EC-CUBEは sleep()でも 1分弱で Gateway Time-out が起こるので、「95通送ったら1分休む」的なアプローチができない。そこで、バックグラウンドでの実行を考えています。
exec(ls)、 exec(whoami)などは実行できました。
同一ディレクトリーに呼出し元ファイル(aa.php)と呼び出せれるファイル(xxxx.php)を作成して xxxx.phpが引数を受け取り実行されるか実験しています。

呼出し元ファイル(aa.php)

<?php $send_id = 1024; $cmd = "/usr/bin/php xxxx.php " . $send_id; exec($cmd, $opt, $return_ver); print_r($opt); echo '戻り値; ' . $return_ver; ?> を実行すると、 Array ( [0] => Content-type: text/html [1] => [2] => Array [3] => ( [4] => [0] => Status: 404 [5] => [1] => Content-type: text/html [6] => [2] => [7] => [3] => No input file specified. [8] => ) [9] => 戻り値; 255 ) 戻り値; 0

呼び出せれるファイル(xxxx.php)

<?php //引数を受け取る $send_id = $argv[1]; //同じディレクトリにテキストファイル作成 $file = 'aaaa.txt'; $text = $send_id . ', ' . $send_id; file_put_contents($file, $text); ?>

試したこと

  • 実験環境:Windows7,Wampserverでは 成功しました。(php のディレクトリーはWindows用に変えました。)
  • /usr/bin/php phpのディレクトリは間違いないと思います。
  • ちなみに $cmd 'php' としても同じでした。

*「戻り値」を見ての感想 Status: 404 や No input file specified を見ると、xxxx.php が見えていないような気がしますが、aa.php と xxxx.phpは同じディレクトリーにあります。
$cmd = "/usr/bin/php xxxx.php " . $send_id; を
$cmd = "/usr/bin/php ./xxxx.php " . $send_id; としても同じでした。

  • xxxx.phpを直接 ブラウザーから呼び出すと そのディレクトリーにaaaa.txtファイルが生成されています。

テクニカルサポートセンター(辛子 様)から回答済

心の籠った 丁寧なお返事をいただきました。官舎!
「ご回答差し上げることができません。ご了承をお願いいたします。
なお、SuiteXは共用レンタルサーバのため、スクリプト実行時間に制限を設け
ております。明確な数値は非公開となりますが、その制限に抵触している可能性
がございます。」
・・・・・テキストファイル1個作るだけで 「スクリプト実行時間に制限を設け
ております・・・・」

$cmd = "nohup php xxxx.php " . $send_id . " > /dev/null &";
とできれば、バックグラウンド処理としては 優秀なのでしょうが まず、引数を渡し別phpを実行したいです。
なにぶんPHP初心者です、よろしくお願いします。

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

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

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

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

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

m.ts10806

2018/04/27 06:01

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わります。
m.ts10806

2018/04/27 06:02

斜め読み程度ですが、実際にサーバーで同コマンドを実行して正しく呼びたいPHPを呼べますか?
goodSpeedjp

2018/04/27 06:30

レンタルサーバー(WebARENA SuiteX)ではコマンドを実行できないと思います。phpはページから呼び出しています。
m.ts10806

2018/04/27 06:56

コマンドを実行できないサーバーでコマンドで実行しようとするのって矛盾してませんか?
goodSpeedjp

2018/04/27 08:22

「exec(ls)、 exec(whoami)などは実行できました。」と書きましたが これはコマンドを実行したことになりますか。
退会済みユーザー

退会済みユーザー

2018/04/27 10:53

レンタルサーバー(共用系)はバックグラウンドプロセスであっても時間制限はあります。㋚では一分、GMO系列の某所では30秒ですがそれを過ぎた場合任意のタイミングでkillされます。
goodSpeedjp

2018/04/27 12:46

貴重な情報ありがとうございます。サポート窓口では 時間は教えてもらえませんでした。参考にさせていただきます。
guest

回答1

0

CLI版のPHPで実行する必要があると思いますが、/usr/bin/phpがCLI版ではないのかもしれません。

ご参考: PHP をコマンドラインから使用する

CLI版かどうかは

php

1$cmd = "/usr/bin/php -v"

を実行してみて、出力結果にcliが含まれているかどうかで判断できそうです。

レンタルサーバーによっては、CLI版が別に入っている場合、php-cli, phpcli, php72cliなどのコマンド名になっていたりしますが、入ってないところもあるかもしれません。

投稿2018/04/27 08:20

編集2018/04/27 08:27
Lulucom

総合スコア1899

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

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

goodSpeedjp

2018/04/27 08:39

ありがとうございました。 $cmd = "/usr/bin/php -v"で実行してみましたが、同じ結果でした。ちなみに、WebARENAの「サイトマネージャー」-「コマンド検索」では php-cli,phpcliとも 「見つかりませんでした。」となりました。 と言っても 私は cli も知りませんでした。続けて よろしくお願いします。
Lulucom

2018/04/27 09:25

$cmd = "which php"; $cmd = "whereis php"; $cmd = "whatis php"; などをそれぞれ試してみると、何か手掛かりになるかもしれません。
goodSpeedjp

2018/04/27 10:44

ありがとうございました。 試してみました。結果は下記の通りです。わかりませんが、楽しいですね。 Array ( [0] => /usr/bin/php ) [which 戻り値]; 0 Array ( [0] => /usr/bin/php [1] => php: /usr/bin/php /etc/php53.d /etc/php.ini /etc/php.d /usr/local/bin/php /usr/share/man/man1/php.1.gz ) [whereis 戻り値]; 0 Array ( [0] => /usr/bin/php [1] => php: /usr/bin/php /etc/php53.d /etc/php.ini /etc/php.d /usr/local/bin/php /usr/share/man/man1/php.1.gz ) [whatis 戻り値]; 127
Lulucom

2018/04/27 11:16

なんか思ってたのと違いました。でもバージョンは結構古いんですね。 WebARENAの「サイトマネージャー」-「コマンド検索」とやらで php53cli, php53-cli など検索しても見つからないでしょうか。
goodSpeedjp

2018/04/27 12:44

お時間 割いていただいて ありがとうございます。 バージョンの古さも意識外でした。 WebARENAの「サイトマネージャー」-「コマンド検索」って下記の感じです。あんまり使ったことがないもんで・・・ php53cliは見つかりませんでした。 php53-cliを探すと下記のメッセージが赤字で表示されました。 ----------------------------------------------------------------------------------------- 英数字以外の文字が入力されています。記号やスペースを入れずに入力して下さい。 UNIXコマンドのパスを検索します。 自作のCGIでUNIXコマンドを呼び出してご利用になる場合はこちらでコマンドのパスを調べることができます。 コマンド名 [ここにテキストボックス] 例 : sendmail perl nkf など 「入力」「リセット」(2つボタンが並んでいます。)
Lulucom

2018/04/27 13:34 編集

そうなんですね。 今さら言うのもなんですが、やはり、共用レンタルサーバーでやるには無理があるのでしょうね。 色々制限があるのも、やって欲しくないからでしょうし。 asahina1979さんが書かれてる制限も気になります。 SuiteXで提供されるメール機能にメーリングリストがあるようですが、そういうものは利用できないのでしょうか。SuiteXやEC-CUBEをよく知らないので的外れなこと書いてたらすみません。
退会済みユーザー

退会済みユーザー

2018/04/27 14:35

書いてある場所、規約ではないけど止めるよっていってるな所属社員が https://blog.arena.ne.jp/vps/210 共用型のレンタルサーバーは、1台のサーバーを多数(数十~数百)のユーザーで共用するようになっています。そのため、場合によっては他のサーバーの影響を受けてしまうこともあり得ます。 例えば、同じサーバーを使っているあるユーザーが、非常に負荷が高い処理を行っているとします。すると、その負荷の影響が同じサーバーの他のユーザーにおよび、処理が遅くなる、といった現象が起こることがあります。逆に、自分が他のユーザーに影響を与えてしまい、利用を一時的に止められてしまうといったこともあります。例えば、処理に時間がかかるプログラムを実行すると、CPUやメモリを長時間占有することになり、他のユーザーに影響を与えてしまいます。そのため、そのようなプログラムは一定時間で強制的に終了させられることがあります
退会済みユーザー

退会済みユーザー

2018/04/27 14:37

規約に準ずる場所 https://web.arena.ne.jp/support/suite1/manual/cgi_ssi/ UNIX系のOSには指定した時間にプログラムを自動実行させるcronがございますが、WebARENA Suiteのサーバーではcronはご利用頂けません。 また、1回の動作中にCPUを10秒以上使用するCGIは強制的に動作が終了される仕様になっています。 サーバーにプロセスを常駐させる事は出来ませんので、継続的に動作し続けるプログラム(デーモンなど)をご利用頂く事は出来ません。
退会済みユーザー

退会済みユーザー

2018/04/27 14:37

10秒だってさw
Lulucom

2018/04/27 23:51

> ㋚では一分、GMO系列の某所では30秒 他のところより厳しそうですね。
goodSpeedjp

2018/04/28 01:52

Lulucomさん「今さら・・」じゃないんですよ、初心者ながらにできないだろうなあと思いながら 助けを求めてしまいました。それは 皆様の力量の問題ではなく、レンタルサーバーしかも月に数千円しか払ていない私の環境のせいです。したがって いったんこの問題は破棄して、環境を整えてから別方法で解決したいです。又 asahina1979さん 貴重な情報ありがとうございました。皆様 大変お世話になりました。と書いたところで 破棄じゃなくて解決で良いのでしょうか。 そうだ「できないことが わかった」解決だ! いくらでも方法は ありますよ。
Lulucom

2018/04/28 02:09

別方法で解決されたらそれを自己解決として回答されればよろしいかと思います。また別の回答を貰えるかもしれませんしね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問