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

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

ただいまの
回答率

90.61%

  • PHP

    19882questions

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

  • Webサイト

    1047questions

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

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 205

goodSpeedjp

score 2

 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初心者です、よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • goodSpeedjp

    2018/04/27 17:22

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

    キャンセル

  • asahina1979

    2018/04/27 19:53

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

    キャンセル

  • goodSpeedjp

    2018/04/27 21:46

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

    キャンセル

回答 1

0

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

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

CLI版かどうかは

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/27 17:39

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

    キャンセル

  • 2018/04/27 18:25

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

    キャンセル

  • 2018/04/27 19: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

    キャンセル

  • 2018/04/27 20:16

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

    キャンセル

  • 2018/04/27 21:44

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

    キャンセル

  • 2018/04/27 22:32 編集

    そうなんですね。

    今さら言うのもなんですが、やはり、共用レンタルサーバーでやるには無理があるのでしょうね。
    色々制限があるのも、やって欲しくないからでしょうし。
    asahina1979さんが書かれてる制限も気になります。

    SuiteXで提供されるメール機能にメーリングリストがあるようですが、そういうものは利用できないのでしょうか。SuiteXやEC-CUBEをよく知らないので的外れなこと書いてたらすみません。

    キャンセル

  • 2018/04/27 23:35

    書いてある場所、規約ではないけど止めるよっていってるな所属社員が
    https://blog.arena.ne.jp/vps/210

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

    キャンセル

  • 2018/04/27 23:37

    規約に準ずる場所

    https://web.arena.ne.jp/support/suite1/manual/cgi_ssi/

    UNIX系のOSには指定した時間にプログラムを自動実行させるcronがございますが、WebARENA Suiteのサーバーではcronはご利用頂けません。 また、1回の動作中にCPUを10秒以上使用するCGIは強制的に動作が終了される仕様になっています。 サーバーにプロセスを常駐させる事は出来ませんので、継続的に動作し続けるプログラム(デーモンなど)をご利用頂く事は出来ません。

    キャンセル

  • 2018/04/27 23:37

    10秒だってさw

    キャンセル

  • 2018/04/28 08:51

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

    キャンセル

  • 2018/04/28 10:52

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

    キャンセル

  • 2018/04/28 11:09

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

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19882questions

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

  • Webサイト

    1047questions

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