[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 メーリングリストの案内