###前提・実現したいこと
phpで作られた既存のシステムを最近別サーバー(ウェブアリーナ)に移行しました。
もともとシステムにexecで外部スクリプトを実行するものが組み込まれていて、
移行前のサーバーでは問題なく動いていました。
ところが移行先のサーバーではexecが動いていませんでした。
execで外部スクリプトを実行する部分はphpファイルの中に以下の記述があります。
exec('php /virtual/exectest/exectest.php > /dev/null &');
これが動かなかったので以下で試してみました。
chmod("/virtual/exectest/log", 0755); exec('php /virtual/exectest/exectest.php > /dev/null &', $output, $return_var); var_dump($output,$return_var);
array(0) { } int(0)と帰ってきましたがexectest.phpは実行されていなさそうです。
chmodの返り値はtrueだったので成功していると思います。
実行するexectest.phpの方にはログファイルを作る処理をしています。
error_log('message', 3, '/virtual/exectest/test.log');
直接exectest.phpにアクセスするとログファイルが作成されるのですが、
execの方では作成されませんでした。
###試したこと
上記コードでダメだったので以下のコードを試してみました。
exec('nohup php /virtual/exectest/exectest.php 2>&1', $output, $return_var); var_dump($output); var_dump($return_var);
返り値は以下の通りです。
array(13) { [0]=> string(23) "Content-type: text/html" [1]=> string(0) "" [2]=> string(10) "array(4) {" [3]=> string(7) " [0]=>" [4]=> string(26) " string(11) "Status: 404"" [5]=> string(7) " [1]=>" [6]=> string(38) " string(23) "Content-type: text/html"" [7]=> string(7) " [2]=>" [8]=> string(14) " string(0) """ [9]=> string(7) " [3]=>" [10]=> string(39) " string(24) "No input file specified."" [11]=> string(1) "}" [12]=> string(8) "int(255)" } int(0)
ファイルが見つからないエラーだと思うのですが
同階層に入れていて見つからないというのも謎で、
$return_varの返り値は0なので正常終了しているということではないのでしょうか?
なぜexecが動かないのか見当もつかないので解決の糸口でもつかめたらと思っています。
よろしくお願い致します。
###追記
①同じ条件でロリポップのサーバーで試してみたところ、問題なく動きました。
なのでそもそもexecが使えないのか?と思い
echo exec('ls -l /virtual/exectest/');
を試すも問題なく表示されました。
②試したことで出たStatus: 404が気になり、require_onceで
execで呼び出すphpと同じパスを入れてみました。
require_once ('/virtual/exectest/exectest.php'); exec('nohup php /virtual/exectest/exectest.php > /dev/null &');
exectest.phpはメールを送るものだけにしました。
mail($to, $subject, $message, $headers);
するとなぜかメールが2通届くようになりました。
これは、require_onceとexecで2回呼び出されているからなのでしょうか?
require_onceを消すとメールは1通も届きません。
なにか気が付いた点があれば教えてください。
回答3件
あなたの回答
tips
プレビュー