[PHP-users 15733]Re: PHPスクリプト内からPHP呼び出してエラー
Ozawa Tatsuhiro
t_ozawa @ ya2.so-net.ne.jp
2003年 6月 6日 (金) 22:21:23 JST
小澤@初投稿です。
自分も同じ事象が再現しました。
いろいろ試したのですが、解決策が見つかりませんでした。
#PHP3です。
■環境
Webサーバ:Zeus(試用版)
PHP :3.0.18-ja3(CGI/コマンドライン版とも)
■現象
ブラウザからアクセスしたPHP3スクリプトからコマンドライン版PHP3の
スクリプトをexec / passthru すると、PHPのプロセスを大量に生成したのち、
異常終了する。
※期待する結果が返されない、という意味です。
※コマンドラインからpsすると、プロセスが大量生成されているのが確認
出来ました。
※しばらく待つと、プロセスは全て消滅(終了?)しますが、期待する結果は
得られませんでした。
■試したこと
1. 全く同じスクリプトをapache/モジュール版のPHP3で実行すると、
期待したとおりの出力が得られました。
2. 「.php3」という拡張子がZeusにHanderとして設定されているのが
まずいのかと思い、変更してみましたが問題は解決しませんでした。
3. 2と同様に、PHP3インタープリタのファイル名が「php3」なのが
まずいのかと思い、「php3script」等に変更してみましたが、問題は
解決しませんでした。
4. PHP3以外のスクリプトも試してみましたが、期待したとおりの
出力が得られました。(シェルスクリプトとか)
5. 例えば、「passthru('/usr/local/bin/php3 -i')」としても、結果は
同じでした。
6. 該当のスクリプトをコマンドライン上から直接実行すると、期待した
とおりの出力が得られました。
こんなところです。
どなたか解決策をご存知ないでしょうか?
On Wed, 04 Jun 2003 12:09:41 +0900
shin ohira <shin @ ohira.com> wrote:
> いつもお世話になっております、おおひらともうします。
>
> PHP 内から PHP を呼び出した場合に無限ループ(?) するという
> 現象が発生しています。
> 過去ログには、類似の現象についての記事を見つけられませんでした。
>
> 回避策や対処法ご存知のかたいらっしゃいましたら、おしえてください。
>
>
> 概要
> PHPで記述した cgi 内から PHP で記述したプログラムを
> system 関数で呼び出すと PHP のプロセスが大量に発生してしまい
> 正常に終了しない。
>
> 現象の説明
> 小さい再現プログラムを作成して調べたところ、コマンドラインからの
> 実行では問題ないのに、ブラウザーから実行すると正常終了しない。
> telnet で 80 ポートにつないで実行しても同じ現象。
>
> system を passthru に書き換えることで、小さい際限プログラムでは
> 問題無くなったように思えたが、再度目的のプログラムで passthru に
> 書き換えてみたところ、system で実行した場合と同じ動作になってしまいました。
>
> phpのプログラムから呼び出すプログラムがCで書かれてコンパイルされたものだったり
> sh のスクリプトだったりした場合には、問題が発生しませんでした。
>
> 再現プログラム 1
> #!/usr/local/bin/php
> <?
> print("start Test 1\n" ) ;
> system("/usr/home/shin/public_html/cgi/test/test2.cgi") ;
> //passthru("/usr/home/shin/public_html/cgi/test/test2.cgi") ;
> print("end Test 1\n" ) ;
> ?>
>
> 再現プログラム 2
> #!/usr/local/bin/php -q
> <?
> print("Test 2\n" ) ;
> ?>
>
> 再現プログラム 3
> #!/bin/sh
> echo TEST 22
>
>
> コマンドラインからの実行結果
> > ./test1.cgi
> Content-type: text/html
> X-Powered-By: PHP/4.3.1
>
> start Test 1
> Test 2
> end Test 1
>
>
> OS
> FreeBSD 4.8-STABLE
>
> PHP
> PHP 4.3.1 (cgi), Copyright (c) 1997-2002 The PHP Group
> Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies
>
> APACHE
> apache_1.3.27> cat config.status
> #!/bin/sh
> ##
> ## config.status -- APACI auto-generated configuration restore script
> ##
> ## Use this shell script to re-run the APACI configure script for
> ## restoring your configuration. Additional parameters can be supplied.
> ##
>
> ./configure \
> "--with-layout=Apache" \
> "--enable-module=so" \
> "--enable-suexec" \
> "--suexec-docroot=/home" \
> "--suexec-caller=apache" \
> "$@"
>
>
> マニュアル
> system 外部プログラムの実行と表示
> http://www.php.net/manual/ja/function.system.php
>
> マニュアル
> passthru 外部プログラムを実行し、未整形の出力を表示します
> http://www.php.net/manual/ja/function.passthru.php
> _______________________________________________
> PHP-users mailing list
> PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
--
Ozawa Tatsuhiro <ozawa @ lac.co.jp>
PHP-users メーリングリストの案内