• 締切済み

phpで外部phpを稼働させる方法について

初心者です、宜しくお願いします。 外部でメールを送信するプログラムを利用者にストレスが無いようにバックグラウンドで稼働させたいと考えています、   自分なりに調べて、exec関数でテストプログラムを作ってみましたが記述の方法に誤りがあるのか動きません、 sampleプログラム (test.php) <?php exec("nohup php -c '' 'sendmail.php' > /dev/null &"); ?> sendmail.phpは自分宛に送信するよう簡単に作ったプログラムで test.phpと同じディレクトリに設置してあります、 単独で実行するときちんと届きます、 パーミッションは双方とも、604に設定してあります。 どなたかご教授いただけると助かります。 宜しくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

>php.iniの設定を合わせておけば同じ動作をしてくれる.... >と認識しておりましたが 誤りでしょうか? Windowsで開発したPHPのコードはかならずLinux/Unixサーバーでも動くか? と言う意味なら、誤りですね。 OSに依存する機能を呼び出したら互換性がありません。 OSに依存しない範囲でコードを書けば互換性がありますので、そのまま他のOSでも動きます。 プロセス関連のようなOS依存の機能を使ったり、PHPから外部コマンドを呼び出したりするなら、OSを同じにしてください。

toppojeejo
質問者

お礼

いつも、ご丁寧な回答をしていただき 本当にありがとうございます。 今後とも宜しくお願い申し上げます。

toppojeejo
質問者

補足

先程、テスト結果を書き忘れてしまいましたが > $fp= popen('start /B cmd /c "php.exeのフルパス /xampp/htdocs/test/writing_test.php"',"r"); if( !$fp ) die("Can't exec"); pclose($fp); 前回のテスト同様にパスを試みましたが結果は同じでした、 exec()に固執せず他の方法も探してみたいと思います。 今回は、一旦 外部のプログラム(前記述のwriting_test.php)がさほど処理に時間のかかるものではありませんので (前記述のtest.php)に記述して使うことにいたしますが、この質問は、当面このまま回答募集のままにさせて頂きます。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

>C:\xampp\htdocs\test\writing_test.php サーバーはWindowsなんですか?Windowsサーバーってよくわからない。 nohupコマンドって、Windowsには元々入ってませんが、別途インストールしたのでしょうか? もしnohupが無いとすると、「Windows バックグラウンド」で検索すると下記の情報がありました。 http://ml.php.gr.jp/pipermail/php-users/2007-September/033096.html これを元にして、 $fp= popen('start /B cmd /c "php.exeのフルパス /xampp/htdocs/test/writing_test.php"',"r"); if( !$fp ) die("Can't exec"); pclose($fp);

toppojeejo
質問者

お礼

いつもありがとうございます、 宜しくお願い致します。

toppojeejo
質問者

補足

ローカルサーバーの環境は windows7 に XAMMPをインストールしたものです  Apacheと同環境..と言うかApacheその物で動かしている.... レンタルのWEBサーバーに移設しても php.iniの設定を合わせておけば同じ動作をしてくれる.... と認識しておりましたが 誤りでしょうか?

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>exec("nohup php'http://localhost/process/writing_test.php' > &"); それはURLです。ファイル名をフルパスで書いてください。 exec("nohup php /xxxxx/yyyyy/zzzzz/process/writing_test.php &"); みたいな。 あなたが設置場所として書いたものの見方がわからないので、具体的に何と書くかはアドバイスできません。 >exec("nohup php'http://localhost/process/writing_test.php' > &"); また、php の後には空白が必要 > は不要。タイプミス多すぎで他も心配ですね。

toppojeejo
質問者

お礼

ありがとうございます。

toppojeejo
質問者

補足

ご指導ありがとうございあます ローカルサーバーのhtdocs直下にtestディレクトリを新たに作りテストしてみたんですが... (1) 実行させたいプログラム(writing_test.php)に <?php echo __FILE__ ?> と記述して単独実行すると表示されたパスが C:\xampp\htdocs\test\writing_test.php (2) (writing_test.php)を簡単なテキスト書き出しプログラムに書き直して 同ディレクトリに(test.php)を設置、 (test.php)に(1)で表示されたパスを元に以下のソースを記述して試しましたがすべて駄目でした。 exec("nohup php C:/xampp/htdocs/test/writing_test.php &"); exec("nohup php /xampp/htdocs/test/writing_test.php &"); exec("nohup php /htdocs/test/writing_test.php &"); exec("nohup php /test/writing_test.php &"); exec("nohup php /writing_test.php &"); exec("nohup php C:\xampp\htdocs\test\writing_test.php &"); exec("nohup php \xampp\htdocs\test\writing_test.php &"); exec("nohup php \htdocs\test\writing_test.php &"); exec("nohup php \test\writing_test.php &"); exec("nohup php \writing_test.php &");

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>単独で実行するときちんと届きます、 これは、具体的にどういう操作で確認しましたか?具体的に書いてください。 >exec("nohup php -c '' 'sendmail.php' > /dev/null &"); exec("nohup php 'sendmail.phpのフルパス' &"); では?

toppojeejo
質問者

お礼

ご返信ありがとうございます、

toppojeejo
質問者

補足

sendmail.phpの単独実行は サーバーに設置したsendmail.phpにブラウザで直接アクセスして実行させました、 exec("nohup php 'sendmail.phpのフルパス' &"); ローカルサーバーにて簡単なテキストを書き出すプログラムで試してみたんですがダメでした、 フルパスの認識に誤りがあるのでしょうか? 設置場所 [xampp:htdocs]  | [site-name]  |-[process]      |      ----[ test.php ]←execを記述したファイル      |      ----[ writing_test.php ]←稼働させたいプログラム 記述したソース exec("nohup php'http://localhost/process/writing_test.php' > &");

関連するQ&A